anemoi-datasets 0.5.20__py3-none-any.whl → 0.5.21__py3-none-any.whl

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.
@@ -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.20'
21
- __version_tuple__ = version_tuple = (0, 5, 20)
20
+ __version__ = version = '0.5.21'
21
+ __version_tuple__ = version_tuple = (0, 5, 21)
@@ -29,8 +29,6 @@ class GribIndexCmd(Command):
29
29
  The command parser to which arguments are added.
30
30
  """
31
31
 
32
- from anemoi.datasets.create.sources.grib_index import KEYS
33
-
34
32
  command_parser.add_argument(
35
33
  "--index",
36
34
  help="Path to the index file to create or update",
@@ -52,7 +50,6 @@ class GribIndexCmd(Command):
52
50
  command_parser.add_argument(
53
51
  "--keys",
54
52
  help="GRIB keys to add to the index, separated by commas. If the list starts with a +, the keys are added to default list.",
55
- default=",".join(KEYS),
56
53
  )
57
54
 
58
55
  command_parser.add_argument(
@@ -401,7 +401,7 @@ class Version:
401
401
  return
402
402
 
403
403
  if self.build_flags is None:
404
- print("🪫 Dataset not initialized")
404
+ print("🪫 Dataset not initialised")
405
405
  return
406
406
 
407
407
  build_flags = self.build_flags
@@ -426,7 +426,7 @@ class Version:
426
426
  )
427
427
  start = self.initialised
428
428
  if self.initialised:
429
- print(f"🕰️ Dataset initialized {when(start)}.")
429
+ print(f"🕰️ Dataset initialised {when(start)}.")
430
430
  if built and latest:
431
431
  speed = (latest - start) / built
432
432
  eta = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None) + speed * (total - built)
@@ -1215,7 +1215,7 @@ class _InitAdditions(Actor, HasRegistryMixin, AdditionsMixin):
1215
1215
  self.tmp_storage = build_storage(directory=self.tmp_storage_path, create=True)
1216
1216
  self.tmp_storage.delete()
1217
1217
  self.tmp_storage.create()
1218
- LOG.info(f"Dataset {self.tmp_storage_path} additions initialized.")
1218
+ LOG.info(f"Dataset {self.tmp_storage_path} additions initialised.")
1219
1219
 
1220
1220
  def cleanup(self) -> None:
1221
1221
  """Clean up the temporary storage."""
@@ -25,7 +25,7 @@ def forcings(context: Any, dates: List[str], template: str, param: str) -> Any:
25
25
  The context in which the function is executed.
26
26
  dates : list
27
27
  List of dates for which data is to be loaded.
28
- template : str
28
+ template : FieldList
29
29
  Template for the data source.
30
30
  param : str
31
31
  Parameter for the data source.
@@ -17,9 +17,11 @@ from typing import Optional
17
17
  from typing import Union
18
18
 
19
19
  import earthkit.data as ekd
20
+ from anemoi.transform.fields import new_field_from_grid
21
+ from anemoi.transform.fields import new_fieldlist_from_list
20
22
  from anemoi.transform.flavour import RuleBasedFlavour
23
+ from anemoi.transform.grids import grid_registry
21
24
  from earthkit.data import from_source
22
- from earthkit.data.indexing.fieldlist import FieldArray
23
25
  from earthkit.data.utils.patterns import Pattern
24
26
 
25
27
  from .legacy import legacy_source
@@ -27,169 +29,6 @@ from .legacy import legacy_source
27
29
  LOG = logging.getLogger(__name__)
28
30
 
29
31
 
30
- def _load(context: Any, name: str, record: Dict[str, Any]) -> tuple:
31
- """Load data from a given source.
32
-
33
- Parameters
34
- ----------
35
- context : Any
36
- The context in which the function is executed.
37
- name : str
38
- The name of the data source.
39
- record : dict of str to Any
40
- The record containing source information.
41
-
42
- Returns
43
- -------
44
- tuple
45
- A tuple containing the data as a numpy array and the UUID of the HGrid.
46
- """
47
- ds = None
48
-
49
- param = record["param"]
50
-
51
- if "path" in record:
52
- context.info(f"Using {name} from {record['path']} (param={param})")
53
- ds = from_source("file", record["path"])
54
-
55
- if "url" in record:
56
- context.info(f"Using {name} from {record['url']} (param={param})")
57
- ds = from_source("url", record["url"])
58
-
59
- ds = ds.sel(param=param)
60
-
61
- assert len(ds) == 1, f"{name} {param}, expected one field, got {len(ds)}"
62
- ds = ds[0]
63
-
64
- return ds.to_numpy(flatten=True), ds.metadata("uuidOfHGrid")
65
-
66
-
67
- class Geography:
68
- """This class retrieves the latitudes and longitudes of unstructured grids,
69
- and checks if the fields are compatible with the grid.
70
-
71
- Parameters
72
- ----------
73
- context : Any
74
- The context in which the function is executed.
75
- latitudes : dict of str to Any
76
- Latitude information.
77
- longitudes : dict of str to Any
78
- Longitude information.
79
- """
80
-
81
- def __init__(self, context: Any, latitudes: Dict[str, Any], longitudes: Dict[str, Any]) -> None:
82
- """Initialize the Geography class.
83
-
84
- Parameters
85
- ----------
86
- context : Any
87
- The context in which the function is executed.
88
- latitudes : dict of str to Any
89
- Latitude information.
90
- longitudes : dict of str to Any
91
- Longitude information.
92
- """
93
- latitudes, uuidOfHGrid_lat = _load(context, "latitudes", latitudes)
94
- longitudes, uuidOfHGrid_lon = _load(context, "longitudes", longitudes)
95
-
96
- assert (
97
- uuidOfHGrid_lat == uuidOfHGrid_lon
98
- ), f"uuidOfHGrid mismatch: lat={uuidOfHGrid_lat} != lon={uuidOfHGrid_lon}"
99
-
100
- context.info(f"Latitudes: {len(latitudes)}, Longitudes: {len(longitudes)}")
101
- assert len(latitudes) == len(longitudes)
102
-
103
- self.uuidOfHGrid = uuidOfHGrid_lat
104
- self.latitudes = latitudes
105
- self.longitudes = longitudes
106
- self.first = True
107
-
108
- def check(self, field: Any) -> None:
109
- """Check if the field is compatible with the grid.
110
-
111
- Parameters
112
- ----------
113
- field : Any
114
- The field to check.
115
- """
116
- if self.first:
117
- # We only check the first field, for performance reasons
118
- assert (
119
- field.metadata("uuidOfHGrid") == self.uuidOfHGrid
120
- ), f"uuidOfHGrid mismatch: {field.metadata('uuidOfHGrid')} != {self.uuidOfHGrid}"
121
- self.first = False
122
-
123
-
124
- class AddGrid:
125
- """An earth-kit.data.Field wrapper that adds grid information.
126
-
127
- Parameters
128
- ----------
129
- field : Any
130
- The field to wrap.
131
- geography : Geography
132
- The geography information.
133
- """
134
-
135
- def __init__(self, field: Any, geography: Geography) -> None:
136
- """Initialize the AddGrid class.
137
-
138
- Parameters
139
- ----------
140
- field : Any
141
- The field to wrap.
142
- geography : Geography
143
- The geography information.
144
- """
145
- self._field = field
146
-
147
- geography.check(field)
148
-
149
- self._latitudes = geography.latitudes
150
- self._longitudes = geography.longitudes
151
-
152
- def __getattr__(self, name: str) -> Any:
153
- """Get an attribute from the wrapped field.
154
-
155
- Parameters
156
- ----------
157
- name : str
158
- The name of the attribute.
159
-
160
- Returns
161
- -------
162
- Any
163
- The attribute value.
164
- """
165
- return getattr(self._field, name)
166
-
167
- def __repr__(self) -> str:
168
- """Get the string representation of the wrapped field.
169
-
170
- Returns
171
- -------
172
- str
173
- The string representation.
174
- """
175
- return repr(self._field)
176
-
177
- def grid_points(self) -> tuple:
178
- """Get the grid points (latitudes and longitudes).
179
-
180
- Returns
181
- -------
182
- tuple
183
- The latitudes and longitudes.
184
- """
185
- return self._latitudes, self._longitudes
186
-
187
- @property
188
- def resolution(self) -> str:
189
- """Get the resolution of the grid."""
190
- return "unknown"
191
-
192
-
193
32
  def check(ds: Any, paths: List[str], **kwargs: Any) -> None:
194
33
  """Check if the dataset matches the expected number of fields.
195
34
 
@@ -243,9 +82,8 @@ def execute(
243
82
  context: Any,
244
83
  dates: List[Any],
245
84
  path: Union[str, List[str]],
246
- latitudes: Optional[Dict[str, Any]] = None,
247
- longitudes: Optional[Dict[str, Any]] = None,
248
85
  flavour: Optional[Union[str, Dict[str, Any]]] = None,
86
+ grid_definition: Optional[Dict[str, Any]] = None,
249
87
  *args: Any,
250
88
  **kwargs: Any,
251
89
  ) -> ekd.FieldList:
@@ -255,9 +93,8 @@ def execute(
255
93
  context (Any): The context in which the function is executed.
256
94
  dates (List[Any]): List of dates.
257
95
  path (Union[str, List[str]]): Path or list of paths to the GRIB files.
258
- latitudes (Optional[Dict[str, Any]], optional): Latitude information. Defaults to None.
259
- longitudes (Optional[Dict[str, Any]], optional): Longitude information. Defaults to None.
260
96
  flavour (Optional[Union[str, Dict[str, Any]]], optional): Flavour information. Defaults to None.
97
+ grid_definition (Optional[Dict[str, Any]]): Grid definition config to create a Grid object.
261
98
  *args (Any): Additional arguments.
262
99
  **kwargs (Any): Additional keyword arguments.
263
100
 
@@ -270,9 +107,10 @@ def execute(
270
107
  if flavour is not None:
271
108
  flavour = RuleBasedFlavour(flavour)
272
109
 
273
- geography = None
274
- if latitudes is not None and longitudes is not None:
275
- geography = Geography(context, latitudes, longitudes)
110
+ if grid_definition is not None:
111
+ grid = grid_registry.from_config(grid_definition)
112
+ else:
113
+ grid = None
276
114
 
277
115
  ds = from_source("empty")
278
116
  dates = [d.isoformat() for d in dates]
@@ -295,8 +133,8 @@ def execute(
295
133
  if kwargs and not context.partial_ok:
296
134
  check(ds, given_paths, valid_datetime=dates, **kwargs)
297
135
 
298
- if geography is not None:
299
- ds = FieldArray([AddGrid(_, geography) for _ in ds])
136
+ if grid is not None:
137
+ ds = new_fieldlist_from_list([new_field_from_grid(f, grid) for f in ds])
300
138
 
301
139
  if len(ds) == 0:
302
140
  LOG.warning(f"No fields found for {dates} in {given_paths} (kwargs={kwargs})")
@@ -20,7 +20,7 @@ LOG = logging.getLogger(__name__)
20
20
  class ViewCacheArray:
21
21
  """A class that provides a caching mechanism for writing to a NumPy-like array.
22
22
 
23
- The is initialized with a NumPy-like array, a shape and a list to reindex the first
23
+ The is initialised with a NumPy-like array, a shape and a list to reindex the first
24
24
  dimension. The array is used to store the final data, while the cache is used to
25
25
  temporarily store the data before flushing it to the array.
26
26
 
@@ -677,7 +677,7 @@ def _save_dataset(recipe: Dict[str, Any], zarr_path: str, n_workers: int = 1) ->
677
677
  # Workers return (date, subset) tuples.
678
678
  root = zarr.open(zarr_path, mode="a")
679
679
  initialize_zarr_store(root, full_ds, recipe)
680
- print("Zarr store initialized.", flush=True)
680
+ print("Zarr store initialised.", flush=True)
681
681
 
682
682
  existing_dates = np.array(sorted(root["dates"]), dtype="datetime64[s]")
683
683
  all_dates = full_ds.dates
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: anemoi-datasets
3
- Version: 0.5.20
3
+ Version: 0.5.21
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
@@ -225,9 +225,10 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
225
225
  Classifier: Programming Language :: Python :: Implementation :: PyPy
226
226
  Requires-Python: >=3.9
227
227
  License-File: LICENSE
228
- Requires-Dist: anemoi-transform>=0.1.6
229
- Requires-Dist: anemoi-utils[provenance]>=0.4.18
228
+ Requires-Dist: anemoi-transform>=0.1.9
229
+ Requires-Dist: anemoi-utils[provenance]>=0.4.19
230
230
  Requires-Dist: cfunits
231
+ Requires-Dist: numcodecs<0.16
231
232
  Requires-Dist: numpy
232
233
  Requires-Dist: pyyaml
233
234
  Requires-Dist: semantic-version
@@ -1,6 +1,6 @@
1
1
  anemoi/datasets/__init__.py,sha256=i_wsAT3ezEYF7o5dpqGrpoG4wmLS-QIBug18uJbSYMs,1065
2
2
  anemoi/datasets/__main__.py,sha256=ErwAqE3rBc7OaNO2JRsEOhWpB8ldjAt7BFSuRhbnlqQ,936
3
- anemoi/datasets/_version.py,sha256=0Ib1b9ijC26N78gsH6oTzFbmTu3c8De1ac8TlFGaEZU,513
3
+ anemoi/datasets/_version.py,sha256=xzRAV3vnhRWoa5IGzmE1SpAqijHmFvxk2UzeNXSigRM,513
4
4
  anemoi/datasets/grids.py,sha256=Hhj1aOXHvDjmI46M_UlLSjCs1qYqxH-uqd_kapDSdbU,18134
5
5
  anemoi/datasets/testing.py,sha256=fy_JzavUwLlK_2rtXAT-UGUyo5gjyQW2y826zf334Wg,2645
6
6
  anemoi/datasets/commands/__init__.py,sha256=O5W3yHZywRoAqmRUioAr3zMCh0hGVV18wZYGvc00ioM,698
@@ -11,10 +11,10 @@ anemoi/datasets/commands/copy.py,sha256=UlvW9YIlP7jwKAY7TikVAfhkrjaQ9Kkxqfx8jEut
11
11
  anemoi/datasets/commands/create.py,sha256=5BXdPZMO-ZULBnEVgyeSS-IMy4p84HSyFVG855gqj3k,6598
12
12
  anemoi/datasets/commands/finalise-additions.py,sha256=2LqU7ke3i-yRQbjkgldX6e2QlyE-tKqp0b6QOhJF19g,1985
13
13
  anemoi/datasets/commands/finalise.py,sha256=-YtN9wFFDrM_i_V9YHoXZsajF3eAax-73Zsi4uHAFCI,1709
14
- anemoi/datasets/commands/grib-index.py,sha256=1aO4Lm_7ZpRF_lRRF-OEMZ37ByYPZfUAIFW7jOsIf7Q,3161
14
+ anemoi/datasets/commands/grib-index.py,sha256=H9snsk1w2tL6ObBhlHVxFXxCm5sB-eUGrX772G8Nb2s,3057
15
15
  anemoi/datasets/commands/init-additions.py,sha256=2vMom5L38UvLLopzP2z-R_Fq31fU2uMvKXoDq5d8oI4,1931
16
16
  anemoi/datasets/commands/init.py,sha256=5IKyJ_hJA4lLIbpT88XtcGzXccHLSGwSoqVSvVJGxPg,2852
17
- anemoi/datasets/commands/inspect.py,sha256=dGx_3IQTNaV3iGfwhHp_G1fIecBWeRbOLU9ckrZ7epg,26578
17
+ anemoi/datasets/commands/inspect.py,sha256=kaDHXP8Cv8PsGqEXUF5Yruf5OQHwOIkjCS0SNxMs6eg,26578
18
18
  anemoi/datasets/commands/load-additions.py,sha256=zqmRherIHXb5WIB4cnAuCBEsxFJmUpGjafvm6RtQ7Co,2004
19
19
  anemoi/datasets/commands/load.py,sha256=U1Y8qByjreu7H9WeX4G8-tyKsz48va10fkW1L4U4wWg,2034
20
20
  anemoi/datasets/commands/patch.py,sha256=Q9FDabWxlvK1QaeH4D9zhNpoSGB4h7EliWgcV76iFBs,1599
@@ -22,7 +22,7 @@ anemoi/datasets/commands/publish.py,sha256=7YusLCWYdVLuexZzvyh8ztYoBOBzVmve3uJs-
22
22
  anemoi/datasets/commands/scan.py,sha256=e5t_oxSi-II38TVQiMlWMJ8AZhDEBk5PcPD22DDbHfU,4008
23
23
  anemoi/datasets/compute/__init__.py,sha256=hCW0QcLHJmE-C1r38P27_ZOvCLNewex5iQEtZqx2ckI,393
24
24
  anemoi/datasets/compute/recentre.py,sha256=kwxDB8qpgOCFZSQJvjAmVcpH5zWsfk5FSoIureqNHd4,5915
25
- anemoi/datasets/create/__init__.py,sha256=D0a5Q-xv5_mtBTzEO_6IaWHCQUbZyH0NjHwEtixMCXs,50699
25
+ anemoi/datasets/create/__init__.py,sha256=_aYkQ-5so9hBRW8rIj7Y-lQpn1ACY7PUpqadffsT0jU,50699
26
26
  anemoi/datasets/create/check.py,sha256=FrgyZP3Xyx4qXHl8_ZfM31fgNhcxMqxlE5oLweMDGU0,10003
27
27
  anemoi/datasets/create/chunks.py,sha256=kZV3dWoCuv3Bttc0wysJB7OPbXsD99exKyrrj4HGFwQ,4025
28
28
  anemoi/datasets/create/config.py,sha256=xrSlaY2p5zssfLIt8A1CP9WwJReSXVWBMQM7bT1aFbU,13448
@@ -34,7 +34,7 @@ anemoi/datasets/create/source.py,sha256=xoV8uH_y6aBSE4_PWuy5w7Q7cX-tGm8e-2xC9flS
34
34
  anemoi/datasets/create/testing.py,sha256=FzTSsbv_JBGViGrD1jT6z_T2yaA0KCrbJ3SCgp-rFPQ,2406
35
35
  anemoi/datasets/create/typing.py,sha256=Hs2uDG8ZVtQ-Q-5I9-W0Pik2p1hZH5-JPVjpJXRXP7M,484
36
36
  anemoi/datasets/create/utils.py,sha256=94JKPYcNSurA62yFAytW5dUFVz-r-fdwiPOkmu121pM,5572
37
- anemoi/datasets/create/writer.py,sha256=yjgic7FfVWuVKysi3HbaW6i2j4e831oCUdyD48Ua-MA,2203
37
+ anemoi/datasets/create/writer.py,sha256=nZBJvYZ63g_c9FfL65bAeG10Y6bX2R7CgtZvY0kW3fI,2203
38
38
  anemoi/datasets/create/zarr.py,sha256=N9PGGD-dYvcc97BZjLVWm5XQeYTiK9gwvhtreRiQzBI,9437
39
39
  anemoi/datasets/create/filters/__init__.py,sha256=rhetUFPZKe-vwDIfMY33SbYrJMq909dUJRgBzuX6Q6E,901
40
40
  anemoi/datasets/create/filters/empty.py,sha256=Dw1kUnAlFt6b5ds0kmrw9Gak09XjSqF8m1_MpHZNV9I,1013
@@ -78,8 +78,8 @@ anemoi/datasets/create/sources/anemoi_dataset.py,sha256=2xJJTmKlv87F_2ECMKeehaeW
78
78
  anemoi/datasets/create/sources/constants.py,sha256=5O6d9tEuAmVjl5vNkNfmkaAjKXFlw1UjeueTsF1GZCI,1528
79
79
  anemoi/datasets/create/sources/eccc_fstd.py,sha256=8HK38f444HcWMvBhooP0XqTfMXYoCbN_8G9RI_Ne5rc,659
80
80
  anemoi/datasets/create/sources/empty.py,sha256=5mVIVRUwnBfE3zp-bvNA_imXCSpyds-4mewcI8HXAiY,1020
81
- anemoi/datasets/create/sources/forcings.py,sha256=877OZoXUoJncQ2_AAGSijwWqM-4kJJdxdIa6SFvZBUw,1216
82
- anemoi/datasets/create/sources/grib.py,sha256=nGjrKTQZB8GQCvfX7SgfdmcVJVSXF9kpb2GmSX7H7bM,8731
81
+ anemoi/datasets/create/sources/forcings.py,sha256=PmcAd-nFZzILRxfvrptb45VLD9Nd2vjy0xeToeoKl1Y,1222
82
+ anemoi/datasets/create/sources/grib.py,sha256=QGAxX103bOQRef8WkamK8g4DGMoo9ATLUfawzYO-vTk,4210
83
83
  anemoi/datasets/create/sources/grib_index.py,sha256=Pnm0RLga9lpD4MqVaZr7IqXMBlw1DtTIWZRfz7fq30Q,19026
84
84
  anemoi/datasets/create/sources/hindcasts.py,sha256=_4880rgd4AsRxlDXVi6dkh8mlKXrz2i27btVlmlMFjY,2611
85
85
  anemoi/datasets/create/sources/legacy.py,sha256=RJce-9TwmUUCFbgC8A3Dp61nSBfB8_lWti8WNoOMIcU,2652
@@ -122,7 +122,7 @@ anemoi/datasets/data/interpolate.py,sha256=-kSYwdjKH7zJtfITdbqdH6KyOFGVZDyHg4TaF
122
122
  anemoi/datasets/data/join.py,sha256=ZEHOsCecKBkKKH-vki404Sm7r7cV368ECO7PXPpay3s,9212
123
123
  anemoi/datasets/data/masked.py,sha256=giOvHLcGbLf6mZPqZjAxQd1kvydmkepDFh2EqchXLTQ,10213
124
124
  anemoi/datasets/data/merge.py,sha256=SvQhJHf-C-Kn7hEjFqomienk-epPPjMtoccRNCJpMtw,8733
125
- anemoi/datasets/data/misc.py,sha256=l8ZJwEjUf9CoPn-RhnilVDVTGypkVIzJ5xV77h8zzkc,20951
125
+ anemoi/datasets/data/misc.py,sha256=6JOag2VJBJhz-eEEWL9F5nriEJyKz9aZL2P3FYcOSJo,20951
126
126
  anemoi/datasets/data/missing.py,sha256=ogfVDponbs0bGHMxps32Fj_fq4gT26R70yEMco5gdK8,12593
127
127
  anemoi/datasets/data/rescale.py,sha256=nGfJ5tWCncMJ7NMXkLbmt6z0ELrD6FxpbjJreQ3W91g,7004
128
128
  anemoi/datasets/data/select.py,sha256=Xs6uOzJL0CoOGeWA_E5_ukr8Jav2kXbZ41vhk7Vr8PE,8277
@@ -134,9 +134,9 @@ anemoi/datasets/data/xy.py,sha256=-jWzYismrK3eI3YCKIBpU1BCmraRncmVn0_2IUY--lk,75
134
134
  anemoi/datasets/dates/__init__.py,sha256=pEArHDQ7w5E0WC8Vvf9ypyKSdm6gnhoN9TmooITB7C4,13617
135
135
  anemoi/datasets/dates/groups.py,sha256=IOveL6IyTXZwEdXZEnRAnpu9pINY95VN7LzcpLfJ09E,10105
136
136
  anemoi/datasets/utils/__init__.py,sha256=hCW0QcLHJmE-C1r38P27_ZOvCLNewex5iQEtZqx2ckI,393
137
- anemoi_datasets-0.5.20.dist-info/licenses/LICENSE,sha256=8HznKF1Vi2IvfLsKNE5A2iVyiri3pRjRPvPC9kxs6qk,11354
138
- anemoi_datasets-0.5.20.dist-info/METADATA,sha256=iGcUiyvv_JjdtsXo_oq_WgwweD1nPE0xAM8n5d0qeQU,16039
139
- anemoi_datasets-0.5.20.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
140
- anemoi_datasets-0.5.20.dist-info/entry_points.txt,sha256=yR-o-4uiPEA_GLBL81SkMYnUoxq3CAV3hHulQiRtGG0,66
141
- anemoi_datasets-0.5.20.dist-info/top_level.txt,sha256=DYn8VPs-fNwr7fNH9XIBqeXIwiYYd2E2k5-dUFFqUz0,7
142
- anemoi_datasets-0.5.20.dist-info/RECORD,,
137
+ anemoi_datasets-0.5.21.dist-info/licenses/LICENSE,sha256=8HznKF1Vi2IvfLsKNE5A2iVyiri3pRjRPvPC9kxs6qk,11354
138
+ anemoi_datasets-0.5.21.dist-info/METADATA,sha256=wc23I3DuajyKdNV67zvhmAL8X5Uan-2ogszGdc9kVVs,16069
139
+ anemoi_datasets-0.5.21.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
140
+ anemoi_datasets-0.5.21.dist-info/entry_points.txt,sha256=yR-o-4uiPEA_GLBL81SkMYnUoxq3CAV3hHulQiRtGG0,66
141
+ anemoi_datasets-0.5.21.dist-info/top_level.txt,sha256=DYn8VPs-fNwr7fNH9XIBqeXIwiYYd2E2k5-dUFFqUz0,7
142
+ anemoi_datasets-0.5.21.dist-info/RECORD,,