anemoi-datasets 0.4.3__py3-none-any.whl → 0.4.4__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.
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.4.3'
16
- __version_tuple__ = version_tuple = (0, 4, 3)
15
+ __version__ = version = '0.4.4'
16
+ __version_tuple__ = version_tuple = (0, 4, 4)
@@ -64,7 +64,7 @@ def recentre(
64
64
 
65
65
  keys = ["param", "level", "valid_datetime", "date", "time", "step", "number"]
66
66
 
67
- number_list = members.unique_values("number")["number"]
67
+ number_list = members.unique_values("number", progress_bar=False)["number"]
68
68
  n_numbers = len(number_list)
69
69
 
70
70
  assert None not in number_list
@@ -15,11 +15,10 @@ import earthkit.data as ekd
15
15
  import numpy as np
16
16
  from earthkit.data.core.temporary import temp_file
17
17
  from earthkit.data.readers.grib.output import new_grib_output
18
- from earthkit.data.utils.availability import Availability
19
18
 
20
19
  from anemoi.datasets.create.utils import to_datetime_list
21
20
 
22
- from .mars import use_grib_paramid
21
+ from .mars import mars
23
22
 
24
23
  LOG = logging.getLogger(__name__)
25
24
 
@@ -307,26 +306,11 @@ def _compute_accumulations(
307
306
  for date, time, steps in mars_date_time_steps:
308
307
  for p in param:
309
308
  for n in number:
310
- requests.append(
311
- patch(
312
- {
313
- "param": p,
314
- "date": date,
315
- "time": time,
316
- "step": sorted(steps),
317
- "number": n,
318
- }
319
- )
320
- )
321
-
322
- compressed = Availability(requests)
323
- ds = ekd.from_source("empty")
324
- for r in compressed.iterate():
325
- request.update(r)
326
- if context.use_grib_paramid and "param" in request:
327
- request = use_grib_paramid(request)
328
- print("🌧️", request)
329
- ds = ds + ekd.from_source("mars", **request)
309
+ r = dict(request, param=p, date=date, time=time, step=sorted(steps), number=n)
310
+
311
+ requests.append(patch(r))
312
+
313
+ ds = mars(context, dates, *requests, request_already_using_valid_datetime=True)
330
314
 
331
315
  accumulations = {}
332
316
  for a in [AccumulationClass(out, frequency=frequency, **r) for r in requests]:
@@ -7,20 +7,16 @@
7
7
  # nor does it submit to any jurisdiction.
8
8
  #
9
9
  import datetime
10
+ import logging
11
+
12
+ from earthkit.data.core.fieldlist import MultiFieldList
10
13
 
11
14
  from anemoi.datasets.create.functions.sources.mars import mars
12
15
 
16
+ LOGGER = logging.getLogger(__name__)
13
17
  DEBUG = True
14
18
 
15
19
 
16
- def _member(field):
17
- # Bug in eccodes has number=0 randomly
18
- number = field.metadata("number")
19
- if number is None:
20
- number = 0
21
- return number
22
-
23
-
24
20
  def _to_list(x):
25
21
  if isinstance(x, (list, tuple)):
26
22
  return x
@@ -63,9 +59,19 @@ class HindcastCompute:
63
59
  def use_reference_year(reference_year, request):
64
60
  request = request.copy()
65
61
  hdate = request.pop("date")
66
- date = datetime.datetime(reference_year, hdate.month, hdate.day)
62
+
63
+ if hdate.year >= reference_year:
64
+ return None, False
65
+
66
+ try:
67
+ date = datetime.datetime(reference_year, hdate.month, hdate.day)
68
+ except ValueError:
69
+ if hdate.month == 2 and hdate.day == 29:
70
+ return None, False
71
+ raise
72
+
67
73
  request.update(date=date.strftime("%Y-%m-%d"), hdate=hdate.strftime("%Y-%m-%d"))
68
- return request
74
+ return request, True
69
75
 
70
76
 
71
77
  def hindcasts(context, dates, **request):
@@ -89,9 +95,18 @@ def hindcasts(context, dates, **request):
89
95
  requests = []
90
96
  for d in dates:
91
97
  req = c.compute_hindcast(d)
92
- req = use_reference_year(reference_year, req)
98
+ req, ok = use_reference_year(reference_year, req)
99
+ if ok:
100
+ requests.append(req)
101
+
102
+ # print("HINDCASTS requests", reference_year, base_times, available_steps)
103
+ # print("HINDCASTS dates", compress_dates(dates))
104
+
105
+ if len(requests) == 0:
106
+ # print("HINDCASTS no requests")
107
+ return MultiFieldList([])
93
108
 
94
- requests.append(req)
109
+ # print("HINDCASTS requests", requests)
95
110
 
96
111
  return mars(
97
112
  context,
@@ -56,7 +56,7 @@ def tendencies(dates, time_increment, **kwargs):
56
56
 
57
57
  ds = mars(dates=all_dates, **kwargs)
58
58
 
59
- dates_in_data = ds.unique_values("valid_datetime")["valid_datetime"]
59
+ dates_in_data = ds.unique_values("valid_datetime", progress_bar=False)["valid_datetime"]
60
60
  for d in all_dates:
61
61
  assert d.isoformat() in dates_in_data, d
62
62
 
@@ -277,6 +277,9 @@ class Result:
277
277
  if len(args) == 1 and isinstance(args[0], (list, tuple)):
278
278
  args = args[0]
279
279
 
280
+ # print("Executing", self.action_path)
281
+ # print("Dates:", compress_dates(self.dates))
282
+
280
283
  names = []
281
284
  for a in args:
282
285
  if isinstance(a, str):
@@ -287,12 +290,12 @@ class Result:
287
290
  print(f"Building a {len(names)}D hypercube using", names)
288
291
 
289
292
  ds = ds.order_by(*args, remapping=remapping, patches=patches)
290
- user_coords = ds.unique_values(*names, remapping=remapping, patches=patches)
293
+ user_coords = ds.unique_values(*names, remapping=remapping, patches=patches, progress_bar=False)
291
294
 
292
295
  print()
293
296
  print("Number of unique values found for each coordinate:")
294
297
  for k, v in user_coords.items():
295
- print(f" {k:20}:", len(v))
298
+ print(f" {k:20}:", len(v), shorten_list(v, max_length=10))
296
299
  print()
297
300
  user_shape = tuple(len(v) for k, v in user_coords.items())
298
301
  print("Shape of the hypercube :", user_shape)
@@ -305,13 +308,18 @@ class Result:
305
308
 
306
309
  remapping = build_remapping(remapping, patches)
307
310
  expected = set(itertools.product(*user_coords.values()))
311
+ extra = set()
308
312
 
309
313
  if math.prod(user_shape) > len(ds):
310
314
  print(f"This means that all the fields in the datasets do not exists for all combinations of {names}.")
311
315
 
312
316
  for f in ds:
313
317
  metadata = remapping(f.metadata)
314
- expected.remove(tuple(metadata(n) for n in names))
318
+ key = tuple(metadata(n, default=None) for n in names)
319
+ if key in expected:
320
+ expected.remove(key)
321
+ else:
322
+ extra.add(key)
315
323
 
316
324
  print("Missing fields:")
317
325
  print()
@@ -321,7 +329,35 @@ class Result:
321
329
  print("...", len(expected) - i - 1, "more")
322
330
  break
323
331
 
332
+ print("Extra fields:")
333
+ print()
334
+ for i, f in enumerate(sorted(extra)):
335
+ print(" ", f)
336
+ if i >= 9 and len(extra) > 10:
337
+ print("...", len(extra) - i - 1, "more")
338
+ break
339
+
324
340
  print()
341
+ print("Missing values:")
342
+ per_name = defaultdict(set)
343
+ for e in expected:
344
+ for n, v in zip(names, e):
345
+ per_name[n].add(v)
346
+
347
+ for n, v in per_name.items():
348
+ print(" ", n, len(v), shorten_list(sorted(v), max_length=10))
349
+ print()
350
+
351
+ print("Extra values:")
352
+ per_name = defaultdict(set)
353
+ for e in extra:
354
+ for n, v in zip(names, e):
355
+ per_name[n].add(v)
356
+
357
+ for n, v in per_name.items():
358
+ print(" ", n, len(v), shorten_list(sorted(v), max_length=10))
359
+ print()
360
+
325
361
  print("To solve this issue, you can:")
326
362
  print(
327
363
  " - Provide a better selection, like 'step: 0' or 'level: 1000' to "
@@ -17,6 +17,7 @@ import numpy as np
17
17
  import tqdm
18
18
  import zarr
19
19
  from anemoi.utils.config import DotDict
20
+ from anemoi.utils.dates import as_datetime
20
21
  from anemoi.utils.humanize import seconds_to_human
21
22
 
22
23
  from anemoi.datasets import MissingDateError
@@ -24,6 +25,7 @@ from anemoi.datasets import open_dataset
24
25
  from anemoi.datasets.create.persistent import build_storage
25
26
  from anemoi.datasets.data.misc import as_first_date
26
27
  from anemoi.datasets.data.misc import as_last_date
28
+ from anemoi.datasets.dates import compress_dates
27
29
  from anemoi.datasets.dates.groups import Groups
28
30
 
29
31
  from .check import DatasetName
@@ -442,14 +444,24 @@ class ContentLoader(Loader):
442
444
  dates = result.dates
443
445
 
444
446
  cube = result.get_cube()
445
- assert cube.extended_user_shape[0] == len(dates), (
446
- cube.extended_user_shape[0],
447
- len(dates),
448
- )
449
-
450
447
  shape = cube.extended_user_shape
451
448
  dates_in_data = cube.user_coords["valid_datetime"]
452
449
 
450
+ if cube.extended_user_shape[0] != len(dates):
451
+ print(f"Cube shape does not match the number of dates {cube.extended_user_shape[0]}, {len(dates)}")
452
+ print("Requested dates", compress_dates(dates))
453
+ print("Cube dates", compress_dates(dates_in_data))
454
+
455
+ a = set(as_datetime(_) for _ in dates)
456
+ b = set(as_datetime(_) for _ in dates_in_data)
457
+
458
+ print("Missing dates", compress_dates(a - b))
459
+ print("Extra dates", compress_dates(b - a))
460
+
461
+ raise ValueError(
462
+ f"Cube shape does not match the number of dates {cube.extended_user_shape[0]}, {len(dates)}"
463
+ )
464
+
453
465
  LOG.debug(f"Loading {shape=} in {self.data_array.shape=}")
454
466
 
455
467
  def check_dates_in_data(lst, lst2):
@@ -9,6 +9,45 @@
9
9
  import datetime
10
10
  import warnings
11
11
 
12
+ from anemoi.utils.dates import as_datetime
13
+
14
+
15
+ def _compress_dates(dates):
16
+ dates = sorted(dates)
17
+ if len(dates) < 3:
18
+ yield dates
19
+ return
20
+
21
+ prev = first = dates.pop(0)
22
+ curr = dates.pop(0)
23
+ delta = curr - prev
24
+ while curr - prev == delta:
25
+ prev = curr
26
+ if not dates:
27
+ break
28
+ curr = dates.pop(0)
29
+
30
+ yield (first, prev, delta)
31
+ if dates:
32
+ yield from _compress_dates([curr] + dates)
33
+
34
+
35
+ def compress_dates(dates):
36
+ dates = [as_datetime(_) for _ in dates]
37
+ result = []
38
+
39
+ for n in _compress_dates(dates):
40
+ if isinstance(n, list):
41
+ result.extend([str(_) for _ in n])
42
+ else:
43
+ result.append(" ".join([str(n[0]), "to", str(n[1]), "by", str(n[2])]))
44
+
45
+ return result
46
+
47
+
48
+ def print_dates(dates):
49
+ print(compress_dates(dates))
50
+
12
51
 
13
52
  def no_time_zone(date):
14
53
  return date.replace(tzinfo=None)
@@ -30,6 +69,27 @@ def normalize_date(x):
30
69
  return x
31
70
 
32
71
 
72
+ def extend(x):
73
+
74
+ if isinstance(x, (list, tuple)):
75
+ for y in x:
76
+ yield from extend(y)
77
+ return
78
+
79
+ if isinstance(x, str):
80
+ if "/" in x:
81
+ start, end, step = x.split("/")
82
+ start = normalize_date(start)
83
+ end = normalize_date(end)
84
+ step = frequency_to_hours(step)
85
+ while start <= end:
86
+ yield start
87
+ start += datetime.timedelta(hours=step)
88
+ return
89
+
90
+ yield normalize_date(x)
91
+
92
+
33
93
  class Dates:
34
94
  """Base class for date generation.
35
95
 
@@ -59,7 +119,7 @@ class Dates:
59
119
  def __init__(self, missing=None):
60
120
  if not missing:
61
121
  missing = []
62
- self.missing = [normalize_date(x) for x in missing]
122
+ self.missing = list(extend(missing))
63
123
  if set(self.missing) - set(self.values):
64
124
  warnings.warn(f"Missing dates {self.missing} not in list.")
65
125
 
@@ -145,3 +205,9 @@ class StartEndDates(Dates):
145
205
  "end": self.end.isoformat(),
146
206
  "frequency": f"{self.frequency}h",
147
207
  }
208
+
209
+
210
+ if __name__ == "__main__":
211
+ print_dates([datetime.datetime(2023, 1, 1, 0, 0)])
212
+ s = StartEndDates(start="2023-01-01 00:00", end="2023-01-02 00:00", frequency=1)
213
+ print_dates(list(s))
@@ -9,7 +9,7 @@
9
9
  import itertools
10
10
 
11
11
  from anemoi.datasets.dates import Dates
12
- from anemoi.datasets.dates import no_time_zone
12
+ from anemoi.datasets.dates import normalize_date
13
13
 
14
14
 
15
15
  class Groups:
@@ -67,7 +67,7 @@ class Groups:
67
67
 
68
68
  class Filter:
69
69
  def __init__(self, missing):
70
- self.missing = [no_time_zone(m) for m in missing]
70
+ self.missing = [normalize_date(m) for m in missing]
71
71
 
72
72
  def __call__(self, dates):
73
73
  return [d for d in dates if d not in self.missing]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: anemoi-datasets
3
- Version: 0.4.3
3
+ Version: 0.4.4
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
@@ -1,6 +1,6 @@
1
1
  anemoi/datasets/__init__.py,sha256=Z1gqZWhecLcT0RZQqYBLlz01MUlUZd0kWEj_RavbITM,782
2
2
  anemoi/datasets/__main__.py,sha256=cLA2PidDTOUHaDGzd0_E5iioKYNe-PSTv567Y2fuwQk,723
3
- anemoi/datasets/_version.py,sha256=mDTy6z4iq5XKGigbX2Q9ub9_BzxGHksMlMjpkDAl_hE,411
3
+ anemoi/datasets/_version.py,sha256=t0Mfy7vCENQWSYE4xRfluKBHgAYWK48fjSubsSGEQEI,411
4
4
  anemoi/datasets/grids.py,sha256=3YBMMJodgYhavarXPAlMZHaMtDT9v2IbTmAXZTqf8Qo,8481
5
5
  anemoi/datasets/commands/__init__.py,sha256=qAybFZPBBQs0dyx7dZ3X5JsLpE90pwrqt1vSV7cqEIw,706
6
6
  anemoi/datasets/commands/compare.py,sha256=svEhyR7pOS1847_RJr1I6vF7ZDPB9AVlcrhy_gxQVms,3263
@@ -9,13 +9,13 @@ anemoi/datasets/commands/create.py,sha256=iAXm7b1zeFEbVyTSqgSdCXwYtgIi8XUN96muv-
9
9
  anemoi/datasets/commands/inspect.py,sha256=rEBzR5LmrPzkNrlGS471Q7Ma9O8Djiml2mxAlxvSl0U,18676
10
10
  anemoi/datasets/commands/scan.py,sha256=MaTdne4JrtlqO3LhOUr43DZhZ6O-RZwC7uQ7C6PG7Os,2910
11
11
  anemoi/datasets/compute/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- anemoi/datasets/compute/recentre.py,sha256=oIqhENljB9ad-wnMJCJ3P0Xf1v76zQjqYCu1TuySgSI,4919
12
+ anemoi/datasets/compute/recentre.py,sha256=CMvRxTMv2H1hF1KqaZHT3Maa9P01GtsgAxr1YHbvH_o,4939
13
13
  anemoi/datasets/create/__init__.py,sha256=_XMODLz0xpVf06Tu7x2c1HhFcuBYJ0xeux6dn9dgTXg,6830
14
14
  anemoi/datasets/create/check.py,sha256=TAZOrq8QbS9F5kuR779FAuZPJXA7MXsS_DU1kVotq5Q,5838
15
15
  anemoi/datasets/create/chunks.py,sha256=1Inh3sIBn-2sNguErb-BsLns6W_HtDiOJAjIb29lp-U,2442
16
16
  anemoi/datasets/create/config.py,sha256=vZ-t50mHgrEnxJoaooWrZKzVGeEQrg__rCOrhi5Q4nU,7122
17
- anemoi/datasets/create/input.py,sha256=BJiGFR-imZcChdij3fodyz8XSHMUs-__ZfoCeMHuhUo,32472
18
- anemoi/datasets/create/loaders.py,sha256=tosx8Zms7OAEScw9JxHw6BLq6xZSDCNPYKeqFWP5O3Y,32504
17
+ anemoi/datasets/create/input.py,sha256=CNOhqHqW6C2owewJYXkLZC2W_hwGZj794m2_wXXKbyA,33714
18
+ anemoi/datasets/create/loaders.py,sha256=dEGj7FxKHgxXTVBSHB-7kzOK7sjbiWOuzE2y5eDXla0,33130
19
19
  anemoi/datasets/create/patch.py,sha256=c8cWoqxFzcY9mKREosLjuQCUeJMJL6sbNNkoVvhCZDA,3800
20
20
  anemoi/datasets/create/persistent.py,sha256=wfNnNSY8VLO2EyEOQL9umI3sbQqETjJP7bPCiVF6Cko,4291
21
21
  anemoi/datasets/create/size.py,sha256=k4COEjs3wud0oKHH5P3n8Fap35xddXs002ucPjpBC88,1040
@@ -32,18 +32,18 @@ anemoi/datasets/create/functions/filters/rename.py,sha256=02p6zj2g0Qp866RrXeZG9D
32
32
  anemoi/datasets/create/functions/filters/rotate_winds.py,sha256=E0P5scdX0lwTMdcFDYfBzQ_X_4A6EvnrtFvF55-56Hk,2414
33
33
  anemoi/datasets/create/functions/filters/unrotate_winds.py,sha256=hiIwgWi_2lk_ntxsPFMyZ6Ku8_5p91ht36VN_2kHYDA,2414
34
34
  anemoi/datasets/create/functions/sources/__init__.py,sha256=83G1-DD2IV4VJP3MVN9512_CN4D3IVDZHUKa2ghVgKo,1246
35
- anemoi/datasets/create/functions/sources/accumulations.py,sha256=Rzn9ocBR4CHdws4s6GuKiV4IqVQo0rCQLyPQNBsTGXY,12493
35
+ anemoi/datasets/create/functions/sources/accumulations.py,sha256=nz09rezfNvXdTBtSQAKnsOeoiWwB8v1ecAayrJZq9rE,11947
36
36
  anemoi/datasets/create/functions/sources/constants.py,sha256=9MNxjkXAjtIq7X-T7GgKGVzH-V-FBcTxj0gLLJYoXTI,903
37
37
  anemoi/datasets/create/functions/sources/empty.py,sha256=ZrXGs8Y3VrLSV8C8YlJTJcHV7Bmi7xPiUlrq8R0JZQY,485
38
38
  anemoi/datasets/create/functions/sources/forcings.py,sha256=tF3EyIs5AGF1Ppvp6dIExONM-kGF-wcnMO1sZc_wDuo,646
39
39
  anemoi/datasets/create/functions/sources/grib.py,sha256=MbHSAJAkvUsQT5uo_-mEqzN-0-aOygMwFIds42kXcqg,1750
40
- anemoi/datasets/create/functions/sources/hindcasts.py,sha256=TRe25E6Xb_fBUsyOnzB_Bm1cTZ4H99viplf1ccWzZv8,3154
40
+ anemoi/datasets/create/functions/sources/hindcasts.py,sha256=xgE4a-diiy8rP8cmgAT12cBsQZiGk0cRzUswtZM7i_0,3607
41
41
  anemoi/datasets/create/functions/sources/mars.py,sha256=Wrxm15-7QUQ_xCe7eqmxHLLkYo5RDM0GKUoeEP8BZS4,6603
42
42
  anemoi/datasets/create/functions/sources/netcdf.py,sha256=8uug0oAdGBJIKKws-EflA4ZgjQye_sWCBymUVv1TEW4,532
43
43
  anemoi/datasets/create/functions/sources/opendap.py,sha256=0Bs0PytUvI1WZGn2OdmnJuFDGAQypxN8v44nl106QjY,531
44
44
  anemoi/datasets/create/functions/sources/recentre.py,sha256=t07LIXG3Hp9gmPkPriILVt86TxubsHyS1EL1lzwgtXY,1810
45
45
  anemoi/datasets/create/functions/sources/source.py,sha256=J3O4M0nB1a-67IJuY_aWqDDqyNGXB_uzxVbicFldO4U,1422
46
- anemoi/datasets/create/functions/sources/tendencies.py,sha256=OIYKdRTabDvxnBXCcffWWBcorVlhZVNj3VkcVuQjIYA,4088
46
+ anemoi/datasets/create/functions/sources/tendencies.py,sha256=4hFPGU51KnxXp-KteSp5WLb8v586sDq2ePPd8CfUFjA,4108
47
47
  anemoi/datasets/create/functions/sources/xarray_kerchunk.py,sha256=JsuGjTs5BQdJIPRI8TuUNde680UQkT4GbUhOt6wYy38,1432
48
48
  anemoi/datasets/create/functions/sources/xarray_zarr.py,sha256=qI_fEKo28hu_B_qMPx67gigysw8qw5ePMU9P0wbDcIc,531
49
49
  anemoi/datasets/create/functions/sources/zenodo.py,sha256=n7_sfZHJVDjVnSwc07muO9kS7TwOM4S8DIlJf5pnDiU,1237
@@ -75,12 +75,12 @@ anemoi/datasets/data/statistics.py,sha256=lZCcKw9s7ttMBEp6ANyxtbXoZZvchhE7SClq-D
75
75
  anemoi/datasets/data/stores.py,sha256=LNCJBBQ--3ng4LGvdZ24ZXyOz7i15MvhtArt3_CxM_Q,11934
76
76
  anemoi/datasets/data/subset.py,sha256=9urVTXdnwCgqn0_BRYquMi8oiXn4ubAf0n4586hWfKw,3814
77
77
  anemoi/datasets/data/unchecked.py,sha256=xhdMg-ToI1UfBWHNsWyn1y2meZWngZtHx-33L0KqKp8,4037
78
- anemoi/datasets/dates/__init__.py,sha256=BRrwOapeP20tu7hN0m8hG04INp94tigwEfMClLl0ww4,4635
79
- anemoi/datasets/dates/groups.py,sha256=bYgw02eCLkjkZjJdyLpcFVMqtH8XO22cBdHOfG7tCBc,3471
78
+ anemoi/datasets/dates/__init__.py,sha256=ZRsUJCA7zHkgKzB7gOq3WndTGcCju63WGgB-jzSJDgc,6155
79
+ anemoi/datasets/dates/groups.py,sha256=xwDkUye3PuMg3c6ao0QvZ5bcMTxAhTcmeIZsLUKYJJY,3475
80
80
  anemoi/datasets/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
- anemoi_datasets-0.4.3.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
82
- anemoi_datasets-0.4.3.dist-info/METADATA,sha256=2tNctMmd44eD_Lc7EDuP-ZWP6XJueMQ76MT53wQ8sbc,16716
83
- anemoi_datasets-0.4.3.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
84
- anemoi_datasets-0.4.3.dist-info/entry_points.txt,sha256=yR-o-4uiPEA_GLBL81SkMYnUoxq3CAV3hHulQiRtGG0,66
85
- anemoi_datasets-0.4.3.dist-info/top_level.txt,sha256=DYn8VPs-fNwr7fNH9XIBqeXIwiYYd2E2k5-dUFFqUz0,7
86
- anemoi_datasets-0.4.3.dist-info/RECORD,,
81
+ anemoi_datasets-0.4.4.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
82
+ anemoi_datasets-0.4.4.dist-info/METADATA,sha256=gZz_PkwuY4NrJvcsBWFn5xwm7jOjnbRm-k6cSIUMdJ8,16716
83
+ anemoi_datasets-0.4.4.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
84
+ anemoi_datasets-0.4.4.dist-info/entry_points.txt,sha256=yR-o-4uiPEA_GLBL81SkMYnUoxq3CAV3hHulQiRtGG0,66
85
+ anemoi_datasets-0.4.4.dist-info/top_level.txt,sha256=DYn8VPs-fNwr7fNH9XIBqeXIwiYYd2E2k5-dUFFqUz0,7
86
+ anemoi_datasets-0.4.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (71.1.0)
2
+ Generator: setuptools (72.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5