anemoi-datasets 0.3.7__tar.gz → 0.3.8__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.3.7 → anemoi_datasets-0.3.8}/.pre-commit-config.yaml +1 -1
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/PKG-INFO +1 -1
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/conf.py +8 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/index.rst +2 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/configuration.rst +2 -1
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/__init__.py +3 -2
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/_version.py +2 -2
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/commands/copy.py +35 -23
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/__init__.py +12 -9
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/accumulations.py +9 -1
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/mars.py +74 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/loaders.py +96 -86
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/statistics/__init__.py +6 -139
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/misc.py +3 -1
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/select.py +8 -4
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi_datasets.egg-info/PKG-INFO +1 -1
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/.github/workflows/python-publish.yml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/.gitignore +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/.readthedocs.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/.vscode/spellright.dict +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/LICENSE +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/README.md +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/Makefile +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/_static/logo.png +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/_static/style.css +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/_templates/.gitkeep +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/apply-fmt.sh +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/filters/empty.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/filters/noop.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/filters/rename.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/filters/rotate_winds.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/filters/select.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/filters/unrotate_winds.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/filters.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/handling-missing-dates.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/handling-missing-values.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/introduction.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/naming-variables.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/operations.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/accumulations.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/accumulations1.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/accumulations2.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/forcings.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/forcings.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/grib.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/hindcasts.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/mars.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/mars1.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/mars2.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/netcdf.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/netcdf.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/opendap.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/opendap.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/recentre.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/yaml/grib1.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/yaml/grib2.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/yaml/grib3.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/yaml/grib4.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/yaml/hindcasts.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources/yaml/recentre.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/sources.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/statistics.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/syntax.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/syntax.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/yaml/Makefile +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/yaml/building1.txt +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/yaml/building1.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/yaml/building2.txt +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/yaml/building2.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/yaml/building3.txt +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/yaml/building3.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/yaml/concat.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/yaml/hindcasts.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/yaml/input.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/yaml/missing_dates.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/yaml/nan.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/building/yaml/pipe.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/check-index.sh +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/cli/compare.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/cli/copy.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/cli/create.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/cli/inspect.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/cli/introduction.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/cli/scan.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/images.pptx +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/installing.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/overview.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/overview_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/requirements.txt +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/schemas/matrix.excalidraw +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/schemas/matrix.png +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/schemas/overview.excalidraw +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/schemas/overview.png +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/schemas/recipe.excalidraw +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/schemas/recipe.png +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/test.ipynb +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/area1_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/area2_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/chain_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/combine_example.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/concat1.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/cutout_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/drop_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/end_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/ensembles1_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/frequency_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/grids1_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/join1.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/matching0_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/matching1_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/matching2_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/matching3_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/matching4_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/misc1.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/misc2.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/missing_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/open_cloud.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/open_combine1_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/open_combine2_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/open_complex.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/open_dict_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/open_first_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/open_list_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/open_name.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/open_other.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/open_path.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/open_yaml_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/rename_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/reorder1_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/reorder2_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/select1_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/select2_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/shuffle_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/some_attributes_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/start_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/statistics_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/subset_example.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/thinning_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/zip1_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/code/zip2_.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/combining.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/configuration.toml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/grids.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/images/area-1.png +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/images/concat.png +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/images/cutout-1.png +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/images/cutout-2.png +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/images/cutout-3.png +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/images/cutout-4.png +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/images/join.png +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/images/overlay.png +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/images/thinning-after.png +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/images/thinning-before.png +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/introduction.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/matching.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/methods.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/miscellaneous.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/opening.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/other.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/selecting.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/statistics.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/docs/using/subsetting.rst +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/pyproject.toml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/setup.cfg +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/__main__.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/commands/__init__.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/commands/compare.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/commands/create.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/commands/inspect.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/commands/scan.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/compute/__init__.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/compute/recentre.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/check.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/chunks.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/config.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/__init__.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/filters/__init__.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/filters/empty.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/filters/noop.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/filters/rename.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/filters/rotate_winds.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/filters/unrotate_winds.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/__init__.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/constants.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/empty.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/forcings.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/grib.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/hindcasts.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/netcdf.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/opendap.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/recentre.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/source.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/tendencies.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/input.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/patch.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/persistent.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/size.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/statistics/summary.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/template.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/utils.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/writer.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/zarr.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/__init__.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/concat.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/dataset.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/debug.css +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/debug.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/ensemble.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/forwards.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/grids.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/indexing.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/join.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/masked.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/statistics.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/stores.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/subset.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/unchecked.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/dates/__init__.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/dates/groups.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/grids.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/utils/__init__.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi_datasets.egg-info/SOURCES.txt +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi_datasets.egg-info/dependency_links.txt +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi_datasets.egg-info/entry_points.txt +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi_datasets.egg-info/requires.txt +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi_datasets.egg-info/top_level.txt +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tests/create/concat.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tests/create/data_sources.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tests/create/join.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tests/create/missing.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tests/create/nan.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tests/create/pipe.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tests/create/recentre.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tests/create/test_create.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tests/create-perturbations-full.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tests/create-shift.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tests/test_chunks.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tests/test_data.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tests/test_dates.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tests/test_indexing.py +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tools/.gitignore +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tools/examples/Makefile +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tools/examples/an-oper-2023-2023-2p5-6h-v1.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tools/grids/Makefile +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tools/grids/grids.ipynb +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tools/grids/grids1.yaml +0 -0
- {anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/tools/grids/grids2.yaml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: anemoi-datasets
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.8
|
|
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
|
|
@@ -99,6 +99,14 @@ intersphinx_mapping = {
|
|
|
99
99
|
"https://anemoi-inference.readthedocs.io/en/latest/",
|
|
100
100
|
("../../anemoi-inference/docs/_build/html/objects.inv", None),
|
|
101
101
|
),
|
|
102
|
+
"anemoi-graphs": (
|
|
103
|
+
"https://anemoi-graphs.readthedocs.io/en/latest/",
|
|
104
|
+
("../../anemoi-graphs/docs/_build/html/objects.inv", None),
|
|
105
|
+
),
|
|
106
|
+
"anemoi-registry": (
|
|
107
|
+
"https://anemoi-registry.readthedocs.io/en/latest/",
|
|
108
|
+
("../../anemoi-registry/docs/_build/html/objects.inv", None),
|
|
109
|
+
),
|
|
102
110
|
}
|
|
103
111
|
|
|
104
112
|
|
|
@@ -116,8 +116,10 @@ datasets <building-introduction>`.
|
|
|
116
116
|
- :ref:`anemoi-utils <anemoi-utils:index-page>`
|
|
117
117
|
- :ref:`anemoi-datasets <anemoi-datasets:index-page>`
|
|
118
118
|
- :ref:`anemoi-models <anemoi-models:index-page>`
|
|
119
|
+
- :ref:`anemoi-graphs <anemoi-graphs:index-page>`
|
|
119
120
|
- :ref:`anemoi-training <anemoi-training:index-page>`
|
|
120
121
|
- :ref:`anemoi-inference <anemoi-inference:index-page>`
|
|
122
|
+
- :ref:`anemoi-registry <anemoi-registry:index-page>`
|
|
121
123
|
|
|
122
124
|
*********
|
|
123
125
|
License
|
|
@@ -9,7 +9,8 @@ end with ``.zarr`` or ``.zip``, it is considered a dataset name and not
|
|
|
9
9
|
a path or a URL.
|
|
10
10
|
|
|
11
11
|
In that case, the *Anemoi* configuration is read from
|
|
12
|
-
``~/.anemoi.toml``. Below is an example of such a
|
|
12
|
+
``~/.config/anemoi/settings.toml``. Below is an example of such a
|
|
13
|
+
configuration:
|
|
13
14
|
|
|
14
15
|
.. literalinclude:: configuration.toml
|
|
15
16
|
:language: toml
|
|
@@ -13,9 +13,10 @@ from .data import list_dataset_names
|
|
|
13
13
|
from .data import open_dataset
|
|
14
14
|
|
|
15
15
|
__all__ = [
|
|
16
|
-
"
|
|
17
|
-
"MissingDateError",
|
|
16
|
+
"__version__",
|
|
18
17
|
"add_dataset_path",
|
|
19
18
|
"add_named_dataset",
|
|
20
19
|
"list_dataset_names",
|
|
20
|
+
"MissingDateError",
|
|
21
|
+
"open_dataset",
|
|
21
22
|
]
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import logging
|
|
9
9
|
import os
|
|
10
|
+
import shutil
|
|
10
11
|
import sys
|
|
11
12
|
from concurrent.futures import ThreadPoolExecutor
|
|
12
13
|
from concurrent.futures import as_completed
|
|
@@ -26,54 +27,61 @@ except AttributeError:
|
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
class S3Downloader:
|
|
29
|
-
def __init__(self, source, target, transfers, overwrite, resume,
|
|
30
|
+
def __init__(self, source, target, transfers, overwrite, resume, verbosity, **kwargs):
|
|
30
31
|
self.source = source
|
|
31
32
|
self.target = target
|
|
32
33
|
self.transfers = transfers
|
|
33
34
|
self.overwrite = overwrite
|
|
34
35
|
self.resume = resume
|
|
35
|
-
self.
|
|
36
|
+
self.verbosity = verbosity
|
|
36
37
|
|
|
37
38
|
def run(self):
|
|
39
|
+
if self.target == ".":
|
|
40
|
+
self.target = os.path.basename(self.source)
|
|
41
|
+
|
|
42
|
+
if self.overwrite and os.path.exists(self.target):
|
|
43
|
+
LOG.info(f"Deleting {self.target}")
|
|
44
|
+
shutil.rmtree(self.target)
|
|
45
|
+
|
|
38
46
|
download(
|
|
39
47
|
self.source + "/" if not self.source.endswith("/") else self.source,
|
|
40
48
|
self.target,
|
|
41
49
|
overwrite=self.overwrite,
|
|
42
|
-
|
|
50
|
+
resume=self.resume,
|
|
51
|
+
verbosity=self.verbosity,
|
|
43
52
|
threads=self.transfers,
|
|
44
|
-
show_progress=self.progress,
|
|
45
53
|
)
|
|
46
54
|
|
|
47
55
|
|
|
48
56
|
class S3Uploader:
|
|
49
|
-
def __init__(self, source, target, transfers, overwrite, resume,
|
|
57
|
+
def __init__(self, source, target, transfers, overwrite, resume, verbosity, **kwargs):
|
|
50
58
|
self.source = source
|
|
51
59
|
self.target = target
|
|
52
60
|
self.transfers = transfers
|
|
53
61
|
self.overwrite = overwrite
|
|
54
62
|
self.resume = resume
|
|
55
|
-
self.
|
|
63
|
+
self.verbosity = verbosity
|
|
56
64
|
|
|
57
65
|
def run(self):
|
|
58
66
|
upload(
|
|
59
67
|
self.source,
|
|
60
68
|
self.target,
|
|
61
69
|
overwrite=self.overwrite,
|
|
62
|
-
|
|
70
|
+
resume=self.resume,
|
|
71
|
+
verbosity=self.verbosity,
|
|
63
72
|
threads=self.transfers,
|
|
64
|
-
show_progress=self.progress,
|
|
65
73
|
)
|
|
66
74
|
|
|
67
75
|
|
|
68
76
|
class DefaultCopier:
|
|
69
|
-
def __init__(self, source, target, transfers, block_size, overwrite, resume,
|
|
77
|
+
def __init__(self, source, target, transfers, block_size, overwrite, resume, verbosity, nested, rechunk, **kwargs):
|
|
70
78
|
self.source = source
|
|
71
79
|
self.target = target
|
|
72
80
|
self.transfers = transfers
|
|
73
81
|
self.block_size = block_size
|
|
74
82
|
self.overwrite = overwrite
|
|
75
83
|
self.resume = resume
|
|
76
|
-
self.
|
|
84
|
+
self.verbosity = verbosity
|
|
77
85
|
self.nested = nested
|
|
78
86
|
self.rechunk = rechunk
|
|
79
87
|
|
|
@@ -86,7 +94,7 @@ class DefaultCopier:
|
|
|
86
94
|
return zarr.storage.NestedDirectoryStore(path)
|
|
87
95
|
return path
|
|
88
96
|
|
|
89
|
-
def copy_chunk(self, n, m, source, target, _copy,
|
|
97
|
+
def copy_chunk(self, n, m, source, target, _copy, verbosity):
|
|
90
98
|
if _copy[n:m].all():
|
|
91
99
|
LOG.info(f"Skipping {n} to {m}")
|
|
92
100
|
return None
|
|
@@ -106,7 +114,7 @@ class DefaultCopier:
|
|
|
106
114
|
range(n, m),
|
|
107
115
|
desc=f"Copying {n} to {m}",
|
|
108
116
|
leave=False,
|
|
109
|
-
disable=not isatty and not
|
|
117
|
+
disable=not isatty and not verbosity,
|
|
110
118
|
):
|
|
111
119
|
target[i] = source[i]
|
|
112
120
|
|
|
@@ -131,7 +139,7 @@ class DefaultCopier:
|
|
|
131
139
|
# raise NotImplementedError("Rechunking with multiple transfers is not implemented")
|
|
132
140
|
return chunks
|
|
133
141
|
|
|
134
|
-
def copy_data(self, source, target, _copy,
|
|
142
|
+
def copy_data(self, source, target, _copy, verbosity):
|
|
135
143
|
LOG.info("Copying data")
|
|
136
144
|
source_data = source["data"]
|
|
137
145
|
|
|
@@ -145,6 +153,7 @@ class DefaultCopier:
|
|
|
145
153
|
shape=source_data.shape,
|
|
146
154
|
chunks=self.data_chunks,
|
|
147
155
|
dtype=source_data.dtype,
|
|
156
|
+
fill_value=source_data.fill_value,
|
|
148
157
|
)
|
|
149
158
|
)
|
|
150
159
|
|
|
@@ -160,7 +169,7 @@ class DefaultCopier:
|
|
|
160
169
|
source_data,
|
|
161
170
|
target_data,
|
|
162
171
|
_copy,
|
|
163
|
-
|
|
172
|
+
verbosity,
|
|
164
173
|
)
|
|
165
174
|
)
|
|
166
175
|
n += self.block_size
|
|
@@ -175,7 +184,7 @@ class DefaultCopier:
|
|
|
175
184
|
|
|
176
185
|
LOG.info("Copied data")
|
|
177
186
|
|
|
178
|
-
def copy_array(self, name, source, target, _copy,
|
|
187
|
+
def copy_array(self, name, source, target, _copy, verbosity):
|
|
179
188
|
for k, v in source.attrs.items():
|
|
180
189
|
target.attrs[k] = v
|
|
181
190
|
|
|
@@ -183,14 +192,14 @@ class DefaultCopier:
|
|
|
183
192
|
return
|
|
184
193
|
|
|
185
194
|
if name == "data":
|
|
186
|
-
self.copy_data(source, target, _copy,
|
|
195
|
+
self.copy_data(source, target, _copy, verbosity)
|
|
187
196
|
return
|
|
188
197
|
|
|
189
198
|
LOG.info(f"Copying {name}")
|
|
190
199
|
target[name] = source[name]
|
|
191
200
|
LOG.info(f"Copied {name}")
|
|
192
201
|
|
|
193
|
-
def copy_group(self, source, target, _copy,
|
|
202
|
+
def copy_group(self, source, target, _copy, verbosity):
|
|
194
203
|
import zarr
|
|
195
204
|
|
|
196
205
|
for k, v in source.attrs.items():
|
|
@@ -203,7 +212,7 @@ class DefaultCopier:
|
|
|
203
212
|
source[name],
|
|
204
213
|
group,
|
|
205
214
|
_copy,
|
|
206
|
-
|
|
215
|
+
verbosity,
|
|
207
216
|
)
|
|
208
217
|
else:
|
|
209
218
|
self.copy_array(
|
|
@@ -211,10 +220,10 @@ class DefaultCopier:
|
|
|
211
220
|
source,
|
|
212
221
|
target,
|
|
213
222
|
_copy,
|
|
214
|
-
|
|
223
|
+
verbosity,
|
|
215
224
|
)
|
|
216
225
|
|
|
217
|
-
def copy(self, source, target,
|
|
226
|
+
def copy(self, source, target, verbosity):
|
|
218
227
|
import zarr
|
|
219
228
|
|
|
220
229
|
if "_copy" not in target:
|
|
@@ -225,7 +234,7 @@ class DefaultCopier:
|
|
|
225
234
|
_copy = target["_copy"]
|
|
226
235
|
_copy_np = _copy[:]
|
|
227
236
|
|
|
228
|
-
self.copy_group(source, target, _copy_np,
|
|
237
|
+
self.copy_group(source, target, _copy_np, verbosity)
|
|
229
238
|
del target["_copy"]
|
|
230
239
|
|
|
231
240
|
def run(self):
|
|
@@ -284,7 +293,7 @@ class DefaultCopier:
|
|
|
284
293
|
assert target is not None, target
|
|
285
294
|
|
|
286
295
|
source = zarr.open(self._store(self.source), mode="r")
|
|
287
|
-
self.copy(source, target, self.
|
|
296
|
+
self.copy(source, target, self.verbosity)
|
|
288
297
|
|
|
289
298
|
|
|
290
299
|
class CopyMixin:
|
|
@@ -303,7 +312,10 @@ class CopyMixin:
|
|
|
303
312
|
)
|
|
304
313
|
command_parser.add_argument("--transfers", type=int, default=8, help="Number of parallel transfers.")
|
|
305
314
|
command_parser.add_argument(
|
|
306
|
-
"--
|
|
315
|
+
"--verbosity",
|
|
316
|
+
type=int,
|
|
317
|
+
help="Verbosity level. 0 is silent, 1 is normal, 2 is verbose.",
|
|
318
|
+
default=1,
|
|
307
319
|
)
|
|
308
320
|
command_parser.add_argument("--nested", action="store_true", help="Use ZARR's nested directpry backend.")
|
|
309
321
|
command_parser.add_argument(
|
|
@@ -97,13 +97,14 @@ class Creator:
|
|
|
97
97
|
|
|
98
98
|
apply_patch(self.path, **kwargs)
|
|
99
99
|
|
|
100
|
-
def init_additions(self, delta=[1, 3, 6, 12, 24]):
|
|
100
|
+
def init_additions(self, delta=[1, 3, 6, 12, 24], statistics=True):
|
|
101
101
|
from .loaders import StatisticsAddition
|
|
102
102
|
from .loaders import TendenciesStatisticsAddition
|
|
103
103
|
from .loaders import TendenciesStatisticsDeltaNotMultipleOfFrequency
|
|
104
104
|
|
|
105
|
-
|
|
106
|
-
|
|
105
|
+
if statistics:
|
|
106
|
+
a = StatisticsAddition.from_dataset(path=self.path, print=self.print)
|
|
107
|
+
a.initialise()
|
|
107
108
|
|
|
108
109
|
for d in delta:
|
|
109
110
|
try:
|
|
@@ -112,13 +113,14 @@ class Creator:
|
|
|
112
113
|
except TendenciesStatisticsDeltaNotMultipleOfFrequency:
|
|
113
114
|
self.print(f"Skipping delta={d} as it is not a multiple of the frequency.")
|
|
114
115
|
|
|
115
|
-
def run_additions(self, parts=None, delta=[1, 3, 6, 12, 24]):
|
|
116
|
+
def run_additions(self, parts=None, delta=[1, 3, 6, 12, 24], statistics=True):
|
|
116
117
|
from .loaders import StatisticsAddition
|
|
117
118
|
from .loaders import TendenciesStatisticsAddition
|
|
118
119
|
from .loaders import TendenciesStatisticsDeltaNotMultipleOfFrequency
|
|
119
120
|
|
|
120
|
-
|
|
121
|
-
|
|
121
|
+
if statistics:
|
|
122
|
+
a = StatisticsAddition.from_dataset(path=self.path, print=self.print)
|
|
123
|
+
a.run(parts)
|
|
122
124
|
|
|
123
125
|
for d in delta:
|
|
124
126
|
try:
|
|
@@ -127,13 +129,14 @@ class Creator:
|
|
|
127
129
|
except TendenciesStatisticsDeltaNotMultipleOfFrequency:
|
|
128
130
|
self.print(f"Skipping delta={d} as it is not a multiple of the frequency.")
|
|
129
131
|
|
|
130
|
-
def finalise_additions(self, delta=[1, 3, 6, 12, 24]):
|
|
132
|
+
def finalise_additions(self, delta=[1, 3, 6, 12, 24], statistics=True):
|
|
131
133
|
from .loaders import StatisticsAddition
|
|
132
134
|
from .loaders import TendenciesStatisticsAddition
|
|
133
135
|
from .loaders import TendenciesStatisticsDeltaNotMultipleOfFrequency
|
|
134
136
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
+
if statistics:
|
|
138
|
+
a = StatisticsAddition.from_dataset(path=self.path, print=self.print)
|
|
139
|
+
a.finalise()
|
|
137
140
|
|
|
138
141
|
for d in delta:
|
|
139
142
|
try:
|
|
@@ -19,6 +19,8 @@ from climetlab.utils.availability import Availability
|
|
|
19
19
|
|
|
20
20
|
from anemoi.datasets.create.utils import to_datetime_list
|
|
21
21
|
|
|
22
|
+
from .mars import use_grib_paramid
|
|
23
|
+
|
|
22
24
|
LOG = logging.getLogger(__name__)
|
|
23
25
|
|
|
24
26
|
|
|
@@ -85,6 +87,7 @@ class Accumulation:
|
|
|
85
87
|
stepType="accum",
|
|
86
88
|
startStep=self.startStep,
|
|
87
89
|
endStep=self.endStep,
|
|
90
|
+
check_nans=True,
|
|
88
91
|
)
|
|
89
92
|
self.values = None
|
|
90
93
|
self.done = True
|
|
@@ -230,6 +233,7 @@ def identity(x):
|
|
|
230
233
|
|
|
231
234
|
|
|
232
235
|
def compute_accumulations(
|
|
236
|
+
context,
|
|
233
237
|
dates,
|
|
234
238
|
request,
|
|
235
239
|
user_accumulation_period=6,
|
|
@@ -306,7 +310,10 @@ def compute_accumulations(
|
|
|
306
310
|
ds = cml.load_source("empty")
|
|
307
311
|
for r in compressed.iterate():
|
|
308
312
|
request.update(r)
|
|
313
|
+
if context.use_grib_paramid and "param" in request:
|
|
314
|
+
request = use_grib_paramid(request)
|
|
309
315
|
print("🌧️", request)
|
|
316
|
+
|
|
310
317
|
ds = ds + cml.load_source("mars", **request)
|
|
311
318
|
|
|
312
319
|
accumulations = {}
|
|
@@ -395,7 +402,7 @@ def accumulations(context, dates, **request):
|
|
|
395
402
|
class_ = request.get("class", "od")
|
|
396
403
|
stream = request.get("stream", "oper")
|
|
397
404
|
|
|
398
|
-
user_accumulation_period = request.
|
|
405
|
+
user_accumulation_period = request.pop("accumulation_period", 6)
|
|
399
406
|
|
|
400
407
|
KWARGS = {
|
|
401
408
|
("od", "oper"): dict(patch=scda),
|
|
@@ -409,6 +416,7 @@ def accumulations(context, dates, **request):
|
|
|
409
416
|
context.trace("🌧️", f"accumulations {request} {user_accumulation_period} {kwargs}")
|
|
410
417
|
|
|
411
418
|
return compute_accumulations(
|
|
419
|
+
context,
|
|
412
420
|
dates,
|
|
413
421
|
request,
|
|
414
422
|
user_accumulation_period=user_accumulation_period,
|
{anemoi_datasets-0.3.7 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/mars.py
RENAMED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
import datetime
|
|
10
10
|
from copy import deepcopy
|
|
11
11
|
|
|
12
|
+
from anemoi.utils.humanize import did_you_mean
|
|
12
13
|
from climetlab import load_source
|
|
13
14
|
from climetlab.utils.availability import Availability
|
|
14
15
|
|
|
@@ -102,6 +103,74 @@ def use_grib_paramid(r):
|
|
|
102
103
|
return r
|
|
103
104
|
|
|
104
105
|
|
|
106
|
+
MARS_KEYS = [
|
|
107
|
+
"accuracy",
|
|
108
|
+
"activity",
|
|
109
|
+
"anoffset",
|
|
110
|
+
"area",
|
|
111
|
+
"bitmap",
|
|
112
|
+
"channel",
|
|
113
|
+
"class",
|
|
114
|
+
"database",
|
|
115
|
+
"dataset",
|
|
116
|
+
"date",
|
|
117
|
+
"diagnostic",
|
|
118
|
+
"direction",
|
|
119
|
+
"domain",
|
|
120
|
+
"expect",
|
|
121
|
+
"experiment",
|
|
122
|
+
"expver",
|
|
123
|
+
"fcmonth",
|
|
124
|
+
"fcperiod",
|
|
125
|
+
"fieldset",
|
|
126
|
+
"filter",
|
|
127
|
+
"format",
|
|
128
|
+
"frame",
|
|
129
|
+
"frequency",
|
|
130
|
+
"gaussian",
|
|
131
|
+
"generation",
|
|
132
|
+
"grid",
|
|
133
|
+
"hdate",
|
|
134
|
+
"ident",
|
|
135
|
+
"instrument",
|
|
136
|
+
"interpolation",
|
|
137
|
+
"intgrid",
|
|
138
|
+
"iteration",
|
|
139
|
+
"level",
|
|
140
|
+
"levelist",
|
|
141
|
+
"levtype",
|
|
142
|
+
"method",
|
|
143
|
+
"model",
|
|
144
|
+
"month",
|
|
145
|
+
"number",
|
|
146
|
+
"obsgroup",
|
|
147
|
+
"obstype",
|
|
148
|
+
"offsetdate",
|
|
149
|
+
"offsettime",
|
|
150
|
+
"optimise",
|
|
151
|
+
"origin",
|
|
152
|
+
"packing",
|
|
153
|
+
"padding",
|
|
154
|
+
"param",
|
|
155
|
+
"quantile",
|
|
156
|
+
"realization",
|
|
157
|
+
"reference",
|
|
158
|
+
"reportype",
|
|
159
|
+
"repres",
|
|
160
|
+
"resol",
|
|
161
|
+
"resolution",
|
|
162
|
+
"rotation",
|
|
163
|
+
"step",
|
|
164
|
+
"stream",
|
|
165
|
+
"system",
|
|
166
|
+
"target",
|
|
167
|
+
"time",
|
|
168
|
+
"truncation",
|
|
169
|
+
"type",
|
|
170
|
+
"year",
|
|
171
|
+
]
|
|
172
|
+
|
|
173
|
+
|
|
105
174
|
def mars(context, dates, *requests, date_key="date", **kwargs):
|
|
106
175
|
if not requests:
|
|
107
176
|
requests = [kwargs]
|
|
@@ -117,6 +186,11 @@ def mars(context, dates, *requests, date_key="date", **kwargs):
|
|
|
117
186
|
if DEBUG:
|
|
118
187
|
context.trace("✅", f"load_source(mars, {r}")
|
|
119
188
|
|
|
189
|
+
for k, v in r.items():
|
|
190
|
+
if k not in MARS_KEYS:
|
|
191
|
+
raise ValueError(
|
|
192
|
+
f"⚠️ Unknown key {k}={v} in MARS request. Did you mean '{did_you_mean(k, MARS_KEYS)}' ?"
|
|
193
|
+
)
|
|
120
194
|
ds = ds + load_source("mars", **r)
|
|
121
195
|
return ds
|
|
122
196
|
|