anemoi-datasets 0.4.4__tar.gz → 0.5.0__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 (327) hide show
  1. anemoi_datasets-0.5.0/.gitattributes +1 -0
  2. anemoi_datasets-0.5.0/.github/CODEOWNERS +6 -0
  3. anemoi_datasets-0.5.0/.github/ci-hpc-config.yml +18 -0
  4. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/.github/workflows/changelog-pr-update.yml +3 -0
  5. anemoi_datasets-0.5.0/.github/workflows/changelog-release-update.yml +35 -0
  6. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/.github/workflows/ci.yml +15 -2
  7. anemoi_datasets-0.5.0/.github/workflows/python-publish.yml +24 -0
  8. anemoi_datasets-0.5.0/.github/workflows/python-pull-request.yml +23 -0
  9. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/.gitignore +6 -0
  10. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/.pre-commit-config.yaml +15 -11
  11. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/CHANGELOG.md +34 -0
  12. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/PKG-INFO +8 -17
  13. anemoi_datasets-0.5.0/docs/building/incremental.rst +120 -0
  14. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/images.pptx +0 -0
  15. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/index.rst +6 -0
  16. anemoi_datasets-0.5.0/docs/using/code/fill_missing_gaps_.py +1 -0
  17. anemoi_datasets-0.5.0/docs/using/code/frequency2_.py +1 -0
  18. anemoi_datasets-0.5.0/docs/using/code/iterating_missing_dates1_.py +4 -0
  19. anemoi_datasets-0.5.0/docs/using/code/iterating_missing_dates2_.py +9 -0
  20. anemoi_datasets-0.5.0/docs/using/code/iterating_missing_dates3_.py +2 -0
  21. anemoi_datasets-0.5.0/docs/using/code/missing_dates_.py +1 -0
  22. anemoi_datasets-0.5.0/docs/using/code/rescale_.py +30 -0
  23. anemoi_datasets-0.5.0/docs/using/code/xy1_.py +5 -0
  24. anemoi_datasets-0.5.0/docs/using/code/xy2_.py +4 -0
  25. anemoi_datasets-0.5.0/docs/using/code/zip_xy_.py +9 -0
  26. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/combining.rst +28 -1
  27. anemoi_datasets-0.5.0/docs/using/images/cutout-5.png +0 -0
  28. anemoi_datasets-0.5.0/docs/using/images/cutout-6.png +0 -0
  29. anemoi_datasets-0.5.0/docs/using/images/skip-missing.png +0 -0
  30. anemoi_datasets-0.5.0/docs/using/missing.rst +78 -0
  31. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/other.rst +0 -16
  32. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/selecting.rst +25 -0
  33. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/subsetting.rst +11 -1
  34. anemoi_datasets-0.5.0/docs/using/zip.rst +64 -0
  35. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/pyproject.toml +12 -18
  36. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/_version.py +2 -2
  37. anemoi_datasets-0.5.0/src/anemoi/datasets/commands/cleanup.py +44 -0
  38. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/commands/create.py +52 -21
  39. anemoi_datasets-0.5.0/src/anemoi/datasets/commands/finalise-additions.py +45 -0
  40. anemoi_datasets-0.5.0/src/anemoi/datasets/commands/finalise.py +39 -0
  41. anemoi_datasets-0.5.0/src/anemoi/datasets/commands/init-additions.py +45 -0
  42. anemoi_datasets-0.5.0/src/anemoi/datasets/commands/init.py +67 -0
  43. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/commands/inspect.py +1 -1
  44. anemoi_datasets-0.5.0/src/anemoi/datasets/commands/load-additions.py +47 -0
  45. anemoi_datasets-0.5.0/src/anemoi/datasets/commands/load.py +47 -0
  46. anemoi_datasets-0.5.0/src/anemoi/datasets/commands/patch.py +39 -0
  47. anemoi_datasets-0.5.0/src/anemoi/datasets/create/__init__.py +1015 -0
  48. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/check.py +5 -3
  49. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/config.py +54 -2
  50. anemoi_datasets-0.5.0/src/anemoi/datasets/create/functions/filters/pressure_level_relative_humidity_to_specific_humidity.py +57 -0
  51. anemoi_datasets-0.5.0/src/anemoi/datasets/create/functions/filters/pressure_level_specific_humidity_to_relative_humidity.py +57 -0
  52. anemoi_datasets-0.5.0/src/anemoi/datasets/create/functions/filters/single_level_dewpoint_to_relative_humidity.py +54 -0
  53. anemoi_datasets-0.5.0/src/anemoi/datasets/create/functions/filters/single_level_relative_humidity_to_dewpoint.py +59 -0
  54. anemoi_datasets-0.5.0/src/anemoi/datasets/create/functions/filters/single_level_relative_humidity_to_specific_humidity.py +115 -0
  55. anemoi_datasets-0.5.0/src/anemoi/datasets/create/functions/filters/single_level_specific_humidity_to_relative_humidity.py +390 -0
  56. anemoi_datasets-0.5.0/src/anemoi/datasets/create/functions/filters/speeddir_to_uv.py +77 -0
  57. anemoi_datasets-0.5.0/src/anemoi/datasets/create/functions/filters/uv_to_speeddir.py +55 -0
  58. anemoi_datasets-0.5.0/src/anemoi/datasets/create/functions/sources/grib.py +144 -0
  59. anemoi_datasets-0.5.0/src/anemoi/datasets/create/functions/sources/hindcasts.py +61 -0
  60. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/mars.py +9 -3
  61. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/xarray/__init__.py +12 -2
  62. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/xarray/coordinates.py +7 -0
  63. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/xarray/field.py +8 -2
  64. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/xarray/fieldlist.py +0 -2
  65. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/xarray/flavour.py +21 -1
  66. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/xarray/metadata.py +40 -40
  67. anemoi_datasets-0.5.0/src/anemoi/datasets/create/functions/sources/xarray/time.py +131 -0
  68. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/xarray/variable.py +15 -38
  69. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/input.py +62 -39
  70. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/persistent.py +1 -1
  71. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/statistics/__init__.py +39 -23
  72. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/utils.py +6 -2
  73. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/data/__init__.py +1 -0
  74. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/data/concat.py +46 -2
  75. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/data/dataset.py +119 -34
  76. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/data/debug.py +5 -1
  77. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/data/forwards.py +17 -8
  78. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/data/grids.py +17 -3
  79. anemoi_datasets-0.5.0/src/anemoi/datasets/data/interpolate.py +133 -0
  80. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/data/masked.py +2 -2
  81. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/data/misc.py +56 -66
  82. anemoi_datasets-0.5.0/src/anemoi/datasets/data/missing.py +240 -0
  83. anemoi_datasets-0.5.0/src/anemoi/datasets/data/rescale.py +147 -0
  84. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/data/select.py +7 -1
  85. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/data/stores.py +23 -10
  86. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/data/subset.py +47 -5
  87. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/data/unchecked.py +20 -22
  88. anemoi_datasets-0.5.0/src/anemoi/datasets/data/xy.py +125 -0
  89. anemoi_datasets-0.5.0/src/anemoi/datasets/dates/__init__.py +242 -0
  90. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/dates/groups.py +85 -20
  91. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/grids.py +66 -48
  92. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi_datasets.egg-info/PKG-INFO +8 -17
  93. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi_datasets.egg-info/SOURCES.txt +44 -3
  94. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi_datasets.egg-info/requires.txt +8 -17
  95. anemoi_datasets-0.5.0/tests/create/run.sh +20 -0
  96. anemoi_datasets-0.5.0/tests/create/test_create.py +257 -0
  97. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tests/test_chunks.py +4 -1
  98. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tests/test_data.py +22 -5
  99. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tests/xarray/test_kerchunk.py +4 -1
  100. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tests/xarray/test_netcdf.py +2 -0
  101. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tests/xarray/test_opendap.py +6 -1
  102. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tests/xarray/test_zarr.py +48 -4
  103. anemoi_datasets-0.5.0/tools/upload-sample-dataset.py +41 -0
  104. anemoi_datasets-0.4.4/.github/workflows/python-publish.yml +0 -74
  105. anemoi_datasets-0.4.4/docs/building/syntax.rst +0 -6
  106. anemoi_datasets-0.4.4/src/anemoi/datasets/create/__init__.py +0 -202
  107. anemoi_datasets-0.4.4/src/anemoi/datasets/create/functions/sources/grib.py +0 -59
  108. anemoi_datasets-0.4.4/src/anemoi/datasets/create/functions/sources/hindcasts.py +0 -120
  109. anemoi_datasets-0.4.4/src/anemoi/datasets/create/functions/sources/xarray/time.py +0 -98
  110. anemoi_datasets-0.4.4/src/anemoi/datasets/create/loaders.py +0 -936
  111. anemoi_datasets-0.4.4/src/anemoi/datasets/dates/__init__.py +0 -213
  112. anemoi_datasets-0.4.4/tests/create/test_create.py +0 -239
  113. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/.github/ci-config.yml +0 -0
  114. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/.github/workflows/label-public-pr.yml +0 -0
  115. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/.github/workflows/readthedocs-pr-update.yml +0 -0
  116. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/.readthedocs.yaml +0 -0
  117. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/.vscode/spellright.dict +0 -0
  118. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/LICENSE +0 -0
  119. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/README.md +0 -0
  120. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/Makefile +0 -0
  121. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/_static/logo.png +0 -0
  122. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/_static/style.css +0 -0
  123. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/_templates/.gitkeep +0 -0
  124. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/apply-fmt.sh +0 -0
  125. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/advanced-options.rst +0 -0
  126. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/filters/empty.rst +0 -0
  127. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/filters/noop.rst +0 -0
  128. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/filters/rename.rst +0 -0
  129. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/filters/rotate_winds.rst +0 -0
  130. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/filters/select.rst +0 -0
  131. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/filters/unrotate_winds.rst +0 -0
  132. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/filters.rst +0 -0
  133. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/handling-missing-dates.rst +0 -0
  134. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/handling-missing-values.rst +0 -0
  135. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/introduction.rst +0 -0
  136. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/naming-variables.rst +0 -0
  137. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/operations.rst +0 -0
  138. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/accumulations.rst +0 -0
  139. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/accumulations1.yaml +0 -0
  140. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/accumulations2.yaml +0 -0
  141. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/forcings.rst +0 -0
  142. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/forcings.yaml +0 -0
  143. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/grib.rst +0 -0
  144. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/hindcasts.rst +0 -0
  145. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/hindcasts.yaml +0 -0
  146. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/mars.rst +0 -0
  147. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/mars1.yaml +0 -0
  148. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/mars2.yaml +0 -0
  149. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/netcdf.rst +0 -0
  150. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/netcdf.yaml +0 -0
  151. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/opendap.rst +0 -0
  152. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/opendap.yaml +0 -0
  153. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/recentre.rst +0 -0
  154. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/xarray-kerchunk.py +0 -0
  155. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/xarray-kerchunk.rst +0 -0
  156. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/xarray-kerchunk.yaml +0 -0
  157. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/xarray-zarr.rst +0 -0
  158. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/xarray-zarr.yaml +0 -0
  159. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/yaml/grib1.yaml +0 -0
  160. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/yaml/grib2.yaml +0 -0
  161. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/yaml/grib3.yaml +0 -0
  162. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/yaml/grib4.yaml +0 -0
  163. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/yaml/hindcasts.yaml +0 -0
  164. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/yaml/recentre.yaml +0 -0
  165. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/zenodo.rst +0 -0
  166. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources/zenodo.yaml +0 -0
  167. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/sources.rst +0 -0
  168. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/statistics.rst +0 -0
  169. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/syntax.yaml +0 -0
  170. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/yaml/Makefile +0 -0
  171. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/yaml/building1.txt +0 -0
  172. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/yaml/building1.yaml +0 -0
  173. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/yaml/building2.txt +0 -0
  174. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/yaml/building2.yaml +0 -0
  175. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/yaml/building3.txt +0 -0
  176. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/yaml/building3.yaml +0 -0
  177. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/yaml/concat.yaml +0 -0
  178. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/yaml/hindcasts.yaml +0 -0
  179. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/yaml/input.yaml +0 -0
  180. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/yaml/missing_dates.yaml +0 -0
  181. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/yaml/nan.yaml +0 -0
  182. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/building/yaml/pipe.yaml +0 -0
  183. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/check-index.sh +0 -0
  184. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/cli/compare.rst +0 -0
  185. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/cli/copy.rst +0 -0
  186. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/cli/create.rst +0 -0
  187. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/cli/inspect.rst +0 -0
  188. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/cli/introduction.rst +0 -0
  189. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/cli/scan.rst +0 -0
  190. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/conf.py +0 -0
  191. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/installing.rst +0 -0
  192. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/overview.rst +0 -0
  193. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/overview_.py +0 -0
  194. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/schemas/matrix.excalidraw +0 -0
  195. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/schemas/matrix.png +0 -0
  196. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/schemas/overview.excalidraw +0 -0
  197. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/schemas/overview.png +0 -0
  198. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/schemas/recipe.excalidraw +0 -0
  199. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/schemas/recipe.png +0 -0
  200. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/area1_.py +0 -0
  201. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/area2_.py +0 -0
  202. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/chain_.py +0 -0
  203. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/combine_example.py +0 -0
  204. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/concat1.py +0 -0
  205. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/cutout_.py +0 -0
  206. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/drop_.py +0 -0
  207. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/end_.py +0 -0
  208. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/ensembles1_.py +0 -0
  209. /anemoi_datasets-0.4.4/docs/using/code/frequency_.py → /anemoi_datasets-0.5.0/docs/using/code/frequency1_.py +0 -0
  210. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/grids1_.py +0 -0
  211. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/join1.py +0 -0
  212. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/matching0_.py +0 -0
  213. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/matching1_.py +0 -0
  214. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/matching2_.py +0 -0
  215. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/matching3_.py +0 -0
  216. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/matching4_.py +0 -0
  217. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/misc1.py +0 -0
  218. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/misc2.py +0 -0
  219. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/missing_.py +0 -0
  220. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/open_cloud.py +0 -0
  221. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/open_combine1_.py +0 -0
  222. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/open_combine2_.py +0 -0
  223. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/open_complex.py +0 -0
  224. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/open_dict_.py +0 -0
  225. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/open_first_.py +0 -0
  226. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/open_list_.py +0 -0
  227. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/open_name.py +0 -0
  228. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/open_other.py +0 -0
  229. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/open_path.py +0 -0
  230. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/open_yaml_.py +0 -0
  231. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/rename_.py +0 -0
  232. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/reorder1_.py +0 -0
  233. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/reorder2_.py +0 -0
  234. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/select1_.py +0 -0
  235. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/select2_.py +0 -0
  236. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/shuffle_.py +0 -0
  237. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/some_attributes_.py +0 -0
  238. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/start_.py +0 -0
  239. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/statistics_.py +0 -0
  240. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/subset_example.py +0 -0
  241. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/thinning_.py +0 -0
  242. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/zip1_.py +0 -0
  243. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/code/zip2_.py +0 -0
  244. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/configuration.rst +0 -0
  245. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/configuration.toml +0 -0
  246. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/grids.rst +0 -0
  247. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/images/area-1.png +0 -0
  248. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/images/concat.png +0 -0
  249. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/images/cutout-1.png +0 -0
  250. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/images/cutout-2.png +0 -0
  251. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/images/cutout-3.png +0 -0
  252. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/images/cutout-4.png +0 -0
  253. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/images/join.png +0 -0
  254. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/images/overlay.png +0 -0
  255. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/images/thinning-after.png +0 -0
  256. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/images/thinning-before.png +0 -0
  257. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/introduction.rst +0 -0
  258. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/matching.rst +0 -0
  259. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/methods.rst +0 -0
  260. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/miscellaneous.rst +0 -0
  261. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/opening.rst +0 -0
  262. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/docs/using/statistics.rst +0 -0
  263. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/setup.cfg +0 -0
  264. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/__init__.py +0 -0
  265. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/__main__.py +0 -0
  266. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/commands/__init__.py +0 -0
  267. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/commands/compare.py +0 -0
  268. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/commands/copy.py +0 -0
  269. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/commands/scan.py +0 -0
  270. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/compute/__init__.py +0 -0
  271. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/compute/recentre.py +0 -0
  272. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/chunks.py +0 -0
  273. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/__init__.py +0 -0
  274. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/filters/__init__.py +0 -0
  275. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/filters/empty.py +0 -0
  276. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/filters/noop.py +0 -0
  277. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/filters/rename.py +0 -0
  278. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/filters/rotate_winds.py +0 -0
  279. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/filters/unrotate_winds.py +0 -0
  280. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/__init__.py +0 -0
  281. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/accumulations.py +0 -0
  282. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/constants.py +0 -0
  283. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/empty.py +0 -0
  284. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/forcings.py +0 -0
  285. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/netcdf.py +0 -0
  286. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/opendap.py +0 -0
  287. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/recentre.py +0 -0
  288. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/source.py +0 -0
  289. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/tendencies.py +0 -0
  290. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/xarray/grid.py +0 -0
  291. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/xarray_kerchunk.py +0 -0
  292. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/xarray_zarr.py +0 -0
  293. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/functions/sources/zenodo.py +0 -0
  294. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/patch.py +0 -0
  295. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/size.py +0 -0
  296. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/statistics/summary.py +0 -0
  297. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/template.py +0 -0
  298. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/trace.py +0 -0
  299. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/writer.py +0 -0
  300. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/create/zarr.py +0 -0
  301. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/data/debug.css +0 -0
  302. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/data/ensemble.py +0 -0
  303. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/data/indexing.py +0 -0
  304. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/data/join.py +0 -0
  305. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/data/statistics.py +0 -0
  306. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi/datasets/utils/__init__.py +0 -0
  307. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi_datasets.egg-info/dependency_links.txt +0 -0
  308. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi_datasets.egg-info/entry_points.txt +0 -0
  309. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/src/anemoi_datasets.egg-info/top_level.txt +0 -0
  310. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tests/create/concat.yaml +0 -0
  311. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tests/create/data_sources.yaml +0 -0
  312. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tests/create/join.yaml +0 -0
  313. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tests/create/missing.yaml +0 -0
  314. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tests/create/nan.yaml +0 -0
  315. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tests/create/pipe.yaml +0 -0
  316. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tests/create/recentre.yaml +0 -0
  317. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tests/create-perturbations-full.yaml +0 -0
  318. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tests/create-shift.yaml +0 -0
  319. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tests/test_dates.py +0 -0
  320. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tests/test_indexing.py +0 -0
  321. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tools/.gitignore +0 -0
  322. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tools/examples/Makefile +0 -0
  323. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tools/examples/an-oper-2023-2023-2p5-6h-v1.yaml +0 -0
  324. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tools/grids/Makefile +0 -0
  325. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tools/grids/grids.ipynb +0 -0
  326. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tools/grids/grids1.yaml +0 -0
  327. {anemoi_datasets-0.4.4 → anemoi_datasets-0.5.0}/tools/grids/grids2.yaml +0 -0
@@ -0,0 +1 @@
1
+ CHANGELOG.md merge=union
@@ -0,0 +1,6 @@
1
+ # CODEOWNERS file
2
+
3
+ # Protect workflow files
4
+ /.github/ @theissenhelen @jesperdramsch @gmertes @b8raoult @floriankrb
5
+ /.pre-commit-config.yaml @theissenhelen @jesperdramsch @gmertes @b8raoult @floriankrb
6
+ /pyproject.toml @theissenhelen @jesperdramsch @gmertes @b8raoult @floriankrb
@@ -0,0 +1,18 @@
1
+ build:
2
+ python: '3.10'
3
+ modules:
4
+ - ninja
5
+ dependencies:
6
+ - ecmwf/ecbuild@develop
7
+ - ecmwf/eccodes@develop
8
+ - ecmwf/eckit@develop
9
+ - ecmwf/odc@develop
10
+ python_dependencies:
11
+ - ecmwf/anemoi-utils@develop
12
+ - ecmwf/earthkit-data@develop
13
+ - ecmwf/earthkit-meteo@develop
14
+ - ecmwf/earthkit-geo@develop
15
+ parallel: 64
16
+
17
+ pytest_cmd: |
18
+ python -m pytest -vv -m 'not notebook and not no_cache_init' --cov=. --cov-report=xml
@@ -5,6 +5,9 @@ on:
5
5
  branches:
6
6
  - main
7
7
  - develop
8
+ paths-ignore:
9
+ - .pre-commit-config.yaml
10
+ - .readthedocs.yaml
8
11
  jobs:
9
12
  Check-Changelog:
10
13
  name: Check Changelog Action
@@ -0,0 +1,35 @@
1
+ # .github/workflows/update-changelog.yaml
2
+ name: "Update Changelog"
3
+
4
+ on:
5
+ release:
6
+ types: [released]
7
+ workflow_dispatch: ~
8
+
9
+ permissions:
10
+ pull-requests: write
11
+ contents: write
12
+
13
+ jobs:
14
+ update:
15
+ runs-on: ubuntu-latest
16
+
17
+ steps:
18
+ - name: Checkout code
19
+ uses: actions/checkout@v4
20
+ with:
21
+ ref: ${{ github.event.release.target_commitish }}
22
+
23
+ - name: Update Changelog
24
+ uses: stefanzweifel/changelog-updater-action@v1
25
+ with:
26
+ latest-version: ${{ github.event.release.tag_name }}
27
+ heading-text: ${{ github.event.release.name }}
28
+
29
+ - name: Create Pull Request
30
+ uses: peter-evans/create-pull-request@v6
31
+ with:
32
+ branch: docs/changelog-update-${{ github.event.release.tag_name }}
33
+ title: '[Changelog] Update to ${{ github.event.release.tag_name }}'
34
+ add-paths: |
35
+ CHANGELOG.md
@@ -8,9 +8,17 @@ on:
8
8
  - 'develop'
9
9
  tags-ignore:
10
10
  - '**'
11
+ paths-ignore:
12
+ - "docs/**"
13
+ - "CHANGELOG.md"
14
+ - "README.md"
11
15
 
12
16
  # Trigger the workflow on pull request
13
- pull_request: ~
17
+ pull_request:
18
+ paths-ignore:
19
+ - "docs/**"
20
+ - "CHANGELOG.md"
21
+ - "README.md"
14
22
 
15
23
  # Trigger the workflow manually
16
24
  workflow_dispatch: ~
@@ -18,6 +26,11 @@ on:
18
26
  # Trigger after public PR approved for CI
19
27
  pull_request_target:
20
28
  types: [labeled]
29
+ paths-ignore:
30
+ - "docs/**"
31
+ - "CHANGELOG.md"
32
+ - "README.md"
33
+
21
34
 
22
35
  jobs:
23
36
  # Run CI including downstream packages on self-hosted runners
@@ -34,7 +47,7 @@ jobs:
34
47
  downstream-ci-hpc:
35
48
  name: downstream-ci-hpc
36
49
  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
50
+ uses: ecmwf-actions/downstream-ci/.github/workflows/downstream-ci-hpc.yml@main
38
51
  with:
39
52
  anemoi-datasets: ecmwf/anemoi-datasets@${{ github.event.pull_request.head.sha || github.sha }}
40
53
  secrets: inherit
@@ -0,0 +1,24 @@
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
+ with:
19
+ python-version: "3.9"
20
+
21
+ deploy:
22
+ needs: [checks, quality]
23
+ uses: ecmwf-actions/reusable-workflows/.github/workflows/cd-pypi.yml@v2
24
+ 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:
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 }}
@@ -120,6 +120,7 @@ celerybeat.pid
120
120
  *.sage.py
121
121
 
122
122
  # Environments
123
+ .envrc
123
124
  .env
124
125
  .venv
125
126
  env/
@@ -188,3 +189,8 @@ _build/
188
189
  *.sync
189
190
  *.dot
190
191
  _dev/
192
+ *.to_upload
193
+ *.tmp
194
+ test.ipynb
195
+ *tmp_data/
196
+ tempCodeRunnerFile.python
@@ -20,8 +20,14 @@ repos:
20
20
  - id: no-commit-to-branch # Prevent committing to main / master
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
+ - repo: https://github.com/pre-commit/pygrep-hooks
24
+ rev: v1.10.0 # Use the ref you want to point at
25
+ hooks:
26
+ - id: python-use-type-annotations # Check for missing type annotations
27
+ - id: python-check-blanket-noqa # Check for # noqa: all
28
+ - id: python-no-log-warn # Check for log.warn
23
29
  - repo: https://github.com/psf/black-pre-commit-mirror
24
- rev: 24.4.2
30
+ rev: 24.8.0
25
31
  hooks:
26
32
  - id: black
27
33
  args: [--line-length=120]
@@ -34,18 +40,18 @@ repos:
34
40
  - --force-single-line-imports
35
41
  - --profile black
36
42
  - repo: https://github.com/astral-sh/ruff-pre-commit
37
- rev: v0.4.6
43
+ rev: v0.6.4
38
44
  hooks:
39
45
  - id: ruff
40
- # Next line is to exclude for documentation code snippets
41
- exclude: 'docs/(.*/)?[a-z]\w+_.py$'
46
+ # Next line if for documenation cod snippets
47
+ exclude: '^[^_].*_\.py$'
42
48
  args:
43
49
  - --line-length=120
44
50
  - --fix
45
51
  - --exit-non-zero-on-fix
46
52
  - --preview
47
53
  - repo: https://github.com/sphinx-contrib/sphinx-lint
48
- rev: v0.9.1
54
+ rev: v1.0.0
49
55
  hooks:
50
56
  - id: sphinx-lint
51
57
  # For now, we use it. But it does not support a lot of sphinx features
@@ -59,12 +65,10 @@ repos:
59
65
  hooks:
60
66
  - id: docconvert
61
67
  args: ["numpy"]
62
- - repo: https://github.com/b8raoult/optional-dependencies-all
63
- rev: "0.0.6"
64
- hooks:
65
- - id: optional-dependencies-all
66
- args: ["--inplace", "--exclude-keys=dev,docs,tests", "--group=dev=all,docs,tests"]
67
68
  - repo: https://github.com/tox-dev/pyproject-fmt
68
- rev: "2.1.3"
69
+ rev: "2.2.3"
69
70
  hooks:
70
71
  - id: pyproject-fmt
72
+
73
+ ci:
74
+ autoupdate_schedule: monthly
@@ -12,8 +12,39 @@ Keep it human-readable, your future self will thank you!
12
12
 
13
13
  ### Added
14
14
 
15
+ - New `rescale` keyword in `open_dataset` to change units of variables #36
16
+ - Simplify imports
17
+
15
18
  ### Changed
16
19
 
20
+ - Added incremental building of datasets
21
+ - Add missing dependency for documentation building
22
+ - Fix failing test due to previous merge
23
+ - Bug fix when creating dataset from zarr
24
+ - Bug fix with area selection in cutout operation
25
+ - add paths-ignore to ci workflow
26
+
27
+ ### Removed
28
+ - pytest for notebooks
29
+
30
+ ## [0.4.5]
31
+
32
+ ### Added
33
+
34
+ - New `interpolate_frequency` keyword in `open_dataset`
35
+ - CI workflow to update the changelog on release
36
+ - adds the reusable cd pypi workflow
37
+ - merge strategy for changelog in .gitattributes #25
38
+ - adds ci hpc config (#43)
39
+
40
+ ### Changed
41
+
42
+ - update CI to reusable workflows for PRs and releases
43
+ - Support sub-hourly datasets.
44
+ - Change negative variance detection to make it less restrictive
45
+ - Fix cutout bug that left some global grid points in the lam part
46
+ - Fix bug in computing missing dates in cutout option
47
+
17
48
  ### Removed
18
49
 
19
50
  ## [0.4.4] Bug fixes
@@ -54,6 +85,9 @@ Keep it human-readable, your future self will thank you!
54
85
  - combine datasets
55
86
 
56
87
  ## Git Diffs:
88
+ [Unreleased]: https://github.com/ecmwf/anemoi-datasets/compare/0.4.5...HEAD
89
+ [0.4.5]: https://github.com/ecmwf/anemoi-datasets/compare/0.4.4...0.4.5
90
+ [0.4.4]: https://github.com/ecmwf/anemoi-datasets/compare/0.4.0...0.4.4
57
91
  [0.4.0]: https://github.com/ecmwf/anemoi-datasets/compare/0.3.0...0.4.0
58
92
  [0.3.0]: https://github.com/ecmwf/anemoi-datasets/compare/0.2.0...0.3.0
59
93
  [0.2.0]: https://github.com/ecmwf/anemoi-datasets/compare/0.1.0...0.2.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: anemoi-datasets
3
- Version: 0.4.4
3
+ Version: 0.5.0
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,14 +223,14 @@ 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
+ Requires-Dist: cfunits
227
228
  Requires-Dist: numpy
228
229
  Requires-Dist: pyyaml
229
230
  Requires-Dist: semantic-version
230
231
  Requires-Dist: tqdm
231
- Requires-Dist: zarr
232
+ Requires-Dist: zarr<=2.17
232
233
  Provides-Extra: all
233
- Requires-Dist: aiohttp; extra == "all"
234
234
  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"
@@ -241,7 +241,6 @@ Requires-Dist: gcsfs; extra == "all"
241
241
  Requires-Dist: kerchunk; extra == "all"
242
242
  Requires-Dist: pyproj; extra == "all"
243
243
  Requires-Dist: requests; extra == "all"
244
- Requires-Dist: s3fs; extra == "all"
245
244
  Provides-Extra: create
246
245
  Requires-Dist: earthkit-data[mars]>=0.9; extra == "create"
247
246
  Requires-Dist: earthkit-geo>=0.2; extra == "create"
@@ -250,7 +249,6 @@ Requires-Dist: ecmwflibs>=0.6.3; extra == "create"
250
249
  Requires-Dist: entrypoints; extra == "create"
251
250
  Requires-Dist: pyproj; extra == "create"
252
251
  Provides-Extra: dev
253
- Requires-Dist: aiohttp; extra == "dev"
254
252
  Requires-Dist: boto3; extra == "dev"
255
253
  Requires-Dist: earthkit-data[mars]>=0.9; extra == "dev"
256
254
  Requires-Dist: earthkit-geo>=0.2; extra == "dev"
@@ -264,26 +262,19 @@ Requires-Dist: pandoc; extra == "dev"
264
262
  Requires-Dist: pyproj; extra == "dev"
265
263
  Requires-Dist: pytest; extra == "dev"
266
264
  Requires-Dist: requests; extra == "dev"
267
- Requires-Dist: rstfmt; extra == "dev"
268
- Requires-Dist: s3fs; extra == "dev"
269
265
  Requires-Dist: sphinx; extra == "dev"
270
- Requires-Dist: sphinx-argparse<0.5; extra == "dev"
271
266
  Requires-Dist: sphinx-rtd-theme; extra == "dev"
272
267
  Provides-Extra: docs
273
268
  Requires-Dist: nbsphinx; extra == "docs"
274
269
  Requires-Dist: pandoc; extra == "docs"
275
- Requires-Dist: rstfmt; extra == "docs"
276
270
  Requires-Dist: sphinx; extra == "docs"
277
- Requires-Dist: sphinx-argparse<0.5; extra == "docs"
271
+ Requires-Dist: sphinx-argparse; extra == "docs"
278
272
  Requires-Dist: sphinx-rtd-theme; extra == "docs"
279
- Provides-Extra: kerchunk
280
- Requires-Dist: gcsfs; extra == "kerchunk"
281
- Requires-Dist: kerchunk; extra == "kerchunk"
282
- Requires-Dist: s3fs; extra == "kerchunk"
283
273
  Provides-Extra: remote
284
- Requires-Dist: aiohttp; extra == "remote"
285
274
  Requires-Dist: boto3; extra == "remote"
286
275
  Requires-Dist: requests; extra == "remote"
287
- Requires-Dist: s3fs; extra == "remote"
288
276
  Provides-Extra: tests
289
277
  Requires-Dist: pytest; extra == "tests"
278
+ Provides-Extra: xarray
279
+ Requires-Dist: gcsfs; extra == "xarray"
280
+ Requires-Dist: kerchunk; extra == "xarray"
@@ -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
90
+ anemoi-datasets load-additions dataset.zarr --part 1/2 --delta 6h
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
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,30 @@
1
+ # Scale and offset can be passed as a dictionnary...
2
+
3
+ ds = open_dataset(
4
+ dataset,
5
+ rescale={"2t": {"scale": 1.0, "offset": -273.15}},
6
+ )
7
+
8
+ # ... a tuple of floating points ....
9
+
10
+ ds = open_dataset(
11
+ dataset,
12
+ rescale={"2t": (1.0, -273.15)},
13
+ )
14
+
15
+ # ... or a tuple of strings representing units.
16
+
17
+ ds = open_dataset(
18
+ dataset,
19
+ rescale={"2t": ("K", "degC")},
20
+ )
21
+
22
+ # Several variables can be rescaled at once.
23
+
24
+ ds = open_dataset(
25
+ dataset,
26
+ rescale={
27
+ "2t": ("K", "degC"),
28
+ "tp": ("m", "mm"),
29
+ },
30
+ )
@@ -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.