anemoi-datasets 0.5.25__tar.gz → 0.5.26__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 (409) hide show
  1. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/pull_request_template.md +2 -0
  2. anemoi_datasets-0.5.26/.release-please-manifest.json +3 -0
  3. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/CHANGELOG.md +27 -0
  4. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/PKG-INFO +3 -2
  5. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/anemoi-dataset.rst +6 -0
  6. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/xarray-zarr.rst +6 -0
  7. anemoi_datasets-0.5.26/docs/datasets/building/sources/yaml/anemoi-zarr-dataset.yaml +3 -0
  8. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/combining.rst +3 -1
  9. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/02-cf-data.rst +9 -0
  10. anemoi_datasets-0.5.26/docs/howtos/create/yaml/zarr2.yaml +8 -0
  11. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/usage/code/cutout-complement1.py +1 -0
  12. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/usage/yaml/cutout-complement1.yaml +1 -0
  13. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/pyproject.toml +9 -1
  14. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/_version.py +2 -2
  15. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/grib-index.py +1 -1
  16. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/transform.py → anemoi_datasets-0.5.26/src/anemoi/datasets/create/filter.py +2 -5
  17. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/step.py +2 -16
  18. anemoi_datasets-0.5.26/src/anemoi/datasets/create/sources/planetary_computer.py +44 -0
  19. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/__init__.py +6 -22
  20. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/coordinates.py +8 -0
  21. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/field.py +1 -4
  22. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/flavour.py +44 -6
  23. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/patch.py +44 -1
  24. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/variable.py +6 -2
  25. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/complement.py +44 -10
  26. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/forwards.py +8 -2
  27. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/stores.py +7 -56
  28. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/grids.py +6 -3
  29. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi_datasets.egg-info/PKG-INFO +3 -2
  30. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi_datasets.egg-info/SOURCES.txt +10 -37
  31. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi_datasets.egg-info/requires.txt +2 -1
  32. anemoi_datasets-0.5.26/tests/conftest.py +1 -0
  33. anemoi_datasets-0.5.26/tests/create/__init__.py +0 -0
  34. anemoi_datasets-0.5.26/tests/create/test_create.py +83 -0
  35. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/test_sources.py +50 -17
  36. anemoi_datasets-0.5.26/tests/create/utils/__init__.py +0 -0
  37. anemoi_datasets-0.5.26/tests/create/utils/compare.py +218 -0
  38. anemoi_datasets-0.5.26/tests/create/utils/mock_sources.py +117 -0
  39. anemoi_datasets-0.5.26/tests/xarray/test_flavour.py +104 -0
  40. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/xarray/test_zarr.py +0 -28
  41. anemoi_datasets-0.5.25/.release-please-manifest.json +0 -3
  42. anemoi_datasets-0.5.25/docs/datasets/building/filters/empty.rst +0 -6
  43. anemoi_datasets-0.5.25/docs/datasets/building/filters/noop.rst +0 -6
  44. anemoi_datasets-0.5.25/docs/datasets/building/filters/orog_to_z.rst +0 -17
  45. anemoi_datasets-0.5.25/docs/datasets/building/filters/regrid.rst +0 -27
  46. anemoi_datasets-0.5.25/docs/datasets/building/filters/rename.rst +0 -20
  47. anemoi_datasets-0.5.25/docs/datasets/building/filters/rotate_winds.rst +0 -3
  48. anemoi_datasets-0.5.25/docs/datasets/building/filters/select.rst +0 -3
  49. anemoi_datasets-0.5.25/docs/datasets/building/filters/sum.rst +0 -13
  50. anemoi_datasets-0.5.25/docs/datasets/building/filters/unrotate_winds.rst +0 -3
  51. anemoi_datasets-0.5.25/docs/datasets/building/filters/wz_to_w.rst +0 -12
  52. anemoi_datasets-0.5.25/docs/datasets/building/filters/yaml/orog_to_z.yaml +0 -11
  53. anemoi_datasets-0.5.25/docs/datasets/building/filters/yaml/regrid1.yaml +0 -11
  54. anemoi_datasets-0.5.25/docs/datasets/building/filters/yaml/regrid2.yaml +0 -9
  55. anemoi_datasets-0.5.25/docs/datasets/building/filters/yaml/rename.yaml +0 -13
  56. anemoi_datasets-0.5.25/docs/datasets/building/filters/yaml/sum.yaml +0 -15
  57. anemoi_datasets-0.5.25/docs/datasets/building/filters/yaml/wz_to_w.yaml +0 -11
  58. anemoi_datasets-0.5.25/docs/datasets/building/filters.rst +0 -26
  59. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filter.py +0 -50
  60. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/__init__.py +0 -33
  61. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/empty.py +0 -37
  62. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/legacy.py +0 -93
  63. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/noop.py +0 -37
  64. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/orog_to_z.py +0 -58
  65. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/pressure_level_relative_humidity_to_specific_humidity.py +0 -83
  66. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/pressure_level_specific_humidity_to_relative_humidity.py +0 -84
  67. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/rename.py +0 -205
  68. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/rotate_winds.py +0 -105
  69. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/single_level_dewpoint_to_relative_humidity.py +0 -78
  70. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/single_level_relative_humidity_to_dewpoint.py +0 -84
  71. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/single_level_relative_humidity_to_specific_humidity.py +0 -163
  72. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/single_level_specific_humidity_to_relative_humidity.py +0 -451
  73. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/speeddir_to_uv.py +0 -95
  74. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/sum.py +0 -68
  75. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/unrotate_winds.py +0 -105
  76. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/uv_to_speeddir.py +0 -94
  77. anemoi_datasets-0.5.25/src/anemoi/datasets/create/filters/wz_to_w.py +0 -98
  78. anemoi_datasets-0.5.25/tests/create/test_create.py +0 -414
  79. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.gitattributes +0 -0
  80. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/CODEOWNERS +0 -0
  81. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  82. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/ci-hpc-config.yml +0 -0
  83. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/dependabot.yml +0 -0
  84. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/labeler.yml +0 -0
  85. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/downstream-ci-hpc.yml +0 -0
  86. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/pr-conventional-commit.yml +0 -0
  87. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/pr-label-conventional-commits.yml +0 -0
  88. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/pr-label-file-based.yml +0 -0
  89. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/pr-label-public.yml +0 -0
  90. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/push-to-private.yml +0 -0
  91. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/python-publish.yml +0 -0
  92. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/python-pull-request.yml +0 -0
  93. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/readthedocs-pr-update.yml +0 -0
  94. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.github/workflows/release-please.yml +0 -0
  95. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.gitignore +0 -0
  96. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.pre-commit-config.yaml +0 -0
  97. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.readthedocs.yaml +0 -0
  98. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.release-please-config.json +0 -0
  99. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/.vscode/spellright.dict +0 -0
  100. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/03-constant-fields.rst +0 -0
  101. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/CONTRIBUTORS.md +0 -0
  102. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/LICENSE +0 -0
  103. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/README.md +0 -0
  104. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/Makefile +0 -0
  105. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/2t_map_example.png +0 -0
  106. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/area-1.png +0 -0
  107. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/concat.png +0 -0
  108. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/cutout-1.png +0 -0
  109. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/cutout-2.png +0 -0
  110. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/cutout-3.png +0 -0
  111. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/cutout-4.png +0 -0
  112. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/cutout-5.png +0 -0
  113. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/cutout-6.png +0 -0
  114. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/join.png +0 -0
  115. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/logo.png +0 -0
  116. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/overlay.png +0 -0
  117. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/schemas/matrix.excalidraw +0 -0
  118. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/schemas/matrix.png +0 -0
  119. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/schemas/overview.excalidraw +0 -0
  120. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/schemas/overview.png +0 -0
  121. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/schemas/recipe.excalidraw +0 -0
  122. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/schemas/recipe.png +0 -0
  123. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/skip-missing.png +0 -0
  124. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/style.css +0 -0
  125. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/thinning-after.png +0 -0
  126. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_static/thinning-before.png +0 -0
  127. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_templates/.gitkeep +0 -0
  128. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/_templates/apidoc/package.rst.jinja +0 -0
  129. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/adr/adr-1.md +0 -0
  130. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/apply-fmt.sh +0 -0
  131. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/check-index.sh +0 -0
  132. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/compare-lam.rst +0 -0
  133. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/compare.rst +0 -0
  134. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/copy.rst +0 -0
  135. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/create.rst +0 -0
  136. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/grib-index.rst +0 -0
  137. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/inspect.rst +0 -0
  138. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/introduction.rst +0 -0
  139. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/patch.rst +0 -0
  140. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/cli/scan.rst +0 -0
  141. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/conf.py +0 -0
  142. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/advanced-options.rst +0 -0
  143. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/handling-missing-dates.rst +0 -0
  144. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/handling-missing-values.rst +0 -0
  145. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/incremental.rst +0 -0
  146. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/introduction.rst +0 -0
  147. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/naming-conventions.rst +0 -0
  148. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/naming-variables.rst +0 -0
  149. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/operations.rst +0 -0
  150. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/accumulations.rst +0 -0
  151. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/cds.rst +0 -0
  152. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/eccc-fstd.rst +0 -0
  153. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/forcings.rst +0 -0
  154. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/grib-index.rst +0 -0
  155. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/grib.rst +0 -0
  156. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/hindcasts.rst +0 -0
  157. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/mars.rst +0 -0
  158. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/netcdf.rst +0 -0
  159. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/opendap.rst +0 -0
  160. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/recentre.rst +0 -0
  161. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/repeated-dates.rst +0 -0
  162. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/xarray-based.rst +0 -0
  163. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/xarray-kerchunk.py +0 -0
  164. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/xarray-kerchunk.rst +0 -0
  165. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/accumulations1.yaml +0 -0
  166. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/accumulations2.yaml +0 -0
  167. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/anemoi-dataset.yaml +0 -0
  168. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/eccc-fstd.yaml +0 -0
  169. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/forcings.yaml +0 -0
  170. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/grib1.yaml +0 -0
  171. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/grib2.yaml +0 -0
  172. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/grib3.yaml +0 -0
  173. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/grib4.yaml +0 -0
  174. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/hindcasts.yaml +0 -0
  175. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/mars-cds.yaml +0 -0
  176. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/mars1.yaml +0 -0
  177. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/mars2.yaml +0 -0
  178. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/netcdf.yaml +0 -0
  179. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/opendap.yaml +0 -0
  180. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/recentre.yaml +0 -0
  181. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/repeated-dates1.yaml +0 -0
  182. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/repeated-dates2.yaml +0 -0
  183. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/repeated-dates3.yaml +0 -0
  184. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/repeated-dates4.yaml +0 -0
  185. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/xarray-based.yaml +0 -0
  186. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/xarray-kerchunk.yaml +0 -0
  187. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/xarray-zarr.yaml +0 -0
  188. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/yaml/zenodo.yaml +0 -0
  189. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources/zenodo.rst +0 -0
  190. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/sources.rst +0 -0
  191. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/statistics.rst +0 -0
  192. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/building/syntax.yaml +0 -0
  193. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/introduction.rst +0 -0
  194. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/configuration.rst +0 -0
  195. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/configuration.toml +0 -0
  196. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/ensembles.rst +0 -0
  197. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/grids.rst +0 -0
  198. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/introduction.rst +0 -0
  199. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/matching.rst +0 -0
  200. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/methods.rst +0 -0
  201. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/miscellaneous.rst +0 -0
  202. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/missing.rst +0 -0
  203. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/opening.rst +0 -0
  204. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/other.rst +0 -0
  205. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/selecting.rst +0 -0
  206. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/statistics.rst +0 -0
  207. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/subsetting.rst +0 -0
  208. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/using/zip.rst +0 -0
  209. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/Makefile +0 -0
  210. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/building1.txt +0 -0
  211. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/building1.yaml +0 -0
  212. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/building2.txt +0 -0
  213. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/building2.yaml +0 -0
  214. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/building3.txt +0 -0
  215. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/building3.yaml +0 -0
  216. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/concat.yaml +0 -0
  217. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/hindcasts.yaml +0 -0
  218. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/input.yaml +0 -0
  219. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/missing_dates.yaml +0 -0
  220. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/nan.yaml +0 -0
  221. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/datasets/yaml/pipe.yaml +0 -0
  222. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/dev/contributing.rst +0 -0
  223. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/01-grib-data.rst +0 -0
  224. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/03-constant-fields.rst +0 -0
  225. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-flavour1.yaml +0 -0
  226. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-flavour2.yaml +0 -0
  227. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-flavour3.yaml +0 -0
  228. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-flavour4.yaml +0 -0
  229. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-recipe1.yaml +0 -0
  230. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-recipe2.yaml +0 -0
  231. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-recipe3.yaml +0 -0
  232. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-recipe4.yaml +0 -0
  233. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/grib-recipe5.yaml +0 -0
  234. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/netcdf1.yaml +0 -0
  235. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/opendap1.yaml +0 -0
  236. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/xarray-flavour1.yaml +0 -0
  237. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/xarray-patch1.yaml +0 -0
  238. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/xarray-patch2.yaml +0 -0
  239. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/create/yaml/zarr1.yaml +0 -0
  240. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/introduction.rst +0 -0
  241. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/usage/01-interpolate-step-dataset-combination.rst +0 -0
  242. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/usage/02-coutout-complement-combination.rst +0 -0
  243. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/usage/code/interpolate1.py +0 -0
  244. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/usage/code/interpolate2.py +0 -0
  245. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/usage/yaml/interpolate1.yaml +0 -0
  246. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/howtos/usage/yaml/interpolate2.yaml +0 -0
  247. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/index.rst +0 -0
  248. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/installing.rst +0 -0
  249. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/modules/dataset.rst +0 -0
  250. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/modules/filters.rst +0 -0
  251. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/modules/sources.rst +0 -0
  252. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/overview.rst +0 -0
  253. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/pptx/images.pptx +0 -0
  254. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/scripts/api_build.sh +0 -0
  255. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/usage/getting_started.rst +0 -0
  256. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/usage/yaml/aifs-ea-an-oper-0001-mars-o48-2020-2021-6h-v1.yaml +0 -0
  257. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/docs/using/code/trimedge1_.py +0 -0
  258. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/setup.cfg +0 -0
  259. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/__init__.py +0 -0
  260. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/__main__.py +0 -0
  261. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/check.py +0 -0
  262. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/__init__.py +0 -0
  263. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/check.py +0 -0
  264. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/cleanup.py +0 -0
  265. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/compare-lam.py +0 -0
  266. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/compare.py +0 -0
  267. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/copy.py +0 -0
  268. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/create.py +0 -0
  269. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/finalise-additions.py +0 -0
  270. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/finalise.py +0 -0
  271. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/init-additions.py +0 -0
  272. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/init.py +0 -0
  273. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/inspect.py +0 -0
  274. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/load-additions.py +0 -0
  275. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/load.py +0 -0
  276. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/patch.py +0 -0
  277. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/publish.py +0 -0
  278. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/commands/scan.py +0 -0
  279. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/compute/__init__.py +0 -0
  280. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/compute/recentre.py +0 -0
  281. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/__init__.py +0 -0
  282. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/check.py +0 -0
  283. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/chunks.py +0 -0
  284. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/config.py +0 -0
  285. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/__init__.py +0 -0
  286. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/action.py +0 -0
  287. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/concat.py +0 -0
  288. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/context.py +0 -0
  289. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/data_sources.py +0 -0
  290. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/empty.py +0 -0
  291. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/filter.py +0 -0
  292. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/function.py +0 -0
  293. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/join.py +0 -0
  294. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/misc.py +0 -0
  295. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/pipe.py +0 -0
  296. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/repeated_dates.py +0 -0
  297. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/result.py +0 -0
  298. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/template.py +0 -0
  299. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/input/trace.py +0 -0
  300. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/patch.py +0 -0
  301. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/persistent.py +0 -0
  302. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/size.py +0 -0
  303. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/source.py +0 -0
  304. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/__init__.py +0 -0
  305. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/accumulations.py +0 -0
  306. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/accumulations2.py +0 -0
  307. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/anemoi_dataset.py +0 -0
  308. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/constants.py +0 -0
  309. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/eccc_fstd.py +0 -0
  310. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/empty.py +0 -0
  311. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/forcings.py +0 -0
  312. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/grib.py +0 -0
  313. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/grib_index.py +0 -0
  314. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/hindcasts.py +0 -0
  315. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/legacy.py +0 -0
  316. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/mars.py +0 -0
  317. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/netcdf.py +0 -0
  318. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/opendap.py +0 -0
  319. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/patterns.py +0 -0
  320. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/recentre.py +0 -0
  321. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/source.py +0 -0
  322. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/tendencies.py +0 -0
  323. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray.py +0 -0
  324. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_kerchunk.py +0 -0
  325. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/README.md +0 -0
  326. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/fieldlist.py +0 -0
  327. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/grid.py +0 -0
  328. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/metadata.py +0 -0
  329. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_support/time.py +0 -0
  330. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/xarray_zarr.py +0 -0
  331. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/sources/zenodo.py +0 -0
  332. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/statistics/__init__.py +0 -0
  333. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/statistics/summary.py +0 -0
  334. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/typing.py +0 -0
  335. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/utils.py +0 -0
  336. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/writer.py +0 -0
  337. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/create/zarr.py +0 -0
  338. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/__init__.py +0 -0
  339. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/concat.py +0 -0
  340. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/dataset.py +0 -0
  341. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/debug.css +0 -0
  342. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/debug.py +0 -0
  343. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/ensemble.py +0 -0
  344. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/fill_missing.py +0 -0
  345. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/grids.py +0 -0
  346. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/indexing.py +0 -0
  347. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/interpolate.py +0 -0
  348. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/join.py +0 -0
  349. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/masked.py +0 -0
  350. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/merge.py +0 -0
  351. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/misc.py +0 -0
  352. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/missing.py +0 -0
  353. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/observations/__init__.py +0 -0
  354. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/observations/legacy_obs_dataset.py +0 -0
  355. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/observations/multi.py +0 -0
  356. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/padded.py +0 -0
  357. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/records/__init__.py +0 -0
  358. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/records/backends/__init__.py +0 -0
  359. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/rescale.py +0 -0
  360. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/select.py +0 -0
  361. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/statistics.py +0 -0
  362. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/subset.py +0 -0
  363. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/unchecked.py +0 -0
  364. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/data/xy.py +0 -0
  365. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/dates/__init__.py +0 -0
  366. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/dates/groups.py +0 -0
  367. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/testing.py +0 -0
  368. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi/datasets/utils/__init__.py +0 -0
  369. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi_datasets.egg-info/dependency_links.txt +0 -0
  370. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi_datasets.egg-info/entry_points.txt +0 -0
  371. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/src/anemoi_datasets.egg-info/top_level.txt +0 -0
  372. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/accumulation.yaml +0 -0
  373. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/concat.yaml +0 -0
  374. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/join.yaml +0 -0
  375. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/missing.yaml +0 -0
  376. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/nan.yaml +0 -0
  377. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/pipe.yaml +0 -0
  378. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/recentre.yaml +0 -0
  379. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/regrid.yaml +0 -0
  380. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create/run.sh +0 -0
  381. /anemoi_datasets-0.5.25/src/anemoi/datasets/create/testing.py → /anemoi_datasets-0.5.26/tests/create/utils/create.py +0 -0
  382. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create-perturbations-full.yaml +0 -0
  383. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/create-shift.yaml +0 -0
  384. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/test_chunks.py +0 -0
  385. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/test_data.py +0 -0
  386. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/test_data_gridded.py +0 -0
  387. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/test_dates.py +0 -0
  388. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/test_indexing.py +0 -0
  389. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/test_records.py +0 -0
  390. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/xarray/test_netcdf.py +0 -0
  391. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/xarray/test_opendap.py +0 -0
  392. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tests/xarray/test_samples.py +0 -0
  393. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/.gitignore +0 -0
  394. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/build-obs.py +0 -0
  395. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/check-obs.py +0 -0
  396. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/examples/Makefile +0 -0
  397. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/examples/an-oper-2023-2023-2p5-6h-v1.yaml +0 -0
  398. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/Makefile +0 -0
  399. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids.ipynb +0 -0
  400. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids1.yaml +0 -0
  401. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids2.yaml +0 -0
  402. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids3.yaml +0 -0
  403. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids4.yaml +0 -0
  404. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids5.yaml +0 -0
  405. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids6.yaml +0 -0
  406. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids7.yaml +0 -0
  407. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/grids/grids_multilam.ipynb +0 -0
  408. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/make-sample-dataset.py +0 -0
  409. {anemoi_datasets-0.5.25 → anemoi_datasets-0.5.26}/tools/upload-sample-dataset.py +0 -0
@@ -11,3 +11,5 @@
11
11
  <!-- Include any additional information, caveats, or considerations that the reviewer should be aware of. -->
12
12
 
13
13
  ***As a contributor to the Anemoi framework, please ensure that your changes include unit tests, updates to any affected dependencies and documentation, and have been tested in a parallel setting (i.e., with multiple GPUs). As a reviewer, you are also responsible for verifying these aspects and requesting changes if they are not adequately addressed. For guidelines about those please refer to https://anemoi.readthedocs.io/en/latest/***
14
+
15
+ By opening this pull request, I affirm that all authors agree to the [Contributor License Agreement.](https://github.com/ecmwf/codex/blob/main/Legal/contributor_license_agreement.md)
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.5.26"
3
+ }
@@ -8,6 +8,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
8
8
  Please add your functional changes to the appropriate section in the PR.
9
9
  Keep it human-readable, your future self will thank you!
10
10
 
11
+ ## [0.5.26](https://github.com/ecmwf/anemoi-datasets/compare/0.5.25...0.5.26) (2025-07-11)
12
+
13
+
14
+ ### Features
15
+
16
+ * Add planetary planetary source ([#368](https://github.com/ecmwf/anemoi-datasets/issues/368)) ([c85337f](https://github.com/ecmwf/anemoi-datasets/commit/c85337f4b08381dc1e2e8ba71134c998c6258c2d))
17
+ * Extend xarray coordinate guesser to include pressure as a long_name ([#335](https://github.com/ecmwf/anemoi-datasets/issues/335)) ([bcbffaa](https://github.com/ecmwf/anemoi-datasets/commit/bcbffaa0b0ad011db5b1fd5879f9829f0d2e68af))
18
+ * Extented complement nearest functionality to support k&gt;1 ([#371](https://github.com/ecmwf/anemoi-datasets/issues/371)) ([a2c5f92](https://github.com/ecmwf/anemoi-datasets/commit/a2c5f921f57fce60bd3fe728c21dc5e5b7d3a4a1))
19
+ * Point data ([#358](https://github.com/ecmwf/anemoi-datasets/issues/358)) ([78c4f85](https://github.com/ecmwf/anemoi-datasets/commit/78c4f85bf9cd4d6cc7f17268c8c526da32158220))
20
+ * Relaxed compatibility check for horizontal grid. ([#339](https://github.com/ecmwf/anemoi-datasets/issues/339)) ([a7dc859](https://github.com/ecmwf/anemoi-datasets/commit/a7dc859b6ec2fb0bad2ed7b7b8ee3c76034a258b))
21
+ * Sort xarray coordinate with patch ([#356](https://github.com/ecmwf/anemoi-datasets/issues/356)) ([638cbdb](https://github.com/ecmwf/anemoi-datasets/commit/638cbdb013b94b87748654ae338e0d02e69c1900))
22
+ * Use pytest-xdist to run tests in parallel. ([#346](https://github.com/ecmwf/anemoi-datasets/issues/346)) ([1d656ee](https://github.com/ecmwf/anemoi-datasets/commit/1d656ee62c51ee0cbe043943581cef16b2f7d7db))
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * Deprecated filters in anemoi datasets ([#350](https://github.com/ecmwf/anemoi-datasets/issues/350)) ([d08c6f5](https://github.com/ecmwf/anemoi-datasets/commit/d08c6f55c3d983c930480bd777e74fd5a5bea6eb))
28
+ * **grib-index:** Match against filename, not full path ([#374](https://github.com/ecmwf/anemoi-datasets/issues/374)) ([e71a952](https://github.com/ecmwf/anemoi-datasets/commit/e71a95221493a703515d7a14a17f3dead06c8430))
29
+ * Missing method in xarray flavour ([#369](https://github.com/ecmwf/anemoi-datasets/issues/369)) ([d0b9588](https://github.com/ecmwf/anemoi-datasets/commit/d0b9588f0bff626ae751a74cf4cbbc373a2f67f4))
30
+ * Remove trailing slash from zarr paths. ([#362](https://github.com/ecmwf/anemoi-datasets/issues/362)) ([9a9bfe5](https://github.com/ecmwf/anemoi-datasets/commit/9a9bfe50406d299f44f7cce7e3befcabef6fefaf))
31
+
32
+
33
+ ### Documentation
34
+
35
+ * Fix pre-commit ([#367](https://github.com/ecmwf/anemoi-datasets/issues/367)) ([6e6ebe2](https://github.com/ecmwf/anemoi-datasets/commit/6e6ebe2e81fc735a2af422b8c222b0a2f229d8dc))
36
+ * Zarr dataset creation ([#365](https://github.com/ecmwf/anemoi-datasets/issues/365)) ([622c261](https://github.com/ecmwf/anemoi-datasets/commit/622c26156de44ae4eaa3359fef836741b1d81d67))
37
+
11
38
  ## [0.5.25](https://github.com/ecmwf/anemoi-datasets/compare/0.5.24...0.5.25) (2025-06-11)
12
39
 
13
40
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: anemoi-datasets
3
- Version: 0.5.25
3
+ Version: 0.5.26
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
@@ -226,7 +226,7 @@ Classifier: Programming Language :: Python :: Implementation :: PyPy
226
226
  Requires-Python: >=3.9
227
227
  License-File: LICENSE
228
228
  Requires-Dist: anemoi-transform>=0.1.10
229
- Requires-Dist: anemoi-utils[provenance]>=0.4.21
229
+ Requires-Dist: anemoi-utils[provenance]>=0.4.26
230
230
  Requires-Dist: cfunits
231
231
  Requires-Dist: numcodecs<0.16
232
232
  Requires-Dist: numpy
@@ -262,6 +262,7 @@ Requires-Dist: requests; extra == "remote"
262
262
  Provides-Extra: tests
263
263
  Requires-Dist: anemoi-datasets[xarray]; extra == "tests"
264
264
  Requires-Dist: pytest; extra == "tests"
265
+ Requires-Dist: pytest-xdist; extra == "tests"
265
266
  Provides-Extra: xarray
266
267
  Requires-Dist: adlfs; extra == "xarray"
267
268
  Requires-Dist: gcsfs; extra == "xarray"
@@ -17,3 +17,9 @@ An anemoi-dataset can be a source for a dataset:
17
17
  The parameters are the same as those used in the ``open_dataset``
18
18
  function, which allows you to subset and combine datasets. See
19
19
  :ref:`opening-datasets` for more information.
20
+
21
+ In particular, this is how local zarr datasets created with anemoi in a
22
+ can be used as a source, contrary to :ref:`xarray-zarr` :
23
+
24
+ .. literalinclude:: yaml/anemoi-zarr-dataset.yaml
25
+ :language: yaml
@@ -1,3 +1,5 @@
1
+ .. _xarray-zarr:
2
+
1
3
  #############
2
4
  xarray-zarr
3
5
  #############
@@ -17,4 +19,8 @@ it is necessary to use the :ref:`join <building-join>` operation to join
17
19
  separate lists containing 2D variables and 3D variables. If all vertical
18
20
  levels are desired, then it is acceptable to specify a single source.
19
21
 
22
+ Also, an ``xarray-zarr`` source uses the ``url`` keyword, and cannot be
23
+ used for accessing local datasets. For using local zarr datasets as
24
+ sources, use instead :ref:`anemoi-dataset_source`.
25
+
20
26
  See :ref:`create-cf-data` for more information.
@@ -0,0 +1,3 @@
1
+ input:
2
+ anemoi-dataset:
3
+ dataset: path/to/dataset.zarr
@@ -235,13 +235,15 @@ variables of `dataset1` and return the result.
235
235
  source=dataset2,
236
236
  what="variables",
237
237
  interpolate="nearest",
238
+ k=1,
238
239
  )
239
240
 
240
241
  Currently ``what`` can only be ``variables`` and can be omitted.
241
242
 
242
243
  The value for ``interpolate`` can be one of ``none`` (default) or
243
244
  ``nearest``. In the case of ``none``, the grids of the two datasets must
244
- match.
245
+ match. In case of ``interpolate``, an additional parameter ``k`` can be
246
+ set to specify the number of nearest neighbors to use.
245
247
 
246
248
  This feature was originally designed to be used in conjunction with
247
249
  ``cutout``, where `dataset1` is the lam, and `dataset2` is the global
@@ -46,9 +46,18 @@ can contain patterns. See :ref:`file-pattern` for more information.
46
46
  Zarr
47
47
  ******
48
48
 
49
+ For using remote hosted zarr datasets as sources, use
50
+ :ref:`xarray-zarr`.
51
+
49
52
  .. literalinclude:: yaml/zarr1.yaml
50
53
  :language: yaml
51
54
 
55
+ For using local zarr datasets (such as anemoi-generated datasets), use
56
+ :ref:`anemoi-dataset_source`.
57
+
58
+ .. literalinclude:: yaml/zarr2.yaml
59
+ :language: yaml
60
+
52
61
  *********************************************
53
62
  Handling data that is not 100% CF-compliant
54
63
  *********************************************
@@ -0,0 +1,8 @@
1
+ dates:
2
+ start: 2023-01-01T00:00:00
3
+ end: 2023-01-02T18:00:00
4
+ frequency: 6h
5
+
6
+ input:
7
+ anemoi-dataset:
8
+ dataset: /path/to/input.zarr
@@ -14,4 +14,5 @@ ds = open_dataset(
14
14
  },
15
15
  source="global-dataset",
16
16
  interpolation="nearest",
17
+ k=1,
17
18
  )
@@ -9,3 +9,4 @@ dataset:
9
9
  adjust: dates
10
10
  source: global-dataset
11
11
  interpolation: nearest
12
+ k: 1
@@ -50,7 +50,7 @@ dynamic = [
50
50
  ]
51
51
  dependencies = [
52
52
  "anemoi-transform>=0.1.10",
53
- "anemoi-utils[provenance]>=0.4.21",
53
+ "anemoi-utils[provenance]>=0.4.26",
54
54
  "cfunits",
55
55
  "numcodecs<0.16", # Until we move to zarr3
56
56
  "numpy",
@@ -100,6 +100,7 @@ optional-dependencies.remote = [
100
100
  optional-dependencies.tests = [
101
101
  "anemoi-datasets[xarray]",
102
102
  "pytest",
103
+ "pytest-xdist",
103
104
  ]
104
105
 
105
106
  optional-dependencies.xarray = [
@@ -131,6 +132,13 @@ version_file = "src/anemoi/datasets/_version.py"
131
132
  [tool.isort]
132
133
  profile = "black"
133
134
 
135
+ [tool.pytest.ini_options]
136
+ testpaths = "tests"
137
+ addopts = [
138
+ "--numprocesses=auto",
139
+ "--strict-config",
140
+ ]
141
+
134
142
  [tool.mypy]
135
143
  strict = false
136
144
  exclude = [
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.5.25'
21
- __version_tuple__ = version_tuple = (0, 5, 25)
20
+ __version__ = version = '0.5.26'
21
+ __version_tuple__ = version_tuple = (0, 5, 26)
@@ -81,7 +81,7 @@ class GribIndexCmd(Command):
81
81
  bool
82
82
  True if the path matches, False otherwise.
83
83
  """
84
- return fnmatch.fnmatch(path, args.match)
84
+ return fnmatch.fnmatch(os.path.basename(path), args.match)
85
85
 
86
86
  from anemoi.datasets.create.sources.grib_index import GribIndex
87
87
 
@@ -1,4 +1,4 @@
1
- # (C) Copyright 2025 Anemoi contributors.
1
+ # (C) Copyright 2025- Anemoi contributors.
2
2
  #
3
3
  # This software is licensed under the terms of the Apache Licence Version 2.0
4
4
  # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
@@ -12,10 +12,8 @@ from typing import Dict
12
12
 
13
13
  import earthkit.data as ekd
14
14
 
15
- from ..filter import Filter
16
15
 
17
-
18
- class TransformFilter(Filter):
16
+ class TransformFilter:
19
17
  """Calls filters from anemoi.transform.filters
20
18
 
21
19
  Parameters
@@ -29,7 +27,6 @@ class TransformFilter(Filter):
29
27
  """
30
28
 
31
29
  def __init__(self, context: Any, name: str, config: Dict[str, Any]) -> None:
32
-
33
30
  from anemoi.transform.filters import create_filter
34
31
 
35
32
  self.name = name
@@ -8,7 +8,6 @@
8
8
  # nor does it submit to any jurisdiction.
9
9
 
10
10
  import logging
11
- import warnings
12
11
  from copy import deepcopy
13
12
  from typing import Any
14
13
  from typing import Dict
@@ -165,24 +164,11 @@ def step_factory(config: Dict[str, Any], context: ActionContext, action_path: Li
165
164
  if cls is not None:
166
165
  return cls(context, action_path, previous_step, *args, **kwargs)
167
166
 
168
- # Try filters from datasets filter registry
167
+ # Try filters from transform filter registry
169
168
  from anemoi.transform.filters import filter_registry as transform_filter_registry
170
169
 
171
- from ..filters import create_filter as create_datasets_filter
172
- from ..filters import filter_registry as datasets_filter_registry
173
-
174
- if datasets_filter_registry.is_registered(key):
175
-
176
- if transform_filter_registry.is_registered(key):
177
- warnings.warn(f"Filter `{key}` is registered in both datasets and transform filter registries")
178
-
179
- filter = create_datasets_filter(None, config)
180
- return FunctionStepAction(context, action_path + [key], previous_step, key, filter)
181
-
182
- # Use filters from transform registry
183
-
184
170
  if transform_filter_registry.is_registered(key):
185
- from ..filters.transform import TransformFilter
171
+ from ..filter import TransformFilter
186
172
 
187
173
  return FunctionStepAction(
188
174
  context, action_path + [key], previous_step, key, TransformFilter(context, key, config)
@@ -0,0 +1,44 @@
1
+ # (C) Copyright 2024 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 . import source_registry
12
+ from .xarray import XarraySourceBase
13
+
14
+
15
+ @source_registry.register("planetary_computer")
16
+ class PlanetaryComputerSource(XarraySourceBase):
17
+ """An Xarray data source for the planetary_computer."""
18
+
19
+ emoji = "🪐"
20
+
21
+ def __init__(self, context, data_catalog_id, version="v1", *args, **kwargs: dict):
22
+
23
+ import planetary_computer
24
+ import pystac_client
25
+
26
+ self.data_catalog_id = data_catalog_id
27
+ self.flavour = kwargs.pop("flavour", None)
28
+ self.patch = kwargs.pop("patch", None)
29
+ self.options = kwargs.pop("options", {})
30
+
31
+ catalog = pystac_client.Client.open(
32
+ f"https://planetarycomputer.microsoft.com/api/stac/{version}/",
33
+ modifier=planetary_computer.sign_inplace,
34
+ )
35
+ collection = catalog.get_collection(self.data_catalog_id)
36
+
37
+ asset = collection.assets["zarr-abfs"]
38
+
39
+ if "xarray:storage_options" in asset.extra_fields:
40
+ self.options["storage_options"] = asset.extra_fields["xarray:storage_options"]
41
+
42
+ self.options.update(asset.extra_fields["xarray:open_kwargs"])
43
+
44
+ super().__init__(context, url=asset.href, *args, **kwargs)
@@ -20,7 +20,6 @@ import xarray as xr
20
20
  from earthkit.data.core.fieldlist import MultiFieldList
21
21
 
22
22
  from anemoi.datasets.create.sources.patterns import iterate_patterns
23
- from anemoi.datasets.data.stores import name_to_zarr_store
24
23
 
25
24
  from ..legacy import legacy_source
26
25
  from .fieldlist import XarrayFieldList
@@ -89,37 +88,22 @@ def load_one(
89
88
  The loaded dataset.
90
89
  """
91
90
 
92
- """
93
- We manage the S3 client ourselves, bypassing fsspec and s3fs layers, because sometimes something on the stack
94
- zarr/fsspec/s3fs/boto3 (?) seem to flags files as missing when they actually are not (maybe when S3 reports some sort of
95
- connection error). In that case, Zarr will silently fill the chunks that could not be downloaded with NaNs.
96
- See https://github.com/pydata/xarray/issues/8842
97
-
98
- We have seen this bug triggered when we run many clients in parallel, for example, when we create a new dataset using `xarray-zarr`.
99
- """
100
-
101
91
  if options is None:
102
92
  options = {}
103
93
 
104
94
  context.trace(emoji, dataset, options, kwargs)
105
95
 
106
- if isinstance(dataset, str) and ".zarr" in dataset:
107
- data = xr.open_zarr(name_to_zarr_store(dataset), **options)
108
- elif "planetarycomputer" in dataset:
109
- store = name_to_zarr_store(dataset)
110
- if "store" in store:
111
- data = xr.open_zarr(**store)
112
- if "filename_or_obj" in store:
113
- data = xr.open_dataset(**store)
114
- else:
115
- data = xr.open_dataset(dataset, **options)
96
+ if isinstance(dataset, str) and dataset.endswith(".zarr"):
97
+ # If the dataset is a zarr store, we need to use the zarr engine
98
+ options["engine"] = "zarr"
99
+
100
+ data = xr.open_dataset(dataset, **options)
116
101
 
117
102
  fs = XarrayFieldList.from_xarray(data, flavour=flavour, patch=patch)
118
103
 
119
104
  if len(dates) == 0:
120
105
  result = fs.sel(**kwargs)
121
106
  else:
122
- print("dates", dates, kwargs)
123
107
  result = MultiFieldList([fs.sel(valid_datetime=date, **kwargs) for date in dates])
124
108
 
125
109
  if len(result) == 0:
@@ -130,7 +114,7 @@ def load_one(
130
114
  a = ["valid_datetime", k.metadata("valid_datetime", default=None)]
131
115
  for n in kwargs.keys():
132
116
  a.extend([n, k.metadata(n, default=None)])
133
- print([str(x) for x in a])
117
+ LOG.warning(f"{[str(x) for x in a]}")
134
118
 
135
119
  if i > 16:
136
120
  break
@@ -95,6 +95,7 @@ class Coordinate:
95
95
  is_member = False
96
96
  is_x = False
97
97
  is_y = False
98
+ is_point = False
98
99
 
99
100
  def __init__(self, variable: xr.DataArray) -> None:
100
101
  """Initialize the coordinate.
@@ -390,6 +391,13 @@ class EnsembleCoordinate(Coordinate):
390
391
  return value
391
392
 
392
393
 
394
+ class PointCoordinate(Coordinate):
395
+ """Coordinate class for point data."""
396
+
397
+ is_point = True
398
+ mars_names = ("point",)
399
+
400
+
393
401
  class LongitudeCoordinate(Coordinate):
394
402
  """Coordinate class for longitude."""
395
403
 
@@ -87,13 +87,10 @@ class XArrayField(Field):
87
87
  coordinate = owner.by_name[coord_name]
88
88
  self._md[coord_name] = coordinate.normalise(extract_single_value(coord_value))
89
89
 
90
- # print(values.ndim, values.shape, selection.dims)
91
90
  # By now, the only dimensions should be latitude and longitude
92
91
  self._shape = tuple(list(self.selection.shape)[-2:])
93
92
  if math.prod(self._shape) != math.prod(self.selection.shape):
94
- print(self.selection.ndim, self.selection.shape)
95
- print(self.selection)
96
- raise ValueError("Invalid shape for selection")
93
+ raise ValueError(f"Invalid shape for selection {self._shape=}, {self.selection.shape=} {self.selection=}")
97
94
 
98
95
  @property
99
96
  def shape(self) -> Tuple[int, int]:
@@ -26,6 +26,7 @@ from .coordinates import EnsembleCoordinate
26
26
  from .coordinates import LatitudeCoordinate
27
27
  from .coordinates import LevelCoordinate
28
28
  from .coordinates import LongitudeCoordinate
29
+ from .coordinates import PointCoordinate
29
30
  from .coordinates import ScalarCoordinate
30
31
  from .coordinates import StepCoordinate
31
32
  from .coordinates import TimeCoordinate
@@ -134,6 +135,10 @@ class CoordinateGuesser(ABC):
134
135
 
135
136
  d: Optional[Coordinate] = None
136
137
 
138
+ d = self._is_point(coordinate, attributes)
139
+ if d is not None:
140
+ return d
141
+
137
142
  d = self._is_longitude(coordinate, attributes)
138
143
  if d is not None:
139
144
  return d
@@ -308,9 +313,9 @@ class CoordinateGuesser(ABC):
308
313
  return self._grid_cache[(x.name, y.name, dim_vars)]
309
314
 
310
315
  grid_mapping = variable.attrs.get("grid_mapping", None)
311
- if grid_mapping is not None:
312
- print(f"grid_mapping: {grid_mapping}")
313
- print(self.ds[grid_mapping])
316
+ # if grid_mapping is not None:
317
+ # print(f"grid_mapping: {grid_mapping}")
318
+ # print(self.ds[grid_mapping])
314
319
 
315
320
  if grid_mapping is None:
316
321
  LOG.warning(f"No 'grid_mapping' attribute provided for '{variable.name}'")
@@ -392,6 +397,10 @@ class CoordinateGuesser(ABC):
392
397
  """
393
398
  pass
394
399
 
400
+ @abstractmethod
401
+ def _is_point(self, c: xr.DataArray, attributes: CoordinateAttributes) -> Optional[PointCoordinate]:
402
+ pass
403
+
395
404
  @abstractmethod
396
405
  def _is_latitude(self, c: xr.DataArray, attributes: CoordinateAttributes) -> Optional[LatitudeCoordinate]:
397
406
  """Checks if the coordinate is a latitude.
@@ -550,6 +559,15 @@ class DefaultCoordinateGuesser(CoordinateGuesser):
550
559
  """
551
560
  super().__init__(ds)
552
561
 
562
+ def _is_point(self, c: xr.DataArray, attributes: CoordinateAttributes) -> Optional[PointCoordinate]:
563
+ if attributes.standard_name in ["cell", "station", "poi", "point"]:
564
+ return PointCoordinate(c)
565
+
566
+ if attributes.name in ["cell", "station", "poi", "point"]: # WeatherBench
567
+ return PointCoordinate(c)
568
+
569
+ return None
570
+
553
571
  def _is_longitude(self, c: xr.DataArray, attributes: CoordinateAttributes) -> Optional[LongitudeCoordinate]:
554
572
  """Checks if the coordinate is a longitude.
555
573
 
@@ -750,6 +768,9 @@ class DefaultCoordinateGuesser(CoordinateGuesser):
750
768
  if attributes.standard_name == "air_pressure" and attributes.units == "hPa":
751
769
  return LevelCoordinate(c, "pl")
752
770
 
771
+ if attributes.long_name == "pressure" and attributes.units in ["hPa", "Pa"]:
772
+ return LevelCoordinate(c, "pl")
773
+
753
774
  if attributes.name == "level":
754
775
  return LevelCoordinate(c, "pl")
755
776
 
@@ -759,9 +780,6 @@ class DefaultCoordinateGuesser(CoordinateGuesser):
759
780
  if attributes.standard_name == "depth":
760
781
  return LevelCoordinate(c, "depth")
761
782
 
762
- if attributes.name == "vertical" and attributes.units == "hPa":
763
- return LevelCoordinate(c, "pl")
764
-
765
783
  return None
766
784
 
767
785
  def _is_number(self, c: xr.DataArray, attributes: CoordinateAttributes) -> Optional[EnsembleCoordinate]:
@@ -1040,3 +1058,23 @@ class FlavourCoordinateGuesser(CoordinateGuesser):
1040
1058
  return EnsembleCoordinate(c)
1041
1059
 
1042
1060
  return None
1061
+
1062
+ def _is_point(self, c: xr.DataArray, attributes: CoordinateAttributes) -> Optional[PointCoordinate]:
1063
+ """Checks if the coordinate is a point coordinate using the flavour rules.
1064
+
1065
+ Parameters
1066
+ ----------
1067
+ c : xr.DataArray
1068
+ The coordinate to check.
1069
+ attributes : CoordinateAttributes
1070
+ The attributes of the coordinate.
1071
+
1072
+ Returns
1073
+ -------
1074
+ Optional[PointCoordinate]
1075
+ The StepCoorPointCoordinateinate if matched, else None.
1076
+ """
1077
+ if self._match(c, "point", attributes):
1078
+ return PointCoordinate(c)
1079
+
1080
+ return None
@@ -61,9 +61,50 @@ def patch_coordinates(ds: xr.Dataset, coordinates: List[str]) -> Any:
61
61
  return ds
62
62
 
63
63
 
64
+ def patch_rename(ds: xr.Dataset, renames: dict[str, str]) -> Any:
65
+ """Rename variables in the dataset.
66
+
67
+ Parameters
68
+ ----------
69
+ ds : xr.Dataset
70
+ The dataset to patch.
71
+ renames : dict[str, str]
72
+ Mapping from old variable names to new variable names.
73
+
74
+ Returns
75
+ -------
76
+ Any
77
+ The patched dataset.
78
+ """
79
+ return ds.rename(renames)
80
+
81
+
82
+ def patch_sort_coordinate(ds: xr.Dataset, sort_coordinates: List[str]) -> Any:
83
+ """Sort the coordinates of the dataset.
84
+
85
+ Parameters
86
+ ----------
87
+ ds : xr.Dataset
88
+ The dataset to patch.
89
+ sort_coordinates : List[str]
90
+ The coordinates to sort.
91
+
92
+ Returns
93
+ -------
94
+ Any
95
+ The patched dataset.
96
+ """
97
+
98
+ for name in sort_coordinates:
99
+ ds = ds.sortby(name)
100
+ return ds
101
+
102
+
64
103
  PATCHES = {
65
104
  "attributes": patch_attributes,
66
105
  "coordinates": patch_coordinates,
106
+ "rename": patch_rename,
107
+ "sort_coordinates": patch_sort_coordinate,
67
108
  }
68
109
 
69
110
 
@@ -82,7 +123,9 @@ def patch_dataset(ds: xr.Dataset, patch: Dict[str, Dict[str, Any]]) -> Any:
82
123
  Any
83
124
  The patched dataset.
84
125
  """
85
- for what, values in patch.items():
126
+
127
+ ORDER = ["coordinates", "attributes", "rename", "sort_coordinates"]
128
+ for what, values in sorted(patch.items(), key=lambda x: ORDER.index(x[0])):
86
129
  if what not in PATCHES:
87
130
  raise ValueError(f"Unknown patch type {what!r}")
88
131
 
@@ -82,8 +82,12 @@ class Variable:
82
82
 
83
83
  self.time = time
84
84
 
85
- self.shape = tuple(len(c.variable) for c in coordinates if c.is_dim and not c.scalar and not c.is_grid)
86
- self.names = {c.variable.name: c for c in coordinates if c.is_dim and not c.scalar and not c.is_grid}
85
+ self.shape = tuple(
86
+ len(c.variable) for c in coordinates if c.is_dim and not c.scalar and not c.is_grid and not c.is_point
87
+ )
88
+ self.names = {
89
+ c.variable.name: c for c in coordinates if c.is_dim and not c.scalar and not c.is_grid and not c.is_point
90
+ }
87
91
  self.by_name = {c.variable.name: c for c in coordinates}
88
92
 
89
93
  # We need that alias for the time dimension