anemoi-datasets 0.3.5__tar.gz → 0.3.7__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 (247) hide show
  1. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/.github/workflows/python-publish.yml +1 -2
  2. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/.pre-commit-config.yaml +4 -3
  3. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/PKG-INFO +7 -11
  4. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/pyproject.toml +6 -11
  5. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/__init__.py +2 -0
  6. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/_version.py +2 -2
  7. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/commands/compare.py +2 -0
  8. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/commands/copy.py +60 -14
  9. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/compute/recentre.py +1 -1
  10. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/filters/rename.py +14 -0
  11. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/loaders.py +6 -3
  12. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/data/__init__.py +7 -0
  13. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/data/dataset.py +3 -0
  14. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/data/forwards.py +7 -0
  15. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/data/masked.py +6 -2
  16. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/data/misc.py +3 -3
  17. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/data/statistics.py +4 -0
  18. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/data/stores.py +10 -1
  19. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi_datasets.egg-info/PKG-INFO +7 -11
  20. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi_datasets.egg-info/requires.txt +5 -9
  21. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/.gitignore +0 -0
  22. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/.readthedocs.yaml +0 -0
  23. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/.vscode/spellright.dict +0 -0
  24. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/LICENSE +0 -0
  25. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/README.md +0 -0
  26. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/Makefile +0 -0
  27. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/_static/logo.png +0 -0
  28. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/_static/style.css +0 -0
  29. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/_templates/.gitkeep +0 -0
  30. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/apply-fmt.sh +0 -0
  31. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/filters/empty.rst +0 -0
  32. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/filters/noop.rst +0 -0
  33. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/filters/rename.rst +0 -0
  34. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/filters/rotate_winds.rst +0 -0
  35. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/filters/select.rst +0 -0
  36. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/filters/unrotate_winds.rst +0 -0
  37. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/filters.rst +0 -0
  38. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/handling-missing-dates.rst +0 -0
  39. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/handling-missing-values.rst +0 -0
  40. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/introduction.rst +0 -0
  41. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/naming-variables.rst +0 -0
  42. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/operations.rst +0 -0
  43. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/accumulations.rst +0 -0
  44. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/accumulations1.yaml +0 -0
  45. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/accumulations2.yaml +0 -0
  46. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/forcings.rst +0 -0
  47. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/forcings.yaml +0 -0
  48. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/grib.rst +0 -0
  49. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/hindcasts.rst +0 -0
  50. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/mars.rst +0 -0
  51. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/mars1.yaml +0 -0
  52. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/mars2.yaml +0 -0
  53. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/netcdf.rst +0 -0
  54. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/netcdf.yaml +0 -0
  55. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/opendap.rst +0 -0
  56. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/opendap.yaml +0 -0
  57. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/recentre.rst +0 -0
  58. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/yaml/grib1.yaml +0 -0
  59. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/yaml/grib2.yaml +0 -0
  60. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/yaml/grib3.yaml +0 -0
  61. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/yaml/grib4.yaml +0 -0
  62. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/yaml/hindcasts.yaml +0 -0
  63. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources/yaml/recentre.yaml +0 -0
  64. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/sources.rst +0 -0
  65. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/statistics.rst +0 -0
  66. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/syntax.rst +0 -0
  67. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/syntax.yaml +0 -0
  68. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/yaml/Makefile +0 -0
  69. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/yaml/building1.txt +0 -0
  70. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/yaml/building1.yaml +0 -0
  71. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/yaml/building2.txt +0 -0
  72. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/yaml/building2.yaml +0 -0
  73. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/yaml/building3.txt +0 -0
  74. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/yaml/building3.yaml +0 -0
  75. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/yaml/concat.yaml +0 -0
  76. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/yaml/hindcasts.yaml +0 -0
  77. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/yaml/input.yaml +0 -0
  78. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/yaml/missing_dates.yaml +0 -0
  79. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/yaml/nan.yaml +0 -0
  80. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/building/yaml/pipe.yaml +0 -0
  81. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/check-index.sh +0 -0
  82. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/cli/compare.rst +0 -0
  83. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/cli/copy.rst +0 -0
  84. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/cli/create.rst +0 -0
  85. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/cli/inspect.rst +0 -0
  86. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/cli/introduction.rst +0 -0
  87. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/cli/scan.rst +0 -0
  88. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/conf.py +0 -0
  89. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/images.pptx +0 -0
  90. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/index.rst +0 -0
  91. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/installing.rst +0 -0
  92. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/overview.rst +0 -0
  93. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/overview_.py +0 -0
  94. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/requirements.txt +0 -0
  95. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/schemas/matrix.excalidraw +0 -0
  96. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/schemas/matrix.png +0 -0
  97. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/schemas/overview.excalidraw +0 -0
  98. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/schemas/overview.png +0 -0
  99. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/schemas/recipe.excalidraw +0 -0
  100. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/schemas/recipe.png +0 -0
  101. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/test.ipynb +0 -0
  102. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/area1_.py +0 -0
  103. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/area2_.py +0 -0
  104. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/chain_.py +0 -0
  105. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/combine_example.py +0 -0
  106. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/concat1.py +0 -0
  107. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/cutout_.py +0 -0
  108. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/drop_.py +0 -0
  109. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/end_.py +0 -0
  110. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/ensembles1_.py +0 -0
  111. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/frequency_.py +0 -0
  112. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/grids1_.py +0 -0
  113. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/join1.py +0 -0
  114. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/matching0_.py +0 -0
  115. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/matching1_.py +0 -0
  116. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/matching2_.py +0 -0
  117. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/matching3_.py +0 -0
  118. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/matching4_.py +0 -0
  119. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/misc1.py +0 -0
  120. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/misc2.py +0 -0
  121. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/missing_.py +0 -0
  122. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/open_cloud.py +0 -0
  123. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/open_combine1_.py +0 -0
  124. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/open_combine2_.py +0 -0
  125. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/open_complex.py +0 -0
  126. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/open_dict_.py +0 -0
  127. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/open_first_.py +0 -0
  128. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/open_list_.py +0 -0
  129. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/open_name.py +0 -0
  130. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/open_other.py +0 -0
  131. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/open_path.py +0 -0
  132. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/open_yaml_.py +0 -0
  133. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/rename_.py +0 -0
  134. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/reorder1_.py +0 -0
  135. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/reorder2_.py +0 -0
  136. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/select1_.py +0 -0
  137. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/select2_.py +0 -0
  138. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/shuffle_.py +0 -0
  139. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/some_attributes_.py +0 -0
  140. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/start_.py +0 -0
  141. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/statistics_.py +0 -0
  142. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/subset_example.py +0 -0
  143. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/thinning_.py +0 -0
  144. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/zip1_.py +0 -0
  145. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/code/zip2_.py +0 -0
  146. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/combining.rst +0 -0
  147. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/configuration.rst +0 -0
  148. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/configuration.toml +0 -0
  149. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/grids.rst +0 -0
  150. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/images/area-1.png +0 -0
  151. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/images/concat.png +0 -0
  152. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/images/cutout-1.png +0 -0
  153. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/images/cutout-2.png +0 -0
  154. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/images/cutout-3.png +0 -0
  155. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/images/cutout-4.png +0 -0
  156. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/images/join.png +0 -0
  157. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/images/overlay.png +0 -0
  158. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/images/thinning-after.png +0 -0
  159. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/images/thinning-before.png +0 -0
  160. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/introduction.rst +0 -0
  161. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/matching.rst +0 -0
  162. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/methods.rst +0 -0
  163. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/miscellaneous.rst +0 -0
  164. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/opening.rst +0 -0
  165. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/other.rst +0 -0
  166. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/selecting.rst +0 -0
  167. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/statistics.rst +0 -0
  168. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/docs/using/subsetting.rst +0 -0
  169. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/setup.cfg +0 -0
  170. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/__main__.py +0 -0
  171. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/commands/__init__.py +0 -0
  172. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/commands/create.py +0 -0
  173. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/commands/inspect.py +0 -0
  174. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/commands/scan.py +0 -0
  175. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/compute/__init__.py +0 -0
  176. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/__init__.py +0 -0
  177. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/check.py +0 -0
  178. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/chunks.py +0 -0
  179. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/config.py +0 -0
  180. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/__init__.py +0 -0
  181. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/filters/__init__.py +0 -0
  182. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/filters/empty.py +0 -0
  183. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/filters/noop.py +0 -0
  184. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/filters/rotate_winds.py +0 -0
  185. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/filters/unrotate_winds.py +0 -0
  186. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/sources/__init__.py +0 -0
  187. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/sources/accumulations.py +0 -0
  188. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/sources/constants.py +0 -0
  189. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/sources/empty.py +0 -0
  190. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/sources/forcings.py +0 -0
  191. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/sources/grib.py +0 -0
  192. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/sources/hindcasts.py +0 -0
  193. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/sources/mars.py +0 -0
  194. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/sources/netcdf.py +0 -0
  195. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/sources/opendap.py +0 -0
  196. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/sources/recentre.py +0 -0
  197. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/sources/source.py +0 -0
  198. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/functions/sources/tendencies.py +0 -0
  199. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/input.py +0 -0
  200. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/patch.py +0 -0
  201. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/persistent.py +0 -0
  202. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/size.py +0 -0
  203. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/statistics/__init__.py +0 -0
  204. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/statistics/summary.py +0 -0
  205. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/template.py +0 -0
  206. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/utils.py +0 -0
  207. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/writer.py +0 -0
  208. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/create/zarr.py +0 -0
  209. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/data/concat.py +0 -0
  210. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/data/debug.css +0 -0
  211. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/data/debug.py +0 -0
  212. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/data/ensemble.py +0 -0
  213. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/data/grids.py +0 -0
  214. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/data/indexing.py +0 -0
  215. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/data/join.py +0 -0
  216. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/data/select.py +0 -0
  217. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/data/subset.py +0 -0
  218. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/data/unchecked.py +0 -0
  219. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/dates/__init__.py +0 -0
  220. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/dates/groups.py +0 -0
  221. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/grids.py +0 -0
  222. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi/datasets/utils/__init__.py +0 -0
  223. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi_datasets.egg-info/SOURCES.txt +0 -0
  224. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi_datasets.egg-info/dependency_links.txt +0 -0
  225. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi_datasets.egg-info/entry_points.txt +0 -0
  226. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/src/anemoi_datasets.egg-info/top_level.txt +0 -0
  227. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tests/create/concat.yaml +0 -0
  228. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tests/create/data_sources.yaml +0 -0
  229. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tests/create/join.yaml +0 -0
  230. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tests/create/missing.yaml +0 -0
  231. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tests/create/nan.yaml +0 -0
  232. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tests/create/pipe.yaml +0 -0
  233. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tests/create/recentre.yaml +0 -0
  234. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tests/create/test_create.py +0 -0
  235. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tests/create-perturbations-full.yaml +0 -0
  236. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tests/create-shift.yaml +0 -0
  237. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tests/test_chunks.py +0 -0
  238. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tests/test_data.py +0 -0
  239. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tests/test_dates.py +0 -0
  240. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tests/test_indexing.py +0 -0
  241. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tools/.gitignore +0 -0
  242. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tools/examples/Makefile +0 -0
  243. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tools/examples/an-oper-2023-2023-2p5-6h-v1.yaml +0 -0
  244. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tools/grids/Makefile +0 -0
  245. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tools/grids/grids.ipynb +0 -0
  246. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tools/grids/grids1.yaml +0 -0
  247. {anemoi_datasets-0.3.5 → anemoi_datasets-0.3.7}/tools/grids/grids2.yaml +0 -0
@@ -41,8 +41,7 @@ jobs:
41
41
 
42
42
  - name: Install
43
43
  run: |
44
- pip install pytest
45
- pip install -e .[all,test]
44
+ pip install -e .[all,tests]
46
45
  pip freeze
47
46
 
48
47
  - name: Tests
@@ -37,7 +37,8 @@ repos:
37
37
  rev: v0.4.6
38
38
  hooks:
39
39
  - id: ruff
40
- exclude: '(dev/.*|.*_)\.py$'
40
+ # Next line if for documenation cod snippets
41
+ exclude: '^(dev/.*|[A-Za-z].*_)\.py$'
41
42
  args:
42
43
  - --line-length=120
43
44
  - --fix
@@ -59,10 +60,10 @@ repos:
59
60
  - id: docconvert
60
61
  args: ["numpy"]
61
62
  - repo: https://github.com/b8raoult/optional-dependencies-all
62
- rev: "0.0.2"
63
+ rev: "0.0.6"
63
64
  hooks:
64
65
  - id: optional-dependencies-all
65
- args: ["--inplace", "--all-key", "all", "--exclude-keys", "dev,docs,test"]
66
+ args: ["--inplace", "--exclude-keys=dev,docs,tests", "--group=dev=all,docs,tests"]
66
67
  - repo: https://github.com/tox-dev/pyproject-fmt
67
68
  rev: "2.1.3"
68
69
  hooks:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: anemoi-datasets
3
- Version: 0.3.5
3
+ Version: 0.3.7
4
4
  Summary: A package to hold various functions to support training of ML models on ECMWF data.
5
5
  Author-email: "European Centre for Medium-Range Weather Forecasts (ECMWF)" <software.support@ecmwf.int>
6
6
  License: Apache License
@@ -223,28 +223,21 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
223
223
  Classifier: Programming Language :: Python :: Implementation :: PyPy
224
224
  Requires-Python: >=3.9
225
225
  License-File: LICENSE
226
- Requires-Dist: anemoi-utils[provenance]>=0.3
226
+ Requires-Dist: anemoi-utils[provenance]>=0.3.4
227
227
  Requires-Dist: numpy
228
228
  Requires-Dist: pyyaml
229
229
  Requires-Dist: semantic-version
230
230
  Requires-Dist: tqdm
231
231
  Requires-Dist: zarr<=2.17
232
232
  Provides-Extra: all
233
- Requires-Dist: anemoi-utils[provenance]>=0.3; extra == "all"
234
233
  Requires-Dist: boto3; extra == "all"
235
234
  Requires-Dist: climetlab>=0.23.2; extra == "all"
236
235
  Requires-Dist: earthkit-meteo; extra == "all"
237
236
  Requires-Dist: ecmwflibs>=0.6.3; extra == "all"
238
237
  Requires-Dist: entrypoints; extra == "all"
239
- Requires-Dist: numpy; extra == "all"
240
238
  Requires-Dist: pyproj; extra == "all"
241
- Requires-Dist: pytest; extra == "all"
242
- Requires-Dist: pyyaml; extra == "all"
243
239
  Requires-Dist: requests; extra == "all"
244
240
  Requires-Dist: s3fs; extra == "all"
245
- Requires-Dist: semantic-version; extra == "all"
246
- Requires-Dist: tqdm; extra == "all"
247
- Requires-Dist: zarr<=2.17; extra == "all"
248
241
  Provides-Extra: create
249
242
  Requires-Dist: climetlab>=0.23.2; extra == "create"
250
243
  Requires-Dist: earthkit-meteo; extra == "create"
@@ -253,11 +246,14 @@ Requires-Dist: entrypoints; extra == "create"
253
246
  Requires-Dist: pyproj; extra == "create"
254
247
  Provides-Extra: dev
255
248
  Requires-Dist: boto3; extra == "dev"
249
+ Requires-Dist: climetlab>=0.23.2; extra == "dev"
256
250
  Requires-Dist: earthkit-meteo; extra == "dev"
257
251
  Requires-Dist: ecmwflibs>=0.6.3; extra == "dev"
252
+ Requires-Dist: entrypoints; extra == "dev"
258
253
  Requires-Dist: nbsphinx; extra == "dev"
259
254
  Requires-Dist: pandoc; extra == "dev"
260
255
  Requires-Dist: pyproj; extra == "dev"
256
+ Requires-Dist: pytest; extra == "dev"
261
257
  Requires-Dist: requests; extra == "dev"
262
258
  Requires-Dist: s3fs; extra == "dev"
263
259
  Requires-Dist: sphinx; extra == "dev"
@@ -273,5 +269,5 @@ Provides-Extra: remote
273
269
  Requires-Dist: boto3; extra == "remote"
274
270
  Requires-Dist: requests; extra == "remote"
275
271
  Requires-Dist: s3fs; extra == "remote"
276
- Provides-Extra: test
277
- Requires-Dist: pytest; extra == "test"
272
+ Provides-Extra: tests
273
+ Requires-Dist: pytest; extra == "tests"
@@ -50,7 +50,7 @@ dynamic = [
50
50
  "version",
51
51
  ]
52
52
  dependencies = [
53
- "anemoi-utils[provenance]>=0.3",
53
+ "anemoi-utils[provenance]>=0.3.4",
54
54
  "numpy",
55
55
  "pyyaml",
56
56
  "semantic-version",
@@ -59,24 +59,17 @@ dependencies = [
59
59
  ]
60
60
 
61
61
  optional-dependencies.all = [
62
- "anemoi-utils[provenance]>=0.3",
63
62
  "boto3",
64
63
  "climetlab>=0.23.2",
65
64
  "earthkit-meteo",
66
65
  "ecmwflibs>=0.6.3",
67
66
  "entrypoints",
68
- "numpy",
69
67
  "pyproj",
70
- "pytest",
71
- "pyyaml",
72
68
  "requests",
73
69
  "s3fs",
74
- "semantic-version",
75
- "tqdm",
76
- "zarr<=2.17",
77
70
  ]
78
71
  optional-dependencies.create = [
79
- "climetlab>=0.23.2", # "earthkit-data"
72
+ "climetlab>=0.23.2",
80
73
  "earthkit-meteo",
81
74
  "ecmwflibs>=0.6.3",
82
75
  "entrypoints",
@@ -85,12 +78,14 @@ optional-dependencies.create = [
85
78
 
86
79
  optional-dependencies.dev = [
87
80
  "boto3",
88
-
81
+ "climetlab>=0.23.2",
89
82
  "earthkit-meteo",
90
83
  "ecmwflibs>=0.6.3",
84
+ "entrypoints",
91
85
  "nbsphinx",
92
86
  "pandoc",
93
87
  "pyproj",
88
+ "pytest",
94
89
  "requests",
95
90
  "s3fs",
96
91
  "sphinx",
@@ -109,7 +104,7 @@ optional-dependencies.remote = [
109
104
  "requests",
110
105
  "s3fs",
111
106
  ]
112
- optional-dependencies.test = [
107
+ optional-dependencies.tests = [
113
108
  "pytest",
114
109
  ]
115
110
  urls.Documentation = "https://anemoi-datasets.readthedocs.io/"
@@ -9,6 +9,7 @@ from ._version import __version__
9
9
  from .data import MissingDateError
10
10
  from .data import add_dataset_path
11
11
  from .data import add_named_dataset
12
+ from .data import list_dataset_names
12
13
  from .data import open_dataset
13
14
 
14
15
  __all__ = [
@@ -16,4 +17,5 @@ __all__ = [
16
17
  "MissingDateError",
17
18
  "add_dataset_path",
18
19
  "add_named_dataset",
20
+ "list_dataset_names",
19
21
  ]
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.3.5'
16
- __version_tuple__ = version_tuple = (0, 3, 5)
15
+ __version__ = version = '0.3.7'
16
+ __version_tuple__ = version_tuple = (0, 3, 7)
@@ -14,6 +14,8 @@ from . import Command
14
14
 
15
15
 
16
16
  class Compare(Command):
17
+ """Compare two datasets. This command compares the variables in two datasets and prints the mean of the common variables. It does not compare the data itself (yet)."""
18
+
17
19
  def add_arguments(self, command_parser):
18
20
  command_parser.add_argument("dataset1")
19
21
  command_parser.add_argument("dataset2")
@@ -12,6 +12,8 @@ from concurrent.futures import ThreadPoolExecutor
12
12
  from concurrent.futures import as_completed
13
13
 
14
14
  import tqdm
15
+ from anemoi.utils.s3 import download
16
+ from anemoi.utils.s3 import upload
15
17
 
16
18
  from . import Command
17
19
 
@@ -22,26 +24,48 @@ try:
22
24
  except AttributeError:
23
25
  isatty = False
24
26
 
25
- """
26
27
 
27
- ~/.aws/credentials
28
+ class S3Downloader:
29
+ def __init__(self, source, target, transfers, overwrite, resume, progress, **kwargs):
30
+ self.source = source
31
+ self.target = target
32
+ self.transfers = transfers
33
+ self.overwrite = overwrite
34
+ self.resume = resume
35
+ self.progress = progress
28
36
 
29
- [default]
30
- endpoint_url = https://object-store.os-api.cci1.ecmwf.int
31
- aws_access_key_id=xxx
32
- aws_secret_access_key=xxxx
37
+ def run(self):
38
+ download(
39
+ self.source + "/" if not self.source.endswith("/") else self.source,
40
+ self.target,
41
+ overwrite=self.overwrite,
42
+ ignore_existing=self.resume,
43
+ threads=self.transfers,
44
+ show_progress=self.progress,
45
+ )
33
46
 
34
- Then:
35
47
 
36
- anemoi-datasets copy aifs-ea-an-oper-0001-mars-o96-1979-2022-1h-v3.zarr/
37
- s3://ml-datasets/stable/aifs-ea-an-oper-0001-mars-o96-1979-2022-1h-v3.zarr
48
+ class S3Uploader:
49
+ def __init__(self, source, target, transfers, overwrite, resume, progress, **kwargs):
50
+ self.source = source
51
+ self.target = target
52
+ self.transfers = transfers
53
+ self.overwrite = overwrite
54
+ self.resume = resume
55
+ self.progress = progress
38
56
 
39
- zinfo https://object-store.os-api.cci1.ecmwf.int/
40
- ml-datasets/stable/aifs-ea-an-oper-0001-mars-o96-1979-2022-1h-v3.zarr
41
- """
57
+ def run(self):
58
+ upload(
59
+ self.source,
60
+ self.target,
61
+ overwrite=self.overwrite,
62
+ ignore_existing=self.resume,
63
+ threads=self.transfers,
64
+ show_progress=self.progress,
65
+ )
42
66
 
43
67
 
44
- class Copier:
68
+ class DefaultCopier:
45
69
  def __init__(self, source, target, transfers, block_size, overwrite, resume, progress, nested, rechunk, **kwargs):
46
70
  self.source = source
47
71
  self.target = target
@@ -295,7 +319,29 @@ class CopyMixin:
295
319
  command_parser.add_argument("target", help="Target location.")
296
320
 
297
321
  def run(self, args):
298
- Copier(**vars(args)).run()
322
+ if args.source == args.target:
323
+ raise ValueError("Source and target are the same.")
324
+
325
+ kwargs = vars(args)
326
+
327
+ if args.overwrite and args.resume:
328
+ raise ValueError("Cannot use --overwrite and --resume together.")
329
+
330
+ source_in_s3 = args.source.startswith("s3://")
331
+ target_in_s3 = args.target.startswith("s3://")
332
+
333
+ copier = None
334
+
335
+ if args.rechunk or (source_in_s3 and target_in_s3):
336
+ copier = DefaultCopier(**kwargs)
337
+ else:
338
+ if source_in_s3:
339
+ copier = S3Downloader(**kwargs)
340
+
341
+ if target_in_s3:
342
+ copier = S3Uploader(**kwargs)
343
+
344
+ copier.run()
299
345
 
300
346
 
301
347
  class Copy(CopyMixin, Command):
@@ -29,7 +29,7 @@ CLIP_VARIABLES = (
29
29
  "swl1",
30
30
  )
31
31
 
32
- SKIP = ("class", "stream", "type", "number", "expver", "_leg_number", "anoffset")
32
+ SKIP = ("class", "stream", "type", "number", "expver", "_leg_number", "anoffset", "time", "date", "step")
33
33
 
34
34
 
35
35
  def check_compatible(f1, f2, centre_field_as_mars, ensemble_field_as_mars):
@@ -13,6 +13,14 @@ from climetlab.indexing.fieldset import FieldArray
13
13
 
14
14
 
15
15
  class RenamedFieldMapping:
16
+ """Rename a field based on the value of another field.
17
+
18
+ Args:
19
+ field (Field): The field to be renamed.
20
+ what (str): The name of the field that will be used to rename the field.
21
+ renaming (dict): A dictionary mapping the values of 'what' to the new names.
22
+ """
23
+
16
24
  def __init__(self, field, what, renaming):
17
25
  self.field = field
18
26
  self.what = what
@@ -29,6 +37,12 @@ class RenamedFieldMapping:
29
37
 
30
38
 
31
39
  class RenamedFieldFormat:
40
+ """Rename a field based on a format string.
41
+
42
+ Args:
43
+ format (str): A string that defines the new name of the field.
44
+ """
45
+
32
46
  def __init__(self, field, format):
33
47
  self.field = field
34
48
  self.format = format
@@ -177,11 +177,14 @@ class InitialiserLoader(Loader):
177
177
  return
178
178
  if isinstance(obj, (dict, DictObj)):
179
179
  if "grid" in obj:
180
+ previous = obj["grid"]
180
181
  obj["grid"] = "20./20."
181
- LOG.warn(f"Running in test mode. Setting grid to {obj['grid']}")
182
+ LOG.warn(f"Running in test mode. Setting grid to {obj['grid']} instead of {previous}")
182
183
  if "number" in obj:
183
- obj["number"] = obj["number"][0:3]
184
- LOG.warn(f"Running in test mode. Setting number to {obj['number']}")
184
+ if isinstance(obj["number"], (list, tuple)):
185
+ previous = obj["number"]
186
+ obj["number"] = previous[0:3]
187
+ LOG.warn(f"Running in test mode. Setting number to {obj['number']} instead of {previous}")
185
188
  for k, v in obj.items():
186
189
  set_to_test_mode(v)
187
190
 
@@ -30,3 +30,10 @@ def open_dataset(*args, **kwargs):
30
30
  ds.arguments = {"args": args, "kwargs": kwargs}
31
31
  ds._check()
32
32
  return ds
33
+
34
+
35
+ def list_dataset_names(*args, **kwargs):
36
+ ds = _open_dataset(*args, **kwargs)
37
+ names = set()
38
+ ds.get_dataset_names(names)
39
+ return sorted(names)
@@ -226,3 +226,6 @@ class Dataset:
226
226
  @property
227
227
  def label(self):
228
228
  return self.__class__.__name__.lower()
229
+
230
+ def get_dataset_names(self, names):
231
+ raise NotImplementedError(self)
@@ -103,6 +103,9 @@ class Forwards(Dataset):
103
103
  f"subclass_metadata_specific() must be implemented in derived class {self.__class__.__name__}"
104
104
  )
105
105
 
106
+ def get_dataset_names(self, names):
107
+ self.forward.get_dataset_names(names)
108
+
106
109
 
107
110
  class Combined(Forwards):
108
111
  def __init__(self, datasets):
@@ -193,6 +196,10 @@ class Combined(Forwards):
193
196
  offset += len(d)
194
197
  return result
195
198
 
199
+ def get_dataset_names(self, names):
200
+ for d in self.datasets:
201
+ d.get_dataset_names(names)
202
+
196
203
 
197
204
  class GivenAxis(Combined):
198
205
  """Given a given axis, combine the datasets along that axis."""
@@ -70,8 +70,12 @@ class Thinning(Masked):
70
70
  self.thinning = thinning
71
71
  self.method = method
72
72
 
73
- latitudes = forward.latitudes.reshape(forward.field_shape)
74
- longitudes = forward.longitudes.reshape(forward.field_shape)
73
+ shape = forward.field_shape
74
+ if len(shape) != 2:
75
+ raise ValueError("Thinning only works latitude/longitude fields")
76
+
77
+ latitudes = forward.latitudes.reshape(shape)
78
+ longitudes = forward.longitudes.reshape(shape)
75
79
  latitudes = latitudes[::thinning, ::thinning].flatten()
76
80
  longitudes = longitudes[::thinning, ::thinning].flatten()
77
81
 
@@ -133,9 +133,9 @@ def _as_date(d, dates, last):
133
133
 
134
134
  if "-" in d and ":" in d:
135
135
  date, time = d.replace(" ", "T").split("T")
136
- year, month, day = date.split("-")
137
- hour, minute, second = time.split(":")
138
- return np.datetime64(f"{year:04}-{month:02}-{day:02}T{hour}:{minute}:{second}")
136
+ year, month, day = [int(_) for _ in date.split("-")]
137
+ hour, minute, second = [int(_) for _ in time.split(":")]
138
+ return np.datetime64(f"{year:04}-{month:02}-{day:02}T{hour:02}:{minute:02}:{second:02}")
139
139
 
140
140
  if "-" in d:
141
141
  assert ":" not in d
@@ -39,3 +39,7 @@ class Statistics(Forwards):
39
39
 
40
40
  def tree(self):
41
41
  return Node(self, [self.forward.tree()])
42
+
43
+ def get_dataset_names(self, names):
44
+ super().get_dataset_names(names)
45
+ self._statistic.get_dataset_names(names)
@@ -6,6 +6,7 @@
6
6
  # nor does it submit to any jurisdiction.
7
7
 
8
8
  import logging
9
+ import os
9
10
  import warnings
10
11
  from functools import cached_property
11
12
 
@@ -235,7 +236,11 @@ class Zarr(Dataset):
235
236
 
236
237
  @property
237
238
  def field_shape(self):
238
- return tuple(self.z.attrs["field_shape"])
239
+ try:
240
+ return tuple(self.z.attrs["field_shape"])
241
+ except KeyError:
242
+ LOG.warning("No 'field_shape' in %r, assuming 1D fields", self)
243
+ return (self.shape[-1],)
239
244
 
240
245
  @property
241
246
  def frequency(self):
@@ -288,6 +293,10 @@ class Zarr(Dataset):
288
293
  def tree(self):
289
294
  return Node(self, [], path=self.path)
290
295
 
296
+ def get_dataset_names(self, names):
297
+ name, _ = os.path.splitext(os.path.basename(self.path))
298
+ names.add(name)
299
+
291
300
 
292
301
  class ZarrWithMissingDates(Zarr):
293
302
  def __init__(self, path):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: anemoi-datasets
3
- Version: 0.3.5
3
+ Version: 0.3.7
4
4
  Summary: A package to hold various functions to support training of ML models on ECMWF data.
5
5
  Author-email: "European Centre for Medium-Range Weather Forecasts (ECMWF)" <software.support@ecmwf.int>
6
6
  License: Apache License
@@ -223,28 +223,21 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
223
223
  Classifier: Programming Language :: Python :: Implementation :: PyPy
224
224
  Requires-Python: >=3.9
225
225
  License-File: LICENSE
226
- Requires-Dist: anemoi-utils[provenance]>=0.3
226
+ Requires-Dist: anemoi-utils[provenance]>=0.3.4
227
227
  Requires-Dist: numpy
228
228
  Requires-Dist: pyyaml
229
229
  Requires-Dist: semantic-version
230
230
  Requires-Dist: tqdm
231
231
  Requires-Dist: zarr<=2.17
232
232
  Provides-Extra: all
233
- Requires-Dist: anemoi-utils[provenance]>=0.3; extra == "all"
234
233
  Requires-Dist: boto3; extra == "all"
235
234
  Requires-Dist: climetlab>=0.23.2; extra == "all"
236
235
  Requires-Dist: earthkit-meteo; extra == "all"
237
236
  Requires-Dist: ecmwflibs>=0.6.3; extra == "all"
238
237
  Requires-Dist: entrypoints; extra == "all"
239
- Requires-Dist: numpy; extra == "all"
240
238
  Requires-Dist: pyproj; extra == "all"
241
- Requires-Dist: pytest; extra == "all"
242
- Requires-Dist: pyyaml; extra == "all"
243
239
  Requires-Dist: requests; extra == "all"
244
240
  Requires-Dist: s3fs; extra == "all"
245
- Requires-Dist: semantic-version; extra == "all"
246
- Requires-Dist: tqdm; extra == "all"
247
- Requires-Dist: zarr<=2.17; extra == "all"
248
241
  Provides-Extra: create
249
242
  Requires-Dist: climetlab>=0.23.2; extra == "create"
250
243
  Requires-Dist: earthkit-meteo; extra == "create"
@@ -253,11 +246,14 @@ Requires-Dist: entrypoints; extra == "create"
253
246
  Requires-Dist: pyproj; extra == "create"
254
247
  Provides-Extra: dev
255
248
  Requires-Dist: boto3; extra == "dev"
249
+ Requires-Dist: climetlab>=0.23.2; extra == "dev"
256
250
  Requires-Dist: earthkit-meteo; extra == "dev"
257
251
  Requires-Dist: ecmwflibs>=0.6.3; extra == "dev"
252
+ Requires-Dist: entrypoints; extra == "dev"
258
253
  Requires-Dist: nbsphinx; extra == "dev"
259
254
  Requires-Dist: pandoc; extra == "dev"
260
255
  Requires-Dist: pyproj; extra == "dev"
256
+ Requires-Dist: pytest; extra == "dev"
261
257
  Requires-Dist: requests; extra == "dev"
262
258
  Requires-Dist: s3fs; extra == "dev"
263
259
  Requires-Dist: sphinx; extra == "dev"
@@ -273,5 +269,5 @@ Provides-Extra: remote
273
269
  Requires-Dist: boto3; extra == "remote"
274
270
  Requires-Dist: requests; extra == "remote"
275
271
  Requires-Dist: s3fs; extra == "remote"
276
- Provides-Extra: test
277
- Requires-Dist: pytest; extra == "test"
272
+ Provides-Extra: tests
273
+ Requires-Dist: pytest; extra == "tests"
@@ -1,4 +1,4 @@
1
- anemoi-utils[provenance]>=0.3
1
+ anemoi-utils[provenance]>=0.3.4
2
2
  numpy
3
3
  pyyaml
4
4
  semantic-version
@@ -6,21 +6,14 @@ tqdm
6
6
  zarr<=2.17
7
7
 
8
8
  [all]
9
- anemoi-utils[provenance]>=0.3
10
9
  boto3
11
10
  climetlab>=0.23.2
12
11
  earthkit-meteo
13
12
  ecmwflibs>=0.6.3
14
13
  entrypoints
15
- numpy
16
14
  pyproj
17
- pytest
18
- pyyaml
19
15
  requests
20
16
  s3fs
21
- semantic-version
22
- tqdm
23
- zarr<=2.17
24
17
 
25
18
  [create]
26
19
  climetlab>=0.23.2
@@ -31,11 +24,14 @@ pyproj
31
24
 
32
25
  [dev]
33
26
  boto3
27
+ climetlab>=0.23.2
34
28
  earthkit-meteo
35
29
  ecmwflibs>=0.6.3
30
+ entrypoints
36
31
  nbsphinx
37
32
  pandoc
38
33
  pyproj
34
+ pytest
39
35
  requests
40
36
  s3fs
41
37
  sphinx
@@ -54,5 +50,5 @@ boto3
54
50
  requests
55
51
  s3fs
56
52
 
57
- [test]
53
+ [tests]
58
54
  pytest
File without changes