anemoi-datasets 0.5.25__tar.gz → 0.5.26__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/pull_request_template.md +2 -0
- anemoi_datasets-0.5.26/.release-please-manifest.json +3 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/CHANGELOG.md +27 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/PKG-INFO +3 -2
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/anemoi-dataset.rst +6 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/xarray-zarr.rst +6 -0
- anemoi_datasets-0.5.26/docs/datasets/building/sources/yaml/anemoi-zarr-dataset.yaml +3 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/combining.rst +3 -1
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/02-cf-data.rst +9 -0
- anemoi_datasets-0.5.26/docs/howtos/create/yaml/zarr2.yaml +8 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/usage/code/cutout-complement1.py +1 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/usage/yaml/cutout-complement1.yaml +1 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/pyproject.toml +9 -1
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/_version.py +2 -2
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/grib-index.py +1 -1
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/transform.py → anemoi_datasets-0.5.26/src/anemoi/datasets/create/filter.py +2 -5
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/step.py +2 -16
- anemoi_datasets-0.5.26/src/anemoi/datasets/create/sources/planetary_computer.py +44 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/__init__.py +6 -22
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/coordinates.py +8 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/field.py +1 -4
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/flavour.py +44 -6
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/patch.py +44 -1
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/variable.py +6 -2
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/complement.py +44 -10
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/forwards.py +8 -2
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/stores.py +7 -56
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/grids.py +6 -3
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi_datasets.egg-info/PKG-INFO +3 -2
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi_datasets.egg-info/SOURCES.txt +10 -37
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi_datasets.egg-info/requires.txt +2 -1
- anemoi_datasets-0.5.26/tests/conftest.py +1 -0
- anemoi_datasets-0.5.26/tests/create/__init__.py +0 -0
- anemoi_datasets-0.5.26/tests/create/test_create.py +83 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/test_sources.py +50 -17
- anemoi_datasets-0.5.26/tests/create/utils/__init__.py +0 -0
- anemoi_datasets-0.5.26/tests/create/utils/compare.py +218 -0
- anemoi_datasets-0.5.26/tests/create/utils/mock_sources.py +117 -0
- anemoi_datasets-0.5.26/tests/xarray/test_flavour.py +104 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/xarray/test_zarr.py +0 -28
- anemoi_datasets-0.5.25/.release-please-manifest.json +0 -3
- anemoi_datasets-0.5.25/docs/datasets/building/filters/empty.rst +0 -6
- anemoi_datasets-0.5.25/docs/datasets/building/filters/noop.rst +0 -6
- anemoi_datasets-0.5.25/docs/datasets/building/filters/orog_to_z.rst +0 -17
- anemoi_datasets-0.5.25/docs/datasets/building/filters/regrid.rst +0 -27
- anemoi_datasets-0.5.25/docs/datasets/building/filters/rename.rst +0 -20
- anemoi_datasets-0.5.25/docs/datasets/building/filters/rotate_winds.rst +0 -3
- anemoi_datasets-0.5.25/docs/datasets/building/filters/select.rst +0 -3
- anemoi_datasets-0.5.25/docs/datasets/building/filters/sum.rst +0 -13
- anemoi_datasets-0.5.25/docs/datasets/building/filters/unrotate_winds.rst +0 -3
- anemoi_datasets-0.5.25/docs/datasets/building/filters/wz_to_w.rst +0 -12
- anemoi_datasets-0.5.25/docs/datasets/building/filters/yaml/orog_to_z.yaml +0 -11
- anemoi_datasets-0.5.25/docs/datasets/building/filters/yaml/regrid1.yaml +0 -11
- anemoi_datasets-0.5.25/docs/datasets/building/filters/yaml/regrid2.yaml +0 -9
- anemoi_datasets-0.5.25/docs/datasets/building/filters/yaml/rename.yaml +0 -13
- anemoi_datasets-0.5.25/docs/datasets/building/filters/yaml/sum.yaml +0 -15
- anemoi_datasets-0.5.25/docs/datasets/building/filters/yaml/wz_to_w.yaml +0 -11
- anemoi_datasets-0.5.25/docs/datasets/building/filters.rst +0 -26
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filter.py +0 -50
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/__init__.py +0 -33
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/empty.py +0 -37
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/legacy.py +0 -93
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/noop.py +0 -37
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/orog_to_z.py +0 -58
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/pressure_level_relative_humidity_to_specific_humidity.py +0 -83
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/pressure_level_specific_humidity_to_relative_humidity.py +0 -84
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/rename.py +0 -205
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/rotate_winds.py +0 -105
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/single_level_dewpoint_to_relative_humidity.py +0 -78
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/single_level_relative_humidity_to_dewpoint.py +0 -84
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/single_level_relative_humidity_to_specific_humidity.py +0 -163
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/single_level_specific_humidity_to_relative_humidity.py +0 -451
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/speeddir_to_uv.py +0 -95
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/sum.py +0 -68
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/unrotate_winds.py +0 -105
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/uv_to_speeddir.py +0 -94
- anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/wz_to_w.py +0 -98
- anemoi_datasets-0.5.25/tests/create/test_create.py +0 -414
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.gitattributes +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/CODEOWNERS +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/ci-hpc-config.yml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/dependabot.yml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/labeler.yml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/downstream-ci-hpc.yml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/pr-conventional-commit.yml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/pr-label-conventional-commits.yml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/pr-label-file-based.yml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/pr-label-public.yml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/push-to-private.yml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/python-publish.yml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/python-pull-request.yml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/readthedocs-pr-update.yml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/release-please.yml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.gitignore +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.pre-commit-config.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.readthedocs.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.release-please-config.json +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.vscode/spellright.dict +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/03-constant-fields.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/CONTRIBUTORS.md +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/LICENSE +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/README.md +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/Makefile +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/2t_map_example.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/area-1.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/concat.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/cutout-1.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/cutout-2.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/cutout-3.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/cutout-4.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/cutout-5.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/cutout-6.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/join.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/logo.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/overlay.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/schemas/matrix.excalidraw +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/schemas/matrix.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/schemas/overview.excalidraw +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/schemas/overview.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/schemas/recipe.excalidraw +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/schemas/recipe.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/skip-missing.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/style.css +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/thinning-after.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/thinning-before.png +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_templates/.gitkeep +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_templates/apidoc/package.rst.jinja +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/adr/adr-1.md +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/apply-fmt.sh +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/check-index.sh +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/compare-lam.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/compare.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/copy.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/create.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/grib-index.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/inspect.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/introduction.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/patch.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/scan.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/conf.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/advanced-options.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/handling-missing-dates.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/handling-missing-values.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/incremental.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/introduction.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/naming-conventions.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/naming-variables.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/operations.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/accumulations.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/cds.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/eccc-fstd.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/forcings.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/grib-index.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/grib.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/hindcasts.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/mars.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/netcdf.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/opendap.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/recentre.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/repeated-dates.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/xarray-based.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/xarray-kerchunk.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/xarray-kerchunk.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/accumulations1.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/accumulations2.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/anemoi-dataset.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/eccc-fstd.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/forcings.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/grib1.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/grib2.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/grib3.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/grib4.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/hindcasts.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/mars-cds.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/mars1.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/mars2.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/netcdf.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/opendap.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/recentre.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/repeated-dates1.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/repeated-dates2.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/repeated-dates3.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/repeated-dates4.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/xarray-based.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/xarray-kerchunk.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/xarray-zarr.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/zenodo.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/zenodo.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/statistics.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/syntax.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/introduction.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/configuration.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/configuration.toml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/ensembles.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/grids.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/introduction.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/matching.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/methods.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/miscellaneous.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/missing.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/opening.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/other.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/selecting.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/statistics.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/subsetting.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/zip.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/Makefile +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/building1.txt +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/building1.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/building2.txt +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/building2.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/building3.txt +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/building3.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/concat.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/hindcasts.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/input.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/missing_dates.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/nan.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/pipe.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/dev/contributing.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/01-grib-data.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/03-constant-fields.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-flavour1.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-flavour2.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-flavour3.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-flavour4.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-recipe1.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-recipe2.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-recipe3.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-recipe4.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-recipe5.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/netcdf1.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/opendap1.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/xarray-flavour1.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/xarray-patch1.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/xarray-patch2.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/zarr1.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/introduction.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/usage/01-interpolate-step-dataset-combination.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/usage/02-coutout-complement-combination.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/usage/code/interpolate1.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/usage/code/interpolate2.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/usage/yaml/interpolate1.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/usage/yaml/interpolate2.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/index.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/installing.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/modules/dataset.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/modules/filters.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/modules/sources.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/overview.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/pptx/images.pptx +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/scripts/api_build.sh +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/usage/getting_started.rst +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/usage/yaml/aifs-ea-an-oper-0001-mars-o48-2020-2021-6h-v1.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/using/code/trimedge1_.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/setup.cfg +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/__init__.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/__main__.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/check.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/__init__.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/check.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/cleanup.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/compare-lam.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/compare.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/copy.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/create.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/finalise-additions.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/finalise.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/init-additions.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/init.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/inspect.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/load-additions.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/load.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/patch.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/publish.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/scan.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/compute/__init__.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/compute/recentre.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/__init__.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/check.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/chunks.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/config.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/__init__.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/action.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/concat.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/context.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/data_sources.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/empty.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/filter.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/function.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/join.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/misc.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/pipe.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/repeated_dates.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/result.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/template.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/trace.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/patch.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/persistent.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/size.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/source.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/__init__.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/accumulations.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/accumulations2.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/anemoi_dataset.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/constants.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/eccc_fstd.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/empty.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/forcings.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/grib.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/grib_index.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/hindcasts.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/legacy.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/mars.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/netcdf.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/opendap.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/patterns.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/recentre.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/source.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/tendencies.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_kerchunk.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/README.md +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/fieldlist.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/grid.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/metadata.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/time.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_zarr.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/zenodo.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/statistics/__init__.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/statistics/summary.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/typing.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/utils.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/writer.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/zarr.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/__init__.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/concat.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/dataset.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/debug.css +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/debug.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/ensemble.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/fill_missing.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/grids.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/indexing.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/interpolate.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/join.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/masked.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/merge.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/misc.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/missing.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/observations/__init__.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/observations/legacy_obs_dataset.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/observations/multi.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/padded.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/records/__init__.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/records/backends/__init__.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/rescale.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/select.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/statistics.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/subset.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/unchecked.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/xy.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/dates/__init__.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/dates/groups.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/testing.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/utils/__init__.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi_datasets.egg-info/dependency_links.txt +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi_datasets.egg-info/entry_points.txt +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi_datasets.egg-info/top_level.txt +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/accumulation.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/concat.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/join.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/missing.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/nan.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/pipe.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/recentre.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/regrid.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/run.sh +0 -0
- /anemoi_datasets-0.5.25/src/anemoi/datasets/create/testing.py → /anemoi_datasets-0.5.26/tests/create/utils/create.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create-perturbations-full.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create-shift.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/test_chunks.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/test_data.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/test_data_gridded.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/test_dates.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/test_indexing.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/test_records.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/xarray/test_netcdf.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/xarray/test_opendap.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/xarray/test_samples.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/.gitignore +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/build-obs.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/check-obs.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/examples/Makefile +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/examples/an-oper-2023-2023-2p5-6h-v1.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/Makefile +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids.ipynb +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids1.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids2.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids3.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids4.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids5.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids6.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids7.yaml +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids_multilam.ipynb +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/make-sample-dataset.py +0 -0
- {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/upload-sample-dataset.py +0 -0
|
@@ -11,3 +11,5 @@
|
|
|
11
11
|
<!-- Include any additional information, caveats, or considerations that the reviewer should be aware of. -->
|
|
12
12
|
|
|
13
13
|
***As a contributor to the Anemoi framework, please ensure that your changes include unit tests, updates to any affected dependencies and documentation, and have been tested in a parallel setting (i.e., with multiple GPUs). As a reviewer, you are also responsible for verifying these aspects and requesting changes if they are not adequately addressed. For guidelines about those please refer to https://anemoi.readthedocs.io/en/latest/***
|
|
14
|
+
|
|
15
|
+
By opening this pull request, I affirm that all authors agree to the [Contributor License Agreement.](https://github.com/ecmwf/codex/blob/main/Legal/contributor_license_agreement.md)
|
|
@@ -8,6 +8,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
8
8
|
Please add your functional changes to the appropriate section in the PR.
|
|
9
9
|
Keep it human-readable, your future self will thank you!
|
|
10
10
|
|
|
11
|
+
## [0.5.26](https://github.com/ecmwf/anemoi-datasets/compare/0.5.25...0.5.26) (2025-07-11)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* Add planetary planetary source ([#368](https://github.com/ecmwf/anemoi-datasets/issues/368)) ([c85337f](https://github.com/ecmwf/anemoi-datasets/commit/c85337f4b08381dc1e2e8ba71134c998c6258c2d))
|
|
17
|
+
* Extend xarray coordinate guesser to include pressure as a long_name ([#335](https://github.com/ecmwf/anemoi-datasets/issues/335)) ([bcbffaa](https://github.com/ecmwf/anemoi-datasets/commit/bcbffaa0b0ad011db5b1fd5879f9829f0d2e68af))
|
|
18
|
+
* Extented complement nearest functionality to support k>1 ([#371](https://github.com/ecmwf/anemoi-datasets/issues/371)) ([a2c5f92](https://github.com/ecmwf/anemoi-datasets/commit/a2c5f921f57fce60bd3fe728c21dc5e5b7d3a4a1))
|
|
19
|
+
* Point data ([#358](https://github.com/ecmwf/anemoi-datasets/issues/358)) ([78c4f85](https://github.com/ecmwf/anemoi-datasets/commit/78c4f85bf9cd4d6cc7f17268c8c526da32158220))
|
|
20
|
+
* Relaxed compatibility check for horizontal grid. ([#339](https://github.com/ecmwf/anemoi-datasets/issues/339)) ([a7dc859](https://github.com/ecmwf/anemoi-datasets/commit/a7dc859b6ec2fb0bad2ed7b7b8ee3c76034a258b))
|
|
21
|
+
* Sort xarray coordinate with patch ([#356](https://github.com/ecmwf/anemoi-datasets/issues/356)) ([638cbdb](https://github.com/ecmwf/anemoi-datasets/commit/638cbdb013b94b87748654ae338e0d02e69c1900))
|
|
22
|
+
* Use pytest-xdist to run tests in parallel. ([#346](https://github.com/ecmwf/anemoi-datasets/issues/346)) ([1d656ee](https://github.com/ecmwf/anemoi-datasets/commit/1d656ee62c51ee0cbe043943581cef16b2f7d7db))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Bug Fixes
|
|
26
|
+
|
|
27
|
+
* Deprecated filters in anemoi datasets ([#350](https://github.com/ecmwf/anemoi-datasets/issues/350)) ([d08c6f5](https://github.com/ecmwf/anemoi-datasets/commit/d08c6f55c3d983c930480bd777e74fd5a5bea6eb))
|
|
28
|
+
* **grib-index:** Match against filename, not full path ([#374](https://github.com/ecmwf/anemoi-datasets/issues/374)) ([e71a952](https://github.com/ecmwf/anemoi-datasets/commit/e71a95221493a703515d7a14a17f3dead06c8430))
|
|
29
|
+
* Missing method in xarray flavour ([#369](https://github.com/ecmwf/anemoi-datasets/issues/369)) ([d0b9588](https://github.com/ecmwf/anemoi-datasets/commit/d0b9588f0bff626ae751a74cf4cbbc373a2f67f4))
|
|
30
|
+
* Remove trailing slash from zarr paths. ([#362](https://github.com/ecmwf/anemoi-datasets/issues/362)) ([9a9bfe5](https://github.com/ecmwf/anemoi-datasets/commit/9a9bfe50406d299f44f7cce7e3befcabef6fefaf))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### Documentation
|
|
34
|
+
|
|
35
|
+
* Fix pre-commit ([#367](https://github.com/ecmwf/anemoi-datasets/issues/367)) ([6e6ebe2](https://github.com/ecmwf/anemoi-datasets/commit/6e6ebe2e81fc735a2af422b8c222b0a2f229d8dc))
|
|
36
|
+
* Zarr dataset creation ([#365](https://github.com/ecmwf/anemoi-datasets/issues/365)) ([622c261](https://github.com/ecmwf/anemoi-datasets/commit/622c26156de44ae4eaa3359fef836741b1d81d67))
|
|
37
|
+
|
|
11
38
|
## [0.5.25](https://github.com/ecmwf/anemoi-datasets/compare/0.5.24...0.5.25) (2025-06-11)
|
|
12
39
|
|
|
13
40
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: anemoi-datasets
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.26
|
|
4
4
|
Summary: A package to hold various functions to support training of ML models on ECMWF data.
|
|
5
5
|
Author-email: "European Centre for Medium-Range Weather Forecasts (ECMWF)" <software.support@ecmwf.int>
|
|
6
6
|
License: Apache License
|
|
@@ -226,7 +226,7 @@ Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
|
226
226
|
Requires-Python: >=3.9
|
|
227
227
|
License-File: LICENSE
|
|
228
228
|
Requires-Dist: anemoi-transform>=0.1.10
|
|
229
|
-
Requires-Dist: anemoi-utils[provenance]>=0.4.
|
|
229
|
+
Requires-Dist: anemoi-utils[provenance]>=0.4.26
|
|
230
230
|
Requires-Dist: cfunits
|
|
231
231
|
Requires-Dist: numcodecs<0.16
|
|
232
232
|
Requires-Dist: numpy
|
|
@@ -262,6 +262,7 @@ Requires-Dist: requests; extra == "remote"
|
|
|
262
262
|
Provides-Extra: tests
|
|
263
263
|
Requires-Dist: anemoi-datasets[xarray]; extra == "tests"
|
|
264
264
|
Requires-Dist: pytest; extra == "tests"
|
|
265
|
+
Requires-Dist: pytest-xdist; extra == "tests"
|
|
265
266
|
Provides-Extra: xarray
|
|
266
267
|
Requires-Dist: adlfs; extra == "xarray"
|
|
267
268
|
Requires-Dist: gcsfs; extra == "xarray"
|
{anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/anemoi-dataset.rst
RENAMED
|
@@ -17,3 +17,9 @@ An anemoi-dataset can be a source for a dataset:
|
|
|
17
17
|
The parameters are the same as those used in the ``open_dataset``
|
|
18
18
|
function, which allows you to subset and combine datasets. See
|
|
19
19
|
:ref:`opening-datasets` for more information.
|
|
20
|
+
|
|
21
|
+
In particular, this is how local zarr datasets created with anemoi in a
|
|
22
|
+
can be used as a source, contrary to :ref:`xarray-zarr` :
|
|
23
|
+
|
|
24
|
+
.. literalinclude:: yaml/anemoi-zarr-dataset.yaml
|
|
25
|
+
:language: yaml
|
{anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/xarray-zarr.rst
RENAMED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
.. _xarray-zarr:
|
|
2
|
+
|
|
1
3
|
#############
|
|
2
4
|
xarray-zarr
|
|
3
5
|
#############
|
|
@@ -17,4 +19,8 @@ it is necessary to use the :ref:`join <building-join>` operation to join
|
|
|
17
19
|
separate lists containing 2D variables and 3D variables. If all vertical
|
|
18
20
|
levels are desired, then it is acceptable to specify a single source.
|
|
19
21
|
|
|
22
|
+
Also, an ``xarray-zarr`` source uses the ``url`` keyword, and cannot be
|
|
23
|
+
used for accessing local datasets. For using local zarr datasets as
|
|
24
|
+
sources, use instead :ref:`anemoi-dataset_source`.
|
|
25
|
+
|
|
20
26
|
See :ref:`create-cf-data` for more information.
|
|
@@ -235,13 +235,15 @@ variables of `dataset1` and return the result.
|
|
|
235
235
|
source=dataset2,
|
|
236
236
|
what="variables",
|
|
237
237
|
interpolate="nearest",
|
|
238
|
+
k=1,
|
|
238
239
|
)
|
|
239
240
|
|
|
240
241
|
Currently ``what`` can only be ``variables`` and can be omitted.
|
|
241
242
|
|
|
242
243
|
The value for ``interpolate`` can be one of ``none`` (default) or
|
|
243
244
|
``nearest``. In the case of ``none``, the grids of the two datasets must
|
|
244
|
-
match.
|
|
245
|
+
match. In case of ``interpolate``, an additional parameter ``k`` can be
|
|
246
|
+
set to specify the number of nearest neighbors to use.
|
|
245
247
|
|
|
246
248
|
This feature was originally designed to be used in conjunction with
|
|
247
249
|
``cutout``, where `dataset1` is the lam, and `dataset2` is the global
|
|
@@ -46,9 +46,18 @@ can contain patterns. See :ref:`file-pattern` for more information.
|
|
|
46
46
|
Zarr
|
|
47
47
|
******
|
|
48
48
|
|
|
49
|
+
For using remote hosted zarr datasets as sources, use
|
|
50
|
+
:ref:`xarray-zarr`.
|
|
51
|
+
|
|
49
52
|
.. literalinclude:: yaml/zarr1.yaml
|
|
50
53
|
:language: yaml
|
|
51
54
|
|
|
55
|
+
For using local zarr datasets (such as anemoi-generated datasets), use
|
|
56
|
+
:ref:`anemoi-dataset_source`.
|
|
57
|
+
|
|
58
|
+
.. literalinclude:: yaml/zarr2.yaml
|
|
59
|
+
:language: yaml
|
|
60
|
+
|
|
52
61
|
*********************************************
|
|
53
62
|
Handling data that is not 100% CF-compliant
|
|
54
63
|
*********************************************
|
|
@@ -50,7 +50,7 @@ dynamic = [
|
|
|
50
50
|
]
|
|
51
51
|
dependencies = [
|
|
52
52
|
"anemoi-transform>=0.1.10",
|
|
53
|
-
"anemoi-utils[provenance]>=0.4.
|
|
53
|
+
"anemoi-utils[provenance]>=0.4.26",
|
|
54
54
|
"cfunits",
|
|
55
55
|
"numcodecs<0.16", # Until we move to zarr3
|
|
56
56
|
"numpy",
|
|
@@ -100,6 +100,7 @@ optional-dependencies.remote = [
|
|
|
100
100
|
optional-dependencies.tests = [
|
|
101
101
|
"anemoi-datasets[xarray]",
|
|
102
102
|
"pytest",
|
|
103
|
+
"pytest-xdist",
|
|
103
104
|
]
|
|
104
105
|
|
|
105
106
|
optional-dependencies.xarray = [
|
|
@@ -131,6 +132,13 @@ version_file = "src/anemoi/datasets/_version.py"
|
|
|
131
132
|
[tool.isort]
|
|
132
133
|
profile = "black"
|
|
133
134
|
|
|
135
|
+
[tool.pytest.ini_options]
|
|
136
|
+
testpaths = "tests"
|
|
137
|
+
addopts = [
|
|
138
|
+
"--numprocesses=auto",
|
|
139
|
+
"--strict-config",
|
|
140
|
+
]
|
|
141
|
+
|
|
134
142
|
[tool.mypy]
|
|
135
143
|
strict = false
|
|
136
144
|
exclude = [
|
{anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/grib-index.py
RENAMED
|
@@ -81,7 +81,7 @@ class GribIndexCmd(Command):
|
|
|
81
81
|
bool
|
|
82
82
|
True if the path matches, False otherwise.
|
|
83
83
|
"""
|
|
84
|
-
return fnmatch.fnmatch(path, args.match)
|
|
84
|
+
return fnmatch.fnmatch(os.path.basename(path), args.match)
|
|
85
85
|
|
|
86
86
|
from anemoi.datasets.create.sources.grib_index import GribIndex
|
|
87
87
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# (C) Copyright 2025
|
|
1
|
+
# (C) Copyright 2025- Anemoi contributors.
|
|
2
2
|
#
|
|
3
3
|
# This software is licensed under the terms of the Apache Licence Version 2.0
|
|
4
4
|
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
|
|
@@ -12,10 +12,8 @@ from typing import Dict
|
|
|
12
12
|
|
|
13
13
|
import earthkit.data as ekd
|
|
14
14
|
|
|
15
|
-
from ..filter import Filter
|
|
16
15
|
|
|
17
|
-
|
|
18
|
-
class TransformFilter(Filter):
|
|
16
|
+
class TransformFilter:
|
|
19
17
|
"""Calls filters from anemoi.transform.filters
|
|
20
18
|
|
|
21
19
|
Parameters
|
|
@@ -29,7 +27,6 @@ class TransformFilter(Filter):
|
|
|
29
27
|
"""
|
|
30
28
|
|
|
31
29
|
def __init__(self, context: Any, name: str, config: Dict[str, Any]) -> None:
|
|
32
|
-
|
|
33
30
|
from anemoi.transform.filters import create_filter
|
|
34
31
|
|
|
35
32
|
self.name = name
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
# nor does it submit to any jurisdiction.
|
|
9
9
|
|
|
10
10
|
import logging
|
|
11
|
-
import warnings
|
|
12
11
|
from copy import deepcopy
|
|
13
12
|
from typing import Any
|
|
14
13
|
from typing import Dict
|
|
@@ -165,24 +164,11 @@ def step_factory(config: Dict[str, Any], context: ActionContext, action_path: Li
|
|
|
165
164
|
if cls is not None:
|
|
166
165
|
return cls(context, action_path, previous_step, *args, **kwargs)
|
|
167
166
|
|
|
168
|
-
# Try filters from
|
|
167
|
+
# Try filters from transform filter registry
|
|
169
168
|
from anemoi.transform.filters import filter_registry as transform_filter_registry
|
|
170
169
|
|
|
171
|
-
from ..filters import create_filter as create_datasets_filter
|
|
172
|
-
from ..filters import filter_registry as datasets_filter_registry
|
|
173
|
-
|
|
174
|
-
if datasets_filter_registry.is_registered(key):
|
|
175
|
-
|
|
176
|
-
if transform_filter_registry.is_registered(key):
|
|
177
|
-
warnings.warn(f"Filter `{key}` is registered in both datasets and transform filter registries")
|
|
178
|
-
|
|
179
|
-
filter = create_datasets_filter(None, config)
|
|
180
|
-
return FunctionStepAction(context, action_path + [key], previous_step, key, filter)
|
|
181
|
-
|
|
182
|
-
# Use filters from transform registry
|
|
183
|
-
|
|
184
170
|
if transform_filter_registry.is_registered(key):
|
|
185
|
-
from ..
|
|
171
|
+
from ..filter import TransformFilter
|
|
186
172
|
|
|
187
173
|
return FunctionStepAction(
|
|
188
174
|
context, action_path + [key], previous_step, key, TransformFilter(context, key, config)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# (C) Copyright 2024 Anemoi contributors.
|
|
2
|
+
#
|
|
3
|
+
# This software is licensed under the terms of the Apache Licence Version 2.0
|
|
4
|
+
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
|
|
5
|
+
#
|
|
6
|
+
# In applying this licence, ECMWF does not waive the privileges and immunities
|
|
7
|
+
# granted to it by virtue of its status as an intergovernmental organisation
|
|
8
|
+
# nor does it submit to any jurisdiction.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
from . import source_registry
|
|
12
|
+
from .xarray import XarraySourceBase
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@source_registry.register("planetary_computer")
|
|
16
|
+
class PlanetaryComputerSource(XarraySourceBase):
|
|
17
|
+
"""An Xarray data source for the planetary_computer."""
|
|
18
|
+
|
|
19
|
+
emoji = "🪐"
|
|
20
|
+
|
|
21
|
+
def __init__(self, context, data_catalog_id, version="v1", *args, **kwargs: dict):
|
|
22
|
+
|
|
23
|
+
import planetary_computer
|
|
24
|
+
import pystac_client
|
|
25
|
+
|
|
26
|
+
self.data_catalog_id = data_catalog_id
|
|
27
|
+
self.flavour = kwargs.pop("flavour", None)
|
|
28
|
+
self.patch = kwargs.pop("patch", None)
|
|
29
|
+
self.options = kwargs.pop("options", {})
|
|
30
|
+
|
|
31
|
+
catalog = pystac_client.Client.open(
|
|
32
|
+
f"https://planetarycomputer.microsoft.com/api/stac/{version}/",
|
|
33
|
+
modifier=planetary_computer.sign_inplace,
|
|
34
|
+
)
|
|
35
|
+
collection = catalog.get_collection(self.data_catalog_id)
|
|
36
|
+
|
|
37
|
+
asset = collection.assets["zarr-abfs"]
|
|
38
|
+
|
|
39
|
+
if "xarray:storage_options" in asset.extra_fields:
|
|
40
|
+
self.options["storage_options"] = asset.extra_fields["xarray:storage_options"]
|
|
41
|
+
|
|
42
|
+
self.options.update(asset.extra_fields["xarray:open_kwargs"])
|
|
43
|
+
|
|
44
|
+
super().__init__(context, url=asset.href, *args, **kwargs)
|
|
@@ -20,7 +20,6 @@ import xarray as xr
|
|
|
20
20
|
from earthkit.data.core.fieldlist import MultiFieldList
|
|
21
21
|
|
|
22
22
|
from anemoi.datasets.create.sources.patterns import iterate_patterns
|
|
23
|
-
from anemoi.datasets.data.stores import name_to_zarr_store
|
|
24
23
|
|
|
25
24
|
from ..legacy import legacy_source
|
|
26
25
|
from .fieldlist import XarrayFieldList
|
|
@@ -89,37 +88,22 @@ def load_one(
|
|
|
89
88
|
The loaded dataset.
|
|
90
89
|
"""
|
|
91
90
|
|
|
92
|
-
"""
|
|
93
|
-
We manage the S3 client ourselves, bypassing fsspec and s3fs layers, because sometimes something on the stack
|
|
94
|
-
zarr/fsspec/s3fs/boto3 (?) seem to flags files as missing when they actually are not (maybe when S3 reports some sort of
|
|
95
|
-
connection error). In that case, Zarr will silently fill the chunks that could not be downloaded with NaNs.
|
|
96
|
-
See https://github.com/pydata/xarray/issues/8842
|
|
97
|
-
|
|
98
|
-
We have seen this bug triggered when we run many clients in parallel, for example, when we create a new dataset using `xarray-zarr`.
|
|
99
|
-
"""
|
|
100
|
-
|
|
101
91
|
if options is None:
|
|
102
92
|
options = {}
|
|
103
93
|
|
|
104
94
|
context.trace(emoji, dataset, options, kwargs)
|
|
105
95
|
|
|
106
|
-
if isinstance(dataset, str) and ".zarr"
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
data = xr.open_zarr(**store)
|
|
112
|
-
if "filename_or_obj" in store:
|
|
113
|
-
data = xr.open_dataset(**store)
|
|
114
|
-
else:
|
|
115
|
-
data = xr.open_dataset(dataset, **options)
|
|
96
|
+
if isinstance(dataset, str) and dataset.endswith(".zarr"):
|
|
97
|
+
# If the dataset is a zarr store, we need to use the zarr engine
|
|
98
|
+
options["engine"] = "zarr"
|
|
99
|
+
|
|
100
|
+
data = xr.open_dataset(dataset, **options)
|
|
116
101
|
|
|
117
102
|
fs = XarrayFieldList.from_xarray(data, flavour=flavour, patch=patch)
|
|
118
103
|
|
|
119
104
|
if len(dates) == 0:
|
|
120
105
|
result = fs.sel(**kwargs)
|
|
121
106
|
else:
|
|
122
|
-
print("dates", dates, kwargs)
|
|
123
107
|
result = MultiFieldList([fs.sel(valid_datetime=date, **kwargs) for date in dates])
|
|
124
108
|
|
|
125
109
|
if len(result) == 0:
|
|
@@ -130,7 +114,7 @@ def load_one(
|
|
|
130
114
|
a = ["valid_datetime", k.metadata("valid_datetime", default=None)]
|
|
131
115
|
for n in kwargs.keys():
|
|
132
116
|
a.extend([n, k.metadata(n, default=None)])
|
|
133
|
-
|
|
117
|
+
LOG.warning(f"{[str(x) for x in a]}")
|
|
134
118
|
|
|
135
119
|
if i > 16:
|
|
136
120
|
break
|
|
@@ -95,6 +95,7 @@ class Coordinate:
|
|
|
95
95
|
is_member = False
|
|
96
96
|
is_x = False
|
|
97
97
|
is_y = False
|
|
98
|
+
is_point = False
|
|
98
99
|
|
|
99
100
|
def __init__(self, variable: xr.DataArray) -> None:
|
|
100
101
|
"""Initialize the coordinate.
|
|
@@ -390,6 +391,13 @@ class EnsembleCoordinate(Coordinate):
|
|
|
390
391
|
return value
|
|
391
392
|
|
|
392
393
|
|
|
394
|
+
class PointCoordinate(Coordinate):
|
|
395
|
+
"""Coordinate class for point data."""
|
|
396
|
+
|
|
397
|
+
is_point = True
|
|
398
|
+
mars_names = ("point",)
|
|
399
|
+
|
|
400
|
+
|
|
393
401
|
class LongitudeCoordinate(Coordinate):
|
|
394
402
|
"""Coordinate class for longitude."""
|
|
395
403
|
|
|
@@ -87,13 +87,10 @@ class XArrayField(Field):
|
|
|
87
87
|
coordinate = owner.by_name[coord_name]
|
|
88
88
|
self._md[coord_name] = coordinate.normalise(extract_single_value(coord_value))
|
|
89
89
|
|
|
90
|
-
# print(values.ndim, values.shape, selection.dims)
|
|
91
90
|
# By now, the only dimensions should be latitude and longitude
|
|
92
91
|
self._shape = tuple(list(self.selection.shape)[-2:])
|
|
93
92
|
if math.prod(self._shape) != math.prod(self.selection.shape):
|
|
94
|
-
|
|
95
|
-
print(self.selection)
|
|
96
|
-
raise ValueError("Invalid shape for selection")
|
|
93
|
+
raise ValueError(f"Invalid shape for selection {self._shape=}, {self.selection.shape=} {self.selection=}")
|
|
97
94
|
|
|
98
95
|
@property
|
|
99
96
|
def shape(self) -> Tuple[int, int]:
|
|
@@ -26,6 +26,7 @@ from .coordinates import EnsembleCoordinate
|
|
|
26
26
|
from .coordinates import LatitudeCoordinate
|
|
27
27
|
from .coordinates import LevelCoordinate
|
|
28
28
|
from .coordinates import LongitudeCoordinate
|
|
29
|
+
from .coordinates import PointCoordinate
|
|
29
30
|
from .coordinates import ScalarCoordinate
|
|
30
31
|
from .coordinates import StepCoordinate
|
|
31
32
|
from .coordinates import TimeCoordinate
|
|
@@ -134,6 +135,10 @@ class CoordinateGuesser(ABC):
|
|
|
134
135
|
|
|
135
136
|
d: Optional[Coordinate] = None
|
|
136
137
|
|
|
138
|
+
d = self._is_point(coordinate, attributes)
|
|
139
|
+
if d is not None:
|
|
140
|
+
return d
|
|
141
|
+
|
|
137
142
|
d = self._is_longitude(coordinate, attributes)
|
|
138
143
|
if d is not None:
|
|
139
144
|
return d
|
|
@@ -308,9 +313,9 @@ class CoordinateGuesser(ABC):
|
|
|
308
313
|
return self._grid_cache[(x.name, y.name, dim_vars)]
|
|
309
314
|
|
|
310
315
|
grid_mapping = variable.attrs.get("grid_mapping", None)
|
|
311
|
-
if grid_mapping is not None:
|
|
312
|
-
|
|
313
|
-
|
|
316
|
+
# if grid_mapping is not None:
|
|
317
|
+
# print(f"grid_mapping: {grid_mapping}")
|
|
318
|
+
# print(self.ds[grid_mapping])
|
|
314
319
|
|
|
315
320
|
if grid_mapping is None:
|
|
316
321
|
LOG.warning(f"No 'grid_mapping' attribute provided for '{variable.name}'")
|
|
@@ -392,6 +397,10 @@ class CoordinateGuesser(ABC):
|
|
|
392
397
|
"""
|
|
393
398
|
pass
|
|
394
399
|
|
|
400
|
+
@abstractmethod
|
|
401
|
+
def _is_point(self, c: xr.DataArray, attributes: CoordinateAttributes) -> Optional[PointCoordinate]:
|
|
402
|
+
pass
|
|
403
|
+
|
|
395
404
|
@abstractmethod
|
|
396
405
|
def _is_latitude(self, c: xr.DataArray, attributes: CoordinateAttributes) -> Optional[LatitudeCoordinate]:
|
|
397
406
|
"""Checks if the coordinate is a latitude.
|
|
@@ -550,6 +559,15 @@ class DefaultCoordinateGuesser(CoordinateGuesser):
|
|
|
550
559
|
"""
|
|
551
560
|
super().__init__(ds)
|
|
552
561
|
|
|
562
|
+
def _is_point(self, c: xr.DataArray, attributes: CoordinateAttributes) -> Optional[PointCoordinate]:
|
|
563
|
+
if attributes.standard_name in ["cell", "station", "poi", "point"]:
|
|
564
|
+
return PointCoordinate(c)
|
|
565
|
+
|
|
566
|
+
if attributes.name in ["cell", "station", "poi", "point"]: # WeatherBench
|
|
567
|
+
return PointCoordinate(c)
|
|
568
|
+
|
|
569
|
+
return None
|
|
570
|
+
|
|
553
571
|
def _is_longitude(self, c: xr.DataArray, attributes: CoordinateAttributes) -> Optional[LongitudeCoordinate]:
|
|
554
572
|
"""Checks if the coordinate is a longitude.
|
|
555
573
|
|
|
@@ -750,6 +768,9 @@ class DefaultCoordinateGuesser(CoordinateGuesser):
|
|
|
750
768
|
if attributes.standard_name == "air_pressure" and attributes.units == "hPa":
|
|
751
769
|
return LevelCoordinate(c, "pl")
|
|
752
770
|
|
|
771
|
+
if attributes.long_name == "pressure" and attributes.units in ["hPa", "Pa"]:
|
|
772
|
+
return LevelCoordinate(c, "pl")
|
|
773
|
+
|
|
753
774
|
if attributes.name == "level":
|
|
754
775
|
return LevelCoordinate(c, "pl")
|
|
755
776
|
|
|
@@ -759,9 +780,6 @@ class DefaultCoordinateGuesser(CoordinateGuesser):
|
|
|
759
780
|
if attributes.standard_name == "depth":
|
|
760
781
|
return LevelCoordinate(c, "depth")
|
|
761
782
|
|
|
762
|
-
if attributes.name == "vertical" and attributes.units == "hPa":
|
|
763
|
-
return LevelCoordinate(c, "pl")
|
|
764
|
-
|
|
765
783
|
return None
|
|
766
784
|
|
|
767
785
|
def _is_number(self, c: xr.DataArray, attributes: CoordinateAttributes) -> Optional[EnsembleCoordinate]:
|
|
@@ -1040,3 +1058,23 @@ class FlavourCoordinateGuesser(CoordinateGuesser):
|
|
|
1040
1058
|
return EnsembleCoordinate(c)
|
|
1041
1059
|
|
|
1042
1060
|
return None
|
|
1061
|
+
|
|
1062
|
+
def _is_point(self, c: xr.DataArray, attributes: CoordinateAttributes) -> Optional[PointCoordinate]:
|
|
1063
|
+
"""Checks if the coordinate is a point coordinate using the flavour rules.
|
|
1064
|
+
|
|
1065
|
+
Parameters
|
|
1066
|
+
----------
|
|
1067
|
+
c : xr.DataArray
|
|
1068
|
+
The coordinate to check.
|
|
1069
|
+
attributes : CoordinateAttributes
|
|
1070
|
+
The attributes of the coordinate.
|
|
1071
|
+
|
|
1072
|
+
Returns
|
|
1073
|
+
-------
|
|
1074
|
+
Optional[PointCoordinate]
|
|
1075
|
+
The StepCoorPointCoordinateinate if matched, else None.
|
|
1076
|
+
"""
|
|
1077
|
+
if self._match(c, "point", attributes):
|
|
1078
|
+
return PointCoordinate(c)
|
|
1079
|
+
|
|
1080
|
+
return None
|
|
@@ -61,9 +61,50 @@ def patch_coordinates(ds: xr.Dataset, coordinates: List[str]) -> Any:
|
|
|
61
61
|
return ds
|
|
62
62
|
|
|
63
63
|
|
|
64
|
+
def patch_rename(ds: xr.Dataset, renames: dict[str, str]) -> Any:
|
|
65
|
+
"""Rename variables in the dataset.
|
|
66
|
+
|
|
67
|
+
Parameters
|
|
68
|
+
----------
|
|
69
|
+
ds : xr.Dataset
|
|
70
|
+
The dataset to patch.
|
|
71
|
+
renames : dict[str, str]
|
|
72
|
+
Mapping from old variable names to new variable names.
|
|
73
|
+
|
|
74
|
+
Returns
|
|
75
|
+
-------
|
|
76
|
+
Any
|
|
77
|
+
The patched dataset.
|
|
78
|
+
"""
|
|
79
|
+
return ds.rename(renames)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def patch_sort_coordinate(ds: xr.Dataset, sort_coordinates: List[str]) -> Any:
|
|
83
|
+
"""Sort the coordinates of the dataset.
|
|
84
|
+
|
|
85
|
+
Parameters
|
|
86
|
+
----------
|
|
87
|
+
ds : xr.Dataset
|
|
88
|
+
The dataset to patch.
|
|
89
|
+
sort_coordinates : List[str]
|
|
90
|
+
The coordinates to sort.
|
|
91
|
+
|
|
92
|
+
Returns
|
|
93
|
+
-------
|
|
94
|
+
Any
|
|
95
|
+
The patched dataset.
|
|
96
|
+
"""
|
|
97
|
+
|
|
98
|
+
for name in sort_coordinates:
|
|
99
|
+
ds = ds.sortby(name)
|
|
100
|
+
return ds
|
|
101
|
+
|
|
102
|
+
|
|
64
103
|
PATCHES = {
|
|
65
104
|
"attributes": patch_attributes,
|
|
66
105
|
"coordinates": patch_coordinates,
|
|
106
|
+
"rename": patch_rename,
|
|
107
|
+
"sort_coordinates": patch_sort_coordinate,
|
|
67
108
|
}
|
|
68
109
|
|
|
69
110
|
|
|
@@ -82,7 +123,9 @@ def patch_dataset(ds: xr.Dataset, patch: Dict[str, Dict[str, Any]]) -> Any:
|
|
|
82
123
|
Any
|
|
83
124
|
The patched dataset.
|
|
84
125
|
"""
|
|
85
|
-
|
|
126
|
+
|
|
127
|
+
ORDER = ["coordinates", "attributes", "rename", "sort_coordinates"]
|
|
128
|
+
for what, values in sorted(patch.items(), key=lambda x: ORDER.index(x[0])):
|
|
86
129
|
if what not in PATCHES:
|
|
87
130
|
raise ValueError(f"Unknown patch type {what!r}")
|
|
88
131
|
|
|
@@ -82,8 +82,12 @@ class Variable:
|
|
|
82
82
|
|
|
83
83
|
self.time = time
|
|
84
84
|
|
|
85
|
-
self.shape = tuple(
|
|
86
|
-
|
|
85
|
+
self.shape = tuple(
|
|
86
|
+
len(c.variable) for c in coordinates if c.is_dim and not c.scalar and not c.is_grid and not c.is_point
|
|
87
|
+
)
|
|
88
|
+
self.names = {
|
|
89
|
+
c.variable.name: c for c in coordinates if c.is_dim and not c.scalar and not c.is_grid and not c.is_point
|
|
90
|
+
}
|
|
87
91
|
self.by_name = {c.variable.name: c for c in coordinates}
|
|
88
92
|
|
|
89
93
|
# We need that alias for the time dimension
|