diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index d74d80c90..80cc2ce3e 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -32,7 +32,7 @@ body: attributes: label: Version description: What version of Earth2Studio are you running? - placeholder: "example: 0.12.1" + placeholder: "example: 0.13.0" validations: required: true diff --git a/CHANGELOG.md b/CHANGELOG.md index c0b6b05f0..31a999ea7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [0.13.0a0] - 2026-03-xx +## [0.13.0] - 2026-03-20 ### Added @@ -39,8 +39,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated GraphCast models to support multiple time inputs, multiple times will be looped not batched - Renamed `tolerance` parameter in ISD data source to `time_tolerance` -### Deprecated - ### Removed - Removed device from cbottle SR load_model api @@ -52,8 +50,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Bug in StormCast loading out-of-date model package, introduced in `5518edecbabee371c824b34f0f2ec269a4d6094f` - Bug in spherical perturbations which did not use lmax from the SHT transform -### Security - ### Dependencies - Added pyarrow explicitly to core dependencies diff --git a/docs/userguide/about/install.md b/docs/userguide/about/install.md index 20cd05dd9..fb5b0b10f 100644 --- a/docs/userguide/about/install.md +++ b/docs/userguide/about/install.md @@ -31,7 +31,7 @@ and it's recommended that users use an uv project for the best install experienc ```bash mkdir earth2studio-project && cd earth2studio-project uv init --python=3.12 -uv add "earth2studio @ git+https://github.com/NVIDIA/earth2studio.git@0.12.1" +uv add "earth2studio @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0" ``` :::{dropdown} uv Install @@ -666,6 +666,8 @@ If your system uses a different CUDA version, you may need to adjust the depende :::{tab-item} pip ```bash +pip install hatchling +pip install --no-build-isolation "earth2grid @ git+https://github.com/NVlabs/earth2grid@11dcf1b0787a7eb6a8497a3a5a5e1fdcc31232d3" pip install earth2studio[da-healda] ``` @@ -821,14 +823,14 @@ the following commands: ```bash mkdir earth2studio-project && cd earth2studio-project uv init --python=3.12 -uv add "earth2studio @ git+https://github.com/NVIDIA/earth2studio.git@0.12.1" +uv add "earth2studio @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0" ``` or if you are already inside an existing uv project: ```bash uv venv --python=3.12 -uv add "earth2studio @ git+https://github.com/NVIDIA/earth2studio.git@0.12.1" +uv add "earth2studio @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0" ``` (pytorch_container_environment)= @@ -851,7 +853,7 @@ docker run -it -t nvcr.io/nvidia/pytorch:25.12-py3 libeccodes-tools libeccodes-dev >>> unset PIP_CONSTRAINT >>> curl -LsSf https://astral.sh/uv/install.sh | sh && source $HOME/.local/bin/env ->>> uv pip install --system --break-system-packages "earth2studio@git+https://github.com/NVIDIA/earth2studio.git@0.12.1" +>>> uv pip install --system --break-system-packages "earth2studio@git+https://github.com/NVIDIA/earth2studio.git@0.13.0" ``` @@ -864,7 +866,7 @@ do with pip, for example: ```bash uv pip install --system \ --break-system-packages \ - "earth2studio[aifs,data]@git+https://github.com/NVIDIA/earth2studio.git@0.12.1" + "earth2studio[aifs,data]@git+https://github.com/NVIDIA/earth2studio.git@0.13.0" ``` ::: @@ -893,7 +895,7 @@ package tooling. conda create -n earth2studio python=3.12 conda activate earth2studio -uv pip install --system --break-system-packages "earth2studio@git+https://github.com/NVIDIA/earth2studio.git@0.12.1" +uv pip install --system --break-system-packages "earth2studio@git+https://github.com/NVIDIA/earth2studio.git@0.13.0" ``` # System Recommendations diff --git a/earth2studio/__init__.py b/earth2studio/__init__.py index 90caaa229..26492c9ba 100644 --- a/earth2studio/__init__.py +++ b/earth2studio/__init__.py @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.13.0a0" +__version__ = "0.13.0rc0" # Deprecation warnings # import sys diff --git a/examples/01_deterministic_workflow.py b/examples/01_deterministic_workflow.py index d9f7dc8c7..30cfa000c 100644 --- a/examples/01_deterministic_workflow.py +++ b/examples/01_deterministic_workflow.py @@ -34,7 +34,7 @@ """ # /// script # dependencies = [ -# "earth2studio[dlwp] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[dlwp] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # ] # /// diff --git a/examples/02_diagnostic_workflow.py b/examples/02_diagnostic_workflow.py index ff042c065..d04cb7424 100644 --- a/examples/02_diagnostic_workflow.py +++ b/examples/02_diagnostic_workflow.py @@ -35,7 +35,7 @@ """ # /// script # dependencies = [ -# "earth2studio[dlwp] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[dlwp] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # ] # /// diff --git a/examples/03_ensemble_workflow.py b/examples/03_ensemble_workflow.py index 6fec89838..6cacab474 100644 --- a/examples/03_ensemble_workflow.py +++ b/examples/03_ensemble_workflow.py @@ -36,7 +36,7 @@ # /// script # dependencies = [ # "torch==2.9.1", # Match lock file to avoid torch-harmonics issue -# "earth2studio[fcn,perturbation] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[fcn,perturbation] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "scipy>=1.15.2", # "cartopy", # ] diff --git a/examples/04_corrdiff_inference.py b/examples/04_corrdiff_inference.py index f15e59138..89cb29037 100644 --- a/examples/04_corrdiff_inference.py +++ b/examples/04_corrdiff_inference.py @@ -39,7 +39,7 @@ """ # /// script # dependencies = [ -# "earth2studio[corrdiff] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[corrdiff] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # ] # /// diff --git a/examples/05_ensemble_workflow_extend.py b/examples/05_ensemble_workflow_extend.py index 83f78165c..123f7051d 100644 --- a/examples/05_ensemble_workflow_extend.py +++ b/examples/05_ensemble_workflow_extend.py @@ -36,7 +36,7 @@ # /// script # dependencies = [ # "torch==2.9.1", # Match lock file to avoid torch-harmonics issue -# "earth2studio[dlwp,perturbation] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[dlwp,perturbation] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "matplotlib", # ] # /// diff --git a/examples/06_model_perturbation_hook.py b/examples/06_model_perturbation_hook.py index ccdc442aa..0dacb7144 100644 --- a/examples/06_model_perturbation_hook.py +++ b/examples/06_model_perturbation_hook.py @@ -42,7 +42,7 @@ """ # /// script # dependencies = [ -# "earth2studio[dlwp] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[dlwp] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # ] # /// diff --git a/examples/07_seasonal_statistics.py b/examples/07_seasonal_statistics.py index 5956fbf15..d9f006227 100644 --- a/examples/07_seasonal_statistics.py +++ b/examples/07_seasonal_statistics.py @@ -36,7 +36,7 @@ """ # /// script # dependencies = [ -# "earth2studio[pangu,statistics] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[pangu,statistics] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "matplotlib", # ] # /// diff --git a/examples/08_distributed_manager.py b/examples/08_distributed_manager.py index 7ff08f990..5f36a19e9 100644 --- a/examples/08_distributed_manager.py +++ b/examples/08_distributed_manager.py @@ -38,7 +38,7 @@ """ # /// script # dependencies = [ -# "earth2studio[dlwp] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[dlwp] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "matplotlib", # ] # /// diff --git a/examples/09_stormcast_example.py b/examples/09_stormcast_example.py index 6c90078ee..508b5ca30 100644 --- a/examples/09_stormcast_example.py +++ b/examples/09_stormcast_example.py @@ -30,7 +30,7 @@ """ # /// script # dependencies = [ -# "earth2studio[data,stormcast] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[data,stormcast] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # ] # /// diff --git a/examples/10_stormcast_ensemble_example.py b/examples/10_stormcast_ensemble_example.py index a55f5a5cd..b3527c43c 100644 --- a/examples/10_stormcast_ensemble_example.py +++ b/examples/10_stormcast_ensemble_example.py @@ -30,7 +30,7 @@ """ # /// script # dependencies = [ -# "earth2studio[data,stormcast] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[data,stormcast] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # ] # /// diff --git a/examples/11_huge_ensembles.py b/examples/11_huge_ensembles.py index 32d873abd..ede4acc6d 100644 --- a/examples/11_huge_ensembles.py +++ b/examples/11_huge_ensembles.py @@ -53,7 +53,7 @@ # /// script # dependencies = [ # "torch==2.9.1", # Match lock file to avoid torch-harmonics issue -# "earth2studio[sfno] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[sfno] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # ] # /// diff --git a/examples/12_temporal_interpolation.py b/examples/12_temporal_interpolation.py index a6d2cf21c..46d908c8c 100644 --- a/examples/12_temporal_interpolation.py +++ b/examples/12_temporal_interpolation.py @@ -38,7 +38,7 @@ # /// script # dependencies = [ # "torch==2.9.1", # Match lock file to avoid torch-harmonics issue -# "earth2studio[sfno,interp-modafno] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[sfno,interp-modafno] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "matplotlib", # ] # /// diff --git a/examples/13_cyclone_tracking.py b/examples/13_cyclone_tracking.py index f1361e577..34efec4c1 100644 --- a/examples/13_cyclone_tracking.py +++ b/examples/13_cyclone_tracking.py @@ -37,7 +37,7 @@ # /// script # dependencies = [ # "torch==2.9.1", # Match lock file to avoid torch-harmonics issue -# "earth2studio[cyclone,sfno] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[cyclone,sfno] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # ] # /// diff --git a/examples/14_dlesym_example.py b/examples/14_dlesym_example.py index bbe728bf1..64a2cb833 100644 --- a/examples/14_dlesym_example.py +++ b/examples/14_dlesym_example.py @@ -39,7 +39,7 @@ """ # /// script # dependencies = [ -# "earth2studio[dlesym] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[dlesym] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # ] # /// diff --git a/examples/15_cbottle_generation.py b/examples/15_cbottle_generation.py index bea8cd441..84c37feeb 100644 --- a/examples/15_cbottle_generation.py +++ b/examples/15_cbottle_generation.py @@ -38,7 +38,7 @@ """ # /// script # dependencies = [ -# "earth2studio[cbottle] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[cbottle] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # ] # /// diff --git a/examples/16_cbottle_super_resolution.py b/examples/16_cbottle_super_resolution.py index fa11adc19..16540c31d 100644 --- a/examples/16_cbottle_super_resolution.py +++ b/examples/16_cbottle_super_resolution.py @@ -37,7 +37,7 @@ """ # /// script # dependencies = [ -# "earth2studio[cbottle] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[cbottle] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # ] # /// diff --git a/examples/17_io_performance.py b/examples/17_io_performance.py index 86a876286..47cc2803a 100644 --- a/examples/17_io_performance.py +++ b/examples/17_io_performance.py @@ -36,7 +36,7 @@ """ # /// script # dependencies = [ -# "earth2studio[dlwp] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[dlwp] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "matplotlib", # ] # /// diff --git a/examples/18_ensemble_downscaling.py b/examples/18_ensemble_downscaling.py index fb6deb195..686319ab9 100644 --- a/examples/18_ensemble_downscaling.py +++ b/examples/18_ensemble_downscaling.py @@ -37,8 +37,8 @@ # /// script # dependencies = [ # "torch==2.9.1", # Match lock file to avoid torch-harmonics issue -# "earth2studio[sfno] @ git+https://github.com/NVIDIA/earth2studio.git", -# "earth2studio[corrdiff] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[sfno] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", +# "earth2studio[corrdiff] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # ] # /// diff --git a/examples/19_local_datasource.py b/examples/19_local_datasource.py index 94fa564cd..021b917e3 100644 --- a/examples/19_local_datasource.py +++ b/examples/19_local_datasource.py @@ -29,7 +29,7 @@ """ # /// script # dependencies = [ -# "earth2studio[aurora] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[aurora] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # ] # /// diff --git a/examples/20_stormscope_goes_example.py b/examples/20_stormscope_goes_example.py index 3be62f934..9a7d0cede 100644 --- a/examples/20_stormscope_goes_example.py +++ b/examples/20_stormscope_goes_example.py @@ -33,7 +33,7 @@ """ # /// script # dependencies = [ -# "earth2studio[data,stormscope] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[data,stormscope] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # ] # /// diff --git a/examples/21_stormcast_sda.py b/examples/21_stormcast_sda.py index 3bf8fe493..5beb68346 100644 --- a/examples/21_stormcast_sda.py +++ b/examples/21_stormcast_sda.py @@ -36,7 +36,7 @@ """ # /// script # dependencies = [ -# "earth2studio[da-stormcast] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[da-stormcast] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # ] # /// diff --git a/examples/22_healda.py b/examples/22_healda.py index bfe39e75a..a8b324b6b 100644 --- a/examples/22_healda.py +++ b/examples/22_healda.py @@ -36,7 +36,7 @@ """ # /// script # dependencies = [ -# "earth2studio[da-healda] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[da-healda] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # ] # /// diff --git a/examples/extend/01_custom_prognostic.py b/examples/extend/01_custom_prognostic.py index 7a2bb2e92..5a9dd75ed 100644 --- a/examples/extend/01_custom_prognostic.py +++ b/examples/extend/01_custom_prognostic.py @@ -32,7 +32,7 @@ """ # /// script # dependencies = [ -# "earth2studio @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "matplotlib", # ] # /// diff --git a/examples/extend/02_custom_diagnostic.py b/examples/extend/02_custom_diagnostic.py index 0a32a7d49..9ea5a99dd 100644 --- a/examples/extend/02_custom_diagnostic.py +++ b/examples/extend/02_custom_diagnostic.py @@ -32,7 +32,7 @@ """ # /// script # dependencies = [ -# "earth2studio[dlwp] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[dlwp] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # ] # /// diff --git a/examples/extend/03_custom_datasource.py b/examples/extend/03_custom_datasource.py index 9d2f74525..ee704bea3 100644 --- a/examples/extend/03_custom_datasource.py +++ b/examples/extend/03_custom_datasource.py @@ -31,7 +31,7 @@ """ # /// script # dependencies = [ -# "earth2studio[fcn] @ git+https://github.com/NVIDIA/earth2studio.git", +# "earth2studio[fcn] @ git+https://github.com/NVIDIA/earth2studio.git@0.13.0", # "cartopy", # "scipy", # ] diff --git a/pyproject.toml b/pyproject.toml index b1d93af66..5e939a378 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -250,10 +250,10 @@ da-stormcast = [ ] # All, must not have conflicts all = [ - "earth2studio[data,perturbation,statistics,utils]", + "earth2studio[data,perturbation,statistics,utils,serve]", "earth2studio[aifs,aifsens,atlas,aurora,dlesym,dlwp,fcn,fcn3,fengwu,interp-modafno,pangu,stormcast,sfno,stormscope,graphcast]", "earth2studio[cbottle,climatenet,corrdiff,precip-afno,cyclone,precip-afno-v2,solarradiation-afno,windgust-afno]", - "earth2studio[da-interp,da-stormcast]", + "earth2studio[da-interp,da-stormcast,da-healda]", ] # ==== UV configuration ==== @@ -325,7 +325,7 @@ dev = [ "black==24.1.0", "coverage>=6.5.0", "interrogate>=1.5.0", - "hatch>=1.14.0", + "hatch>=1.16.5", "mypy", "pre-commit", "pytest>=6.0.0", diff --git a/recipes/template/README.md b/recipes/template/README.md index 11d2343a2..bf8aac035 100644 --- a/recipes/template/README.md +++ b/recipes/template/README.md @@ -53,11 +53,11 @@ Run the template uv run python main.py >> Hello ->> 0.12.1 +>> 0.13.0 uv run python main.py print.hello False ->> 0.12.1 +>> 0.13.0 ``` ## Documentation diff --git a/recipes/template/pyproject.toml b/recipes/template/pyproject.toml index 884b0a3d9..a8093b7f6 100644 --- a/recipes/template/pyproject.toml +++ b/recipes/template/pyproject.toml @@ -19,7 +19,7 @@ Issues = "https://github.com/NVIDIA/earth2studio/issues" Changelog = "https://github.com/NVIDIA/earth2studio/blob/main/CHANGELOG.md" [tool.uv.sources] -earth2studio = { git = "https://github.com/NVIDIA/earth2studio", rev = "0.12.1" } +earth2studio = { git = "https://github.com/NVIDIA/earth2studio", rev = "0.13.0" } omegaconf = { git = "https://github.com/omry/omegaconf.git" } [tool.hatch.build.targets.sdist] diff --git a/test/data/test_arco.py b/test/data/test_arco.py index 19113d393..0de7df0e9 100644 --- a/test/data/test_arco.py +++ b/test/data/test_arco.py @@ -108,7 +108,6 @@ def test_arco_cache(time, variable, cache): [ datetime.datetime(year=1939, month=2, day=25), datetime.datetime(year=1, month=1, day=1, hour=13, minute=1), - datetime.datetime(year=2024, month=1, day=1), datetime.datetime.now(), ], ) diff --git a/test/serve/client/test_client.py b/test/serve/client/test_serve_client.py similarity index 100% rename from test/serve/client/test_client.py rename to test/serve/client/test_serve_client.py diff --git a/test/serve/client/test_e2client.py b/test/serve/client/test_serve_e2client.py similarity index 100% rename from test/serve/client/test_e2client.py rename to test/serve/client/test_serve_e2client.py diff --git a/test/serve/client/test_fsspec_utils.py b/test/serve/client/test_serve_fsspec_utils.py similarity index 100% rename from test/serve/client/test_fsspec_utils.py rename to test/serve/client/test_serve_fsspec_utils.py diff --git a/test/serve/server/test_cleanup_daemon.py b/test/serve/server/test_server_cleanup.py similarity index 100% rename from test/serve/server/test_cleanup_daemon.py rename to test/serve/server/test_server_cleanup.py diff --git a/test/serve/server/test_config.py b/test/serve/server/test_server_config.py similarity index 100% rename from test/serve/server/test_config.py rename to test/serve/server/test_server_config.py diff --git a/test/serve/server/test_cpu_worker.py b/test/serve/server/test_server_cpu_worker.py similarity index 100% rename from test/serve/server/test_cpu_worker.py rename to test/serve/server/test_server_cpu_worker.py diff --git a/test/serve/server/test_object_storage.py b/test/serve/server/test_server_object_storage.py similarity index 100% rename from test/serve/server/test_object_storage.py rename to test/serve/server/test_server_object_storage.py diff --git a/test/serve/server/test_utils.py b/test/serve/server/test_server_utils.py similarity index 100% rename from test/serve/server/test_utils.py rename to test/serve/server/test_server_utils.py diff --git a/test/serve/server/test_worker.py b/test/serve/server/test_server_worker.py similarity index 100% rename from test/serve/server/test_worker.py rename to test/serve/server/test_server_worker.py diff --git a/test/serve/server/test_workflow.py b/test/serve/server/test_server_workflow.py similarity index 100% rename from test/serve/server/test_workflow.py rename to test/serve/server/test_server_workflow.py diff --git a/tox-smoke.ini b/tox-smoke.ini index 6619cc5b5..e8340393a 100644 --- a/tox-smoke.ini +++ b/tox-smoke.ini @@ -26,10 +26,16 @@ setenv = # https://docs.jax.dev/en/latest/gpu_memory_allocation.html XLA_PYTHON_CLIENT_ALLOCATOR = platform XLA_PYTHON_CLIENT_PREALLOCATE = false + # https://github.com/Dao-AILab/flash-attention/issues/2008 + FLASH_ATTENTION_FORCE_BUILD = TRUE + FLASH_ATTENTION_FORCE_CXX11_ABI = FALSE + FLASH_ATTENTION_SKIP_CUDA_BUILD = FALSE + FLASH_ATTN_CUDA_ARCHS = "90;120" runner = uv-venv-lock-runner description = Run smoke tests of wheel through python version sweep -extras = all commands = + uv sync + uv sync --extra all uv pip install earth2studio=={env:VERSION} \ --extra-index-url="https://{env:ARTIFACTORY_USER}:{env:ARTIFACTORY_API_TOKEN}@{env:ARTIFACTORY_URL}" pytest {posargs:--no-testmon} test/ diff --git a/uv.lock b/uv.lock index 55dc3ba38..141075959 100644 --- a/uv.lock +++ b/uv.lock @@ -1626,6 +1626,7 @@ aifsens = [ { name = "flash-attn" }, ] all = [ + { name = "aiofiles" }, { name = "anemoi-models" }, { name = "cbottle", marker = "python_full_version >= '3.12' or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-atlas') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-fcn3') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-perturbation') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-sfno')" }, { name = "cdsapi" }, @@ -1641,10 +1642,12 @@ all = [ { name = "eccodeslib" }, { name = "ecmwf-opendata" }, { name = "einops" }, + { name = "fastapi" }, { name = "flash-attn" }, { name = "flax" }, { name = "globus-sdk" }, { name = "graphcast" }, + { name = "hiredis" }, { name = "httpx" }, { name = "hydra-core" }, { name = "importlib-metadata" }, @@ -1664,19 +1667,29 @@ all = [ { name = "onnxscript" }, { name = "pandas" }, { name = "planetary-computer" }, + { name = "prometheus-client" }, + { name = "pydantic" }, { name = "pynvml" }, { name = "pyproj" }, { name = "pystac-client" }, + { name = "python-dotenv" }, + { name = "python-multipart" }, { name = "rasterio", version = "1.4.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12' or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-atlas') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-fcn3') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-perturbation') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-sfno')" }, { name = "rasterio", version = "1.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-atlas') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-fcn3') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-perturbation') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-sfno')" }, + { name = "redis" }, + { name = "requests" }, { name = "rioxarray", version = "0.19.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12' or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-atlas') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-fcn3') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-perturbation') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-sfno')" }, { name = "rioxarray", version = "0.20.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12' or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-atlas') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-fcn3') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-perturbation') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-sfno')" }, + { name = "rq" }, { name = "ruamel-yaml" }, { name = "scikit-image" }, { name = "scipy" }, { name = "timm" }, { name = "torch-harmonics", version = "0.8.0", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'extra-12-earth2studio-ace2'" }, { name = "torch-harmonics", version = "0.8.1", source = { git = "https://github.com/NVIDIA/torch-harmonics.git?rev=a632ca748a12bd9f74dbc1e00653317810991f74#a632ca748a12bd9f74dbc1e00653317810991f74" }, marker = "extra == 'extra-12-earth2studio-atlas' or extra == 'extra-12-earth2studio-fcn3' or extra == 'extra-12-earth2studio-perturbation' or extra == 'extra-12-earth2studio-sfno' or extra != 'extra-12-earth2studio-ace2'" }, + { name = "types-redis" }, + { name = "urllib3" }, + { name = "uvicorn", extra = ["standard"] }, ] atlas = [ { name = "einops" }, @@ -1898,6 +1911,7 @@ docs = [ [package.metadata] requires-dist = [ + { name = "aiofiles", marker = "extra == 'all'", specifier = ">=23.0.0" }, { name = "aiofiles", marker = "extra == 'serve'", specifier = ">=23.0.0" }, { name = "anemoi-models", marker = "extra == 'aifs'", specifier = "==0.5.1" }, { name = "anemoi-models", marker = "extra == 'aifsens'", specifier = "==0.5.1" }, @@ -1947,6 +1961,7 @@ requires-dist = [ { name = "einops", marker = "extra == 'corrdiff'", specifier = ">=0.8.1" }, { name = "einops", marker = "extra == 'da-stormcast'", specifier = ">=0.8.1" }, { name = "einops", marker = "extra == 'stormcast'", specifier = ">=0.8.1" }, + { name = "fastapi", marker = "extra == 'all'", specifier = ">=0.104.0" }, { name = "fastapi", marker = "extra == 'serve'", specifier = ">=0.104.0" }, { name = "flash-attn", marker = "extra == 'aifs'" }, { name = "flash-attn", marker = "extra == 'aifsens'" }, @@ -1962,11 +1977,14 @@ requires-dist = [ { name = "graphcast", marker = "extra == 'graphcast'", git = "https://github.com/google-deepmind/graphcast.git?rev=7077d40a36db6541e3ed72ccaed1c0d202fa6014" }, { name = "h5netcdf", specifier = ">=1.0.0" }, { name = "h5py", specifier = ">=3.2.0" }, + { name = "hiredis", marker = "extra == 'all'", specifier = ">=2.0.0" }, { name = "hiredis", marker = "extra == 'serve'", specifier = ">=2.0.0" }, { name = "httpx", marker = "extra == 'all'", specifier = "==0.28.1" }, + { name = "httpx", marker = "extra == 'all'", specifier = ">=0.25.0" }, { name = "httpx", marker = "extra == 'data'", specifier = "==0.28.1" }, { name = "httpx", marker = "extra == 'serve'", specifier = ">=0.25.0" }, { name = "huggingface-hub", specifier = ">=0.27.0" }, + { name = "hydra-core", marker = "extra == 'all'", specifier = ">=1.3.0" }, { name = "hydra-core", marker = "extra == 'all'", specifier = ">=1.3.2" }, { name = "hydra-core", marker = "extra == 'dlesym'", specifier = ">=1.3.2" }, { name = "hydra-core", marker = "extra == 'serve'", specifier = ">=1.3.0" }, @@ -2037,8 +2055,10 @@ requires-dist = [ { name = "pandas", marker = "extra == 'data'", specifier = "<3.0" }, { name = "planetary-computer", marker = "extra == 'all'", specifier = ">=0.5.0" }, { name = "planetary-computer", marker = "extra == 'data'", specifier = ">=0.5.0" }, + { name = "prometheus-client", marker = "extra == 'all'", specifier = ">=0.17.0" }, { name = "prometheus-client", marker = "extra == 'serve'", specifier = ">=0.17.0" }, { name = "pyarrow", specifier = ">=14.0.0" }, + { name = "pydantic", marker = "extra == 'all'", specifier = ">=2.0.0" }, { name = "pydantic", marker = "extra == 'serve'", specifier = ">=2.0.0" }, { name = "pygrib" }, { name = "pynvml", marker = "extra == 'all'", specifier = ">=12.0.0" }, @@ -2050,15 +2070,20 @@ requires-dist = [ { name = "pystac-client", marker = "extra == 'all'", specifier = ">=0.9.0" }, { name = "pystac-client", marker = "extra == 'data'", specifier = ">=0.9.0" }, { name = "python-dotenv" }, + { name = "python-dotenv", marker = "extra == 'all'", specifier = ">=1.0.0" }, { name = "python-dotenv", marker = "extra == 'serve'", specifier = ">=1.0.0" }, + { name = "python-multipart", marker = "extra == 'all'", specifier = ">=0.0.6" }, { name = "python-multipart", marker = "extra == 'serve'", specifier = ">=0.0.6" }, { name = "rasterio", marker = "extra == 'all'", specifier = ">=1.3.9" }, { name = "rasterio", marker = "extra == 'data'", specifier = ">=1.3.9" }, + { name = "redis", marker = "extra == 'all'", specifier = ">=5.0.0" }, { name = "redis", marker = "extra == 'serve'", specifier = ">=5.0.0" }, + { name = "requests", marker = "extra == 'all'", specifier = ">=2.25.0" }, { name = "requests", marker = "extra == 'serve'", specifier = ">=2.25.0" }, { name = "rich" }, { name = "rioxarray", marker = "extra == 'all'", specifier = ">=0.15.5" }, { name = "rioxarray", marker = "extra == 'data'", specifier = ">=0.15.5" }, + { name = "rq", marker = "extra == 'all'", specifier = ">=1.15.0" }, { name = "rq", marker = "extra == 'serve'", specifier = ">=1.15.0" }, { name = "ruamel-yaml", marker = "extra == 'all'", specifier = ">=0.18.10" }, { name = "ruamel-yaml", marker = "extra == 'all'", specifier = ">=0.18.14" }, @@ -2090,8 +2115,11 @@ requires-dist = [ { name = "torch-harmonics", marker = "extra == 'perturbation'", git = "https://github.com/NVIDIA/torch-harmonics.git?rev=a632ca748a12bd9f74dbc1e00653317810991f74" }, { name = "torch-harmonics", marker = "extra == 'sfno'", git = "https://github.com/NVIDIA/torch-harmonics.git?rev=a632ca748a12bd9f74dbc1e00653317810991f74" }, { name = "tqdm", specifier = ">=4.65.0" }, + { name = "types-redis", marker = "extra == 'all'" }, { name = "types-redis", marker = "extra == 'serve'" }, + { name = "urllib3", marker = "extra == 'all'", specifier = ">=1.26.0" }, { name = "urllib3", marker = "extra == 'serve'", specifier = ">=1.26.0" }, + { name = "uvicorn", extras = ["standard"], marker = "extra == 'all'", specifier = ">=0.24.0" }, { name = "uvicorn", extras = ["standard"], marker = "extra == 'serve'", specifier = ">=0.24.0" }, { name = "xarray", extras = ["parallel"], specifier = ">=2023.1.0" }, { name = "zarr", specifier = ">=3.1.0" }, @@ -2107,7 +2135,7 @@ build = [ dev = [ { name = "black", specifier = "==24.1.0" }, { name = "coverage", specifier = ">=6.5.0" }, - { name = "hatch", specifier = ">=1.14.0" }, + { name = "hatch", specifier = ">=1.16.5" }, { name = "interrogate", specifier = ">=1.5.0" }, { name = "mypy" }, { name = "pre-commit" }, @@ -3022,7 +3050,7 @@ wheels = [ [[package]] name = "hatch" -version = "1.16.3" +version = "1.16.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "backports-zstd", marker = "python_full_version < '3.14' or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-atlas') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-fcn3') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-perturbation') or (extra == 'extra-12-earth2studio-ace2' and extra == 'extra-12-earth2studio-sfno')" }, @@ -3035,6 +3063,7 @@ dependencies = [ { name = "pexpect" }, { name = "platformdirs" }, { name = "pyproject-hooks" }, + { name = "python-discovery" }, { name = "rich" }, { name = "shellingham" }, { name = "tomli-w" }, @@ -3043,9 +3072,9 @@ dependencies = [ { name = "uv" }, { name = "virtualenv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/41/c1/976b807478878d31d467dd17b9fe642962f292e16ed13c34b593c0453fde/hatch-1.16.3.tar.gz", hash = "sha256:2a50ecc912adfc8122cd2ccdcc15254cdef829e5d158be9014180cd7f0fb7ea9", size = 5219621, upload-time = "2026-01-21T01:36:19.822Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d2/02/ce9c4c439fa3f195b21b4b5bb18b44d1076297c86477ef7e3d2de6064ec3/hatch-1.16.5.tar.gz", hash = "sha256:57bdeeaa72577859ce37091a5449583875331c06f9cb6af9077947ad40b3a1de", size = 5220741, upload-time = "2026-02-27T18:45:31.21Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/b4/5c5fa4ca8c59e7ef0a224ff10e6336e73ca61c5e0eff09ee691441c9275f/hatch-1.16.3-py3-none-any.whl", hash = "sha256:f5169025cf1cdfe981366eb96127cab1d1bc59f5f2acb87c4cc308c25d95a4b1", size = 141305, upload-time = "2026-01-21T01:36:18.13Z" }, + { url = "https://files.pythonhosted.org/packages/e4/8a/11ae7e271870f0ad8fa0012e4265982bebe0fdc21766b161fb8b8fc3aefc/hatch-1.16.5-py3-none-any.whl", hash = "sha256:d9b8047f2cd10d3349eb6e8f278ad728a04f91495aace305c257d5c2747188fb", size = 141269, upload-time = "2026-02-27T18:45:29.573Z" }, ] [[package]]