anemoi-datasets 0.5.24__tar.gz → 0.5.25__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.24 → anemoi_datasets-0.5.25}/.pre-commit-config.yaml +2 -2
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.release-please-config.json +6 -1
- anemoi_datasets-0.5.25/.release-please-manifest.json +3 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/CHANGELOG.md +14 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/PKG-INFO +1 -1
- anemoi_datasets-0.5.25/docs/adr/adr-1.md +63 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/_version.py +2 -2
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/finalise-additions.py +2 -1
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/finalise.py +2 -1
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/init-additions.py +2 -1
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/load-additions.py +2 -1
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/load.py +2 -1
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/__init__.py +24 -33
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/input/__init__.py +0 -20
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/accumulations.py +7 -6
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/dataset.py +29 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/misc.py +74 -16
- anemoi_datasets-0.5.25/src/anemoi/datasets/data/observations/__init__.py +316 -0
- anemoi_datasets-0.5.25/src/anemoi/datasets/data/observations/legacy_obs_dataset.py +200 -0
- anemoi_datasets-0.5.25/src/anemoi/datasets/data/observations/multi.py +64 -0
- anemoi_datasets-0.5.25/src/anemoi/datasets/data/padded.py +227 -0
- anemoi_datasets-0.5.25/src/anemoi/datasets/data/records/__init__.py +442 -0
- anemoi_datasets-0.5.25/src/anemoi/datasets/data/records/backends/__init__.py +157 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/subset.py +5 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi_datasets.egg-info/PKG-INFO +1 -1
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi_datasets.egg-info/SOURCES.txt +10 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/test_data.py +25 -1
- anemoi_datasets-0.5.25/tests/test_records.py +160 -0
- anemoi_datasets-0.5.25/tools/build-obs.py +52 -0
- anemoi_datasets-0.5.25/tools/check-obs.py +60 -0
- anemoi_datasets-0.5.24/.release-please-manifest.json +0 -3
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.gitattributes +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.github/CODEOWNERS +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.github/ci-hpc-config.yml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.github/dependabot.yml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.github/labeler.yml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.github/pull_request_template.md +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.github/workflows/downstream-ci-hpc.yml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.github/workflows/pr-conventional-commit.yml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.github/workflows/pr-label-conventional-commits.yml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.github/workflows/pr-label-file-based.yml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.github/workflows/pr-label-public.yml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.github/workflows/push-to-private.yml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.github/workflows/python-publish.yml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.github/workflows/python-pull-request.yml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.github/workflows/readthedocs-pr-update.yml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.github/workflows/release-please.yml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.gitignore +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.readthedocs.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/.vscode/spellright.dict +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/03-constant-fields.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/CONTRIBUTORS.md +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/LICENSE +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/README.md +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/Makefile +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/2t_map_example.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/area-1.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/concat.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/cutout-1.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/cutout-2.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/cutout-3.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/cutout-4.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/cutout-5.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/cutout-6.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/join.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/logo.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/overlay.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/schemas/matrix.excalidraw +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/schemas/matrix.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/schemas/overview.excalidraw +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/schemas/overview.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/schemas/recipe.excalidraw +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/schemas/recipe.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/skip-missing.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/style.css +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/thinning-after.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_static/thinning-before.png +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_templates/.gitkeep +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/_templates/apidoc/package.rst.jinja +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/apply-fmt.sh +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/check-index.sh +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/cli/compare-lam.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/cli/compare.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/cli/copy.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/cli/create.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/cli/grib-index.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/cli/inspect.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/cli/introduction.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/cli/patch.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/cli/scan.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/conf.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/advanced-options.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/filters/empty.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/filters/noop.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/filters/orog_to_z.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/filters/regrid.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/filters/rename.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/filters/rotate_winds.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/filters/select.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/filters/sum.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/filters/unrotate_winds.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/filters/wz_to_w.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/filters/yaml/orog_to_z.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/filters/yaml/regrid1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/filters/yaml/regrid2.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/filters/yaml/rename.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/filters/yaml/sum.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/filters/yaml/wz_to_w.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/filters.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/handling-missing-dates.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/handling-missing-values.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/incremental.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/introduction.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/naming-conventions.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/naming-variables.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/operations.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/accumulations.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/anemoi-dataset.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/cds.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/eccc-fstd.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/forcings.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/grib-index.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/grib.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/hindcasts.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/mars.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/netcdf.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/opendap.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/recentre.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/repeated-dates.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/xarray-based.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/xarray-kerchunk.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/xarray-kerchunk.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/xarray-zarr.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/accumulations1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/accumulations2.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/anemoi-dataset.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/eccc-fstd.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/forcings.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/grib1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/grib2.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/grib3.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/grib4.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/hindcasts.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/mars-cds.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/mars1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/mars2.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/netcdf.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/opendap.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/recentre.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/repeated-dates1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/repeated-dates2.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/repeated-dates3.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/repeated-dates4.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/xarray-based.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/xarray-kerchunk.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/xarray-zarr.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/yaml/zenodo.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources/zenodo.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/sources.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/statistics.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/building/syntax.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/introduction.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/using/combining.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/using/configuration.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/using/configuration.toml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/using/ensembles.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/using/grids.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/using/introduction.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/using/matching.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/using/methods.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/using/miscellaneous.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/using/missing.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/using/opening.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/using/other.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/using/selecting.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/using/statistics.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/using/subsetting.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/using/zip.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/yaml/Makefile +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/yaml/building1.txt +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/yaml/building1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/yaml/building2.txt +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/yaml/building2.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/yaml/building3.txt +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/yaml/building3.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/yaml/concat.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/yaml/hindcasts.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/yaml/input.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/yaml/missing_dates.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/yaml/nan.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/datasets/yaml/pipe.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/dev/contributing.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/01-grib-data.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/02-cf-data.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/03-constant-fields.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/yaml/grib-flavour1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/yaml/grib-flavour2.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/yaml/grib-flavour3.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/yaml/grib-flavour4.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/yaml/grib-recipe1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/yaml/grib-recipe2.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/yaml/grib-recipe3.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/yaml/grib-recipe4.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/yaml/grib-recipe5.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/yaml/netcdf1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/yaml/opendap1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/yaml/xarray-flavour1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/yaml/xarray-patch1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/yaml/xarray-patch2.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/create/yaml/zarr1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/introduction.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/usage/01-interpolate-step-dataset-combination.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/usage/02-coutout-complement-combination.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/usage/code/cutout-complement1.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/usage/code/interpolate1.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/usage/code/interpolate2.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/usage/yaml/cutout-complement1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/usage/yaml/interpolate1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/howtos/usage/yaml/interpolate2.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/index.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/installing.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/modules/dataset.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/modules/filters.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/modules/sources.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/overview.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/pptx/images.pptx +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/scripts/api_build.sh +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/usage/getting_started.rst +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/usage/yaml/aifs-ea-an-oper-0001-mars-o48-2020-2021-6h-v1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/docs/using/code/trimedge1_.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/pyproject.toml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/setup.cfg +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/__init__.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/__main__.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/check.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/__init__.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/check.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/cleanup.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/compare-lam.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/compare.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/copy.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/create.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/grib-index.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/init.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/inspect.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/patch.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/publish.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/commands/scan.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/compute/__init__.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/compute/recentre.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/check.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/chunks.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/config.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filter.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/__init__.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/empty.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/legacy.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/noop.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/orog_to_z.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/pressure_level_relative_humidity_to_specific_humidity.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/pressure_level_specific_humidity_to_relative_humidity.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/rename.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/rotate_winds.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/single_level_dewpoint_to_relative_humidity.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/single_level_relative_humidity_to_dewpoint.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/single_level_relative_humidity_to_specific_humidity.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/single_level_specific_humidity_to_relative_humidity.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/speeddir_to_uv.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/sum.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/transform.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/unrotate_winds.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/uv_to_speeddir.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/filters/wz_to_w.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/input/action.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/input/concat.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/input/context.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/input/data_sources.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/input/empty.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/input/filter.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/input/function.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/input/join.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/input/misc.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/input/pipe.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/input/repeated_dates.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/input/result.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/input/step.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/input/template.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/input/trace.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/patch.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/persistent.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/size.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/source.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/__init__.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/accumulations2.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/anemoi_dataset.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/constants.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/eccc_fstd.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/empty.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/forcings.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/grib.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/grib_index.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/hindcasts.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/legacy.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/mars.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/netcdf.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/opendap.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/patterns.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/recentre.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/source.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/tendencies.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/xarray.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/xarray_kerchunk.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/xarray_support/README.md +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/xarray_support/__init__.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/xarray_support/coordinates.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/xarray_support/field.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/xarray_support/fieldlist.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/xarray_support/flavour.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/xarray_support/grid.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/xarray_support/metadata.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/xarray_support/patch.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/xarray_support/time.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/xarray_support/variable.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/xarray_zarr.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/sources/zenodo.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/statistics/__init__.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/statistics/summary.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/testing.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/typing.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/utils.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/writer.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/zarr.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/__init__.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/complement.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/concat.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/debug.css +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/debug.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/ensemble.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/fill_missing.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/forwards.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/grids.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/indexing.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/interpolate.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/join.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/masked.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/merge.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/missing.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/rescale.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/select.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/statistics.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/stores.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/unchecked.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/data/xy.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/dates/__init__.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/dates/groups.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/grids.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/testing.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/utils/__init__.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi_datasets.egg-info/dependency_links.txt +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi_datasets.egg-info/entry_points.txt +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi_datasets.egg-info/requires.txt +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi_datasets.egg-info/top_level.txt +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/create/accumulation.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/create/concat.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/create/join.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/create/missing.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/create/nan.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/create/pipe.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/create/recentre.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/create/regrid.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/create/run.sh +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/create/test_create.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/create/test_sources.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/create-perturbations-full.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/create-shift.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/test_chunks.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/test_data_gridded.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/test_dates.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/test_indexing.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/xarray/test_netcdf.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/xarray/test_opendap.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/xarray/test_samples.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tests/xarray/test_zarr.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tools/.gitignore +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tools/examples/Makefile +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tools/examples/an-oper-2023-2023-2p5-6h-v1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tools/grids/Makefile +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tools/grids/grids.ipynb +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tools/grids/grids1.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tools/grids/grids2.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tools/grids/grids3.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tools/grids/grids4.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tools/grids/grids5.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tools/grids/grids6.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tools/grids/grids7.yaml +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tools/grids/grids_multilam.ipynb +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tools/make-sample-dataset.py +0 -0
- {anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/tools/upload-sample-dataset.py +0 -0
|
@@ -41,7 +41,7 @@ repos:
|
|
|
41
41
|
- --profile black
|
|
42
42
|
- --project anemoi
|
|
43
43
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
44
|
-
rev: v0.11.
|
|
44
|
+
rev: v0.11.12
|
|
45
45
|
hooks:
|
|
46
46
|
- id: ruff
|
|
47
47
|
args:
|
|
@@ -65,7 +65,7 @@ repos:
|
|
|
65
65
|
- id: docconvert
|
|
66
66
|
args: ["numpy"]
|
|
67
67
|
- repo: https://github.com/tox-dev/pyproject-fmt
|
|
68
|
-
rev: "v2.
|
|
68
|
+
rev: "v2.6.0"
|
|
69
69
|
hooks:
|
|
70
70
|
- id: pyproject-fmt
|
|
71
71
|
- repo: https://github.com/jshwi/docsig # Check docstrings against function sig
|
|
@@ -10,11 +10,16 @@
|
|
|
10
10
|
"draft-pull-request": true,
|
|
11
11
|
"pull-request-title-pattern": "chore${scope}: Release${component} ${version}",
|
|
12
12
|
"pull-request-header": ":robot: Automated Release PR\n\nThis PR was created by `release-please` to prepare the next release. Once merged:\n\n1. A new version tag will be created\n2. A GitHub release will be published\n3. The changelog will be updated\n\nChanges to be included in the next release:",
|
|
13
|
-
"pull-request-footer": "> [!IMPORTANT]\n> :warning: Merging this PR will:\n> - Create a new release\n> - Trigger deployment pipelines\n> - Update package versions\n\n **Before merging:**\n - Ensure all tests pass\n - Review the changelog carefully\n - Get required approvals\n\n [Release-please documentation](https://github.com/googleapis/release-please)",
|
|
13
|
+
"pull-request-footer": "> [!IMPORTANT]\n> Please do not change the PR title, manifest file, or any other automatically generated content in this PR unless you understand the implications. Changes here can break the release process.\n> :warning: Merging this PR will:\n> - Create a new release\n> - Trigger deployment pipelines\n> - Update package versions\n\n **Before merging:**\n - Ensure all tests pass\n - Review the changelog carefully\n - Get required approvals\n\n [Release-please documentation](https://github.com/googleapis/release-please)",
|
|
14
14
|
"packages": {
|
|
15
15
|
".": {
|
|
16
16
|
"package-name": "anemoi-datasets"
|
|
17
17
|
}
|
|
18
18
|
},
|
|
19
|
+
"plugins": [
|
|
20
|
+
{
|
|
21
|
+
"type": "sentence-case"
|
|
22
|
+
}
|
|
23
|
+
],
|
|
19
24
|
"$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json"
|
|
20
25
|
}
|
|
@@ -8,6 +8,20 @@ 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.25](https://github.com/ecmwf/anemoi-datasets/compare/0.5.24...0.5.25) (2025-06-11)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* Integrating non-regular datasets in anemoi for observations. ([#306](https://github.com/ecmwf/anemoi-datasets/issues/306)) ([95a0fe4](https://github.com/ecmwf/anemoi-datasets/commit/95a0fe4bb10dc48469c0be0efad94f4d5e2a9fe8))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Bug Fixes
|
|
20
|
+
|
|
21
|
+
* Incremental dataset build tasks called regardless of presence of debug flag in CLI code ([#294](https://github.com/ecmwf/anemoi-datasets/issues/294)) ([37afc0d](https://github.com/ecmwf/anemoi-datasets/commit/37afc0d6489f2d6c4b3ce3f9901c40e4cec5c4eb))
|
|
22
|
+
* Regression in accumulations [#354](https://github.com/ecmwf/anemoi-datasets/issues/354) ([#355](https://github.com/ecmwf/anemoi-datasets/issues/355)) ([f9769d7](https://github.com/ecmwf/anemoi-datasets/commit/f9769d7944738ecbedb6b3cc1f78cd26de36a73f))
|
|
23
|
+
* Remove 2 layers of build function ([#348](https://github.com/ecmwf/anemoi-datasets/issues/348)) ([7a904c4](https://github.com/ecmwf/anemoi-datasets/commit/7a904c451772089f120419a9d39bff746e0aeebb))
|
|
24
|
+
|
|
11
25
|
## [0.5.24](https://github.com/ecmwf/anemoi-datasets/compare/0.5.23...0.5.24) (2025-05-23)
|
|
12
26
|
|
|
13
27
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: anemoi-datasets
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.25
|
|
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
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Support irregular observations datasets
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
<!--What is the status? -->
|
|
6
|
+
|
|
7
|
+
Proposed - 30/04/2025
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
|
|
11
|
+
<!--What is the issue that we are seeing that is motivating this decision or change?-->
|
|
12
|
+
|
|
13
|
+
The objective of this change is to support observations data which is not regular.
|
|
14
|
+
|
|
15
|
+
In contrast with the fields data where each date contain the same number of points,
|
|
16
|
+
in the observations data, the number of points can change for every time window.
|
|
17
|
+
|
|
18
|
+
The Zarr format fits well the fields data, but does not fit the observations data.
|
|
19
|
+
|
|
20
|
+
To allow storing data with irregular shape, we need to use another format than the zarr used for fields.
|
|
21
|
+
An experimental implementation using xarray-zarr has been developed and is not optimised for ML training.
|
|
22
|
+
|
|
23
|
+
## Decision
|
|
24
|
+
|
|
25
|
+
<!--Describe the change that you are proposing.-->
|
|
26
|
+
|
|
27
|
+
Add a functionality in anemoi-datasets to read observations datasets and provide the data as dictionary/mapper of numpy arrays.
|
|
28
|
+
|
|
29
|
+
Mimic as much as possible what is done for field datasets :
|
|
30
|
+
|
|
31
|
+
`ds = open_dataset(....)`
|
|
32
|
+
`ds[i]` -> provides the data for a given time window, related to a given reference date. As a dictionary-like object.
|
|
33
|
+
`ds.dates` -> list of reference date, `ds.dates[i]` is the reference date for the data provided in `ds[i]`
|
|
34
|
+
|
|
35
|
+
Also expose the latitudes, longitudes in a sensible way (as `ds.latitudes` and `ds.longitudes` now depend on the dates) and name_to_index and statistics and metadata, etc.
|
|
36
|
+
|
|
37
|
+
These API choices need to be made on an actual training use case.
|
|
38
|
+
|
|
39
|
+
Step to achieve this:
|
|
40
|
+
- Implement now a prototype format to allow developing ML training code on observation data.
|
|
41
|
+
- Performing extensive benchmarking with various formats (explore parquet, and other).
|
|
42
|
+
- As the final format is not defined yet, ensure a flexible architecture to allow switching (this will help for benchmarking).
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
## Scope of Change
|
|
46
|
+
|
|
47
|
+
<!--Specify which Anemoi packages/modules will be affected by this decision.-->
|
|
48
|
+
- anemoi-datasets
|
|
49
|
+
Not a breaking change, this only add functionality to read observations datasets.
|
|
50
|
+
|
|
51
|
+
Must be in line with the change related to multi-datasets.
|
|
52
|
+
|
|
53
|
+
## Consequences
|
|
54
|
+
|
|
55
|
+
<!--Discuss the impact of this decision, including benefits, trade-offs, and potential technical debt.-->
|
|
56
|
+
|
|
57
|
+
## Alternatives Considered [Optional]
|
|
58
|
+
|
|
59
|
+
<!--List alternative solutions and why they were not chosen.-->
|
|
60
|
+
|
|
61
|
+
## References [Optional]
|
|
62
|
+
|
|
63
|
+
<!--Links to relevant discussions, documentation, or external resources.-->
|
|
@@ -44,7 +44,7 @@ from .check import check_data_values
|
|
|
44
44
|
from .chunks import ChunkFilter
|
|
45
45
|
from .config import build_output
|
|
46
46
|
from .config import loader_config
|
|
47
|
-
from .input import
|
|
47
|
+
from .input import InputBuilder
|
|
48
48
|
from .statistics import Summary
|
|
49
49
|
from .statistics import TmpStatistics
|
|
50
50
|
from .statistics import check_variance
|
|
@@ -101,7 +101,9 @@ def json_tidy(o: Any) -> Any:
|
|
|
101
101
|
|
|
102
102
|
|
|
103
103
|
def build_statistics_dates(
|
|
104
|
-
dates: list[datetime.datetime],
|
|
104
|
+
dates: list[datetime.datetime],
|
|
105
|
+
start: Optional[datetime.datetime],
|
|
106
|
+
end: Optional[datetime.datetime],
|
|
105
107
|
) -> tuple[str, str]:
|
|
106
108
|
"""Compute the start and end dates for the statistics.
|
|
107
109
|
|
|
@@ -551,36 +553,16 @@ class HasElementForDataMixin:
|
|
|
551
553
|
|
|
552
554
|
self.output = build_output(config.output, parent=self)
|
|
553
555
|
|
|
554
|
-
self.input =
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
The main configuration.
|
|
565
|
-
output_config : Any
|
|
566
|
-
The output configuration.
|
|
567
|
-
|
|
568
|
-
Returns
|
|
569
|
-
-------
|
|
570
|
-
Any
|
|
571
|
-
The input builder.
|
|
572
|
-
"""
|
|
573
|
-
builder = build_input(
|
|
574
|
-
main_config.input,
|
|
575
|
-
data_sources=main_config.get("data_sources", {}),
|
|
576
|
-
order_by=output_config.order_by,
|
|
577
|
-
flatten_grid=output_config.flatten_grid,
|
|
578
|
-
remapping=build_remapping(output_config.remapping),
|
|
579
|
-
use_grib_paramid=main_config.build.use_grib_paramid,
|
|
580
|
-
)
|
|
581
|
-
LOG.debug("✅ INPUT_BUILDER")
|
|
582
|
-
LOG.debug(builder)
|
|
583
|
-
return builder
|
|
556
|
+
self.input = InputBuilder(
|
|
557
|
+
config.input,
|
|
558
|
+
data_sources=config.get("data_sources", {}),
|
|
559
|
+
order_by=self.output.order_by,
|
|
560
|
+
flatten_grid=self.output.flatten_grid,
|
|
561
|
+
remapping=build_remapping(self.output.remapping),
|
|
562
|
+
use_grib_paramid=config.build.use_grib_paramid,
|
|
563
|
+
)
|
|
564
|
+
LOG.debug("✅ INPUT_BUILDER")
|
|
565
|
+
LOG.debug(self.input)
|
|
584
566
|
|
|
585
567
|
|
|
586
568
|
class Init(Actor, HasRegistryMixin, HasStatisticTempMixin, HasElementForDataMixin):
|
|
@@ -1541,7 +1523,16 @@ class Statistics(Actor, HasStatisticTempMixin, HasRegistryMixin):
|
|
|
1541
1523
|
if not all(self.registry.get_flags(sync=False)):
|
|
1542
1524
|
raise Exception(f"❗Zarr {self.path} is not fully built, not writing statistics into dataset.")
|
|
1543
1525
|
|
|
1544
|
-
for k in [
|
|
1526
|
+
for k in [
|
|
1527
|
+
"mean",
|
|
1528
|
+
"stdev",
|
|
1529
|
+
"minimum",
|
|
1530
|
+
"maximum",
|
|
1531
|
+
"sums",
|
|
1532
|
+
"squares",
|
|
1533
|
+
"count",
|
|
1534
|
+
"has_nans",
|
|
1535
|
+
]:
|
|
1545
1536
|
self.dataset.add_dataset(name=k, array=stats[k], dimensions=("variable",))
|
|
1546
1537
|
|
|
1547
1538
|
self.registry.add_to_history("compute_statistics_end")
|
{anemoi_datasets-0.5.24 → anemoi_datasets-0.5.25}/src/anemoi/datasets/create/input/__init__.py
RENAMED
|
@@ -104,23 +104,3 @@ class InputBuilder:
|
|
|
104
104
|
Trace string.
|
|
105
105
|
"""
|
|
106
106
|
return f"InputBuilder({group_of_dates})"
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
def build_input(config: dict, data_sources: Union[dict, list], **kwargs: Any) -> InputBuilder:
|
|
110
|
-
"""Build an InputBuilder instance.
|
|
111
|
-
|
|
112
|
-
Parameters
|
|
113
|
-
----------
|
|
114
|
-
config : dict
|
|
115
|
-
Configuration dictionary.
|
|
116
|
-
data_sources : Union[dict, list]
|
|
117
|
-
Data sources.
|
|
118
|
-
**kwargs : Any
|
|
119
|
-
Additional keyword arguments.
|
|
120
|
-
|
|
121
|
-
Returns
|
|
122
|
-
-------
|
|
123
|
-
InputBuilder
|
|
124
|
-
An instance of InputBuilder.
|
|
125
|
-
"""
|
|
126
|
-
return InputBuilder(config, data_sources, **kwargs)
|
|
@@ -459,12 +459,13 @@ class AccumulationFromStart(Accumulation):
|
|
|
459
459
|
A tuple representing the MARS date-time step.
|
|
460
460
|
"""
|
|
461
461
|
assert user_date is None, user_date
|
|
462
|
-
assert not frequency, frequency
|
|
463
462
|
|
|
464
463
|
steps = (step1 + add_step, step2 + add_step)
|
|
465
464
|
if steps[0] == 0:
|
|
466
465
|
steps = (steps[1],)
|
|
467
466
|
|
|
467
|
+
assert frequency == 0 or frequency == (step2 - step1), frequency
|
|
468
|
+
|
|
468
469
|
return (
|
|
469
470
|
base_date.year * 10000 + base_date.month * 100 + base_date.day,
|
|
470
471
|
base_date.hour * 100 + base_date.minute,
|
|
@@ -824,6 +825,11 @@ def _compute_accumulations(
|
|
|
824
825
|
step1, step2 = user_accumulation_period
|
|
825
826
|
assert step1 < step2, user_accumulation_period
|
|
826
827
|
|
|
828
|
+
if accumulations_reset_frequency is not None:
|
|
829
|
+
AccumulationClass = AccumulationFromLastReset
|
|
830
|
+
else:
|
|
831
|
+
AccumulationClass = AccumulationFromStart if data_accumulation_period in (0, None) else AccumulationFromLastStep
|
|
832
|
+
|
|
827
833
|
if data_accumulation_period is None:
|
|
828
834
|
data_accumulation_period = user_accumulation_period[1] - user_accumulation_period[0]
|
|
829
835
|
|
|
@@ -838,11 +844,6 @@ def _compute_accumulations(
|
|
|
838
844
|
|
|
839
845
|
base_times = [t // 100 if t > 100 else t for t in base_times]
|
|
840
846
|
|
|
841
|
-
if accumulations_reset_frequency is not None:
|
|
842
|
-
AccumulationClass = AccumulationFromLastReset
|
|
843
|
-
else:
|
|
844
|
-
AccumulationClass = AccumulationFromStart if data_accumulation_period in (0, None) else AccumulationFromLastStep
|
|
845
|
-
|
|
846
847
|
mars_date_time_steps = AccumulationClass.mars_date_time_steps(
|
|
847
848
|
dates=dates,
|
|
848
849
|
step1=step1,
|
|
@@ -179,6 +179,19 @@ class Dataset(ABC, Sized):
|
|
|
179
179
|
if "start" in kwargs or "end" in kwargs:
|
|
180
180
|
start = kwargs.pop("start", None)
|
|
181
181
|
end = kwargs.pop("end", None)
|
|
182
|
+
padding = kwargs.pop("padding", None)
|
|
183
|
+
|
|
184
|
+
if padding:
|
|
185
|
+
if padding != "empty":
|
|
186
|
+
raise ValueError(f"Only 'empty' padding is supported, got {padding=}")
|
|
187
|
+
from .padded import Padded
|
|
188
|
+
|
|
189
|
+
frequency = kwargs.pop("frequency", self.frequency)
|
|
190
|
+
return (
|
|
191
|
+
Padded(self, start, end, frequency, dict(start=start, end=end, frequency=frequency))
|
|
192
|
+
._subset(**kwargs)
|
|
193
|
+
.mutate()
|
|
194
|
+
)
|
|
182
195
|
|
|
183
196
|
from .subset import Subset
|
|
184
197
|
|
|
@@ -724,6 +737,9 @@ class Dataset(ABC, Sized):
|
|
|
724
737
|
"""Return the grid shape of the dataset."""
|
|
725
738
|
return (self.shape[-1],)
|
|
726
739
|
|
|
740
|
+
def empty_item(self) -> NDArray[Any]:
|
|
741
|
+
return np.zeros((*self.shape[1:-1], 0), dtype=self.dtype)
|
|
742
|
+
|
|
727
743
|
def _check(self) -> None:
|
|
728
744
|
"""Check for overridden private methods in the dataset."""
|
|
729
745
|
common = Dataset.__dict__.keys() & self.__class__.__dict__.keys()
|
|
@@ -1075,3 +1091,16 @@ class Dataset(ABC, Sized):
|
|
|
1075
1091
|
The dataset names.
|
|
1076
1092
|
"""
|
|
1077
1093
|
pass
|
|
1094
|
+
|
|
1095
|
+
def get_latitudes(self, i):
|
|
1096
|
+
return self.get_aux(i)[0]
|
|
1097
|
+
|
|
1098
|
+
def get_longitudes(self, i):
|
|
1099
|
+
return self.get_aux(i)[1]
|
|
1100
|
+
|
|
1101
|
+
def get_timedeltas(self, i):
|
|
1102
|
+
return self.get_aux(i)[2]
|
|
1103
|
+
|
|
1104
|
+
def get_aux(self, i):
|
|
1105
|
+
# need to decide if Fields datasets need to implement this
|
|
1106
|
+
raise NotImplementedError(f"get_aux is not implemented for this dataset, {type(self)}")
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
import calendar
|
|
12
12
|
import datetime
|
|
13
13
|
import logging
|
|
14
|
+
import os
|
|
14
15
|
from pathlib import PurePath
|
|
15
16
|
from typing import TYPE_CHECKING
|
|
16
17
|
from typing import Any
|
|
@@ -22,6 +23,7 @@ from typing import Union
|
|
|
22
23
|
|
|
23
24
|
import numpy as np
|
|
24
25
|
import zarr
|
|
26
|
+
from anemoi.utils.config import load_any_dict_format
|
|
25
27
|
from anemoi.utils.config import load_config as load_settings
|
|
26
28
|
from numpy.typing import NDArray
|
|
27
29
|
|
|
@@ -108,7 +110,10 @@ def round_datetime(d: np.datetime64, dates: NDArray[np.datetime64], up: bool) ->
|
|
|
108
110
|
|
|
109
111
|
|
|
110
112
|
def _as_date(
|
|
111
|
-
d: Union[int, str, np.datetime64, datetime.date],
|
|
113
|
+
d: Union[int, str, np.datetime64, datetime.date],
|
|
114
|
+
dates: NDArray[np.datetime64],
|
|
115
|
+
last: bool,
|
|
116
|
+
frequency: Optional[datetime.timedelta] = None,
|
|
112
117
|
) -> np.datetime64:
|
|
113
118
|
"""Convert a date to a numpy datetime64 object, rounding to the nearest date in a list of dates.
|
|
114
119
|
|
|
@@ -120,6 +125,8 @@ def _as_date(
|
|
|
120
125
|
The list of dates.
|
|
121
126
|
last : bool
|
|
122
127
|
Whether to round to the last date.
|
|
128
|
+
frequency : Optional[datetime.timedelta]
|
|
129
|
+
The frequency of the dataset.
|
|
123
130
|
|
|
124
131
|
Returns
|
|
125
132
|
-------
|
|
@@ -142,30 +149,49 @@ def _as_date(
|
|
|
142
149
|
pass
|
|
143
150
|
|
|
144
151
|
if isinstance(d, int):
|
|
152
|
+
delta = frequency
|
|
153
|
+
if delta is None:
|
|
154
|
+
delta = np.timedelta64(1, "s")
|
|
155
|
+
delta = np.timedelta64(delta, "s")
|
|
156
|
+
|
|
145
157
|
if len(str(d)) == 4:
|
|
146
158
|
year = d
|
|
147
159
|
if last:
|
|
148
|
-
|
|
160
|
+
year = year + 1
|
|
161
|
+
npdate = np.datetime64(f"{year:04}-01-01T00:00:00")
|
|
162
|
+
return _as_date(npdate - delta, dates, last, frequency)
|
|
149
163
|
else:
|
|
150
|
-
return _as_date(np.datetime64(f"{year:04}-01-01T00:00:00"), dates, last)
|
|
164
|
+
return _as_date(np.datetime64(f"{year:04}-01-01T00:00:00"), dates, last, frequency)
|
|
151
165
|
|
|
152
166
|
if len(str(d)) == 6:
|
|
153
167
|
year = d // 100
|
|
154
168
|
month = d % 100
|
|
155
169
|
if last:
|
|
156
|
-
|
|
157
|
-
|
|
170
|
+
month = month + 1
|
|
171
|
+
if month > 12:
|
|
172
|
+
month = 1
|
|
173
|
+
year += 1
|
|
174
|
+
npdate = np.datetime64(f"{year:04}-{month:02}-01T00:00:00")
|
|
175
|
+
return _as_date(npdate - delta, dates, last, frequency)
|
|
158
176
|
else:
|
|
159
|
-
return _as_date(np.datetime64(f"{year:04}-{month:02}-01T00:00:00"), dates, last)
|
|
177
|
+
return _as_date(np.datetime64(f"{year:04}-{month:02}-01T00:00:00"), dates, last, frequency)
|
|
160
178
|
|
|
161
179
|
if len(str(d)) == 8:
|
|
162
180
|
year = d // 10000
|
|
163
181
|
month = (d % 10000) // 100
|
|
164
182
|
day = d % 100
|
|
165
183
|
if last:
|
|
166
|
-
|
|
184
|
+
day = day + 1
|
|
185
|
+
if day > calendar.monthrange(year, month)[1]:
|
|
186
|
+
day = 1
|
|
187
|
+
month += 1
|
|
188
|
+
if month > 12:
|
|
189
|
+
month = 1
|
|
190
|
+
year += 1
|
|
191
|
+
npdate = np.datetime64(f"{year:04}-{month:02}-{day:02}T00:00:00")
|
|
192
|
+
return _as_date(npdate - delta, dates, last, frequency)
|
|
167
193
|
else:
|
|
168
|
-
return _as_date(np.datetime64(f"{year:04}-{month:02}-{day:02}T00:00:00"), dates, last)
|
|
194
|
+
return _as_date(np.datetime64(f"{year:04}-{month:02}-{day:02}T00:00:00"), dates, last, frequency)
|
|
169
195
|
|
|
170
196
|
if isinstance(d, str):
|
|
171
197
|
|
|
@@ -201,19 +227,20 @@ def _as_date(
|
|
|
201
227
|
np.datetime64(f"{year:04}-{month:02}-{day:02}T{hour:02}:{minute:02}:{second:02}"),
|
|
202
228
|
dates,
|
|
203
229
|
last,
|
|
230
|
+
frequency,
|
|
204
231
|
)
|
|
205
232
|
|
|
206
233
|
if "-" in d:
|
|
207
234
|
assert ":" not in d
|
|
208
235
|
bits = d.split("-")
|
|
209
236
|
if len(bits) == 1:
|
|
210
|
-
return _as_date(int(bits[0]), dates, last)
|
|
237
|
+
return _as_date(int(bits[0]), dates, last, frequency)
|
|
211
238
|
|
|
212
239
|
if len(bits) == 2:
|
|
213
|
-
return _as_date(int(bits[0]) * 100 + int(bits[1]), dates, last)
|
|
240
|
+
return _as_date(int(bits[0]) * 100 + int(bits[1]), dates, last, frequency)
|
|
214
241
|
|
|
215
242
|
if len(bits) == 3:
|
|
216
|
-
return _as_date(int(bits[0]) * 10000 + int(bits[1]) * 100 + int(bits[2]), dates, last)
|
|
243
|
+
return _as_date(int(bits[0]) * 10000 + int(bits[1]) * 100 + int(bits[2]), dates, last, frequency)
|
|
217
244
|
|
|
218
245
|
if ":" in d:
|
|
219
246
|
assert len(d) == 5
|
|
@@ -225,12 +252,16 @@ def _as_date(
|
|
|
225
252
|
month = first.month
|
|
226
253
|
day = first.day
|
|
227
254
|
|
|
228
|
-
return _as_date(np.datetime64(f"{year:04}-{month:02}-{day:02}T{hour}:00:00"), dates, last)
|
|
255
|
+
return _as_date(np.datetime64(f"{year:04}-{month:02}-{day:02}T{hour}:00:00"), dates, last, frequency)
|
|
229
256
|
|
|
230
257
|
raise NotImplementedError(f"Unsupported date: {d} ({type(d)})")
|
|
231
258
|
|
|
232
259
|
|
|
233
|
-
def as_first_date(
|
|
260
|
+
def as_first_date(
|
|
261
|
+
d: Union[int, str, np.datetime64, datetime.date],
|
|
262
|
+
dates: NDArray[np.datetime64],
|
|
263
|
+
frequency: Optional[datetime.timedelta] = None,
|
|
264
|
+
) -> np.datetime64:
|
|
234
265
|
"""Convert a date to the first date in a list of dates.
|
|
235
266
|
|
|
236
267
|
Parameters
|
|
@@ -239,16 +270,22 @@ def as_first_date(d: Union[int, str, np.datetime64, datetime.date], dates: NDArr
|
|
|
239
270
|
The date to convert.
|
|
240
271
|
dates : NDArray[np.datetime64]
|
|
241
272
|
The list of dates.
|
|
273
|
+
frequency : Optional[datetime.timedelta]
|
|
274
|
+
The frequency of the dataset.
|
|
242
275
|
|
|
243
276
|
Returns
|
|
244
277
|
-------
|
|
245
278
|
np.datetime64
|
|
246
279
|
The first date.
|
|
247
280
|
"""
|
|
248
|
-
return _as_date(d, dates, last=False)
|
|
281
|
+
return _as_date(d, dates, last=False, frequency=frequency)
|
|
249
282
|
|
|
250
283
|
|
|
251
|
-
def as_last_date(
|
|
284
|
+
def as_last_date(
|
|
285
|
+
d: Union[int, str, np.datetime64, datetime.date],
|
|
286
|
+
dates: NDArray[np.datetime64],
|
|
287
|
+
frequency: Optional[datetime.timedelta] = None,
|
|
288
|
+
) -> np.datetime64:
|
|
252
289
|
"""Convert a date to the last date in a list of dates.
|
|
253
290
|
|
|
254
291
|
Parameters
|
|
@@ -257,13 +294,15 @@ def as_last_date(d: Union[int, str, np.datetime64, datetime.date], dates: NDArra
|
|
|
257
294
|
The date to convert.
|
|
258
295
|
dates : NDArray[np.datetime64]
|
|
259
296
|
The list of dates.
|
|
297
|
+
frequency : Optional[datetime.timedelta]
|
|
298
|
+
The frequency of the dataset.
|
|
260
299
|
|
|
261
300
|
Returns
|
|
262
301
|
-------
|
|
263
302
|
np.datetime64
|
|
264
303
|
The last date.
|
|
265
304
|
"""
|
|
266
|
-
return _as_date(d, dates, last=True)
|
|
305
|
+
return _as_date(d, dates, last=True, frequency=frequency)
|
|
267
306
|
|
|
268
307
|
|
|
269
308
|
def _concat_or_join(datasets: List["Dataset"], kwargs: Dict[str, Any]) -> Tuple["Dataset", Dict[str, Any]]:
|
|
@@ -317,6 +356,18 @@ def _open(a: Union[str, PurePath, Dict[str, Any], List[Any], Tuple[Any, ...]]) -
|
|
|
317
356
|
from .stores import Zarr
|
|
318
357
|
from .stores import zarr_lookup
|
|
319
358
|
|
|
359
|
+
if isinstance(a, str) and len(a.split(".")) in [2, 3]:
|
|
360
|
+
|
|
361
|
+
metadata_path = os.path.join(a, "metadata.json")
|
|
362
|
+
if os.path.exists(metadata_path):
|
|
363
|
+
metadata = load_any_dict_format(metadata_path)
|
|
364
|
+
if "backend" not in metadata:
|
|
365
|
+
raise ValueError(f"Metadata for {a} does not contain 'backend' key")
|
|
366
|
+
|
|
367
|
+
from anemoi.datasets.data.records import open_records_dataset
|
|
368
|
+
|
|
369
|
+
return open_records_dataset(a, backend=metadata["backend"])
|
|
370
|
+
|
|
320
371
|
if isinstance(a, Dataset):
|
|
321
372
|
return a.mutate()
|
|
322
373
|
|
|
@@ -454,6 +505,13 @@ def _open_dataset(*args: Any, **kwargs: Any) -> "Dataset":
|
|
|
454
505
|
for a in args:
|
|
455
506
|
sets.append(_open(a))
|
|
456
507
|
|
|
508
|
+
if "observations" in kwargs:
|
|
509
|
+
from .observations import observations_factory
|
|
510
|
+
|
|
511
|
+
assert not sets, sets
|
|
512
|
+
|
|
513
|
+
return observations_factory(args, kwargs).mutate()
|
|
514
|
+
|
|
457
515
|
if "xy" in kwargs:
|
|
458
516
|
# Experimental feature, may be removed
|
|
459
517
|
from .xy import xy_factory
|