anemoi-datasets 0.5.13__tar.gz → 0.5.15__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 (376) hide show
  1. anemoi_datasets-0.5.15/.github/workflows/python-publish.yml +27 -0
  2. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/.pre-commit-config.yaml +1 -1
  3. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/CHANGELOG.md +2 -0
  4. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/PKG-INFO +8 -8
  5. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/pyproject.toml +7 -7
  6. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/_version.py +2 -2
  7. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/commands/create.py +4 -2
  8. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/__init__.py +14 -2
  9. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/accumulations.py +6 -2
  10. anemoi_datasets-0.5.15/src/anemoi/datasets/create/functions/sources/eccc_fstd.py +16 -0
  11. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/mars.py +5 -1
  12. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/input/result.py +1 -1
  13. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/statistics/__init__.py +5 -2
  14. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/dataset.py +1 -1
  15. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/misc.py +24 -0
  16. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/grids.py +6 -0
  17. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi_datasets.egg-info/PKG-INFO +8 -8
  18. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi_datasets.egg-info/SOURCES.txt +2 -0
  19. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi_datasets.egg-info/requires.txt +7 -7
  20. anemoi_datasets-0.5.15/tests/create/regrid.yaml +31 -0
  21. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/test_data.py +45 -0
  22. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/xarray/test_opendap.py +6 -0
  23. anemoi_datasets-0.5.13/.github/workflows/python-publish.yml +0 -28
  24. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/.gitattributes +0 -0
  25. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/.github/CODEOWNERS +0 -0
  26. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  27. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/.github/ci-config.yml +0 -0
  28. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/.github/ci-hpc-config.yml +0 -0
  29. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/.github/workflows/changelog-pr-update.yml +0 -0
  30. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/.github/workflows/changelog-release-update.yml +0 -0
  31. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/.github/workflows/ci.yml +0 -0
  32. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/.github/workflows/label-public-pr.yml +0 -0
  33. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/.github/workflows/push-to-private.yml +0 -0
  34. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/.github/workflows/python-pull-request.yml +0 -0
  35. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/.github/workflows/readthedocs-pr-update.yml +0 -0
  36. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/.gitignore +0 -0
  37. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/.readthedocs.yaml +0 -0
  38. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/.vscode/spellright.dict +0 -0
  39. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/CONTRIBUTORS.md +0 -0
  40. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/LICENSE +0 -0
  41. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/README.md +0 -0
  42. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/Makefile +0 -0
  43. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/_static/logo.png +0 -0
  44. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/_static/style.css +0 -0
  45. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/_templates/.gitkeep +0 -0
  46. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/apply-fmt.sh +0 -0
  47. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/advanced-options.rst +0 -0
  48. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/filters/empty.rst +0 -0
  49. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/filters/noop.rst +0 -0
  50. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/filters/orog_to_z.rst +0 -0
  51. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/filters/rename.rst +0 -0
  52. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/filters/rotate_winds.rst +0 -0
  53. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/filters/select.rst +0 -0
  54. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/filters/sum.rst +0 -0
  55. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/filters/unrotate_winds.rst +0 -0
  56. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/filters/wz_to_w.rst +0 -0
  57. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/filters/yaml/orog_to_z.yaml +0 -0
  58. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/filters/yaml/rename.yaml +0 -0
  59. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/filters/yaml/sum.yaml +0 -0
  60. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/filters/yaml/wz_to_w.yaml +0 -0
  61. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/filters.rst +0 -0
  62. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/handling-missing-dates.rst +0 -0
  63. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/handling-missing-values.rst +0 -0
  64. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/incremental.rst +0 -0
  65. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/introduction.rst +0 -0
  66. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/naming-variables.rst +0 -0
  67. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/operations.rst +0 -0
  68. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/accumulations.rst +0 -0
  69. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/forcings.rst +0 -0
  70. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/grib.rst +0 -0
  71. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/hindcasts.rst +0 -0
  72. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/mars.rst +0 -0
  73. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/netcdf.rst +0 -0
  74. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/opendap.rst +0 -0
  75. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/recentre.rst +0 -0
  76. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/repeated_dates.rst +0 -0
  77. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/xarray-based.rst +0 -0
  78. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/xarray-kerchunk.py +0 -0
  79. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/xarray-kerchunk.rst +0 -0
  80. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/xarray-zarr.rst +0 -0
  81. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/accumulations1.yaml +0 -0
  82. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/accumulations2.yaml +0 -0
  83. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/forcings.yaml +0 -0
  84. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/grib1.yaml +0 -0
  85. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/grib2.yaml +0 -0
  86. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/grib3.yaml +0 -0
  87. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/grib4.yaml +0 -0
  88. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/hindcasts.yaml +0 -0
  89. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/mars1.yaml +0 -0
  90. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/mars2.yaml +0 -0
  91. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/netcdf.yaml +0 -0
  92. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/opendap.yaml +0 -0
  93. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/recentre.yaml +0 -0
  94. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/repeated_dates1.yaml +0 -0
  95. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/repeated_dates2.yaml +0 -0
  96. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/repeated_dates3.yaml +0 -0
  97. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/repeated_dates4.yaml +0 -0
  98. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/xarray-based.yaml +0 -0
  99. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/xarray-kerchunk.yaml +0 -0
  100. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/xarray-zarr.yaml +0 -0
  101. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/yaml/zenodo.yaml +0 -0
  102. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources/zenodo.rst +0 -0
  103. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/sources.rst +0 -0
  104. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/statistics.rst +0 -0
  105. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/syntax.yaml +0 -0
  106. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/yaml/Makefile +0 -0
  107. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/yaml/building1.txt +0 -0
  108. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/yaml/building1.yaml +0 -0
  109. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/yaml/building2.txt +0 -0
  110. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/yaml/building2.yaml +0 -0
  111. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/yaml/building3.txt +0 -0
  112. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/yaml/building3.yaml +0 -0
  113. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/yaml/concat.yaml +0 -0
  114. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/yaml/hindcasts.yaml +0 -0
  115. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/yaml/input.yaml +0 -0
  116. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/yaml/missing_dates.yaml +0 -0
  117. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/yaml/nan.yaml +0 -0
  118. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/building/yaml/pipe.yaml +0 -0
  119. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/check-index.sh +0 -0
  120. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/cli/compare.rst +0 -0
  121. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/cli/copy.rst +0 -0
  122. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/cli/create.rst +0 -0
  123. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/cli/inspect.rst +0 -0
  124. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/cli/introduction.rst +0 -0
  125. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/cli/scan.rst +0 -0
  126. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/conf.py +0 -0
  127. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/images.pptx +0 -0
  128. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/index.rst +0 -0
  129. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/installing.rst +0 -0
  130. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/naming_conventions.rst +0 -0
  131. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/overview.rst +0 -0
  132. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/overview_.py +0 -0
  133. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/schemas/matrix.excalidraw +0 -0
  134. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/schemas/matrix.png +0 -0
  135. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/schemas/overview.excalidraw +0 -0
  136. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/schemas/overview.png +0 -0
  137. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/schemas/recipe.excalidraw +0 -0
  138. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/schemas/recipe.png +0 -0
  139. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/area1_.py +0 -0
  140. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/area2_.py +0 -0
  141. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/chain_.py +0 -0
  142. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/combine_example.py +0 -0
  143. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/complement1_.py +0 -0
  144. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/complement2_.py +0 -0
  145. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/complement3_.py +0 -0
  146. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/concat1.py +0 -0
  147. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/cutout_.py +0 -0
  148. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/drop_.py +0 -0
  149. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/end_.py +0 -0
  150. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/ensembles1_.py +0 -0
  151. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/fill_missing_dates1_.py +0 -0
  152. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/fill_missing_dates2_.py +0 -0
  153. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/fill_missing_gaps_.py +0 -0
  154. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/frequency1_.py +0 -0
  155. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/frequency2_.py +0 -0
  156. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/grids1_.py +0 -0
  157. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/iterating_missing_dates1_.py +0 -0
  158. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/iterating_missing_dates2_.py +0 -0
  159. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/iterating_missing_dates3_.py +0 -0
  160. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/join1.py +0 -0
  161. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/matching0_.py +0 -0
  162. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/matching1_.py +0 -0
  163. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/matching2_.py +0 -0
  164. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/matching3_.py +0 -0
  165. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/matching4_.py +0 -0
  166. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/misc1.py +0 -0
  167. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/misc2.py +0 -0
  168. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/missing_.py +0 -0
  169. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/number1_.py +0 -0
  170. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/number2_.py +0 -0
  171. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/open_cloud.py +0 -0
  172. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/open_combine1_.py +0 -0
  173. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/open_combine2_.py +0 -0
  174. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/open_complex.py +0 -0
  175. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/open_dict_.py +0 -0
  176. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/open_first_.py +0 -0
  177. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/open_list_.py +0 -0
  178. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/open_name.py +0 -0
  179. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/open_other.py +0 -0
  180. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/open_path.py +0 -0
  181. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/open_yaml_.py +0 -0
  182. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/rename_.py +0 -0
  183. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/reorder1_.py +0 -0
  184. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/reorder2_.py +0 -0
  185. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/rescale_.py +0 -0
  186. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/select1_.py +0 -0
  187. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/select2_.py +0 -0
  188. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/set_missing_dates_.py +0 -0
  189. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/shuffle_.py +0 -0
  190. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/some_attributes_.py +0 -0
  191. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/start_.py +0 -0
  192. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/statistics_.py +0 -0
  193. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/subset_example.py +0 -0
  194. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/thinning_.py +0 -0
  195. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/xy1_.py +0 -0
  196. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/xy2_.py +0 -0
  197. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/zip1_.py +0 -0
  198. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/zip2_.py +0 -0
  199. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/code/zip_xy_.py +0 -0
  200. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/combining.rst +0 -0
  201. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/configuration.rst +0 -0
  202. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/configuration.toml +0 -0
  203. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/ensembles.rst +0 -0
  204. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/grids.rst +0 -0
  205. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/images/area-1.png +0 -0
  206. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/images/concat.png +0 -0
  207. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/images/cutout-1.png +0 -0
  208. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/images/cutout-2.png +0 -0
  209. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/images/cutout-3.png +0 -0
  210. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/images/cutout-4.png +0 -0
  211. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/images/cutout-5.png +0 -0
  212. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/images/cutout-6.png +0 -0
  213. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/images/join.png +0 -0
  214. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/images/overlay.png +0 -0
  215. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/images/skip-missing.png +0 -0
  216. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/images/thinning-after.png +0 -0
  217. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/images/thinning-before.png +0 -0
  218. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/introduction.rst +0 -0
  219. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/matching.rst +0 -0
  220. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/methods.rst +0 -0
  221. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/miscellaneous.rst +0 -0
  222. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/missing.rst +0 -0
  223. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/opening.rst +0 -0
  224. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/other.rst +0 -0
  225. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/selecting.rst +0 -0
  226. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/statistics.rst +0 -0
  227. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/subsetting.rst +0 -0
  228. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/docs/using/zip.rst +0 -0
  229. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/setup.cfg +0 -0
  230. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/__init__.py +0 -0
  231. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/__main__.py +0 -0
  232. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/commands/__init__.py +0 -0
  233. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/commands/cleanup.py +0 -0
  234. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/commands/compare.py +0 -0
  235. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/commands/copy.py +0 -0
  236. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/commands/finalise-additions.py +0 -0
  237. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/commands/finalise.py +0 -0
  238. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/commands/init-additions.py +0 -0
  239. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/commands/init.py +0 -0
  240. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/commands/inspect.py +0 -0
  241. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/commands/load-additions.py +0 -0
  242. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/commands/load.py +0 -0
  243. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/commands/patch.py +0 -0
  244. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/commands/publish.py +0 -0
  245. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/commands/scan.py +0 -0
  246. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/compute/__init__.py +0 -0
  247. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/compute/recentre.py +0 -0
  248. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/check.py +0 -0
  249. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/chunks.py +0 -0
  250. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/config.py +0 -0
  251. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/__init__.py +0 -0
  252. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/filters/__init__.py +0 -0
  253. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/filters/empty.py +0 -0
  254. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/filters/noop.py +0 -0
  255. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/filters/orog_to_z.py +0 -0
  256. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/filters/pressure_level_relative_humidity_to_specific_humidity.py +0 -0
  257. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/filters/pressure_level_specific_humidity_to_relative_humidity.py +0 -0
  258. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/filters/rename.py +0 -0
  259. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/filters/rotate_winds.py +0 -0
  260. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/filters/single_level_dewpoint_to_relative_humidity.py +0 -0
  261. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/filters/single_level_relative_humidity_to_dewpoint.py +0 -0
  262. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/filters/single_level_relative_humidity_to_specific_humidity.py +0 -0
  263. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/filters/single_level_specific_humidity_to_relative_humidity.py +0 -0
  264. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/filters/speeddir_to_uv.py +0 -0
  265. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/filters/sum.py +0 -0
  266. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/filters/unrotate_winds.py +0 -0
  267. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/filters/uv_to_speeddir.py +0 -0
  268. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/filters/wz_to_w.py +0 -0
  269. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/__init__.py +0 -0
  270. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/constants.py +0 -0
  271. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/empty.py +0 -0
  272. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/forcings.py +0 -0
  273. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/grib.py +0 -0
  274. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/hindcasts.py +0 -0
  275. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/netcdf.py +0 -0
  276. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/opendap.py +0 -0
  277. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/recentre.py +0 -0
  278. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/source.py +0 -0
  279. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/tendencies.py +0 -0
  280. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/xarray/__init__.py +0 -0
  281. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/xarray/coordinates.py +0 -0
  282. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/xarray/field.py +0 -0
  283. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/xarray/fieldlist.py +0 -0
  284. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/xarray/flavour.py +0 -0
  285. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/xarray/grid.py +0 -0
  286. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/xarray/metadata.py +0 -0
  287. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/xarray/patch.py +0 -0
  288. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/xarray/time.py +0 -0
  289. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/xarray/variable.py +0 -0
  290. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/xarray_kerchunk.py +0 -0
  291. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/xarray_zarr.py +0 -0
  292. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/functions/sources/zenodo.py +0 -0
  293. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/input/__init__.py +0 -0
  294. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/input/action.py +0 -0
  295. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/input/concat.py +0 -0
  296. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/input/context.py +0 -0
  297. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/input/data_sources.py +0 -0
  298. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/input/empty.py +0 -0
  299. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/input/filter.py +0 -0
  300. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/input/function.py +0 -0
  301. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/input/join.py +0 -0
  302. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/input/misc.py +0 -0
  303. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/input/pipe.py +0 -0
  304. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/input/repeated_dates.py +0 -0
  305. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/input/step.py +0 -0
  306. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/input/template.py +0 -0
  307. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/input/trace.py +0 -0
  308. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/patch.py +0 -0
  309. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/persistent.py +0 -0
  310. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/size.py +0 -0
  311. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/statistics/summary.py +0 -0
  312. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/utils.py +0 -0
  313. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/writer.py +0 -0
  314. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/create/zarr.py +0 -0
  315. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/__init__.py +0 -0
  316. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/complement.py +0 -0
  317. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/concat.py +0 -0
  318. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/debug.css +0 -0
  319. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/debug.py +0 -0
  320. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/ensemble.py +0 -0
  321. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/fill_missing.py +0 -0
  322. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/forwards.py +0 -0
  323. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/grids.py +0 -0
  324. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/indexing.py +0 -0
  325. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/interpolate.py +0 -0
  326. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/join.py +0 -0
  327. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/masked.py +0 -0
  328. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/merge.py +0 -0
  329. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/missing.py +0 -0
  330. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/rescale.py +0 -0
  331. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/select.py +0 -0
  332. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/statistics.py +0 -0
  333. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/stores.py +0 -0
  334. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/subset.py +0 -0
  335. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/unchecked.py +0 -0
  336. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/data/xy.py +0 -0
  337. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/dates/__init__.py +0 -0
  338. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/dates/groups.py +0 -0
  339. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/testing.py +0 -0
  340. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/utils/__init__.py +0 -0
  341. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi/datasets/utils/fields.py +0 -0
  342. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi_datasets.egg-info/dependency_links.txt +0 -0
  343. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi_datasets.egg-info/entry_points.txt +0 -0
  344. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/src/anemoi_datasets.egg-info/top_level.txt +0 -0
  345. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/create/concat.yaml +0 -0
  346. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/create/join.yaml +0 -0
  347. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/create/missing.yaml +0 -0
  348. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/create/nan.yaml +0 -0
  349. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/create/pipe.yaml +0 -0
  350. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/create/recentre.yaml +0 -0
  351. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/create/run.sh +0 -0
  352. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/create/test_create.py +0 -0
  353. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/create-perturbations-full.yaml +0 -0
  354. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/create-shift.yaml +0 -0
  355. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/test_chunks.py +0 -0
  356. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/test_dates.py +0 -0
  357. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/test_indexing.py +0 -0
  358. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/xarray/test_kerchunk.py +0 -0
  359. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/xarray/test_netcdf.py +0 -0
  360. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/xarray/test_samples.py +0 -0
  361. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tests/xarray/test_zarr.py +0 -0
  362. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tools/.gitignore +0 -0
  363. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tools/examples/Makefile +0 -0
  364. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tools/examples/an-oper-2023-2023-2p5-6h-v1.yaml +0 -0
  365. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tools/grids/Makefile +0 -0
  366. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tools/grids/grids.ipynb +0 -0
  367. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tools/grids/grids1.yaml +0 -0
  368. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tools/grids/grids2.yaml +0 -0
  369. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tools/grids/grids3.yaml +0 -0
  370. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tools/grids/grids4.yaml +0 -0
  371. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tools/grids/grids5.yaml +0 -0
  372. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tools/grids/grids6.yaml +0 -0
  373. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tools/grids/grids7.yaml +0 -0
  374. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tools/grids/grids_multilam.ipynb +0 -0
  375. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tools/make-sample-dataset.py +0 -0
  376. {anemoi_datasets-0.5.13 → anemoi_datasets-0.5.15}/tools/upload-sample-dataset.py +0 -0
@@ -0,0 +1,27 @@
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
+ # if: ${{ !contains(github.repository, 'private') }}
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", "3.11", "3.12"]
21
+ # uses: ecmwf-actions/reusable-workflows/.github/workflows/qa-pytest-pyproject.yml@v2
22
+ # with:
23
+ # python-version: ${{ matrix.python-version }}
24
+
25
+ deploy:
26
+ uses: ecmwf-actions/reusable-workflows/.github/workflows/cd-pypi.yml@v2
27
+ secrets: inherit
@@ -40,7 +40,7 @@ repos:
40
40
  - --force-single-line-imports
41
41
  - --profile black
42
42
  - repo: https://github.com/astral-sh/ruff-pre-commit
43
- rev: v0.8.1
43
+ rev: v0.8.6
44
44
  hooks:
45
45
  - id: ruff
46
46
  args:
@@ -18,6 +18,8 @@ Keep it human-readable, your future self will thank you!
18
18
  - Use cKDTree instead of KDTree
19
19
  - Implement 'complement' feature
20
20
  - Add ability to patch xarrays (#160)
21
+ - Add support of ECCC file formats (fstd)
22
+ - Add `use_cdsapi_dataset` option to mars and accumulations
21
23
 
22
24
  ### Added
23
25
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: anemoi-datasets
3
- Version: 0.5.13
3
+ Version: 0.5.15
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
@@ -224,8 +224,8 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
224
224
  Classifier: Programming Language :: Python :: Implementation :: PyPy
225
225
  Requires-Python: >=3.9
226
226
  License-File: LICENSE
227
- Requires-Dist: anemoi-transform>=0.1
228
- Requires-Dist: anemoi-utils[provenance]>=0.4.9
227
+ Requires-Dist: anemoi-transform>=0.1.1
228
+ Requires-Dist: anemoi-utils[provenance]>=0.4.11
229
229
  Requires-Dist: cfunits
230
230
  Requires-Dist: numpy
231
231
  Requires-Dist: pyyaml
@@ -235,12 +235,12 @@ Requires-Dist: zarr<=2.17
235
235
  Provides-Extra: all
236
236
  Requires-Dist: anemoi-datasets[create,remote,xarray]; extra == "all"
237
237
  Provides-Extra: create
238
- Requires-Dist: earthkit-data[mars]>=0.10.7; extra == "create"
239
- Requires-Dist: earthkit-geo>=0.2; extra == "create"
240
- Requires-Dist: earthkit-meteo; extra == "create"
241
- Requires-Dist: eccodes>=2.38.1; extra == "create"
238
+ Requires-Dist: earthkit-data[mars]>=0.12; extra == "create"
239
+ Requires-Dist: earthkit-geo>=0.3; extra == "create"
240
+ Requires-Dist: earthkit-meteo>=0.3; extra == "create"
241
+ Requires-Dist: eccodes>=2.39.1; extra == "create"
242
242
  Requires-Dist: entrypoints; extra == "create"
243
- Requires-Dist: pyproj; extra == "create"
243
+ Requires-Dist: pyproj>=3; extra == "create"
244
244
  Provides-Extra: dev
245
245
  Requires-Dist: anemoi-datasets[all,docs,tests]; extra == "dev"
246
246
  Provides-Extra: docs
@@ -49,8 +49,8 @@ dynamic = [
49
49
  "version",
50
50
  ]
51
51
  dependencies = [
52
- "anemoi-transform>=0.1",
53
- "anemoi-utils[provenance]>=0.4.9",
52
+ "anemoi-transform>=0.1.1",
53
+ "anemoi-utils[provenance]>=0.4.11",
54
54
  "cfunits",
55
55
  "numpy",
56
56
  "pyyaml",
@@ -64,12 +64,12 @@ optional-dependencies.all = [
64
64
  ]
65
65
 
66
66
  optional-dependencies.create = [
67
- "earthkit-data[mars]>=0.10.7",
68
- "earthkit-geo>=0.2",
69
- "earthkit-meteo",
70
- "eccodes>=2.38.1",
67
+ "earthkit-data[mars]>=0.12",
68
+ "earthkit-geo>=0.3",
69
+ "earthkit-meteo>=0.3",
70
+ "eccodes>=2.39.1",
71
71
  "entrypoints",
72
- "pyproj",
72
+ "pyproj>=3",
73
73
  ]
74
74
 
75
75
  optional-dependencies.dev = [
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.5.13'
16
- __version_tuple__ = version_tuple = (0, 5, 13)
15
+ __version__ = version = '0.5.15'
16
+ __version_tuple__ = version_tuple = (0, 5, 15)
@@ -83,11 +83,12 @@ class Create(Command):
83
83
  task("load", options)
84
84
  task("finalise", options)
85
85
 
86
- task("patch", options)
87
-
88
86
  task("init_additions", options)
89
87
  task("run_additions", options)
90
88
  task("finalise_additions", options)
89
+
90
+ task("patch", options)
91
+
91
92
  task("cleanup", options)
92
93
  task("verify", options)
93
94
 
@@ -153,6 +154,7 @@ class Create(Command):
153
154
 
154
155
  with ExecutorClass(max_workers=1) as executor:
155
156
  executor.submit(task, "finalise-additions", options).result()
157
+ executor.submit(task, "patch", options).result()
156
158
  executor.submit(task, "cleanup", options).result()
157
159
  executor.submit(task, "verify", options).result()
158
160
 
@@ -79,7 +79,10 @@ def json_tidy(o):
79
79
  )
80
80
  return o.isoformat()
81
81
 
82
- raise TypeError(repr(o) + " is not JSON serializable")
82
+ if isinstance(o, (np.float32, np.float64)):
83
+ return float(o)
84
+
85
+ raise TypeError(f"{repr(o)} is not JSON serializable {type(o)}")
83
86
 
84
87
 
85
88
  def build_statistics_dates(dates, start, end):
@@ -596,6 +599,8 @@ class Load(Actor, HasRegistryMixin, HasStatisticTempMixin, HasElementForDataMixi
596
599
  # There is one cube to load for each result.
597
600
  dates = list(result.group_of_dates)
598
601
 
602
+ LOG.debug(f"Loading cube for {len(dates)} dates")
603
+
599
604
  cube = result.get_cube()
600
605
  shape = cube.extended_user_shape
601
606
  dates_in_data = cube.user_coords["valid_datetime"]
@@ -642,12 +647,14 @@ class Load(Actor, HasRegistryMixin, HasStatisticTempMixin, HasElementForDataMixi
642
647
  indexes = dates_to_indexes(self.dates, dates_in_data)
643
648
 
644
649
  array = ViewCacheArray(self.data_array, shape=shape, indexes=indexes)
650
+ LOG.info(f"Loading array shape={shape}, indexes={len(indexes)}")
645
651
  self.load_cube(cube, array)
646
652
 
647
653
  stats = compute_statistics(array.cache, self.variables_names, allow_nans=self._get_allow_nans())
648
654
  self.tmp_statistics.write(indexes, stats, dates=dates_in_data)
649
-
655
+ LOG.info("Flush data array")
650
656
  array.flush()
657
+ LOG.info("Flushed data array")
651
658
 
652
659
  def _get_allow_nans(self):
653
660
  config = self.main_config
@@ -740,6 +747,11 @@ class AdditionsMixin:
740
747
  if not self.delta.total_seconds() % frequency.total_seconds() == 0:
741
748
  LOG.debug(f"Delta {self.delta} is not a multiple of frequency {frequency}. Skipping.")
742
749
  return True
750
+
751
+ if self.dataset.zarr_metadata.get("build", {}).get("additions", None) is False:
752
+ LOG.warning(f"Additions are disabled for {self.path} in the recipe.")
753
+ return True
754
+
743
755
  return False
744
756
 
745
757
  @cached_property
@@ -253,6 +253,7 @@ def _compute_accumulations(
253
253
  data_accumulation_period=None,
254
254
  patch=_identity,
255
255
  base_times=None,
256
+ use_cdsapi_dataset=None,
256
257
  ):
257
258
  adjust_step = isinstance(user_accumulation_period, int)
258
259
 
@@ -311,7 +312,9 @@ def _compute_accumulations(
311
312
 
312
313
  requests.append(patch(r))
313
314
 
314
- ds = mars(context, dates, *requests, request_already_using_valid_datetime=True)
315
+ ds = mars(
316
+ context, dates, *requests, request_already_using_valid_datetime=True, use_cdsapi_dataset=use_cdsapi_dataset
317
+ )
315
318
 
316
319
  accumulations = {}
317
320
  for a in [AccumulationClass(out, frequency=frequency, **r) for r in requests]:
@@ -366,7 +369,7 @@ def _scda(request):
366
369
  return request
367
370
 
368
371
 
369
- def accumulations(context, dates, **request):
372
+ def accumulations(context, dates, use_cdsapi_dataset=None, **request):
370
373
  _to_list(request["param"])
371
374
  class_ = request.get("class", "od")
372
375
  stream = request.get("stream", "oper")
@@ -395,6 +398,7 @@ def accumulations(context, dates, **request):
395
398
  dates,
396
399
  request,
397
400
  user_accumulation_period=user_accumulation_period,
401
+ use_cdsapi_dataset=use_cdsapi_dataset,
398
402
  **kwargs,
399
403
  )
400
404
 
@@ -0,0 +1,16 @@
1
+ # (C) Copyright 2025 Anemoi contributors.
2
+ #
3
+ # This software is licensed under the terms of the Apache Licence Version 2.0
4
+ # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
5
+ #
6
+ # In applying this licence, ECMWF does not waive the privileges and immunities
7
+ # granted to it by virtue of its status as an intergovernmental organisation
8
+ # nor does it submit to any jurisdiction.
9
+
10
+
11
+ from .xarray import load_many
12
+
13
+
14
+ def execute(context, dates, path, *args, **kwargs):
15
+ options = {"engine": "fstd"}
16
+ return load_many("🍁", context, dates, path, *args, options=options, **kwargs)
@@ -246,6 +246,7 @@ def mars(
246
246
  *requests,
247
247
  request_already_using_valid_datetime=False,
248
248
  date_key="date",
249
+ use_cdsapi_dataset=None,
249
250
  **kwargs,
250
251
  ):
251
252
 
@@ -305,7 +306,10 @@ def mars(
305
306
  f"⚠️ Unknown key {k}={v} in MARS request. Did you mean '{did_you_mean(k, MARS_KEYS)}' ?"
306
307
  )
307
308
  try:
308
- ds = ds + from_source("mars", **r)
309
+ if use_cdsapi_dataset:
310
+ ds = ds + from_source("cds", use_cdsapi_dataset, r)
311
+ else:
312
+ ds = ds + from_source("mars", **r)
309
313
  except Exception as e:
310
314
  if "File is empty:" not in str(e):
311
315
  raise
@@ -459,7 +459,7 @@ class Result:
459
459
  if self.group_of_dates is not None:
460
460
  dates = f" {len(self.group_of_dates)} dates"
461
461
  dates += " ("
462
- dates += "/".join(d.strftime("%Y-%m-%d:%H") for d in self.group_of_dates)
462
+ dates += "/".join(d.strftime("%Y-%m-%dT%H:%M") for d in self.group_of_dates)
463
463
  if len(dates) > 100:
464
464
  dates = dates[:100] + "..."
465
465
  dates += ")"
@@ -18,6 +18,7 @@ import shutil
18
18
  import socket
19
19
 
20
20
  import numpy as np
21
+ import tqdm
21
22
  from anemoi.utils.provenance import gather_provenance_info
22
23
 
23
24
  from ..check import check_data_values
@@ -134,7 +135,7 @@ def check_variance(x, variables_names, minimum, maximum, mean, count, sums, squa
134
135
 
135
136
  def compute_statistics(array, check_variables_names=None, allow_nans=False):
136
137
  """Compute statistics for a given array, provides minimum, maximum, sum, squares, count and has_nans as a dictionary."""
137
-
138
+ LOG.info(f"Computing statistics for {array.shape} array")
138
139
  nvars = array.shape[1]
139
140
 
140
141
  LOG.debug(f"Stats {nvars}, {array.shape}, {check_variables_names}")
@@ -149,7 +150,7 @@ def compute_statistics(array, check_variables_names=None, allow_nans=False):
149
150
  maximum = np.zeros(stats_shape, dtype=np.float64)
150
151
  has_nans = np.zeros(stats_shape, dtype=np.bool_)
151
152
 
152
- for i, chunk in enumerate(array):
153
+ for i, chunk in tqdm.tqdm(enumerate(array), delay=1, total=array.shape[0], desc="Computing statistics"):
153
154
  values = chunk.reshape((nvars, -1))
154
155
 
155
156
  for j, name in enumerate(check_variables_names):
@@ -166,6 +167,8 @@ def compute_statistics(array, check_variables_names=None, allow_nans=False):
166
167
  count[i] = np.sum(~np.isnan(values), axis=1)
167
168
  has_nans[i] = np.isnan(values).any()
168
169
 
170
+ LOG.info(f"Statistics computed for {nvars} variables.")
171
+
169
172
  return {
170
173
  "minimum": minimum,
171
174
  "maximum": maximum,
@@ -168,7 +168,7 @@ class Dataset:
168
168
  bbox = kwargs.pop("area")
169
169
  return Cropping(self, bbox)._subset(**kwargs).mutate()
170
170
 
171
- if "number" in kwargs or "numbers" or "member" in kwargs or "members" in kwargs:
171
+ if "number" in kwargs or "numbers" in kwargs or "member" in kwargs or "members" in kwargs:
172
172
  from .ensemble import Number
173
173
 
174
174
  members = {}
@@ -103,6 +103,30 @@ def _as_date(d, dates, last):
103
103
 
104
104
  if isinstance(d, str):
105
105
 
106
+ def isfloat(s):
107
+ try:
108
+ float(s)
109
+ return True
110
+ except ValueError:
111
+ return False
112
+
113
+ if d.endswith("%") and isfloat(d[:-1]):
114
+ x = float(d[:-1])
115
+ if not 0 <= x <= 100:
116
+ raise ValueError(f"Invalid date: {d}")
117
+ i_float = x * len(dates) / 100
118
+
119
+ epsilon = 2 ** (-30)
120
+ if len(dates) > 1 / epsilon:
121
+ LOG.warning("Too many dates to use percentage, one date may be lost in rounding")
122
+
123
+ if last:
124
+ index = int(i_float + epsilon) - 1
125
+ else:
126
+ index = int(i_float - epsilon)
127
+ index = max(0, min(len(dates) - 1, index))
128
+ return dates[index]
129
+
106
130
  if "-" in d and ":" in d:
107
131
  date, time = d.replace(" ", "T").split("T")
108
132
  year, month, day = [int(_) for _ in date.split("-")]
@@ -62,6 +62,8 @@ def plot_mask(path, mask, lats, lons, global_lats, global_lons):
62
62
  plt.savefig(path + "-global-zoomed.png")
63
63
 
64
64
 
65
+ # TODO: Use the one from anemoi.utils.grids instead
66
+ # from anemoi.utils.grids import ...
65
67
  def xyz_to_latlon(x, y, z):
66
68
  return (
67
69
  np.rad2deg(np.arcsin(np.minimum(1.0, np.maximum(-1.0, z)))),
@@ -69,6 +71,8 @@ def xyz_to_latlon(x, y, z):
69
71
  )
70
72
 
71
73
 
74
+ # TODO: Use the one from anemoi.utils.grids instead
75
+ # from anemoi.utils.grids import ...
72
76
  def latlon_to_xyz(lat, lon, radius=1.0):
73
77
  # https://en.wikipedia.org/wiki/Geographic_coordinate_conversion#From_geodetic_to_ECEF_coordinates
74
78
  # We assume that the Earth is a sphere of radius 1 so N(phi) = 1
@@ -380,6 +384,8 @@ def serialise_mask(mask):
380
384
 
381
385
 
382
386
  def nearest_grid_points(source_latitudes, source_longitudes, target_latitudes, target_longitudes):
387
+ # TODO: Use the one from anemoi.utils.grids instead
388
+ # from anemoi.utils.grids import ...
383
389
  from scipy.spatial import cKDTree
384
390
 
385
391
  source_xyz = latlon_to_xyz(source_latitudes, source_longitudes)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: anemoi-datasets
3
- Version: 0.5.13
3
+ Version: 0.5.15
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
@@ -224,8 +224,8 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
224
224
  Classifier: Programming Language :: Python :: Implementation :: PyPy
225
225
  Requires-Python: >=3.9
226
226
  License-File: LICENSE
227
- Requires-Dist: anemoi-transform>=0.1
228
- Requires-Dist: anemoi-utils[provenance]>=0.4.9
227
+ Requires-Dist: anemoi-transform>=0.1.1
228
+ Requires-Dist: anemoi-utils[provenance]>=0.4.11
229
229
  Requires-Dist: cfunits
230
230
  Requires-Dist: numpy
231
231
  Requires-Dist: pyyaml
@@ -235,12 +235,12 @@ Requires-Dist: zarr<=2.17
235
235
  Provides-Extra: all
236
236
  Requires-Dist: anemoi-datasets[create,remote,xarray]; extra == "all"
237
237
  Provides-Extra: create
238
- Requires-Dist: earthkit-data[mars]>=0.10.7; extra == "create"
239
- Requires-Dist: earthkit-geo>=0.2; extra == "create"
240
- Requires-Dist: earthkit-meteo; extra == "create"
241
- Requires-Dist: eccodes>=2.38.1; extra == "create"
238
+ Requires-Dist: earthkit-data[mars]>=0.12; extra == "create"
239
+ Requires-Dist: earthkit-geo>=0.3; extra == "create"
240
+ Requires-Dist: earthkit-meteo>=0.3; extra == "create"
241
+ Requires-Dist: eccodes>=2.39.1; extra == "create"
242
242
  Requires-Dist: entrypoints; extra == "create"
243
- Requires-Dist: pyproj; extra == "create"
243
+ Requires-Dist: pyproj>=3; extra == "create"
244
244
  Provides-Extra: dev
245
245
  Requires-Dist: anemoi-datasets[all,docs,tests]; extra == "dev"
246
246
  Provides-Extra: docs
@@ -260,6 +260,7 @@ src/anemoi/datasets/create/functions/filters/wz_to_w.py
260
260
  src/anemoi/datasets/create/functions/sources/__init__.py
261
261
  src/anemoi/datasets/create/functions/sources/accumulations.py
262
262
  src/anemoi/datasets/create/functions/sources/constants.py
263
+ src/anemoi/datasets/create/functions/sources/eccc_fstd.py
263
264
  src/anemoi/datasets/create/functions/sources/empty.py
264
265
  src/anemoi/datasets/create/functions/sources/forcings.py
265
266
  src/anemoi/datasets/create/functions/sources/grib.py
@@ -347,6 +348,7 @@ tests/create/missing.yaml
347
348
  tests/create/nan.yaml
348
349
  tests/create/pipe.yaml
349
350
  tests/create/recentre.yaml
351
+ tests/create/regrid.yaml
350
352
  tests/create/run.sh
351
353
  tests/create/test_create.py
352
354
  tests/xarray/test_kerchunk.py
@@ -1,5 +1,5 @@
1
- anemoi-transform>=0.1
2
- anemoi-utils[provenance]>=0.4.9
1
+ anemoi-transform>=0.1.1
2
+ anemoi-utils[provenance]>=0.4.11
3
3
  cfunits
4
4
  numpy
5
5
  pyyaml
@@ -11,12 +11,12 @@ zarr<=2.17
11
11
  anemoi-datasets[create,remote,xarray]
12
12
 
13
13
  [create]
14
- earthkit-data[mars]>=0.10.7
15
- earthkit-geo>=0.2
16
- earthkit-meteo
17
- eccodes>=2.38.1
14
+ earthkit-data[mars]>=0.12
15
+ earthkit-geo>=0.3
16
+ earthkit-meteo>=0.3
17
+ eccodes>=2.39.1
18
18
  entrypoints
19
- pyproj
19
+ pyproj>=3
20
20
 
21
21
  [dev]
22
22
  anemoi-datasets[all,docs,tests]
@@ -0,0 +1,31 @@
1
+
2
+ dates:
3
+ start: 2020-12-30 00:00:00
4
+ end: 2021-01-03 12:00:00
5
+ frequency: 12h
6
+
7
+ input:
8
+ join:
9
+ - mars:
10
+ expver: "0001"
11
+ class: ea
12
+ grid: o48
13
+ param: [2t]
14
+ levtype: sfc
15
+ stream: oper
16
+ type: an
17
+ - pipe:
18
+ - mars:
19
+ expver: "0001"
20
+ class: ea
21
+ grid: o32
22
+ param: [q]
23
+ levtype: pl
24
+ level: [50]
25
+ stream: oper
26
+ type: an
27
+ - regrid:
28
+ # method: linear
29
+ method: nearest
30
+ in_grid: o32
31
+ out_grid: o48
@@ -880,6 +880,51 @@ def test_dates_using_list():
880
880
  assert as_last_date("2021", dates) == np.datetime64("2021-12-31T06:00:00")
881
881
 
882
882
 
883
+ @mockup_open_zarr
884
+ def test_dates_using_list_2():
885
+ dates = [np.datetime64("2021-01-01T00:00:00") + i * np.timedelta64(24, "h") for i in range(0, 10)]
886
+ assert len(dates) == 10
887
+
888
+ assert dates[0] == as_first_date("0%", dates)
889
+ assert dates[0] == as_last_date("0%", dates)
890
+
891
+ assert dates[0] == as_first_date("0.01%", dates)
892
+ assert dates[0] == as_last_date("0.01%", dates)
893
+
894
+ assert dates[0] == as_first_date("9.99%", dates)
895
+ assert dates[0] == as_last_date("9.99%", dates)
896
+
897
+ assert dates[0] == as_first_date("10%", dates)
898
+ assert dates[0] == as_last_date("10%", dates)
899
+
900
+ assert dates[1] == as_first_date("10.01%", dates)
901
+ assert dates[0] == as_last_date("10.01%", dates)
902
+
903
+ assert dates[1] == as_first_date("19.99%", dates)
904
+ assert dates[0] == as_last_date("19.99%", dates)
905
+
906
+ assert dates[1] == as_first_date("20%", dates)
907
+ assert dates[1] == as_last_date("20%", dates)
908
+
909
+ assert dates[2] == as_first_date("20.01%", dates)
910
+ assert dates[1] == as_last_date("20.01%", dates)
911
+
912
+ assert dates[-2] == as_first_date("89.99%", dates)
913
+ assert dates[-3] == as_last_date("89.99%", dates)
914
+
915
+ assert dates[-2] == as_first_date("90%", dates)
916
+ assert dates[-2] == as_last_date("90%", dates)
917
+
918
+ assert dates[-1] == as_first_date("90.01%", dates)
919
+ assert dates[-2] == as_last_date("90.01%", dates)
920
+
921
+ assert dates[-1] == as_first_date("99.99%", dates)
922
+ assert dates[-2] == as_last_date("99.99%", dates)
923
+
924
+ assert dates[-1] == as_first_date("100%", dates)
925
+ assert dates[-1] == as_last_date("100%", dates)
926
+
927
+
883
928
  @mockup_open_zarr
884
929
  def test_slice_1():
885
930
  test = DatasetTester("test-2021-2021-6h-o96-abcd")
@@ -7,12 +7,18 @@
7
7
  # granted to it by virtue of its status as an intergovernmental organisation
8
8
  # nor does it submit to any jurisdiction.
9
9
 
10
+ import os
11
+
12
+ import pytest
10
13
  import xarray as xr
11
14
 
12
15
  from anemoi.datasets.create.functions.sources.xarray import XarrayFieldList
13
16
  from anemoi.datasets.testing import assert_field_list
14
17
 
15
18
 
19
+ # when the opendap server is under maintainance, this test will fail
20
+ # it is skipped by default, and is only run when the SLOW_TESTS env var is set
21
+ @pytest.mark.skipif(not os.environ.get("SLOW_TESTS"), reason="No SLOW_TESTS env var")
16
22
  def test_opendap():
17
23
 
18
24
  ds = xr.open_dataset(
@@ -1,28 +0,0 @@
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
- if: ${{ !contains(github.repository, 'private') }}
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", "3.11", "3.12"]
21
- uses: ecmwf-actions/reusable-workflows/.github/workflows/qa-pytest-pyproject.yml@v2
22
- with:
23
- python-version: ${{ matrix.python-version }}
24
-
25
- deploy:
26
- needs: [checks, quality]
27
- uses: ecmwf-actions/reusable-workflows/.github/workflows/cd-pypi.yml@v2
28
- secrets: inherit