anemoi-datasets 0.5.20__py3-none-any.whl → 0.5.22__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.
- anemoi/datasets/_version.py +2 -2
- anemoi/datasets/check.py +93 -0
- anemoi/datasets/commands/check.py +101 -0
- anemoi/datasets/commands/copy.py +43 -3
- anemoi/datasets/commands/create.py +2 -3
- anemoi/datasets/commands/grib-index.py +0 -3
- anemoi/datasets/commands/inspect.py +2 -2
- anemoi/datasets/commands/scan.py +17 -5
- anemoi/datasets/create/__init__.py +19 -8
- anemoi/datasets/create/check.py +19 -1
- anemoi/datasets/create/input/action.py +2 -0
- anemoi/datasets/create/input/result.py +6 -2
- anemoi/datasets/create/sources/accumulations.py +400 -34
- anemoi/datasets/create/sources/forcings.py +1 -1
- anemoi/datasets/create/sources/grib.py +27 -181
- anemoi/datasets/create/sources/xarray_support/metadata.py +6 -0
- anemoi/datasets/create/sources/xarray_zarr.py +1 -1
- anemoi/datasets/create/writer.py +1 -1
- anemoi/datasets/data/complement.py +28 -11
- anemoi/datasets/data/forwards.py +4 -0
- anemoi/datasets/data/grids.py +3 -3
- anemoi/datasets/data/misc.py +1 -1
- anemoi/datasets/data/stores.py +36 -4
- {anemoi_datasets-0.5.20.dist-info → anemoi_datasets-0.5.22.dist-info}/METADATA +5 -3
- {anemoi_datasets-0.5.20.dist-info → anemoi_datasets-0.5.22.dist-info}/RECORD +29 -27
- {anemoi_datasets-0.5.20.dist-info → anemoi_datasets-0.5.22.dist-info}/WHEEL +1 -1
- {anemoi_datasets-0.5.20.dist-info → anemoi_datasets-0.5.22.dist-info}/entry_points.txt +0 -0
- {anemoi_datasets-0.5.20.dist-info → anemoi_datasets-0.5.22.dist-info}/licenses/LICENSE +0 -0
- {anemoi_datasets-0.5.20.dist-info → anemoi_datasets-0.5.22.dist-info}/top_level.txt +0 -0
|
@@ -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,23 +82,29 @@ 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:
|
|
252
|
-
"""
|
|
90
|
+
"""Executes the function to load data from GRIB files.
|
|
253
91
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
92
|
+
Parameters
|
|
93
|
+
----------
|
|
94
|
+
context : Any
|
|
95
|
+
The context in which the function is executed.
|
|
96
|
+
dates : list of Any
|
|
97
|
+
List of dates.
|
|
98
|
+
path : str or list of str
|
|
99
|
+
Path or list of paths to the GRIB files.
|
|
100
|
+
flavour : str or dict of str to Any, optional
|
|
101
|
+
Flavour information, by default None.
|
|
102
|
+
grid_definition : dict of str to Any, optional
|
|
103
|
+
Grid definition configuration to create a Grid object, by default None.
|
|
104
|
+
*args : Any
|
|
105
|
+
Additional positional arguments.
|
|
106
|
+
**kwargs : Any
|
|
107
|
+
Additional keyword arguments.
|
|
263
108
|
|
|
264
109
|
Returns
|
|
265
110
|
-------
|
|
@@ -270,9 +115,10 @@ def execute(
|
|
|
270
115
|
if flavour is not None:
|
|
271
116
|
flavour = RuleBasedFlavour(flavour)
|
|
272
117
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
118
|
+
if grid_definition is not None:
|
|
119
|
+
grid = grid_registry.from_config(grid_definition)
|
|
120
|
+
else:
|
|
121
|
+
grid = None
|
|
276
122
|
|
|
277
123
|
ds = from_source("empty")
|
|
278
124
|
dates = [d.isoformat() for d in dates]
|
|
@@ -295,8 +141,8 @@ def execute(
|
|
|
295
141
|
if kwargs and not context.partial_ok:
|
|
296
142
|
check(ds, given_paths, valid_datetime=dates, **kwargs)
|
|
297
143
|
|
|
298
|
-
if
|
|
299
|
-
ds =
|
|
144
|
+
if grid is not None:
|
|
145
|
+
ds = new_fieldlist_from_list([new_field_from_grid(f, grid) for f in ds])
|
|
300
146
|
|
|
301
147
|
if len(ds) == 0:
|
|
302
148
|
LOG.warning(f"No fields found for {dates} in {given_paths} (kwargs={kwargs})")
|
|
@@ -209,6 +209,12 @@ class XArrayMetadata(RawMetadata):
|
|
|
209
209
|
Any
|
|
210
210
|
The value for the specified key, optionally cast to the specified type.
|
|
211
211
|
"""
|
|
212
|
+
|
|
213
|
+
if key == "levelist":
|
|
214
|
+
# Special case for levelist, for compatibility with GRIB
|
|
215
|
+
if key not in self._d and "level" in self._d:
|
|
216
|
+
key = "level"
|
|
217
|
+
|
|
212
218
|
if key in self._d:
|
|
213
219
|
if astype is not None:
|
|
214
220
|
return astype(self._d[key])
|
anemoi/datasets/create/writer.py
CHANGED
|
@@ -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
|
|
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
|
|
|
@@ -8,12 +8,14 @@
|
|
|
8
8
|
# nor does it submit to any jurisdiction.
|
|
9
9
|
|
|
10
10
|
|
|
11
|
+
import datetime
|
|
11
12
|
import logging
|
|
12
13
|
from abc import abstractmethod
|
|
13
14
|
from functools import cached_property
|
|
14
15
|
from typing import Any
|
|
15
16
|
from typing import Dict
|
|
16
17
|
from typing import List
|
|
18
|
+
from typing import Optional
|
|
17
19
|
from typing import Set
|
|
18
20
|
from typing import Tuple
|
|
19
21
|
|
|
@@ -30,7 +32,7 @@ from .indexing import apply_index_to_slices_changes
|
|
|
30
32
|
from .indexing import index_to_slices
|
|
31
33
|
from .indexing import update_tuple
|
|
32
34
|
from .misc import _auto_adjust
|
|
33
|
-
from .misc import
|
|
35
|
+
from .misc import _open_dataset
|
|
34
36
|
|
|
35
37
|
LOG = logging.getLogger(__name__)
|
|
36
38
|
|
|
@@ -92,6 +94,18 @@ class Complement(Combined):
|
|
|
92
94
|
"""Returns the list of variables to be added to the target dataset."""
|
|
93
95
|
return self._variables
|
|
94
96
|
|
|
97
|
+
@property
|
|
98
|
+
def statistics(self) -> Dict[str, NDArray[Any]]:
|
|
99
|
+
"""Returns the statistics of the complemented dataset."""
|
|
100
|
+
index = [self._source.name_to_index[v] for v in self._variables]
|
|
101
|
+
return {k: v[index] for k, v in self._source.statistics.items()}
|
|
102
|
+
|
|
103
|
+
def statistics_tendencies(self, delta: Optional[datetime.timedelta] = None) -> Dict[str, NDArray[Any]]:
|
|
104
|
+
index = [self._source.name_to_index[v] for v in self._variables]
|
|
105
|
+
if delta is None:
|
|
106
|
+
delta = self.frequency
|
|
107
|
+
return {k: v[index] for k, v in self._source.statistics_tendencies(delta).items()}
|
|
108
|
+
|
|
95
109
|
@property
|
|
96
110
|
def name_to_index(self) -> Dict[str, int]:
|
|
97
111
|
"""Returns a dictionary mapping variable names to their indices."""
|
|
@@ -170,6 +184,16 @@ class Complement(Combined):
|
|
|
170
184
|
"""
|
|
171
185
|
pass
|
|
172
186
|
|
|
187
|
+
def forwards_subclass_metadata_specific(self) -> dict[str, Any]:
|
|
188
|
+
"""Get the metadata specific to the forwards subclass.
|
|
189
|
+
|
|
190
|
+
Returns
|
|
191
|
+
-------
|
|
192
|
+
dict[str, Any]
|
|
193
|
+
The metadata specific to the forwards subclass.
|
|
194
|
+
"""
|
|
195
|
+
return dict(complement=self._source.dataset_metadata())
|
|
196
|
+
|
|
173
197
|
|
|
174
198
|
class ComplementNone(Complement):
|
|
175
199
|
"""A class to complement a target dataset with variables from a source dataset without interpolation."""
|
|
@@ -281,7 +305,6 @@ def complement_factory(args: Tuple, kwargs: dict) -> Dataset:
|
|
|
281
305
|
Dataset
|
|
282
306
|
The complemented dataset.
|
|
283
307
|
"""
|
|
284
|
-
from .select import Select
|
|
285
308
|
|
|
286
309
|
assert len(args) == 0, args
|
|
287
310
|
|
|
@@ -296,8 +319,8 @@ def complement_factory(args: Tuple, kwargs: dict) -> Dataset:
|
|
|
296
319
|
if interpolation not in ("none", "nearest"):
|
|
297
320
|
raise NotImplementedError(f"Complement method={interpolation} not implemented")
|
|
298
321
|
|
|
299
|
-
source =
|
|
300
|
-
target =
|
|
322
|
+
source = _open_dataset(source)
|
|
323
|
+
target = _open_dataset(target)
|
|
301
324
|
# `select` is the same as `variables`
|
|
302
325
|
(source, target), kwargs = _auto_adjust([source, target], kwargs, exclude=["select"])
|
|
303
326
|
|
|
@@ -309,10 +332,4 @@ def complement_factory(args: Tuple, kwargs: dict) -> Dataset:
|
|
|
309
332
|
|
|
310
333
|
complement = Class(target=target, source=source)._subset(**kwargs)
|
|
311
334
|
|
|
312
|
-
|
|
313
|
-
reorder = source.variables
|
|
314
|
-
complemented = _open([target, complement])
|
|
315
|
-
ordered = (
|
|
316
|
-
Select(complemented, complemented._reorder_to_columns(reorder), {"reoder": reorder})._subset(**kwargs).mutate(),
|
|
317
|
-
)
|
|
318
|
-
return ordered
|
|
335
|
+
return _open_dataset([target, complement], reorder=source.variables)
|
anemoi/datasets/data/forwards.py
CHANGED
|
@@ -290,6 +290,10 @@ class Combined(Forwards):
|
|
|
290
290
|
ValueError
|
|
291
291
|
If the resolutions are not the same.
|
|
292
292
|
"""
|
|
293
|
+
if d1.resolution is None or d2.resolution is None:
|
|
294
|
+
LOG.warning("One of the datasets has no resolution, cannot check compatibility")
|
|
295
|
+
return
|
|
296
|
+
|
|
293
297
|
if d1.resolution != d2.resolution:
|
|
294
298
|
raise ValueError(f"Incompatible resolutions: {d1.resolution} and {d2.resolution} ({d1} {d2})")
|
|
295
299
|
|
anemoi/datasets/data/grids.py
CHANGED
|
@@ -344,7 +344,7 @@ class Cutout(GridsBase):
|
|
|
344
344
|
self.cropping_distance = cropping_distance
|
|
345
345
|
self.neighbours = neighbours
|
|
346
346
|
self.min_distance_km = min_distance_km
|
|
347
|
-
self.
|
|
347
|
+
self._plot = plot
|
|
348
348
|
self.masks = [] # To store the masks for each LAM dataset
|
|
349
349
|
self.global_mask = np.ones(self.globe.shape[-1], dtype=bool)
|
|
350
350
|
|
|
@@ -373,7 +373,7 @@ class Cutout(GridsBase):
|
|
|
373
373
|
lam.longitudes,
|
|
374
374
|
self.globe.latitudes,
|
|
375
375
|
self.globe.longitudes,
|
|
376
|
-
plot=
|
|
376
|
+
plot=self._plot,
|
|
377
377
|
min_distance_km=self.min_distance_km,
|
|
378
378
|
cropping_distance=self.cropping_distance,
|
|
379
379
|
neighbours=self.neighbours,
|
|
@@ -399,7 +399,7 @@ class Cutout(GridsBase):
|
|
|
399
399
|
prev_lam_lons,
|
|
400
400
|
lam_lats,
|
|
401
401
|
lam_lons,
|
|
402
|
-
plot=
|
|
402
|
+
plot=self._plot,
|
|
403
403
|
min_distance_km=self.min_distance_km,
|
|
404
404
|
cropping_distance=self.cropping_distance,
|
|
405
405
|
neighbours=self.neighbours,
|
anemoi/datasets/data/misc.py
CHANGED
|
@@ -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
|
|
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
|
anemoi/datasets/data/stores.py
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
import datetime
|
|
12
12
|
import logging
|
|
13
13
|
import os
|
|
14
|
+
import tempfile
|
|
14
15
|
import warnings
|
|
15
16
|
from functools import cached_property
|
|
16
17
|
from typing import Any
|
|
@@ -185,10 +186,30 @@ def name_to_zarr_store(path_or_url: str) -> ReadOnlyStore:
|
|
|
185
186
|
store = path_or_url
|
|
186
187
|
|
|
187
188
|
if store.startswith("s3://"):
|
|
188
|
-
|
|
189
|
+
return S3Store(store)
|
|
190
|
+
|
|
191
|
+
if store.startswith("http://") or store.startswith("https://"):
|
|
189
192
|
|
|
190
|
-
elif store.startswith("http://") or store.startswith("https://"):
|
|
191
193
|
parsed = urlparse(store)
|
|
194
|
+
|
|
195
|
+
if store.endswith(".zip"):
|
|
196
|
+
import multiurl
|
|
197
|
+
|
|
198
|
+
# Zarr cannot handle zip files over HTTP
|
|
199
|
+
tmpdir = tempfile.gettempdir()
|
|
200
|
+
name = os.path.basename(parsed.path)
|
|
201
|
+
path = os.path.join(tmpdir, name)
|
|
202
|
+
LOG.warning("Zarr does not support zip files over HTTP, downloading to %s", path)
|
|
203
|
+
if os.path.exists(path):
|
|
204
|
+
LOG.warning("File %s already exists, reusing it", path)
|
|
205
|
+
return name_to_zarr_store(path)
|
|
206
|
+
|
|
207
|
+
LOG.warning("Downloading %s", store)
|
|
208
|
+
|
|
209
|
+
multiurl.download(store, path + ".tmp")
|
|
210
|
+
os.rename(path + ".tmp", path)
|
|
211
|
+
return name_to_zarr_store(path)
|
|
212
|
+
|
|
192
213
|
bits = parsed.netloc.split(".")
|
|
193
214
|
if len(bits) == 5 and (bits[1], bits[3], bits[4]) == ("s3", "amazonaws", "com"):
|
|
194
215
|
s3_url = f"s3://{bits[0]}{parsed.path}"
|
|
@@ -540,10 +561,21 @@ QUIET = set()
|
|
|
540
561
|
|
|
541
562
|
def zarr_lookup(name: str, fail: bool = True) -> Optional[str]:
|
|
542
563
|
"""Look up a zarr dataset by name."""
|
|
543
|
-
if name.endswith(".zarr") or name.endswith(".zip"):
|
|
544
|
-
return name
|
|
545
564
|
|
|
546
565
|
config = load_config()["datasets"]
|
|
566
|
+
use_search_path_not_found = config.get("use_search_path_not_found", False)
|
|
567
|
+
|
|
568
|
+
if name.endswith(".zarr") or name.endswith(".zip"):
|
|
569
|
+
|
|
570
|
+
if os.path.exists(name):
|
|
571
|
+
return name
|
|
572
|
+
|
|
573
|
+
if not use_search_path_not_found:
|
|
574
|
+
# There will be an error triggered by the open_zarr
|
|
575
|
+
return name
|
|
576
|
+
|
|
577
|
+
LOG.warning("File %s not found, trying to search in the search path", name)
|
|
578
|
+
name = os.path.splitext(os.path.basename(name))[0]
|
|
547
579
|
|
|
548
580
|
if name in config["named"]:
|
|
549
581
|
if name not in QUIET:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: anemoi-datasets
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.22
|
|
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.
|
|
229
|
-
Requires-Dist: anemoi-utils[provenance]>=0.4.
|
|
228
|
+
Requires-Dist: anemoi-transform>=0.1.9
|
|
229
|
+
Requires-Dist: anemoi-utils[provenance]>=0.4.21
|
|
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
|
|
@@ -268,4 +269,5 @@ Requires-Dist: kerchunk; extra == "xarray"
|
|
|
268
269
|
Requires-Dist: pandas; extra == "xarray"
|
|
269
270
|
Requires-Dist: planetary-computer; extra == "xarray"
|
|
270
271
|
Requires-Dist: pystac-client; extra == "xarray"
|
|
272
|
+
Requires-Dist: s3fs>=0.5; extra == "xarray"
|
|
271
273
|
Dynamic: license-file
|
|
@@ -1,29 +1,31 @@
|
|
|
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=
|
|
3
|
+
anemoi/datasets/_version.py,sha256=KERiCy5SlogIpKH0HhOSfNJ6Gz_dzHHWww2moJQR1BQ,513
|
|
4
|
+
anemoi/datasets/check.py,sha256=hbEMUurl2IjZbp56dBgOfAEsAmmgymgRM5ySaMJSTdk,2755
|
|
4
5
|
anemoi/datasets/grids.py,sha256=Hhj1aOXHvDjmI46M_UlLSjCs1qYqxH-uqd_kapDSdbU,18134
|
|
5
6
|
anemoi/datasets/testing.py,sha256=fy_JzavUwLlK_2rtXAT-UGUyo5gjyQW2y826zf334Wg,2645
|
|
6
7
|
anemoi/datasets/commands/__init__.py,sha256=O5W3yHZywRoAqmRUioAr3zMCh0hGVV18wZYGvc00ioM,698
|
|
8
|
+
anemoi/datasets/commands/check.py,sha256=zEJqE5XkNLsebemg5XIvvZTv2bA6R49zVaka9HRySKU,2655
|
|
7
9
|
anemoi/datasets/commands/cleanup.py,sha256=FX082xkHKCSd8d-FUN5zDBSiKA-QYQEeUZ6dCUD-Ob8,1816
|
|
8
10
|
anemoi/datasets/commands/compare-lam.py,sha256=F5GYRsKOtdhDePhifgf1TCj5L2T8EVIA2N8AdO-AKKY,14857
|
|
9
11
|
anemoi/datasets/commands/compare.py,sha256=jzhjbbt1U-YANTVRBhrwSh2CcYgk4qX2IiTMJtcn82s,3678
|
|
10
|
-
anemoi/datasets/commands/copy.py,sha256=
|
|
11
|
-
anemoi/datasets/commands/create.py,sha256=
|
|
12
|
+
anemoi/datasets/commands/copy.py,sha256=hP7BSqkGzK8-n3BA2vlpFcbO3INHmShPZ75Aw_K_g4Y,17302
|
|
13
|
+
anemoi/datasets/commands/create.py,sha256=3myohTCLsM6oUuZHIfLaTlDaq-DOcJZRM4Vks007fZg,6543
|
|
12
14
|
anemoi/datasets/commands/finalise-additions.py,sha256=2LqU7ke3i-yRQbjkgldX6e2QlyE-tKqp0b6QOhJF19g,1985
|
|
13
15
|
anemoi/datasets/commands/finalise.py,sha256=-YtN9wFFDrM_i_V9YHoXZsajF3eAax-73Zsi4uHAFCI,1709
|
|
14
|
-
anemoi/datasets/commands/grib-index.py,sha256=
|
|
16
|
+
anemoi/datasets/commands/grib-index.py,sha256=H9snsk1w2tL6ObBhlHVxFXxCm5sB-eUGrX772G8Nb2s,3057
|
|
15
17
|
anemoi/datasets/commands/init-additions.py,sha256=2vMom5L38UvLLopzP2z-R_Fq31fU2uMvKXoDq5d8oI4,1931
|
|
16
18
|
anemoi/datasets/commands/init.py,sha256=5IKyJ_hJA4lLIbpT88XtcGzXccHLSGwSoqVSvVJGxPg,2852
|
|
17
|
-
anemoi/datasets/commands/inspect.py,sha256=
|
|
19
|
+
anemoi/datasets/commands/inspect.py,sha256=kaDHXP8Cv8PsGqEXUF5Yruf5OQHwOIkjCS0SNxMs6eg,26578
|
|
18
20
|
anemoi/datasets/commands/load-additions.py,sha256=zqmRherIHXb5WIB4cnAuCBEsxFJmUpGjafvm6RtQ7Co,2004
|
|
19
21
|
anemoi/datasets/commands/load.py,sha256=U1Y8qByjreu7H9WeX4G8-tyKsz48va10fkW1L4U4wWg,2034
|
|
20
22
|
anemoi/datasets/commands/patch.py,sha256=Q9FDabWxlvK1QaeH4D9zhNpoSGB4h7EliWgcV76iFBs,1599
|
|
21
23
|
anemoi/datasets/commands/publish.py,sha256=7YusLCWYdVLuexZzvyh8ztYoBOBzVmve3uJs-XKeMAE,1469
|
|
22
|
-
anemoi/datasets/commands/scan.py,sha256=
|
|
24
|
+
anemoi/datasets/commands/scan.py,sha256=6Uoyd7WkM4ypoqmZargXIG50uRKzHE3AlvkAr7sCBy4,4262
|
|
23
25
|
anemoi/datasets/compute/__init__.py,sha256=hCW0QcLHJmE-C1r38P27_ZOvCLNewex5iQEtZqx2ckI,393
|
|
24
26
|
anemoi/datasets/compute/recentre.py,sha256=kwxDB8qpgOCFZSQJvjAmVcpH5zWsfk5FSoIureqNHd4,5915
|
|
25
|
-
anemoi/datasets/create/__init__.py,sha256=
|
|
26
|
-
anemoi/datasets/create/check.py,sha256=
|
|
27
|
+
anemoi/datasets/create/__init__.py,sha256=8TJwN_t7Epg6yBSbbRW2L039Xh_aqUsUgZBNR3U2yl0,51165
|
|
28
|
+
anemoi/datasets/create/check.py,sha256=xqobSfh3655ZoKs-CjHWBiEpIfrHU_vkqwiIsAOrqvs,10795
|
|
27
29
|
anemoi/datasets/create/chunks.py,sha256=kZV3dWoCuv3Bttc0wysJB7OPbXsD99exKyrrj4HGFwQ,4025
|
|
28
30
|
anemoi/datasets/create/config.py,sha256=xrSlaY2p5zssfLIt8A1CP9WwJReSXVWBMQM7bT1aFbU,13448
|
|
29
31
|
anemoi/datasets/create/filter.py,sha256=Hu4o3Z2omIdcu5ycJqmBkY_ZSKTG5JkjbIuxXM8ADfs,1254
|
|
@@ -34,7 +36,7 @@ anemoi/datasets/create/source.py,sha256=xoV8uH_y6aBSE4_PWuy5w7Q7cX-tGm8e-2xC9flS
|
|
|
34
36
|
anemoi/datasets/create/testing.py,sha256=FzTSsbv_JBGViGrD1jT6z_T2yaA0KCrbJ3SCgp-rFPQ,2406
|
|
35
37
|
anemoi/datasets/create/typing.py,sha256=Hs2uDG8ZVtQ-Q-5I9-W0Pik2p1hZH5-JPVjpJXRXP7M,484
|
|
36
38
|
anemoi/datasets/create/utils.py,sha256=94JKPYcNSurA62yFAytW5dUFVz-r-fdwiPOkmu121pM,5572
|
|
37
|
-
anemoi/datasets/create/writer.py,sha256=
|
|
39
|
+
anemoi/datasets/create/writer.py,sha256=nZBJvYZ63g_c9FfL65bAeG10Y6bX2R7CgtZvY0kW3fI,2203
|
|
38
40
|
anemoi/datasets/create/zarr.py,sha256=N9PGGD-dYvcc97BZjLVWm5XQeYTiK9gwvhtreRiQzBI,9437
|
|
39
41
|
anemoi/datasets/create/filters/__init__.py,sha256=rhetUFPZKe-vwDIfMY33SbYrJMq909dUJRgBzuX6Q6E,901
|
|
40
42
|
anemoi/datasets/create/filters/empty.py,sha256=Dw1kUnAlFt6b5ds0kmrw9Gak09XjSqF8m1_MpHZNV9I,1013
|
|
@@ -56,7 +58,7 @@ anemoi/datasets/create/filters/unrotate_winds.py,sha256=3AJf0crnVVySLlXLIdfEUxRR
|
|
|
56
58
|
anemoi/datasets/create/filters/uv_to_speeddir.py,sha256=Zdc34AG5Bsz-Z7JGuznyRJr6F-BnWKXPiI3mjmOpbek,2883
|
|
57
59
|
anemoi/datasets/create/filters/wz_to_w.py,sha256=slOiX5RibG48Zrkss8Qjpb-8ZTnvSvmKlk1Hy45_wzU,2812
|
|
58
60
|
anemoi/datasets/create/input/__init__.py,sha256=XeURpmbReQvpELltGFKzg3oZFXWRdUxW9SK3K662SBQ,3364
|
|
59
|
-
anemoi/datasets/create/input/action.py,sha256=
|
|
61
|
+
anemoi/datasets/create/input/action.py,sha256=pc_2RPbs3laF8vBhNkbFdib40kTcF5QW6QL0p8VLNzA,7778
|
|
60
62
|
anemoi/datasets/create/input/concat.py,sha256=bU8SWfBVfK8bRAmmN4UO9zpIGxwQvRUk9_vwrKPOTE4,5355
|
|
61
63
|
anemoi/datasets/create/input/context.py,sha256=qrLccxMe9UkyQxsNuR6JSK7oLzZq21dt38AxZ9kYzsY,2714
|
|
62
64
|
anemoi/datasets/create/input/data_sources.py,sha256=4xUUShM0pCXIZVPJW_cSNMUwCO_wLx996MLFpTLChm0,4385
|
|
@@ -67,19 +69,19 @@ anemoi/datasets/create/input/join.py,sha256=RAdgE4lVcC71_J47dNa1weJuWdTXSQIvo06G
|
|
|
67
69
|
anemoi/datasets/create/input/misc.py,sha256=FVaH_ym52RZI_fnLSMM_dKTQmWTrInucP780E3gGqvw,3357
|
|
68
70
|
anemoi/datasets/create/input/pipe.py,sha256=-tCz161IwXoI8pl1hilA9T_j5eHSr-sgbijFLp9HHNc,2083
|
|
69
71
|
anemoi/datasets/create/input/repeated_dates.py,sha256=HaPzDCNHQBY1VVp6gvd3drwjWjYpSBh-GLgHqBRJTz0,12012
|
|
70
|
-
anemoi/datasets/create/input/result.py,sha256=
|
|
72
|
+
anemoi/datasets/create/input/result.py,sha256=BmeZVN63ZnUkiOwT0mkE4DdB06OmVwdRZkiV4ACPNrI,24309
|
|
71
73
|
anemoi/datasets/create/input/step.py,sha256=WcR9NgRvUKF60Fo5veLvRCAQMrOd55x1gOEAmd2t2r4,5948
|
|
72
74
|
anemoi/datasets/create/input/template.py,sha256=Iycw9VmfA0WEIDP_Of8bp-8HsV0EUfwbnm0WjxiO4GA,4092
|
|
73
75
|
anemoi/datasets/create/input/trace.py,sha256=dakPYMmwKq6s17Scww1CN-xYBD3btJTGeDknOhAcnEM,3320
|
|
74
76
|
anemoi/datasets/create/sources/__init__.py,sha256=XNiiGaC6NbxnGfl6glPw-gTJASi3vsGKwVlfkMqYGk4,950
|
|
75
|
-
anemoi/datasets/create/sources/accumulations.py,sha256=
|
|
77
|
+
anemoi/datasets/create/sources/accumulations.py,sha256=ifnUtbvmA8s7KOEL7ZOgbkiPxL3pa0FclGsZWZN3eyE,32782
|
|
76
78
|
anemoi/datasets/create/sources/accumulations2.py,sha256=iBORRrH0N7r3gMWm3mCkJ6XmB-dO_lEckHPwvmk9fu0,20673
|
|
77
79
|
anemoi/datasets/create/sources/anemoi_dataset.py,sha256=2xJJTmKlv87F_2ECMKeehaeW7_oWLlDcLt8C_Prp1RI,2017
|
|
78
80
|
anemoi/datasets/create/sources/constants.py,sha256=5O6d9tEuAmVjl5vNkNfmkaAjKXFlw1UjeueTsF1GZCI,1528
|
|
79
81
|
anemoi/datasets/create/sources/eccc_fstd.py,sha256=8HK38f444HcWMvBhooP0XqTfMXYoCbN_8G9RI_Ne5rc,659
|
|
80
82
|
anemoi/datasets/create/sources/empty.py,sha256=5mVIVRUwnBfE3zp-bvNA_imXCSpyds-4mewcI8HXAiY,1020
|
|
81
|
-
anemoi/datasets/create/sources/forcings.py,sha256=
|
|
82
|
-
anemoi/datasets/create/sources/grib.py,sha256=
|
|
83
|
+
anemoi/datasets/create/sources/forcings.py,sha256=PmcAd-nFZzILRxfvrptb45VLD9Nd2vjy0xeToeoKl1Y,1222
|
|
84
|
+
anemoi/datasets/create/sources/grib.py,sha256=wh1kx2IbzeHDzqSEKB-gaM3Cs3Z_oVa7pyHZiOzF3-s,4278
|
|
83
85
|
anemoi/datasets/create/sources/grib_index.py,sha256=Pnm0RLga9lpD4MqVaZr7IqXMBlw1DtTIWZRfz7fq30Q,19026
|
|
84
86
|
anemoi/datasets/create/sources/hindcasts.py,sha256=_4880rgd4AsRxlDXVi6dkh8mlKXrz2i27btVlmlMFjY,2611
|
|
85
87
|
anemoi/datasets/create/sources/legacy.py,sha256=RJce-9TwmUUCFbgC8A3Dp61nSBfB8_lWti8WNoOMIcU,2652
|
|
@@ -92,7 +94,7 @@ anemoi/datasets/create/sources/source.py,sha256=x8k---A2_3AglYqNsXLlv1ti4f9n_gVK
|
|
|
92
94
|
anemoi/datasets/create/sources/tendencies.py,sha256=saHGYl-MnvBEeZX-n1zgT8lehA7LC2G5dMNnxklI9-U,5590
|
|
93
95
|
anemoi/datasets/create/sources/xarray.py,sha256=zBuWCmBidEY3Wz6DDRZStBcrkw646AXpIM8B1nHV55c,2555
|
|
94
96
|
anemoi/datasets/create/sources/xarray_kerchunk.py,sha256=vdFaFzze8VLjYUgIX8Lc39ELvwmgfT3ioyxBHAt4nrs,1136
|
|
95
|
-
anemoi/datasets/create/sources/xarray_zarr.py,sha256=
|
|
97
|
+
anemoi/datasets/create/sources/xarray_zarr.py,sha256=5eQOpB3sBD49RarTME81s0ynIVkha2pP0ymA4TNnLYY,1201
|
|
96
98
|
anemoi/datasets/create/sources/zenodo.py,sha256=KEetFEk5GzGFpoos8rbBQBTa2XElWG7oTYjfZXgbu0Q,2065
|
|
97
99
|
anemoi/datasets/create/sources/xarray_support/README.md,sha256=56olM9Jh0vI0_bU9GI-IqbBcz4DZXWONqvdzN_VeAFE,78
|
|
98
100
|
anemoi/datasets/create/sources/xarray_support/__init__.py,sha256=8Dv7KQW8O3VvHOsSbqYdjaaomYIhXIKgSGatnNEweNU,5564
|
|
@@ -101,42 +103,42 @@ anemoi/datasets/create/sources/xarray_support/field.py,sha256=YRxx6kh1qO2qQ6I_Vy
|
|
|
101
103
|
anemoi/datasets/create/sources/xarray_support/fieldlist.py,sha256=UyUljq2Ax-PpQ-bvG4Dsi_lkZucuPgCy120EadDeUMU,8271
|
|
102
104
|
anemoi/datasets/create/sources/xarray_support/flavour.py,sha256=UyfzBjYMNfugMCq-r5Ie3qDuorLwaalPi_0oZHckZcg,32073
|
|
103
105
|
anemoi/datasets/create/sources/xarray_support/grid.py,sha256=lsE8bQwBH9pflzvsJ89Z6ExYPdHJd54xorMNzL2gTd0,6181
|
|
104
|
-
anemoi/datasets/create/sources/xarray_support/metadata.py,sha256=
|
|
106
|
+
anemoi/datasets/create/sources/xarray_support/metadata.py,sha256=OJ35Y4m9BpPmnrabD9qiuHUEfejc6YfTIWPm8prHokk,10876
|
|
105
107
|
anemoi/datasets/create/sources/xarray_support/patch.py,sha256=Snk8bz7gp0HrG0MrY5hrXu7VC0tKgtoiWXByi2sBYJc,2037
|
|
106
108
|
anemoi/datasets/create/sources/xarray_support/time.py,sha256=Y_lZTUOXWJH4jcSgyL4WTDwrtPXi7MUiumaXfRoqqAY,12486
|
|
107
109
|
anemoi/datasets/create/sources/xarray_support/variable.py,sha256=fcazws9vuizmx55JCXwbkwffg4WxJllPrEg2US1VysE,9163
|
|
108
110
|
anemoi/datasets/create/statistics/__init__.py,sha256=_BuPcuUrwQAEcMQVds93EV9M5ys2ao8jCWKV4OVoSSA,18291
|
|
109
111
|
anemoi/datasets/create/statistics/summary.py,sha256=JdtChTmsr1Y958_nka36HltTbeZkawuGbprbfZD7Ux8,4790
|
|
110
112
|
anemoi/datasets/data/__init__.py,sha256=wzhk_7VQImge12Xkg99xuiFOC7DAjBW1mu446y0Iq60,3057
|
|
111
|
-
anemoi/datasets/data/complement.py,sha256=
|
|
113
|
+
anemoi/datasets/data/complement.py,sha256=N1vJAO2bijrWAxXQi9AFAPVEBe4vikSIKEXcX1EqQHI,10590
|
|
112
114
|
anemoi/datasets/data/concat.py,sha256=eY5rujcdal00BJCv00mKSlxp0FKVvPQd7uqrBnL9fj4,8996
|
|
113
115
|
anemoi/datasets/data/dataset.py,sha256=d-LZPCczG2-ZAua29FGP3_QWzwdnWPHhKpG1dHFQKio,31290
|
|
114
116
|
anemoi/datasets/data/debug.css,sha256=z2X_ZDSnZ9C3pyZPWnQiEyAxuMxUaxJxET4oaCImTAQ,211
|
|
115
117
|
anemoi/datasets/data/debug.py,sha256=hVa1jAQ-TK7CoKJNyyUC0eZPobFG-FpkVXEaO_3B-MA,10796
|
|
116
118
|
anemoi/datasets/data/ensemble.py,sha256=-36kMjuT2y5jUeSnjCRTCyE4um6DLAADBVSKSTkHZZg,5352
|
|
117
119
|
anemoi/datasets/data/fill_missing.py,sha256=ceONpzD-PWLMTtG4WOw6USw-Cd1O55VYzfpAiEsROK8,8797
|
|
118
|
-
anemoi/datasets/data/forwards.py,sha256=
|
|
119
|
-
anemoi/datasets/data/grids.py,sha256=
|
|
120
|
+
anemoi/datasets/data/forwards.py,sha256=3DHmjed5lDG-4tUIafvbAE5z7bJ-odVT6yG68EdQzoY,19904
|
|
121
|
+
anemoi/datasets/data/grids.py,sha256=8fZSitKTStBT-fsQWwTXiTgyrmYjh_jQ5dJi1U3lRz0,22056
|
|
120
122
|
anemoi/datasets/data/indexing.py,sha256=DasVd1j0FB0iTw6eqvhiLka4ztf2zJcI5NgWxmtxzCw,7526
|
|
121
123
|
anemoi/datasets/data/interpolate.py,sha256=-kSYwdjKH7zJtfITdbqdH6KyOFGVZDyHg4TaFk9shEI,9279
|
|
122
124
|
anemoi/datasets/data/join.py,sha256=ZEHOsCecKBkKKH-vki404Sm7r7cV368ECO7PXPpay3s,9212
|
|
123
125
|
anemoi/datasets/data/masked.py,sha256=giOvHLcGbLf6mZPqZjAxQd1kvydmkepDFh2EqchXLTQ,10213
|
|
124
126
|
anemoi/datasets/data/merge.py,sha256=SvQhJHf-C-Kn7hEjFqomienk-epPPjMtoccRNCJpMtw,8733
|
|
125
|
-
anemoi/datasets/data/misc.py,sha256=
|
|
127
|
+
anemoi/datasets/data/misc.py,sha256=6JOag2VJBJhz-eEEWL9F5nriEJyKz9aZL2P3FYcOSJo,20951
|
|
126
128
|
anemoi/datasets/data/missing.py,sha256=ogfVDponbs0bGHMxps32Fj_fq4gT26R70yEMco5gdK8,12593
|
|
127
129
|
anemoi/datasets/data/rescale.py,sha256=nGfJ5tWCncMJ7NMXkLbmt6z0ELrD6FxpbjJreQ3W91g,7004
|
|
128
130
|
anemoi/datasets/data/select.py,sha256=Xs6uOzJL0CoOGeWA_E5_ukr8Jav2kXbZ41vhk7Vr8PE,8277
|
|
129
131
|
anemoi/datasets/data/statistics.py,sha256=Hi9tPtNPBFaD0jcBa5vxoZp1radEMS-1RXwA3RbWrK8,3173
|
|
130
|
-
anemoi/datasets/data/stores.py,sha256
|
|
132
|
+
anemoi/datasets/data/stores.py,sha256=9RuNKbBv3SeEKRME63GZKzlJonMlvvyQk6F4xhSheL4,20023
|
|
131
133
|
anemoi/datasets/data/subset.py,sha256=3h3Y7Mcw-fxs9-S0z8WNk6TcV5Hk5u9ZWfpJCTAZt4g,8804
|
|
132
134
|
anemoi/datasets/data/unchecked.py,sha256=c7YIa9gFxOOjqyyOqrhGaFWQ1pN7_0W1Q8ABUTkI8e8,7311
|
|
133
135
|
anemoi/datasets/data/xy.py,sha256=-jWzYismrK3eI3YCKIBpU1BCmraRncmVn0_2IUY--lk,7579
|
|
134
136
|
anemoi/datasets/dates/__init__.py,sha256=pEArHDQ7w5E0WC8Vvf9ypyKSdm6gnhoN9TmooITB7C4,13617
|
|
135
137
|
anemoi/datasets/dates/groups.py,sha256=IOveL6IyTXZwEdXZEnRAnpu9pINY95VN7LzcpLfJ09E,10105
|
|
136
138
|
anemoi/datasets/utils/__init__.py,sha256=hCW0QcLHJmE-C1r38P27_ZOvCLNewex5iQEtZqx2ckI,393
|
|
137
|
-
anemoi_datasets-0.5.
|
|
138
|
-
anemoi_datasets-0.5.
|
|
139
|
-
anemoi_datasets-0.5.
|
|
140
|
-
anemoi_datasets-0.5.
|
|
141
|
-
anemoi_datasets-0.5.
|
|
142
|
-
anemoi_datasets-0.5.
|
|
139
|
+
anemoi_datasets-0.5.22.dist-info/licenses/LICENSE,sha256=8HznKF1Vi2IvfLsKNE5A2iVyiri3pRjRPvPC9kxs6qk,11354
|
|
140
|
+
anemoi_datasets-0.5.22.dist-info/METADATA,sha256=69SMdVpJ30oSexpKZRQnt8wh1-Y_SqG2blHvW0XByVY,16113
|
|
141
|
+
anemoi_datasets-0.5.22.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
|
|
142
|
+
anemoi_datasets-0.5.22.dist-info/entry_points.txt,sha256=yR-o-4uiPEA_GLBL81SkMYnUoxq3CAV3hHulQiRtGG0,66
|
|
143
|
+
anemoi_datasets-0.5.22.dist-info/top_level.txt,sha256=DYn8VPs-fNwr7fNH9XIBqeXIwiYYd2E2k5-dUFFqUz0,7
|
|
144
|
+
anemoi_datasets-0.5.22.dist-info/RECORD,,
|