anemoi-datasets 0.4.3__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 (314) hide show
  1. anemoi_datasets-0.4.5/.gitattributes +1 -0
  2. anemoi_datasets-0.4.5/.github/ci-config.yml +9 -0
  3. anemoi_datasets-0.4.5/.github/workflows/changelog-pr-update.yml +15 -0
  4. anemoi_datasets-0.4.5/.github/workflows/changelog-release-update.yml +34 -0
  5. anemoi_datasets-0.4.5/.github/workflows/ci.yml +40 -0
  6. anemoi_datasets-0.4.5/.github/workflows/label-public-pr.yml +10 -0
  7. anemoi_datasets-0.4.5/.github/workflows/python-publish.yml +22 -0
  8. anemoi_datasets-0.4.5/.github/workflows/python-pull-request.yml +23 -0
  9. anemoi_datasets-0.4.5/.github/workflows/readthedocs-pr-update.yml +22 -0
  10. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/.gitignore +5 -0
  11. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/.pre-commit-config.yaml +3 -3
  12. anemoi_datasets-0.4.5/CHANGELOG.md +80 -0
  13. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/PKG-INFO +5 -5
  14. anemoi_datasets-0.4.5/docs/building/incremental.rst +120 -0
  15. anemoi_datasets-0.4.5/docs/building/sources/xarray-kerchunk.py +30 -0
  16. anemoi_datasets-0.4.5/docs/building/sources/xarray-kerchunk.rst +17 -0
  17. anemoi_datasets-0.4.5/docs/building/sources/xarray-kerchunk.yaml +10 -0
  18. anemoi_datasets-0.4.5/docs/building/sources/xarray-zarr.rst +6 -0
  19. anemoi_datasets-0.4.3/docs/building/sources/xarray.yaml → anemoi_datasets-0.4.5/docs/building/sources/xarray-zarr.yaml +1 -1
  20. anemoi_datasets-0.4.5/docs/building/sources/zenodo.rst +8 -0
  21. anemoi_datasets-0.4.5/docs/building/sources/zenodo.yaml +9 -0
  22. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources.rst +7 -4
  23. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/images.pptx +0 -0
  24. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/index.rst +6 -0
  25. anemoi_datasets-0.4.5/docs/using/code/fill_missing_gaps_.py +1 -0
  26. anemoi_datasets-0.4.5/docs/using/code/frequency2_.py +1 -0
  27. anemoi_datasets-0.4.5/docs/using/code/iterating_missing_dates1_.py +4 -0
  28. anemoi_datasets-0.4.5/docs/using/code/iterating_missing_dates2_.py +9 -0
  29. anemoi_datasets-0.4.5/docs/using/code/iterating_missing_dates3_.py +2 -0
  30. anemoi_datasets-0.4.5/docs/using/code/missing_dates_.py +1 -0
  31. anemoi_datasets-0.4.5/docs/using/code/xy1_.py +5 -0
  32. anemoi_datasets-0.4.5/docs/using/code/xy2_.py +4 -0
  33. anemoi_datasets-0.4.5/docs/using/code/zip_xy_.py +9 -0
  34. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/combining.rst +28 -1
  35. anemoi_datasets-0.4.5/docs/using/images/cutout-5.png +0 -0
  36. anemoi_datasets-0.4.5/docs/using/images/cutout-6.png +0 -0
  37. anemoi_datasets-0.4.5/docs/using/images/skip-missing.png +0 -0
  38. anemoi_datasets-0.4.5/docs/using/missing.rst +78 -0
  39. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/other.rst +0 -16
  40. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/subsetting.rst +11 -1
  41. anemoi_datasets-0.4.5/docs/using/zip.rst +64 -0
  42. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/pyproject.toml +4 -4
  43. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/_version.py +2 -2
  44. anemoi_datasets-0.4.5/src/anemoi/datasets/commands/cleanup.py +44 -0
  45. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/commands/create.py +50 -20
  46. anemoi_datasets-0.4.5/src/anemoi/datasets/commands/finalise-additions.py +45 -0
  47. anemoi_datasets-0.4.5/src/anemoi/datasets/commands/finalise.py +39 -0
  48. anemoi_datasets-0.4.5/src/anemoi/datasets/commands/init-additions.py +45 -0
  49. anemoi_datasets-0.4.5/src/anemoi/datasets/commands/init.py +67 -0
  50. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/commands/inspect.py +1 -1
  51. anemoi_datasets-0.4.5/src/anemoi/datasets/commands/load-additions.py +47 -0
  52. anemoi_datasets-0.4.5/src/anemoi/datasets/commands/load.py +47 -0
  53. anemoi_datasets-0.4.5/src/anemoi/datasets/commands/patch.py +39 -0
  54. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/compute/recentre.py +1 -1
  55. anemoi_datasets-0.4.5/src/anemoi/datasets/create/__init__.py +1017 -0
  56. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/check.py +5 -3
  57. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/config.py +53 -2
  58. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/accumulations.py +6 -22
  59. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/hindcasts.py +27 -12
  60. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/tendencies.py +1 -1
  61. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray/__init__.py +12 -2
  62. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray/coordinates.py +7 -0
  63. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray/field.py +1 -1
  64. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray/fieldlist.py +0 -2
  65. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray/flavour.py +21 -1
  66. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray/metadata.py +27 -29
  67. anemoi_datasets-0.4.5/src/anemoi/datasets/create/functions/sources/xarray/time.py +131 -0
  68. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray/variable.py +15 -38
  69. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/input.py +62 -25
  70. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/statistics/__init__.py +39 -23
  71. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/utils.py +3 -2
  72. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/__init__.py +1 -0
  73. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/concat.py +46 -2
  74. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/dataset.py +109 -34
  75. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/forwards.py +17 -8
  76. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/grids.py +17 -3
  77. anemoi_datasets-0.4.5/src/anemoi/datasets/data/interpolate.py +133 -0
  78. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/misc.py +56 -66
  79. anemoi_datasets-0.4.5/src/anemoi/datasets/data/missing.py +240 -0
  80. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/select.py +7 -1
  81. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/stores.py +3 -3
  82. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/subset.py +47 -5
  83. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/unchecked.py +20 -22
  84. anemoi_datasets-0.4.5/src/anemoi/datasets/data/xy.py +125 -0
  85. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/dates/__init__.py +33 -20
  86. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/dates/groups.py +2 -2
  87. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/grids.py +66 -48
  88. anemoi_datasets-0.4.5/src/anemoi/datasets/utils/__init__.py +0 -0
  89. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi_datasets.egg-info/PKG-INFO +5 -5
  90. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi_datasets.egg-info/SOURCES.txt +46 -6
  91. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi_datasets.egg-info/requires.txt +4 -4
  92. anemoi_datasets-0.4.5/tests/create/run.sh +20 -0
  93. anemoi_datasets-0.4.5/tests/create/test_create.py +252 -0
  94. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tests/test_chunks.py +4 -1
  95. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tests/test_data.py +22 -5
  96. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tests/xarray/test_kerchunk.py +4 -1
  97. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tests/xarray/test_opendap.py +4 -1
  98. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tests/xarray/test_zarr.py +22 -3
  99. anemoi_datasets-0.4.5/tools/upload-sample-dataset.py +41 -0
  100. anemoi_datasets-0.4.3/.github/workflows/python-publish.yml +0 -74
  101. anemoi_datasets-0.4.3/docs/building/sources/xarray.rst +0 -6
  102. anemoi_datasets-0.4.3/docs/building/syntax.rst +0 -6
  103. anemoi_datasets-0.4.3/docs/test.ipynb +0 -186
  104. anemoi_datasets-0.4.3/src/anemoi/datasets/create/__init__.py +0 -202
  105. anemoi_datasets-0.4.3/src/anemoi/datasets/create/functions/sources/xarray/time.py +0 -98
  106. anemoi_datasets-0.4.3/src/anemoi/datasets/create/loaders.py +0 -924
  107. anemoi_datasets-0.4.3/tests/create/test_create.py +0 -236
  108. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/.readthedocs.yaml +0 -0
  109. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/.vscode/spellright.dict +0 -0
  110. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/LICENSE +0 -0
  111. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/README.md +0 -0
  112. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/Makefile +0 -0
  113. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/_static/logo.png +0 -0
  114. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/_static/style.css +0 -0
  115. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/_templates/.gitkeep +0 -0
  116. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/apply-fmt.sh +0 -0
  117. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/advanced-options.rst +0 -0
  118. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/filters/empty.rst +0 -0
  119. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/filters/noop.rst +0 -0
  120. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/filters/rename.rst +0 -0
  121. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/filters/rotate_winds.rst +0 -0
  122. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/filters/select.rst +0 -0
  123. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/filters/unrotate_winds.rst +0 -0
  124. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/filters.rst +0 -0
  125. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/handling-missing-dates.rst +0 -0
  126. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/handling-missing-values.rst +0 -0
  127. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/introduction.rst +0 -0
  128. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/naming-variables.rst +0 -0
  129. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/operations.rst +0 -0
  130. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/accumulations.rst +0 -0
  131. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/accumulations1.yaml +0 -0
  132. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/accumulations2.yaml +0 -0
  133. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/forcings.rst +0 -0
  134. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/forcings.yaml +0 -0
  135. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/grib.rst +0 -0
  136. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/hindcasts.rst +0 -0
  137. /anemoi_datasets-0.4.3/src/anemoi/datasets/compute/__init__.py → /anemoi_datasets-0.4.5/docs/building/sources/hindcasts.yaml +0 -0
  138. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/mars.rst +0 -0
  139. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/mars1.yaml +0 -0
  140. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/mars2.yaml +0 -0
  141. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/netcdf.rst +0 -0
  142. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/netcdf.yaml +0 -0
  143. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/opendap.rst +0 -0
  144. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/opendap.yaml +0 -0
  145. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/recentre.rst +0 -0
  146. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/yaml/grib1.yaml +0 -0
  147. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/yaml/grib2.yaml +0 -0
  148. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/yaml/grib3.yaml +0 -0
  149. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/yaml/grib4.yaml +0 -0
  150. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/yaml/hindcasts.yaml +0 -0
  151. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/sources/yaml/recentre.yaml +0 -0
  152. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/statistics.rst +0 -0
  153. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/syntax.yaml +0 -0
  154. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/yaml/Makefile +0 -0
  155. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/yaml/building1.txt +0 -0
  156. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/yaml/building1.yaml +0 -0
  157. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/yaml/building2.txt +0 -0
  158. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/yaml/building2.yaml +0 -0
  159. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/yaml/building3.txt +0 -0
  160. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/yaml/building3.yaml +0 -0
  161. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/yaml/concat.yaml +0 -0
  162. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/yaml/hindcasts.yaml +0 -0
  163. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/yaml/input.yaml +0 -0
  164. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/yaml/missing_dates.yaml +0 -0
  165. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/yaml/nan.yaml +0 -0
  166. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/building/yaml/pipe.yaml +0 -0
  167. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/check-index.sh +0 -0
  168. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/cli/compare.rst +0 -0
  169. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/cli/copy.rst +0 -0
  170. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/cli/create.rst +0 -0
  171. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/cli/inspect.rst +0 -0
  172. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/cli/introduction.rst +0 -0
  173. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/cli/scan.rst +0 -0
  174. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/conf.py +0 -0
  175. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/installing.rst +0 -0
  176. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/overview.rst +0 -0
  177. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/overview_.py +0 -0
  178. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/schemas/matrix.excalidraw +0 -0
  179. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/schemas/matrix.png +0 -0
  180. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/schemas/overview.excalidraw +0 -0
  181. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/schemas/overview.png +0 -0
  182. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/schemas/recipe.excalidraw +0 -0
  183. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/schemas/recipe.png +0 -0
  184. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/area1_.py +0 -0
  185. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/area2_.py +0 -0
  186. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/chain_.py +0 -0
  187. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/combine_example.py +0 -0
  188. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/concat1.py +0 -0
  189. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/cutout_.py +0 -0
  190. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/drop_.py +0 -0
  191. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/end_.py +0 -0
  192. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/ensembles1_.py +0 -0
  193. /anemoi_datasets-0.4.3/docs/using/code/frequency_.py → /anemoi_datasets-0.4.5/docs/using/code/frequency1_.py +0 -0
  194. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/grids1_.py +0 -0
  195. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/join1.py +0 -0
  196. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/matching0_.py +0 -0
  197. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/matching1_.py +0 -0
  198. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/matching2_.py +0 -0
  199. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/matching3_.py +0 -0
  200. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/matching4_.py +0 -0
  201. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/misc1.py +0 -0
  202. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/misc2.py +0 -0
  203. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/missing_.py +0 -0
  204. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/open_cloud.py +0 -0
  205. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/open_combine1_.py +0 -0
  206. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/open_combine2_.py +0 -0
  207. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/open_complex.py +0 -0
  208. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/open_dict_.py +0 -0
  209. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/open_first_.py +0 -0
  210. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/open_list_.py +0 -0
  211. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/open_name.py +0 -0
  212. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/open_other.py +0 -0
  213. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/open_path.py +0 -0
  214. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/open_yaml_.py +0 -0
  215. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/rename_.py +0 -0
  216. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/reorder1_.py +0 -0
  217. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/reorder2_.py +0 -0
  218. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/select1_.py +0 -0
  219. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/select2_.py +0 -0
  220. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/shuffle_.py +0 -0
  221. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/some_attributes_.py +0 -0
  222. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/start_.py +0 -0
  223. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/statistics_.py +0 -0
  224. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/subset_example.py +0 -0
  225. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/thinning_.py +0 -0
  226. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/zip1_.py +0 -0
  227. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/code/zip2_.py +0 -0
  228. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/configuration.rst +0 -0
  229. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/configuration.toml +0 -0
  230. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/grids.rst +0 -0
  231. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/images/area-1.png +0 -0
  232. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/images/concat.png +0 -0
  233. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/images/cutout-1.png +0 -0
  234. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/images/cutout-2.png +0 -0
  235. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/images/cutout-3.png +0 -0
  236. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/images/cutout-4.png +0 -0
  237. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/images/join.png +0 -0
  238. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/images/overlay.png +0 -0
  239. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/images/thinning-after.png +0 -0
  240. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/images/thinning-before.png +0 -0
  241. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/introduction.rst +0 -0
  242. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/matching.rst +0 -0
  243. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/methods.rst +0 -0
  244. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/miscellaneous.rst +0 -0
  245. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/opening.rst +0 -0
  246. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/selecting.rst +0 -0
  247. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/docs/using/statistics.rst +0 -0
  248. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/setup.cfg +0 -0
  249. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/__init__.py +0 -0
  250. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/__main__.py +0 -0
  251. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/commands/__init__.py +0 -0
  252. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/commands/compare.py +0 -0
  253. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/commands/copy.py +0 -0
  254. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/commands/scan.py +0 -0
  255. {anemoi_datasets-0.4.3/src/anemoi/datasets/utils → anemoi_datasets-0.4.5/src/anemoi/datasets/compute}/__init__.py +0 -0
  256. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/chunks.py +0 -0
  257. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/__init__.py +0 -0
  258. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/filters/__init__.py +0 -0
  259. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/filters/empty.py +0 -0
  260. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/filters/noop.py +0 -0
  261. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/filters/rename.py +0 -0
  262. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/filters/rotate_winds.py +0 -0
  263. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/filters/unrotate_winds.py +0 -0
  264. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/__init__.py +0 -0
  265. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/constants.py +0 -0
  266. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/empty.py +0 -0
  267. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/forcings.py +0 -0
  268. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/grib.py +0 -0
  269. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/mars.py +0 -0
  270. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/netcdf.py +0 -0
  271. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/opendap.py +0 -0
  272. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/recentre.py +0 -0
  273. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/source.py +0 -0
  274. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray/grid.py +0 -0
  275. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray_kerchunk.py +0 -0
  276. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/xarray_zarr.py +0 -0
  277. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/functions/sources/zenodo.py +0 -0
  278. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/patch.py +0 -0
  279. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/persistent.py +0 -0
  280. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/size.py +0 -0
  281. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/statistics/summary.py +0 -0
  282. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/template.py +0 -0
  283. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/trace.py +0 -0
  284. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/writer.py +0 -0
  285. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/create/zarr.py +0 -0
  286. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/debug.css +0 -0
  287. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/debug.py +0 -0
  288. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/ensemble.py +0 -0
  289. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/indexing.py +0 -0
  290. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/join.py +0 -0
  291. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/masked.py +0 -0
  292. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi/datasets/data/statistics.py +0 -0
  293. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi_datasets.egg-info/dependency_links.txt +0 -0
  294. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi_datasets.egg-info/entry_points.txt +0 -0
  295. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/src/anemoi_datasets.egg-info/top_level.txt +0 -0
  296. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tests/create/concat.yaml +0 -0
  297. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tests/create/data_sources.yaml +0 -0
  298. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tests/create/join.yaml +0 -0
  299. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tests/create/missing.yaml +0 -0
  300. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tests/create/nan.yaml +0 -0
  301. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tests/create/pipe.yaml +0 -0
  302. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tests/create/recentre.yaml +0 -0
  303. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tests/create-perturbations-full.yaml +0 -0
  304. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tests/create-shift.yaml +0 -0
  305. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tests/test_dates.py +0 -0
  306. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tests/test_indexing.py +0 -0
  307. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tests/xarray/test_netcdf.py +0 -0
  308. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tools/.gitignore +0 -0
  309. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tools/examples/Makefile +0 -0
  310. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tools/examples/an-oper-2023-2023-2p5-6h-v1.yaml +0 -0
  311. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tools/grids/Makefile +0 -0
  312. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tools/grids/grids.ipynb +0 -0
  313. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tools/grids/grids1.yaml +0 -0
  314. {anemoi_datasets-0.4.3 → anemoi_datasets-0.4.5}/tools/grids/grids2.yaml +0 -0
@@ -0,0 +1 @@
1
+ CHANGELOG.md merge=union
@@ -0,0 +1,9 @@
1
+ dependencies: |
2
+ ecmwf/ecbuild
3
+ MathisRosenhauer/libaec@master
4
+ ecmwf/eccodes
5
+ ecmwf/eckit
6
+ ecmwf/odc
7
+ dependency_branch: develop
8
+ parallelism_factor: 8
9
+ self_build: false # Only for python packages
@@ -0,0 +1,15 @@
1
+ name: Check Changelog Update on PR
2
+ on:
3
+ pull_request:
4
+ types: [assigned, opened, synchronize, reopened, labeled, unlabeled]
5
+ branches:
6
+ - main
7
+ - develop
8
+ jobs:
9
+ Check-Changelog:
10
+ name: Check Changelog Action
11
+ runs-on: ubuntu-20.04
12
+ steps:
13
+ - uses: tarides/changelog-check-action@v2
14
+ with:
15
+ changelog: CHANGELOG.md
@@ -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,40 @@
1
+ name: ci
2
+
3
+ on:
4
+ # Trigger the workflow on push to master or develop, except tag creation
5
+ push:
6
+ branches:
7
+ - 'main'
8
+ - 'develop'
9
+ tags-ignore:
10
+ - '**'
11
+
12
+ # Trigger the workflow on pull request
13
+ pull_request: ~
14
+
15
+ # Trigger the workflow manually
16
+ workflow_dispatch: ~
17
+
18
+ # Trigger after public PR approved for CI
19
+ pull_request_target:
20
+ types: [labeled]
21
+
22
+ jobs:
23
+ # Run CI including downstream packages on self-hosted runners
24
+ downstream-ci:
25
+ name: downstream-ci
26
+ if: ${{ !github.event.pull_request.head.repo.fork && github.event.action != 'labeled' || github.event.label.name == 'approved-for-ci' }}
27
+ uses: ecmwf-actions/downstream-ci/.github/workflows/downstream-ci.yml@main
28
+ with:
29
+ anemoi-datasets: ecmwf/anemoi-datasets@${{ github.event.pull_request.head.sha || github.sha }}
30
+ codecov_upload: true
31
+ secrets: inherit
32
+
33
+ # Build downstream packages on HPC
34
+ downstream-ci-hpc:
35
+ name: downstream-ci-hpc
36
+ if: ${{ !github.event.pull_request.head.repo.fork && github.event.action != 'labeled' || github.event.label.name == 'approved-for-ci' }}
37
+ uses: ecmwf-actions/downstream-ci/.github/workflows/downstream-ci.yml@main
38
+ with:
39
+ anemoi-datasets: ecmwf/anemoi-datasets@${{ github.event.pull_request.head.sha || github.sha }}
40
+ secrets: inherit
@@ -0,0 +1,10 @@
1
+ # Manage labels of pull requests that originate from forks
2
+ name: label-public-pr
3
+
4
+ on:
5
+ pull_request_target:
6
+ types: [opened, synchronize]
7
+
8
+ jobs:
9
+ label:
10
+ uses: ecmwf-actions/reusable-workflows/.github/workflows/label-pr.yml@v2
@@ -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 }}
@@ -0,0 +1,22 @@
1
+ name: Read the Docs PR Preview
2
+ on:
3
+ pull_request_target:
4
+ types:
5
+ - opened
6
+ - synchronize
7
+ - reopened
8
+ # Execute this action only on PRs that touch
9
+ # documentation files.
10
+ paths:
11
+ - "docs/**"
12
+
13
+ permissions:
14
+ pull-requests: write
15
+
16
+ jobs:
17
+ documentation-links:
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: readthedocs/actions/preview@v1
21
+ with:
22
+ project-slug: "anemoi-datasets"
@@ -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
@@ -0,0 +1,80 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ Please add your functional changes to the appropriate section in the PR.
9
+ Keep it human-readable, your future self will thank you!
10
+
11
+ ## [Unreleased]
12
+
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
28
+
29
+ ### Changed
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
+
37
+ ### Removed
38
+
39
+ ## [0.4.4] Bug fixes
40
+
41
+ - Bug fix in accumulations() that did not work with webmars
42
+ - Bug fix when using hindcasts input (missing dates on leap years)
43
+
44
+ ## [0.4.0] Minor Release
45
+
46
+ ### Added
47
+ - earthkit-data replaces climetlab
48
+
49
+ ### Removed
50
+ - climetlab
51
+
52
+ ## [0.3.0] Minor Release
53
+
54
+ ### Added
55
+ - hindcast source
56
+
57
+ ### Changed
58
+ - updated documentation
59
+
60
+ ## [0.2.0] Minor Release
61
+
62
+ ### Added
63
+ - statistics tendencies
64
+
65
+ ### Removed
66
+ - CubesFilter
67
+
68
+ ## [0.1.0] Initial Release
69
+
70
+ ### Added
71
+ - Documentation
72
+ - Initial code release for anemoi-datasets: create datasets for data-driven weather-models
73
+ - open datasets
74
+ - combine datasets
75
+
76
+ ## Git Diffs:
77
+ [0.4.0]: https://github.com/ecmwf/anemoi-datasets/compare/0.3.0...0.4.0
78
+ [0.3.0]: https://github.com/ecmwf/anemoi-datasets/compare/0.2.0...0.3.0
79
+ [0.2.0]: https://github.com/ecmwf/anemoi-datasets/compare/0.1.0...0.2.0
80
+ [0.1.0]: https://github.com/ecmwf/anemoi-models/releases/tag/0.1.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: anemoi-datasets
3
- Version: 0.4.3
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
@@ -0,0 +1,30 @@
1
+ import json
2
+
3
+ import fsspec
4
+ import tqdm
5
+ from kerchunk.combine import MultiZarrToZarr
6
+ from kerchunk.hdf import SingleHdf5ToZarr
7
+
8
+ fs = fsspec.filesystem("s3", anon=True)
9
+
10
+ pattern = "s3://nsf-ncar-era5/e5.oper.an.pl/202403/e5.oper.an.pl.*.ll025sc.2024????00_2024????23.nc"
11
+
12
+
13
+ jsons = []
14
+
15
+ for file in tqdm.tqdm(fs.glob(pattern)):
16
+ with fs.open(file, "rb", anon=True) as f:
17
+ h5chunks = SingleHdf5ToZarr(f, file)
18
+ jsons.append(h5chunks.translate())
19
+
20
+
21
+ mzz = MultiZarrToZarr(
22
+ jsons,
23
+ remote_protocol="s3",
24
+ remote_options={"anon": True},
25
+ concat_dims=["time"],
26
+ identical_dims=["latitude", "longitude"],
27
+ )
28
+
29
+ with open("combined.json", "w") as f:
30
+ json.dump(mzz.translate(), f)
@@ -0,0 +1,17 @@
1
+ #################
2
+ xarray-kerchunk
3
+ #################
4
+
5
+ .. literalinclude:: xarray-kerchunk.yaml
6
+ :language: yaml
7
+
8
+ The code below is inspired by the `kerchunk tutorial`_, and makes use of
9
+ a subset of the `ERA5 dataset available on AWS`_. You may need to
10
+ install the relevant packages before running the code below.
11
+
12
+ .. literalinclude:: xarray-kerchunk.py
13
+ :language: python
14
+
15
+ .. _era5 dataset available on aws: https://registry.opendata.aws/ecmwf-era5/
16
+
17
+ .. _kerchunk tutorial: https://fsspec.github.io/kerchunk/tutorial.html
@@ -0,0 +1,10 @@
1
+ dates:
2
+ start: 2024-03-24T00:00:00
3
+ end: 2024-03-24T03:00:00
4
+ frequency: 1h
5
+
6
+ input:
7
+ xarray-kerchunk:
8
+ json: combined.json
9
+ param: T
10
+ level: [1000, 50]
@@ -0,0 +1,6 @@
1
+ #############
2
+ xarray-zarr
3
+ #############
4
+
5
+ .. literalinclude:: xarray-zarr.yaml
6
+ :language: yaml
@@ -1,3 +1,3 @@
1
1
  input:
2
- xarray:
2
+ xarray-zarr:
3
3
  url: https://...
@@ -0,0 +1,8 @@
1
+ ########
2
+ zenodo
3
+ ########
4
+
5
+ https://zenodo.org/records/6470725
6
+
7
+ .. literalinclude:: zenodo.yaml
8
+ :language: yaml
@@ -0,0 +1,9 @@
1
+ dates:
2
+ start: 2021-06-28
3
+ end: 2021-06-29
4
+
5
+ input:
6
+ zenodo:
7
+ record_id: 6470725
8
+ file_key: "{param}_INCA_202106280700.nc"
9
+ param: [RR,PN, PT]
@@ -20,11 +20,14 @@ The following `sources` are currently available:
20
20
  .. toctree::
21
21
  :maxdepth: 1
22
22
 
23
- sources/mars
23
+ sources/accumulations
24
+ sources/forcings
24
25
  sources/grib
26
+ sources/hindcasts
27
+ sources/mars
25
28
  sources/netcdf
26
- sources/xarray
27
29
  sources/opendap
28
- sources/forcings
29
- sources/accumulations
30
30
  sources/recentre
31
+ sources/xarray-kerchunk
32
+ sources/xarray-zarr
33
+ sources/zenodo
@@ -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()