anemoi-datasets 0.4.4__tar.gz → 0.4.5__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.
Files changed (312) hide show
  1. anemoi_datasets-0.4.5/.gitattributes +1 -0
  2. anemoi_datasets-0.4.5/.github/workflows/changelog-release-update.yml +34 -0
  3. anemoi_datasets-0.4.5/.github/workflows/python-publish.yml +22 -0
  4. anemoi_datasets-0.4.5/.github/workflows/python-pull-request.yml +23 -0
  5. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/.gitignore +5 -0
  6. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/.pre-commit-config.yaml +3 -3
  7. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/CHANGELOG.md +20 -0
  8. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/PKG-INFO +5 -5
  9. anemoi_datasets-0.4.5/docs/building/incremental.rst +120 -0
  10. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/images.pptx +0 -0
  11. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/index.rst +6 -0
  12. anemoi_datasets-0.4.5/docs/using/code/fill_missing_gaps_.py +1 -0
  13. anemoi_datasets-0.4.5/docs/using/code/frequency2_.py +1 -0
  14. anemoi_datasets-0.4.5/docs/using/code/iterating_missing_dates1_.py +4 -0
  15. anemoi_datasets-0.4.5/docs/using/code/iterating_missing_dates2_.py +9 -0
  16. anemoi_datasets-0.4.5/docs/using/code/iterating_missing_dates3_.py +2 -0
  17. anemoi_datasets-0.4.5/docs/using/code/missing_dates_.py +1 -0
  18. anemoi_datasets-0.4.5/docs/using/code/xy1_.py +5 -0
  19. anemoi_datasets-0.4.5/docs/using/code/xy2_.py +4 -0
  20. anemoi_datasets-0.4.5/docs/using/code/zip_xy_.py +9 -0
  21. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/combining.rst +28 -1
  22. anemoi_datasets-0.4.5/docs/using/images/cutout-5.png +0 -0
  23. anemoi_datasets-0.4.5/docs/using/images/cutout-6.png +0 -0
  24. anemoi_datasets-0.4.5/docs/using/images/skip-missing.png +0 -0
  25. anemoi_datasets-0.4.5/docs/using/missing.rst +78 -0
  26. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/other.rst +0 -16
  27. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/subsetting.rst +11 -1
  28. anemoi_datasets-0.4.5/docs/using/zip.rst +64 -0
  29. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/pyproject.toml +4 -4
  30. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/_version.py +2 -2
  31. anemoi_datasets-0.4.5/src/anemoi/datasets/commands/cleanup.py +44 -0
  32. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/commands/create.py +50 -20
  33. anemoi_datasets-0.4.5/src/anemoi/datasets/commands/finalise-additions.py +45 -0
  34. anemoi_datasets-0.4.5/src/anemoi/datasets/commands/finalise.py +39 -0
  35. anemoi_datasets-0.4.5/src/anemoi/datasets/commands/init-additions.py +45 -0
  36. anemoi_datasets-0.4.5/src/anemoi/datasets/commands/init.py +67 -0
  37. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/commands/inspect.py +1 -1
  38. anemoi_datasets-0.4.5/src/anemoi/datasets/commands/load-additions.py +47 -0
  39. anemoi_datasets-0.4.5/src/anemoi/datasets/commands/load.py +47 -0
  40. anemoi_datasets-0.4.5/src/anemoi/datasets/commands/patch.py +39 -0
  41. anemoi_datasets-0.4.5/src/anemoi/datasets/create/__init__.py +1017 -0
  42. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/check.py +5 -3
  43. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/config.py +53 -2
  44. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray/__init__.py +12 -2
  45. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray/coordinates.py +7 -0
  46. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray/field.py +1 -1
  47. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray/fieldlist.py +0 -2
  48. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray/flavour.py +21 -1
  49. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray/metadata.py +27 -29
  50. anemoi_datasets-0.4.5/src/anemoi/datasets/create/functions/sources/xarray/time.py +131 -0
  51. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray/variable.py +15 -38
  52. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/input.py +23 -22
  53. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/statistics/__init__.py +39 -23
  54. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/utils.py +3 -2
  55. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/__init__.py +1 -0
  56. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/concat.py +46 -2
  57. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/dataset.py +109 -34
  58. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/forwards.py +17 -8
  59. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/grids.py +17 -3
  60. anemoi_datasets-0.4.5/src/anemoi/datasets/data/interpolate.py +133 -0
  61. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/misc.py +56 -66
  62. anemoi_datasets-0.4.5/src/anemoi/datasets/data/missing.py +240 -0
  63. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/select.py +7 -1
  64. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/stores.py +3 -3
  65. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/subset.py +47 -5
  66. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/unchecked.py +20 -22
  67. anemoi_datasets-0.4.5/src/anemoi/datasets/data/xy.py +125 -0
  68. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/dates/__init__.py +13 -66
  69. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/dates/groups.py +2 -2
  70. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/grids.py +66 -48
  71. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi_datasets.egg-info/PKG-INFO +5 -5
  72. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi_datasets.egg-info/SOURCES.txt +32 -3
  73. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi_datasets.egg-info/requires.txt +4 -4
  74. anemoi_datasets-0.4.5/tests/create/run.sh +20 -0
  75. anemoi_datasets-0.4.5/tests/create/test_create.py +252 -0
  76. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tests/test_chunks.py +4 -1
  77. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tests/test_data.py +22 -5
  78. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tests/xarray/test_kerchunk.py +4 -1
  79. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tests/xarray/test_opendap.py +4 -1
  80. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tests/xarray/test_zarr.py +22 -3
  81. anemoi_datasets-0.4.5/tools/upload-sample-dataset.py +41 -0
  82. anemoi_datasets-0.4.4/.github/workflows/python-publish.yml +0 -74
  83. anemoi_datasets-0.4.4/docs/building/syntax.rst +0 -6
  84. anemoi_datasets-0.4.4/src/anemoi/datasets/create/__init__.py +0 -202
  85. anemoi_datasets-0.4.4/src/anemoi/datasets/create/functions/sources/xarray/time.py +0 -98
  86. anemoi_datasets-0.4.4/src/anemoi/datasets/create/loaders.py +0 -936
  87. anemoi_datasets-0.4.4/tests/create/test_create.py +0 -239
  88. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/.github/ci-config.yml +0 -0
  89. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/.github/workflows/changelog-pr-update.yml +0 -0
  90. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/.github/workflows/ci.yml +0 -0
  91. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/.github/workflows/label-public-pr.yml +0 -0
  92. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/.github/workflows/readthedocs-pr-update.yml +0 -0
  93. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/.readthedocs.yaml +0 -0
  94. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/.vscode/spellright.dict +0 -0
  95. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/LICENSE +0 -0
  96. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/README.md +0 -0
  97. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/Makefile +0 -0
  98. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/_static/logo.png +0 -0
  99. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/_static/style.css +0 -0
  100. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/_templates/.gitkeep +0 -0
  101. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/apply-fmt.sh +0 -0
  102. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/advanced-options.rst +0 -0
  103. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/filters/empty.rst +0 -0
  104. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/filters/noop.rst +0 -0
  105. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/filters/rename.rst +0 -0
  106. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/filters/rotate_winds.rst +0 -0
  107. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/filters/select.rst +0 -0
  108. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/filters/unrotate_winds.rst +0 -0
  109. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/filters.rst +0 -0
  110. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/handling-missing-dates.rst +0 -0
  111. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/handling-missing-values.rst +0 -0
  112. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/introduction.rst +0 -0
  113. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/naming-variables.rst +0 -0
  114. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/operations.rst +0 -0
  115. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/accumulations.rst +0 -0
  116. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/accumulations1.yaml +0 -0
  117. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/accumulations2.yaml +0 -0
  118. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/forcings.rst +0 -0
  119. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/forcings.yaml +0 -0
  120. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/grib.rst +0 -0
  121. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/hindcasts.rst +0 -0
  122. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/hindcasts.yaml +0 -0
  123. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/mars.rst +0 -0
  124. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/mars1.yaml +0 -0
  125. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/mars2.yaml +0 -0
  126. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/netcdf.rst +0 -0
  127. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/netcdf.yaml +0 -0
  128. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/opendap.rst +0 -0
  129. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/opendap.yaml +0 -0
  130. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/recentre.rst +0 -0
  131. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/xarray-kerchunk.py +0 -0
  132. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/xarray-kerchunk.rst +0 -0
  133. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/xarray-kerchunk.yaml +0 -0
  134. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/xarray-zarr.rst +0 -0
  135. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/xarray-zarr.yaml +0 -0
  136. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/yaml/grib1.yaml +0 -0
  137. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/yaml/grib2.yaml +0 -0
  138. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/yaml/grib3.yaml +0 -0
  139. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/yaml/grib4.yaml +0 -0
  140. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/yaml/hindcasts.yaml +0 -0
  141. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/yaml/recentre.yaml +0 -0
  142. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/zenodo.rst +0 -0
  143. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources/zenodo.yaml +0 -0
  144. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/sources.rst +0 -0
  145. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/statistics.rst +0 -0
  146. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/syntax.yaml +0 -0
  147. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/yaml/Makefile +0 -0
  148. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/yaml/building1.txt +0 -0
  149. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/yaml/building1.yaml +0 -0
  150. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/yaml/building2.txt +0 -0
  151. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/yaml/building2.yaml +0 -0
  152. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/yaml/building3.txt +0 -0
  153. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/yaml/building3.yaml +0 -0
  154. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/yaml/concat.yaml +0 -0
  155. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/yaml/hindcasts.yaml +0 -0
  156. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/yaml/input.yaml +0 -0
  157. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/yaml/missing_dates.yaml +0 -0
  158. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/yaml/nan.yaml +0 -0
  159. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/building/yaml/pipe.yaml +0 -0
  160. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/check-index.sh +0 -0
  161. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/cli/compare.rst +0 -0
  162. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/cli/copy.rst +0 -0
  163. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/cli/create.rst +0 -0
  164. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/cli/inspect.rst +0 -0
  165. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/cli/introduction.rst +0 -0
  166. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/cli/scan.rst +0 -0
  167. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/conf.py +0 -0
  168. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/installing.rst +0 -0
  169. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/overview.rst +0 -0
  170. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/overview_.py +0 -0
  171. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/schemas/matrix.excalidraw +0 -0
  172. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/schemas/matrix.png +0 -0
  173. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/schemas/overview.excalidraw +0 -0
  174. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/schemas/overview.png +0 -0
  175. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/schemas/recipe.excalidraw +0 -0
  176. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/schemas/recipe.png +0 -0
  177. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/area1_.py +0 -0
  178. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/area2_.py +0 -0
  179. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/chain_.py +0 -0
  180. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/combine_example.py +0 -0
  181. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/concat1.py +0 -0
  182. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/cutout_.py +0 -0
  183. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/drop_.py +0 -0
  184. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/end_.py +0 -0
  185. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/ensembles1_.py +0 -0
  186. /anemoi_datasets-0.4.4/docs/using/code/frequency_.py → /anemoi_datasets-0.4.5/docs/using/code/frequency1_.py +0 -0
  187. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/grids1_.py +0 -0
  188. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/join1.py +0 -0
  189. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/matching0_.py +0 -0
  190. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/matching1_.py +0 -0
  191. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/matching2_.py +0 -0
  192. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/matching3_.py +0 -0
  193. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/matching4_.py +0 -0
  194. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/misc1.py +0 -0
  195. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/misc2.py +0 -0
  196. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/missing_.py +0 -0
  197. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/open_cloud.py +0 -0
  198. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/open_combine1_.py +0 -0
  199. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/open_combine2_.py +0 -0
  200. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/open_complex.py +0 -0
  201. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/open_dict_.py +0 -0
  202. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/open_first_.py +0 -0
  203. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/open_list_.py +0 -0
  204. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/open_name.py +0 -0
  205. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/open_other.py +0 -0
  206. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/open_path.py +0 -0
  207. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/open_yaml_.py +0 -0
  208. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/rename_.py +0 -0
  209. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/reorder1_.py +0 -0
  210. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/reorder2_.py +0 -0
  211. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/select1_.py +0 -0
  212. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/select2_.py +0 -0
  213. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/shuffle_.py +0 -0
  214. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/some_attributes_.py +0 -0
  215. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/start_.py +0 -0
  216. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/statistics_.py +0 -0
  217. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/subset_example.py +0 -0
  218. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/thinning_.py +0 -0
  219. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/zip1_.py +0 -0
  220. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/code/zip2_.py +0 -0
  221. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/configuration.rst +0 -0
  222. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/configuration.toml +0 -0
  223. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/grids.rst +0 -0
  224. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/images/area-1.png +0 -0
  225. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/images/concat.png +0 -0
  226. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/images/cutout-1.png +0 -0
  227. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/images/cutout-2.png +0 -0
  228. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/images/cutout-3.png +0 -0
  229. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/images/cutout-4.png +0 -0
  230. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/images/join.png +0 -0
  231. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/images/overlay.png +0 -0
  232. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/images/thinning-after.png +0 -0
  233. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/images/thinning-before.png +0 -0
  234. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/introduction.rst +0 -0
  235. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/matching.rst +0 -0
  236. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/methods.rst +0 -0
  237. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/miscellaneous.rst +0 -0
  238. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/opening.rst +0 -0
  239. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/selecting.rst +0 -0
  240. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/docs/using/statistics.rst +0 -0
  241. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/setup.cfg +0 -0
  242. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/__init__.py +0 -0
  243. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/__main__.py +0 -0
  244. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/commands/__init__.py +0 -0
  245. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/commands/compare.py +0 -0
  246. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/commands/copy.py +0 -0
  247. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/commands/scan.py +0 -0
  248. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/compute/__init__.py +0 -0
  249. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/compute/recentre.py +0 -0
  250. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/chunks.py +0 -0
  251. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/__init__.py +0 -0
  252. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/filters/__init__.py +0 -0
  253. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/filters/empty.py +0 -0
  254. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/filters/noop.py +0 -0
  255. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/filters/rename.py +0 -0
  256. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/filters/rotate_winds.py +0 -0
  257. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/filters/unrotate_winds.py +0 -0
  258. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/__init__.py +0 -0
  259. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/accumulations.py +0 -0
  260. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/constants.py +0 -0
  261. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/empty.py +0 -0
  262. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/forcings.py +0 -0
  263. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/grib.py +0 -0
  264. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/hindcasts.py +0 -0
  265. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/mars.py +0 -0
  266. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/netcdf.py +0 -0
  267. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/opendap.py +0 -0
  268. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/recentre.py +0 -0
  269. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/source.py +0 -0
  270. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/tendencies.py +0 -0
  271. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray/grid.py +0 -0
  272. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray_kerchunk.py +0 -0
  273. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray_zarr.py +0 -0
  274. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/zenodo.py +0 -0
  275. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/patch.py +0 -0
  276. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/persistent.py +0 -0
  277. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/size.py +0 -0
  278. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/statistics/summary.py +0 -0
  279. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/template.py +0 -0
  280. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/trace.py +0 -0
  281. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/writer.py +0 -0
  282. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/zarr.py +0 -0
  283. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/debug.css +0 -0
  284. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/debug.py +0 -0
  285. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/ensemble.py +0 -0
  286. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/indexing.py +0 -0
  287. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/join.py +0 -0
  288. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/masked.py +0 -0
  289. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/statistics.py +0 -0
  290. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi/datasets/utils/__init__.py +0 -0
  291. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi_datasets.egg-info/dependency_links.txt +0 -0
  292. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi_datasets.egg-info/entry_points.txt +0 -0
  293. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/src/anemoi_datasets.egg-info/top_level.txt +0 -0
  294. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tests/create/concat.yaml +0 -0
  295. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tests/create/data_sources.yaml +0 -0
  296. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tests/create/join.yaml +0 -0
  297. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tests/create/missing.yaml +0 -0
  298. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tests/create/nan.yaml +0 -0
  299. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tests/create/pipe.yaml +0 -0
  300. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tests/create/recentre.yaml +0 -0
  301. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tests/create-perturbations-full.yaml +0 -0
  302. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tests/create-shift.yaml +0 -0
  303. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tests/test_dates.py +0 -0
  304. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tests/test_indexing.py +0 -0
  305. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tests/xarray/test_netcdf.py +0 -0
  306. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tools/.gitignore +0 -0
  307. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tools/examples/Makefile +0 -0
  308. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tools/examples/an-oper-2023-2023-2p5-6h-v1.yaml +0 -0
  309. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tools/grids/Makefile +0 -0
  310. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tools/grids/grids.ipynb +0 -0
  311. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tools/grids/grids1.yaml +0 -0
  312. {anemoi_datasets-0.4.4 → anemoi_datasets-0.4.5}/tools/grids/grids2.yaml +0 -0
@@ -0,0 +1 @@
1
+ CHANGELOG.md merge=union
@@ -0,0 +1,34 @@
1
+ # .github/workflows/update-changelog.yaml
2
+ name: "Update Changelog"
3
+
4
+ on:
5
+ release:
6
+ types: [released]
7
+
8
+ permissions:
9
+ pull-requests: write
10
+ contents: write
11
+
12
+ jobs:
13
+ update:
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - name: Checkout code
18
+ uses: actions/checkout@v4
19
+ with:
20
+ ref: ${{ github.event.release.target_commitish }}
21
+
22
+ - name: Update Changelog
23
+ uses: stefanzweifel/changelog-updater-action@v1
24
+ with:
25
+ latest-version: ${{ github.event.release.tag_name }}
26
+ heading-text: ${{ github.event.release.name }}
27
+
28
+ - name: Create Pull Request
29
+ uses: peter-evans/create-pull-request@v6
30
+ with:
31
+ branch: docs/changelog-update-${{ github.event.release.tag_name }}
32
+ title: '[Changelog] Update to ${{ github.event.release.tag_name }}'
33
+ add-paths: |
34
+ CHANGELOG.md
@@ -0,0 +1,22 @@
1
+ # This workflow will upload a Python Package using Twine when a release is created
2
+ # For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
3
+
4
+ name: Upload Python Package
5
+
6
+ on:
7
+ release:
8
+ types: [created]
9
+
10
+ jobs:
11
+ quality:
12
+ uses: ecmwf-actions/reusable-workflows/.github/workflows/qa-precommit-run.yml@v2
13
+ with:
14
+ skip-hooks: "no-commit-to-branch"
15
+
16
+ checks:
17
+ uses: ecmwf-actions/reusable-workflows/.github/workflows/qa-pytest-pyproject.yml@v2
18
+
19
+ deploy:
20
+ needs: [checks, quality]
21
+ uses: ecmwf-actions/reusable-workflows/.github/workflows/cd-pypi.yml@v2
22
+ secrets: inherit
@@ -0,0 +1,23 @@
1
+ # This workflow will upload a Python Package using Twine when a release is created
2
+ # For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
3
+
4
+ name: Code Quality checks for PRs
5
+
6
+ on:
7
+ push:
8
+ pull_request_target:
9
+ types: [opened, synchronize, reopened]
10
+
11
+ jobs:
12
+ quality:
13
+ uses: ecmwf-actions/reusable-workflows/.github/workflows/qa-precommit-run.yml@v2
14
+ with:
15
+ skip-hooks: "no-commit-to-branch"
16
+
17
+ checks:
18
+ strategy:
19
+ matrix:
20
+ python-version: ["3.9", "3.10"]
21
+ uses: ecmwf-actions/reusable-workflows/.github/workflows/qa-pytest-pyproject.yml@v2
22
+ with:
23
+ python-version: ${{ matrix.python-version }}
@@ -188,3 +188,8 @@ _build/
188
188
  *.sync
189
189
  *.dot
190
190
  _dev/
191
+ *.to_upload
192
+ *.tmp
193
+ test.ipynb
194
+ *tmp_data/
195
+ tempCodeRunnerFile.python
@@ -21,7 +21,7 @@ repos:
21
21
  - id: check-added-large-files # Check for large files added to git
22
22
  - id: check-merge-conflict # Check for files that contain merge conflict
23
23
  - repo: https://github.com/psf/black-pre-commit-mirror
24
- rev: 24.4.2
24
+ rev: 24.8.0
25
25
  hooks:
26
26
  - id: black
27
27
  args: [--line-length=120]
@@ -34,7 +34,7 @@ repos:
34
34
  - --force-single-line-imports
35
35
  - --profile black
36
36
  - repo: https://github.com/astral-sh/ruff-pre-commit
37
- rev: v0.4.6
37
+ rev: v0.6.4
38
38
  hooks:
39
39
  - id: ruff
40
40
  # Next line is to exclude for documentation code snippets
@@ -65,6 +65,6 @@ repos:
65
65
  - id: optional-dependencies-all
66
66
  args: ["--inplace", "--exclude-keys=dev,docs,tests", "--group=dev=all,docs,tests"]
67
67
  - repo: https://github.com/tox-dev/pyproject-fmt
68
- rev: "2.1.3"
68
+ rev: "2.2.3"
69
69
  hooks:
70
70
  - id: pyproject-fmt
@@ -11,9 +11,29 @@ Keep it human-readable, your future self will thank you!
11
11
  ## [Unreleased]
12
12
 
13
13
  ### Added
14
+ ### Changed
15
+
16
+ - Added incremental building of datasets
17
+
18
+ ### Removed
19
+
20
+ ## [0.4.5]
21
+
22
+ ### Added
23
+
24
+ - New `interpolate_frequency` keyword in `open_dataset`
25
+ - CI workflow to update the changelog on release
26
+ - adds the reusable cd pypi workflow
27
+ - merge strategy for changelog in .gitattributes #25
14
28
 
15
29
  ### Changed
16
30
 
31
+ - update CI to reusable workflows for PRs and releases
32
+ - Support sub-hourly datasets.
33
+ - Change negative variance detection to make it less restrictive
34
+ - Fix cutout bug that left some global grid points in the lam part
35
+ - Fix bug in computing missing dates in cutout option
36
+
17
37
  ### Removed
18
38
 
19
39
  ## [0.4.4] Bug fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: anemoi-datasets
3
- Version: 0.4.4
3
+ Version: 0.4.5
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.13
226
+ Requires-Dist: anemoi-utils[provenance]>=0.3.15
227
227
  Requires-Dist: numpy
228
228
  Requires-Dist: pyyaml
229
229
  Requires-Dist: semantic-version
@@ -235,7 +235,7 @@ Requires-Dist: boto3; extra == "all"
235
235
  Requires-Dist: earthkit-data[mars]>=0.9; extra == "all"
236
236
  Requires-Dist: earthkit-geo>=0.2; extra == "all"
237
237
  Requires-Dist: earthkit-meteo; extra == "all"
238
- Requires-Dist: ecmwflibs>=0.6.3; extra == "all"
238
+ Requires-Dist: eccodes>=2.37; extra == "all"
239
239
  Requires-Dist: entrypoints; extra == "all"
240
240
  Requires-Dist: gcsfs; extra == "all"
241
241
  Requires-Dist: kerchunk; extra == "all"
@@ -246,7 +246,7 @@ Provides-Extra: create
246
246
  Requires-Dist: earthkit-data[mars]>=0.9; extra == "create"
247
247
  Requires-Dist: earthkit-geo>=0.2; extra == "create"
248
248
  Requires-Dist: earthkit-meteo; extra == "create"
249
- Requires-Dist: ecmwflibs>=0.6.3; extra == "create"
249
+ Requires-Dist: eccodes>=2.37; extra == "create"
250
250
  Requires-Dist: entrypoints; extra == "create"
251
251
  Requires-Dist: pyproj; extra == "create"
252
252
  Provides-Extra: dev
@@ -255,7 +255,7 @@ Requires-Dist: boto3; extra == "dev"
255
255
  Requires-Dist: earthkit-data[mars]>=0.9; extra == "dev"
256
256
  Requires-Dist: earthkit-geo>=0.2; extra == "dev"
257
257
  Requires-Dist: earthkit-meteo; extra == "dev"
258
- Requires-Dist: ecmwflibs>=0.6.3; extra == "dev"
258
+ Requires-Dist: eccodes>=2.37; extra == "dev"
259
259
  Requires-Dist: entrypoints; extra == "dev"
260
260
  Requires-Dist: gcsfs; extra == "dev"
261
261
  Requires-Dist: kerchunk; extra == "dev"
@@ -0,0 +1,120 @@
1
+ .. _create-incremental:
2
+
3
+ ##################################
4
+ Creating a dataset incrementally
5
+ ##################################
6
+
7
+ This guide shows how to create a dataset incrementally. This is useful
8
+ when you have a large dataset that you want to load in parts, to avoid
9
+ running out of memory. Because parts can be loaded in parallel, this can
10
+ also speed up the process.
11
+
12
+ **********************
13
+ Building the dataset
14
+ **********************
15
+
16
+ You first need to create an empty dataset with the `init` command, which
17
+ is similar to the `create` command. If there is already a dataset with
18
+ the same name, you can use the `--overwrite` flag to replace it. The
19
+ `init` command requires a YAML file with the dataset configuration and a
20
+ name for the dataset. The content of the YAML file will be copied into
21
+ the dataset, so it will not be needed by following commands.
22
+
23
+ .. code:: bash
24
+
25
+ anemoi-datasets init dataset.yaml dataset.zarr --overwrite
26
+
27
+ You can then load the dataset in parts with the `load` command. You just
28
+ pass which part you want to load with the `--part` flag.
29
+
30
+ .. note::
31
+
32
+ Parts are numbered from 1 to N, where N is the total number of parts
33
+ (unlike Python, where they would start at zero). This is to make it
34
+ easier to use the `seq(1)` command in bash.
35
+
36
+ You can load multiple parts in any order and in parallel by running the
37
+ `load` command in different terminals, slurm jobs or any other
38
+ parallelisation tool. The library relies on the `zarr` library to handle
39
+ concurrent writes.
40
+
41
+ .. code:: bash
42
+
43
+ anemoi-datasets load dataset.zarr --part 1/20
44
+
45
+ .. code:: bash
46
+
47
+ anemoi-datasets load dataset.zarr --part 2/20
48
+
49
+ ... and so on ... until:
50
+
51
+ .. code:: bash
52
+
53
+ anemoi-datasets load dataset.zarr --part 20/20
54
+
55
+ Once you have loaded all the parts, you can finalise the dataset with
56
+ the `finalise` command. This will write the metadata and the attributes
57
+ to the dataset, and consolidate the statistics and cleanup some
58
+ temporary files.
59
+
60
+ .. code:: bash
61
+
62
+ anemoi-datasets finalise dataset.zarr
63
+
64
+ You can follow the progress of the dataset creation with the `inspect`
65
+ command. This will show you the percentage of parts loaded.
66
+
67
+ .. code:: bash
68
+
69
+ anemoi-datasets inspect dataset.zarr
70
+
71
+ It is possible that some temporary files are left behind at the end of
72
+ the process. You can clean them up with the `cleanup` command.
73
+
74
+ .. code:: bash
75
+
76
+ anemoi-datasets cleanup dataset.zarr
77
+
78
+ ***********************
79
+ Additional statistics
80
+ ***********************
81
+
82
+ `anemoi-datasets` can compute additional statistics for the dataset,
83
+ mostly statistics of the increments between two dates (e.g. 6h or 12h).
84
+
85
+ To add statistics for 6h increments:
86
+
87
+ .. code:: bash
88
+
89
+ anemoi-datasets init-additions dataset.zarr --delta 6h anemoi-datasets
90
+ anemoi-datasets load-additions dataset.zarr --part 1/2 --delta 6h anemoi-datasets
91
+ anemoi-datasets load-additions dataset.zarr --part 2/2 --delta 6h
92
+ anemoi-datasets finalise-additions dataset.zarr --delta 6h
93
+
94
+ To add statistics for 12h increments:
95
+
96
+ .. code:: bash
97
+
98
+ anemoi-datasets init-additions dataset.zarr --delta 12h
99
+ anemoi-datasets load-additions dataset.zarr --part 1/2 --delta 12h anemoi-datasets
100
+ anemoi-datasets load-additions dataset.zarr --part 2/2 --delta 12h
101
+ anemoi-datasets finalise-additions dataset.zarr --delta 12h
102
+
103
+ If this process leaves temporary files behind, you can clean them up
104
+ with the `cleanup` command.
105
+
106
+ .. code:: bash
107
+
108
+ anemoi-datasets cleanup dataset.zarr
109
+
110
+ ********************************
111
+ Patching the dataset metadata:
112
+ ********************************
113
+
114
+ The following command will patch the dataset metadata. In particular, it
115
+ will remove any references to the YAML file used to initialise the
116
+ dataset.
117
+
118
+ .. code:: bash
119
+
120
+ anemoi-datasets patch dataset.zarr
@@ -44,7 +44,9 @@ datasets <building-introduction>`.
44
44
  - :doc:`using/combining`
45
45
  - :doc:`using/selecting`
46
46
  - :doc:`using/grids`
47
+ - :doc:`using/zip`
47
48
  - :doc:`using/statistics`
49
+ - :doc:`using/missing`
48
50
  - :doc:`using/other`
49
51
  - :doc:`using/matching`
50
52
  - :doc:`using/miscellaneous`
@@ -62,7 +64,9 @@ datasets <building-introduction>`.
62
64
  using/combining
63
65
  using/selecting
64
66
  using/grids
67
+ using/zip
65
68
  using/statistics
69
+ using/missing
66
70
  using/other
67
71
  using/matching
68
72
  using/miscellaneous
@@ -75,6 +79,7 @@ datasets <building-introduction>`.
75
79
  - :doc:`building/sources`
76
80
  - :doc:`building/filters`
77
81
  - :doc:`building/statistics`
82
+ - :doc:`building/incremental`
78
83
 
79
84
  .. toctree::
80
85
  :maxdepth: 1
@@ -89,6 +94,7 @@ datasets <building-introduction>`.
89
94
  building/handling-missing-dates
90
95
  building/handling-missing-values
91
96
  building/statistics
97
+ building/incremental
92
98
  building/advanced-options
93
99
 
94
100
  **Command line tool**
@@ -0,0 +1 @@
1
+ ds = open_dataset(concat=[dataset1, dataset2, ...], fill_missing_gaps=True)
@@ -0,0 +1 @@
1
+ ds = open_dataset(dataset, interpolate_frequency="10m")
@@ -0,0 +1,4 @@
1
+ ds = open_dataset(dataset)
2
+
3
+ for i in range(len(ds) - 1):
4
+ ds = ds[i + 1] - ds[i]
@@ -0,0 +1,9 @@
1
+ ds = open_dataset(
2
+ dataset,
3
+ skip_missing_dates=True,
4
+ expected_access=slice(0, 2),
5
+ )
6
+
7
+ for i in range(len(ds)):
8
+ xi, xi_1 = ds[i]
9
+ dx = xi_1 - xi
@@ -0,0 +1,2 @@
1
+ expected_access = slice(0, 2)
2
+ expected_access = 2
@@ -0,0 +1 @@
1
+ ds = open_dataset(dataset, missing_dates=["2010-01-01T12:00:00", "2010-02-01T12:00:00"])
@@ -0,0 +1,5 @@
1
+ ds = open_dataset(x=dataset1, y=dataset2)
2
+
3
+ # or
4
+
5
+ ds = open_dataset(xy=[dataset1, dataset2])
@@ -0,0 +1,4 @@
1
+ for x, y in ds:
2
+ y_hat = model(x)
3
+ loss = criterion(y_hat, y)
4
+ loss.backward()
@@ -0,0 +1,9 @@
1
+ input = open_dataset(zip=[low_res_dataset, high_res_orography_dataset])
2
+ output = open_dataset(high_res_dataset)
3
+
4
+ ds = open_dataset(x=input, y=output)
5
+
6
+ for (x, orography), y in ds:
7
+ y_hat = model(x, orography)
8
+ loss = criterion(y_hat, y)
9
+ loss.backward()
@@ -48,7 +48,9 @@ attempt to combine them:
48
48
  You can concatenate two or more datasets along the dates dimension. The
49
49
  package will check that all datasets are compatible (same resolution,
50
50
  same variables, etc.). Currently, the datasets must be given in
51
- chronological order with no gaps between them.
51
+ chronological order with no gaps between them. If you want to
52
+ concatenate datasets that have gaps between them, check the
53
+ :ref:`fill_missing_gaps <fill_missing_gaps>` option.
52
54
 
53
55
  .. literalinclude:: code/concat1.py
54
56
  :language: python
@@ -155,3 +157,28 @@ cutout:
155
157
  :width: 75%
156
158
  :align: center
157
159
  :alt: Cutout
160
+
161
+ You can also pass a `min_distance_km` parameter to the `cutout`
162
+ function. Any grid points in the global dataset that are closer than
163
+ this distance to a grid point in the LAM dataset will be removed. This
164
+ can be useful to control the behaviour of the algorithm at the edge of
165
+ the cutout area. If no value is provided, the algorithm will compute its
166
+ value as the smallest distance between two grid points in the global
167
+ dataset over the cutout area. If you do not want to use this feature,
168
+ you can set `min_distance_km=0`, or provide your own value.
169
+
170
+ The plots below illustrate how the cutout differs if `min_distance_km`
171
+ is not given (top) or if `min_distance_km` is is set to `0` (bottom).
172
+ The difference can be seen at the boundary between the two grids:
173
+
174
+ .. image:: images/cutout-5.png
175
+ :align: center
176
+ :alt: Cutout
177
+
178
+ .. image:: images/cutout-6.png
179
+ :align: center
180
+ :alt: Cutout
181
+
182
+ To debug the combination, you can pass `plot=True` to the `cutout`
183
+ function (when running from a Notebook), of use `plot="prefix"` to save
184
+ the plots to series of PNG files in the current directory.
@@ -0,0 +1,78 @@
1
+ .. _selecting-missing:
2
+
3
+ ########################
4
+ Managing missing dates
5
+ ########################
6
+
7
+ ************************************************
8
+ Skipping missing when iterating over a dataset
9
+ ************************************************
10
+
11
+ If you iterate over a dataset that has missing dates, the library will
12
+ raise a ``MissingDatesError`` exception if you attempt to access a
13
+ missing date.
14
+
15
+ This code below will throw an exception if ``ds[i]`` or ``ds[i+1]`` are
16
+ missing dates. Because we iterate over the whole dataset, we are
17
+ guaranteed to fail if there are any missing dates.
18
+
19
+ .. literalinclude:: code/iterating_missing_dates1_.py
20
+
21
+ You can skip missing dates by setting the ``skip_missing_dates`` option
22
+ to ``True``. You will have to also provide a hint about how you intent
23
+ to iterate over the dataset. The hint is given using the parameter
24
+ ``expected_access`` which takes a ``slice`` as argument.
25
+
26
+ The library will check the slice against the missing dates and insure
27
+ that, when iterating over the dataset with that slice, no missing dates
28
+ are accessed.
29
+
30
+ The algorithm is illustrated in the picture below. The cells represents
31
+ the dates in the dataset, and the red cells are the missing dates. Given
32
+ ``expected_access=slice(0, 2)``, the library will consider each group of
33
+ matching dates that are not missing (in blue). The interval between each
34
+ dates of a group is guaranteed to be constant across all groups.
35
+
36
+ .. image:: images/skip-missing.png
37
+ :align: center
38
+
39
+ .. literalinclude:: code/iterating_missing_dates2_.py
40
+
41
+ The code above will not raise an exception, even if there are missing
42
+ dates. The ``slice(0, 2)`` represents the ``i`` and ``i+1`` indices in
43
+ the loop (the Python :py:class:`slice` is similar to Python's
44
+ :py:class:`range`, as the first bound in included while the last bound
45
+ is excluded).
46
+
47
+ You can also provide a single integer to the ```expected_access``
48
+ parameter. The two forms below are identical:
49
+
50
+ .. literalinclude:: code/iterating_missing_dates3_.py
51
+
52
+ .. _fill_missing_gaps:
53
+
54
+ ***********************************************
55
+ Concatenating datasets with gaps between them
56
+ ***********************************************
57
+
58
+ When you concatenate two or more datasets, the library will check that
59
+ the dates are contiguous, i.e. that the last date of a dataset is one
60
+ `frequency` before the first date of the next dataset.
61
+
62
+ If the dates are not contiguous, the library will raise an error. You
63
+ can force the concatenation by setting the ``fill_missing_gaps`` option:
64
+
65
+ .. literalinclude:: code/fill_missing_gaps_.py
66
+
67
+ If there is a gap between the datasets, the library will fill the gap by
68
+ creating a virtual dataset with only missing dates, and add it between
69
+ the datasets to make the dates contiguous.
70
+
71
+ ***********
72
+ Debugging
73
+ ***********
74
+
75
+ You can set missing dates using the ``missing_dates`` option. This
76
+ option is for debugging purposes only.
77
+
78
+ .. literalinclude:: code/missing_dates_.py
@@ -9,22 +9,6 @@
9
9
  The operations described in this section do not check that their
10
10
  inputs are compatible.
11
11
 
12
- *****
13
- zip
14
- *****
15
-
16
- The `zip` operation is used to combine multiple datasets into a single
17
- dataset.
18
-
19
- .. literalinclude:: code/zip1_.py
20
- :language: python
21
-
22
- This operation is similar to Python's :py:func:`zip` function, but it
23
- returns tuples of the selected indices instead of the values:
24
-
25
- .. literalinclude:: code/zip2_.py
26
- :language: python
27
-
28
12
  *******
29
13
  chain
30
14
  *******
@@ -52,5 +52,15 @@ with a ``frequency`` of 6 hours is equivalent to ``end="2020-12-31
52
52
 
53
53
  You can change the frequency of the dataset by passing a string with:
54
54
 
55
- .. literalinclude:: code/frequency_.py
55
+ .. literalinclude:: code/frequency1_.py
56
+ :language: python
57
+
58
+ The new frequency must be a multiple of the original frequency.
59
+
60
+ To artificially increase the frequency, you can use the
61
+ ``interpolate_frequency`` option. This will create new dates in the
62
+ dataset by linearly interpolating the data values between the original
63
+ dates.
64
+
65
+ .. literalinclude:: code/frequency2_.py
56
66
  :language: python
@@ -0,0 +1,64 @@
1
+ .. _selecting-zip:
2
+
3
+ #################################
4
+ Iterating over several datasets
5
+ #################################
6
+
7
+ Sometimes you need to iterate over several datasets at the same time.
8
+ The following functions will help you with that.
9
+
10
+ .. warning::
11
+
12
+ When iterating over several datasets, most of the functions and
13
+ properties of the dataset object returned by :py:func:`open_dataset`
14
+ will not return a :py:class:`tuple` instead of a single value. The
15
+ tuple will contain the values of the corresponding datasets. There
16
+ are a few exceptions, such as `dates` or `missing`.
17
+
18
+ **************
19
+ x=..., y=...
20
+ **************
21
+
22
+ In machine learning, you often need to iterate over two datasets at the
23
+ same time. One representing the input ``x`` and the other the output
24
+ ``y``.
25
+
26
+ .. literalinclude:: code/xy1_.py
27
+
28
+ You will then be able to iterate over the datasets as follows:
29
+
30
+ .. literalinclude:: code/xy2_.py
31
+
32
+ **Note:** `xy` is currently a shortcut for `zip` below, and is intended
33
+ to make the code more readable.
34
+
35
+ *****
36
+ zip
37
+ *****
38
+
39
+ The `zip` option is used to combine multiple datasets into a single
40
+ dataset, that can be iterated over or indexed simultaneously.
41
+
42
+ .. literalinclude:: code/zip1_.py
43
+
44
+ The dataset can then be indexed as follows:
45
+
46
+ .. literalinclude:: code/zip2_.py
47
+
48
+ .. note::
49
+
50
+ The `zip` option is similar to Python's :py:func:`zip` function. The
51
+ main difference the datasets are checked to be compatible before
52
+ being combined (same ranges of dates, same frequency, etc.). Also,
53
+ Python's :py:func:`zip` only allows iteration, while the `zip` option
54
+ allows indexing as well.
55
+
56
+ ****************
57
+ Combining both
58
+ ****************
59
+
60
+ Both options can be combined. The example below is based on a model that
61
+ is trained to upscale a dataset. The input is the low resolution and a
62
+ high resolution orography. The output is the high resolution dataset.
63
+
64
+ .. literalinclude:: code/zip_xy_.py
@@ -50,7 +50,7 @@ dynamic = [
50
50
  "version",
51
51
  ]
52
52
  dependencies = [
53
- "anemoi-utils[provenance]>=0.3.13",
53
+ "anemoi-utils[provenance]>=0.3.15",
54
54
  "numpy",
55
55
  "pyyaml",
56
56
  "semantic-version",
@@ -64,7 +64,7 @@ optional-dependencies.all = [
64
64
  "earthkit-data[mars]>=0.9",
65
65
  "earthkit-geo>=0.2",
66
66
  "earthkit-meteo",
67
- "ecmwflibs>=0.6.3",
67
+ "eccodes>=2.37",
68
68
  "entrypoints",
69
69
  "gcsfs",
70
70
  "kerchunk",
@@ -77,7 +77,7 @@ optional-dependencies.create = [
77
77
  "earthkit-data[mars]>=0.9",
78
78
  "earthkit-geo>=0.2",
79
79
  "earthkit-meteo",
80
- "ecmwflibs>=0.6.3",
80
+ "eccodes>=2.37",
81
81
  "entrypoints",
82
82
  "pyproj",
83
83
  ]
@@ -88,7 +88,7 @@ optional-dependencies.dev = [
88
88
  "earthkit-data[mars]>=0.9",
89
89
  "earthkit-geo>=0.2",
90
90
  "earthkit-meteo",
91
- "ecmwflibs>=0.6.3",
91
+ "eccodes>=2.37",
92
92
  "entrypoints",
93
93
  "gcsfs",
94
94
  "kerchunk",