anemoi-datasets 0.3.6__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.6 → anemoi_datasets-0.3.8}/.pre-commit-config.yaml +1 -1
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/PKG-INFO +2 -2
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/conf.py +8 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/index.rst +2 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/configuration.rst +2 -1
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/pyproject.toml +1 -1
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/__init__.py +5 -2
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/_version.py +2 -2
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/commands/copy.py +87 -29
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/__init__.py +12 -9
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/accumulations.py +9 -1
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/mars.py +74 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/loaders.py +96 -86
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/statistics/__init__.py +6 -139
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/__init__.py +7 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/dataset.py +3 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/forwards.py +7 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/masked.py +6 -2
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/misc.py +3 -1
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/select.py +8 -4
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/statistics.py +4 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/stores.py +10 -1
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi_datasets.egg-info/PKG-INFO +2 -2
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi_datasets.egg-info/requires.txt +1 -1
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/.github/workflows/python-publish.yml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/.gitignore +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/.readthedocs.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/.vscode/spellright.dict +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/LICENSE +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/README.md +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/Makefile +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/_static/logo.png +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/_static/style.css +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/_templates/.gitkeep +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/apply-fmt.sh +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/filters/empty.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/filters/noop.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/filters/rename.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/filters/rotate_winds.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/filters/select.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/filters/unrotate_winds.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/filters.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/handling-missing-dates.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/handling-missing-values.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/introduction.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/naming-variables.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/operations.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/accumulations.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/accumulations1.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/accumulations2.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/forcings.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/forcings.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/grib.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/hindcasts.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/mars.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/mars1.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/mars2.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/netcdf.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/netcdf.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/opendap.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/opendap.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/recentre.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/yaml/grib1.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/yaml/grib2.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/yaml/grib3.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/yaml/grib4.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/yaml/hindcasts.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources/yaml/recentre.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/sources.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/statistics.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/syntax.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/syntax.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/yaml/Makefile +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/yaml/building1.txt +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/yaml/building1.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/yaml/building2.txt +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/yaml/building2.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/yaml/building3.txt +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/yaml/building3.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/yaml/concat.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/yaml/hindcasts.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/yaml/input.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/yaml/missing_dates.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/yaml/nan.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/building/yaml/pipe.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/check-index.sh +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/cli/compare.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/cli/copy.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/cli/create.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/cli/inspect.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/cli/introduction.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/cli/scan.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/images.pptx +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/installing.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/overview.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/overview_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/requirements.txt +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/schemas/matrix.excalidraw +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/schemas/matrix.png +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/schemas/overview.excalidraw +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/schemas/overview.png +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/schemas/recipe.excalidraw +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/schemas/recipe.png +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/test.ipynb +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/area1_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/area2_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/chain_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/combine_example.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/concat1.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/cutout_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/drop_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/end_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/ensembles1_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/frequency_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/grids1_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/join1.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/matching0_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/matching1_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/matching2_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/matching3_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/matching4_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/misc1.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/misc2.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/missing_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/open_cloud.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/open_combine1_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/open_combine2_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/open_complex.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/open_dict_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/open_first_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/open_list_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/open_name.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/open_other.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/open_path.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/open_yaml_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/rename_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/reorder1_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/reorder2_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/select1_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/select2_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/shuffle_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/some_attributes_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/start_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/statistics_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/subset_example.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/thinning_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/zip1_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/code/zip2_.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/combining.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/configuration.toml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/grids.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/images/area-1.png +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/images/concat.png +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/images/cutout-1.png +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/images/cutout-2.png +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/images/cutout-3.png +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/images/cutout-4.png +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/images/join.png +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/images/overlay.png +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/images/thinning-after.png +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/images/thinning-before.png +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/introduction.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/matching.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/methods.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/miscellaneous.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/opening.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/other.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/selecting.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/statistics.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/docs/using/subsetting.rst +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/setup.cfg +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/__main__.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/commands/__init__.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/commands/compare.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/commands/create.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/commands/inspect.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/commands/scan.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/compute/__init__.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/compute/recentre.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/check.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/chunks.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/config.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/__init__.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/filters/__init__.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/filters/empty.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/filters/noop.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/filters/rename.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/filters/rotate_winds.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/filters/unrotate_winds.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/__init__.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/constants.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/empty.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/forcings.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/grib.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/hindcasts.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/netcdf.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/opendap.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/recentre.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/source.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/functions/sources/tendencies.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/input.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/patch.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/persistent.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/size.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/statistics/summary.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/template.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/utils.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/writer.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/create/zarr.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/concat.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/debug.css +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/debug.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/ensemble.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/grids.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/indexing.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/join.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/subset.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/data/unchecked.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/dates/__init__.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/dates/groups.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/grids.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi/datasets/utils/__init__.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi_datasets.egg-info/SOURCES.txt +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi_datasets.egg-info/dependency_links.txt +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi_datasets.egg-info/entry_points.txt +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/src/anemoi_datasets.egg-info/top_level.txt +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tests/create/concat.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tests/create/data_sources.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tests/create/join.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tests/create/missing.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tests/create/nan.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tests/create/pipe.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tests/create/recentre.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tests/create/test_create.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tests/create-perturbations-full.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tests/create-shift.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tests/test_chunks.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tests/test_data.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tests/test_dates.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tests/test_indexing.py +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tools/.gitignore +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tools/examples/Makefile +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tools/examples/an-oper-2023-2023-2p5-6h-v1.yaml +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tools/grids/Makefile +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tools/grids/grids.ipynb +0 -0
- {anemoi_datasets-0.3.6 → anemoi_datasets-0.3.8}/tools/grids/grids1.yaml +0 -0
- {anemoi_datasets-0.3.6 → 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
|
|
@@ -223,7 +223,7 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
|
223
223
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
224
224
|
Requires-Python: >=3.9
|
|
225
225
|
License-File: LICENSE
|
|
226
|
-
Requires-Dist: anemoi-utils[provenance]>=0.3
|
|
226
|
+
Requires-Dist: anemoi-utils[provenance]>=0.3.4
|
|
227
227
|
Requires-Dist: numpy
|
|
228
228
|
Requires-Dist: pyyaml
|
|
229
229
|
Requires-Dist: semantic-version
|
|
@@ -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
|
|
@@ -9,11 +9,14 @@ from ._version import __version__
|
|
|
9
9
|
from .data import MissingDateError
|
|
10
10
|
from .data import add_dataset_path
|
|
11
11
|
from .data import add_named_dataset
|
|
12
|
+
from .data import list_dataset_names
|
|
12
13
|
from .data import open_dataset
|
|
13
14
|
|
|
14
15
|
__all__ = [
|
|
15
|
-
"
|
|
16
|
-
"MissingDateError",
|
|
16
|
+
"__version__",
|
|
17
17
|
"add_dataset_path",
|
|
18
18
|
"add_named_dataset",
|
|
19
|
+
"list_dataset_names",
|
|
20
|
+
"MissingDateError",
|
|
21
|
+
"open_dataset",
|
|
19
22
|
]
|
|
@@ -7,11 +7,14 @@
|
|
|
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
|
|
13
14
|
|
|
14
15
|
import tqdm
|
|
16
|
+
from anemoi.utils.s3 import download
|
|
17
|
+
from anemoi.utils.s3 import upload
|
|
15
18
|
|
|
16
19
|
from . import Command
|
|
17
20
|
|
|
@@ -22,34 +25,63 @@ try:
|
|
|
22
25
|
except AttributeError:
|
|
23
26
|
isatty = False
|
|
24
27
|
|
|
25
|
-
"""
|
|
26
28
|
|
|
27
|
-
|
|
29
|
+
class S3Downloader:
|
|
30
|
+
def __init__(self, source, target, transfers, overwrite, resume, verbosity, **kwargs):
|
|
31
|
+
self.source = source
|
|
32
|
+
self.target = target
|
|
33
|
+
self.transfers = transfers
|
|
34
|
+
self.overwrite = overwrite
|
|
35
|
+
self.resume = resume
|
|
36
|
+
self.verbosity = verbosity
|
|
28
37
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
+
|
|
46
|
+
download(
|
|
47
|
+
self.source + "/" if not self.source.endswith("/") else self.source,
|
|
48
|
+
self.target,
|
|
49
|
+
overwrite=self.overwrite,
|
|
50
|
+
resume=self.resume,
|
|
51
|
+
verbosity=self.verbosity,
|
|
52
|
+
threads=self.transfers,
|
|
53
|
+
)
|
|
33
54
|
|
|
34
|
-
Then:
|
|
35
55
|
|
|
36
|
-
|
|
37
|
-
|
|
56
|
+
class S3Uploader:
|
|
57
|
+
def __init__(self, source, target, transfers, overwrite, resume, verbosity, **kwargs):
|
|
58
|
+
self.source = source
|
|
59
|
+
self.target = target
|
|
60
|
+
self.transfers = transfers
|
|
61
|
+
self.overwrite = overwrite
|
|
62
|
+
self.resume = resume
|
|
63
|
+
self.verbosity = verbosity
|
|
38
64
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
65
|
+
def run(self):
|
|
66
|
+
upload(
|
|
67
|
+
self.source,
|
|
68
|
+
self.target,
|
|
69
|
+
overwrite=self.overwrite,
|
|
70
|
+
resume=self.resume,
|
|
71
|
+
verbosity=self.verbosity,
|
|
72
|
+
threads=self.transfers,
|
|
73
|
+
)
|
|
42
74
|
|
|
43
75
|
|
|
44
|
-
class
|
|
45
|
-
def __init__(self, source, target, transfers, block_size, overwrite, resume,
|
|
76
|
+
class DefaultCopier:
|
|
77
|
+
def __init__(self, source, target, transfers, block_size, overwrite, resume, verbosity, nested, rechunk, **kwargs):
|
|
46
78
|
self.source = source
|
|
47
79
|
self.target = target
|
|
48
80
|
self.transfers = transfers
|
|
49
81
|
self.block_size = block_size
|
|
50
82
|
self.overwrite = overwrite
|
|
51
83
|
self.resume = resume
|
|
52
|
-
self.
|
|
84
|
+
self.verbosity = verbosity
|
|
53
85
|
self.nested = nested
|
|
54
86
|
self.rechunk = rechunk
|
|
55
87
|
|
|
@@ -62,7 +94,7 @@ class Copier:
|
|
|
62
94
|
return zarr.storage.NestedDirectoryStore(path)
|
|
63
95
|
return path
|
|
64
96
|
|
|
65
|
-
def copy_chunk(self, n, m, source, target, _copy,
|
|
97
|
+
def copy_chunk(self, n, m, source, target, _copy, verbosity):
|
|
66
98
|
if _copy[n:m].all():
|
|
67
99
|
LOG.info(f"Skipping {n} to {m}")
|
|
68
100
|
return None
|
|
@@ -82,7 +114,7 @@ class Copier:
|
|
|
82
114
|
range(n, m),
|
|
83
115
|
desc=f"Copying {n} to {m}",
|
|
84
116
|
leave=False,
|
|
85
|
-
disable=not isatty and not
|
|
117
|
+
disable=not isatty and not verbosity,
|
|
86
118
|
):
|
|
87
119
|
target[i] = source[i]
|
|
88
120
|
|
|
@@ -107,7 +139,7 @@ class Copier:
|
|
|
107
139
|
# raise NotImplementedError("Rechunking with multiple transfers is not implemented")
|
|
108
140
|
return chunks
|
|
109
141
|
|
|
110
|
-
def copy_data(self, source, target, _copy,
|
|
142
|
+
def copy_data(self, source, target, _copy, verbosity):
|
|
111
143
|
LOG.info("Copying data")
|
|
112
144
|
source_data = source["data"]
|
|
113
145
|
|
|
@@ -121,6 +153,7 @@ class Copier:
|
|
|
121
153
|
shape=source_data.shape,
|
|
122
154
|
chunks=self.data_chunks,
|
|
123
155
|
dtype=source_data.dtype,
|
|
156
|
+
fill_value=source_data.fill_value,
|
|
124
157
|
)
|
|
125
158
|
)
|
|
126
159
|
|
|
@@ -136,7 +169,7 @@ class Copier:
|
|
|
136
169
|
source_data,
|
|
137
170
|
target_data,
|
|
138
171
|
_copy,
|
|
139
|
-
|
|
172
|
+
verbosity,
|
|
140
173
|
)
|
|
141
174
|
)
|
|
142
175
|
n += self.block_size
|
|
@@ -151,7 +184,7 @@ class Copier:
|
|
|
151
184
|
|
|
152
185
|
LOG.info("Copied data")
|
|
153
186
|
|
|
154
|
-
def copy_array(self, name, source, target, _copy,
|
|
187
|
+
def copy_array(self, name, source, target, _copy, verbosity):
|
|
155
188
|
for k, v in source.attrs.items():
|
|
156
189
|
target.attrs[k] = v
|
|
157
190
|
|
|
@@ -159,14 +192,14 @@ class Copier:
|
|
|
159
192
|
return
|
|
160
193
|
|
|
161
194
|
if name == "data":
|
|
162
|
-
self.copy_data(source, target, _copy,
|
|
195
|
+
self.copy_data(source, target, _copy, verbosity)
|
|
163
196
|
return
|
|
164
197
|
|
|
165
198
|
LOG.info(f"Copying {name}")
|
|
166
199
|
target[name] = source[name]
|
|
167
200
|
LOG.info(f"Copied {name}")
|
|
168
201
|
|
|
169
|
-
def copy_group(self, source, target, _copy,
|
|
202
|
+
def copy_group(self, source, target, _copy, verbosity):
|
|
170
203
|
import zarr
|
|
171
204
|
|
|
172
205
|
for k, v in source.attrs.items():
|
|
@@ -179,7 +212,7 @@ class Copier:
|
|
|
179
212
|
source[name],
|
|
180
213
|
group,
|
|
181
214
|
_copy,
|
|
182
|
-
|
|
215
|
+
verbosity,
|
|
183
216
|
)
|
|
184
217
|
else:
|
|
185
218
|
self.copy_array(
|
|
@@ -187,10 +220,10 @@ class Copier:
|
|
|
187
220
|
source,
|
|
188
221
|
target,
|
|
189
222
|
_copy,
|
|
190
|
-
|
|
223
|
+
verbosity,
|
|
191
224
|
)
|
|
192
225
|
|
|
193
|
-
def copy(self, source, target,
|
|
226
|
+
def copy(self, source, target, verbosity):
|
|
194
227
|
import zarr
|
|
195
228
|
|
|
196
229
|
if "_copy" not in target:
|
|
@@ -201,7 +234,7 @@ class Copier:
|
|
|
201
234
|
_copy = target["_copy"]
|
|
202
235
|
_copy_np = _copy[:]
|
|
203
236
|
|
|
204
|
-
self.copy_group(source, target, _copy_np,
|
|
237
|
+
self.copy_group(source, target, _copy_np, verbosity)
|
|
205
238
|
del target["_copy"]
|
|
206
239
|
|
|
207
240
|
def run(self):
|
|
@@ -260,7 +293,7 @@ class Copier:
|
|
|
260
293
|
assert target is not None, target
|
|
261
294
|
|
|
262
295
|
source = zarr.open(self._store(self.source), mode="r")
|
|
263
|
-
self.copy(source, target, self.
|
|
296
|
+
self.copy(source, target, self.verbosity)
|
|
264
297
|
|
|
265
298
|
|
|
266
299
|
class CopyMixin:
|
|
@@ -279,7 +312,10 @@ class CopyMixin:
|
|
|
279
312
|
)
|
|
280
313
|
command_parser.add_argument("--transfers", type=int, default=8, help="Number of parallel transfers.")
|
|
281
314
|
command_parser.add_argument(
|
|
282
|
-
"--
|
|
315
|
+
"--verbosity",
|
|
316
|
+
type=int,
|
|
317
|
+
help="Verbosity level. 0 is silent, 1 is normal, 2 is verbose.",
|
|
318
|
+
default=1,
|
|
283
319
|
)
|
|
284
320
|
command_parser.add_argument("--nested", action="store_true", help="Use ZARR's nested directpry backend.")
|
|
285
321
|
command_parser.add_argument(
|
|
@@ -295,7 +331,29 @@ class CopyMixin:
|
|
|
295
331
|
command_parser.add_argument("target", help="Target location.")
|
|
296
332
|
|
|
297
333
|
def run(self, args):
|
|
298
|
-
|
|
334
|
+
if args.source == args.target:
|
|
335
|
+
raise ValueError("Source and target are the same.")
|
|
336
|
+
|
|
337
|
+
kwargs = vars(args)
|
|
338
|
+
|
|
339
|
+
if args.overwrite and args.resume:
|
|
340
|
+
raise ValueError("Cannot use --overwrite and --resume together.")
|
|
341
|
+
|
|
342
|
+
source_in_s3 = args.source.startswith("s3://")
|
|
343
|
+
target_in_s3 = args.target.startswith("s3://")
|
|
344
|
+
|
|
345
|
+
copier = None
|
|
346
|
+
|
|
347
|
+
if args.rechunk or (source_in_s3 and target_in_s3):
|
|
348
|
+
copier = DefaultCopier(**kwargs)
|
|
349
|
+
else:
|
|
350
|
+
if source_in_s3:
|
|
351
|
+
copier = S3Downloader(**kwargs)
|
|
352
|
+
|
|
353
|
+
if target_in_s3:
|
|
354
|
+
copier = S3Uploader(**kwargs)
|
|
355
|
+
|
|
356
|
+
copier.run()
|
|
299
357
|
|
|
300
358
|
|
|
301
359
|
class Copy(CopyMixin, Command):
|
|
@@ -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.6 → 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
|
|