anemoi-datasets 0.5.15__py3-none-any.whl → 0.5.17__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/__init__.py +4 -1
- anemoi/datasets/__main__.py +12 -2
- anemoi/datasets/_version.py +9 -4
- anemoi/datasets/commands/cleanup.py +17 -2
- anemoi/datasets/commands/compare.py +18 -2
- anemoi/datasets/commands/copy.py +196 -14
- anemoi/datasets/commands/create.py +50 -7
- anemoi/datasets/commands/finalise-additions.py +17 -2
- anemoi/datasets/commands/finalise.py +17 -2
- anemoi/datasets/commands/init-additions.py +17 -2
- anemoi/datasets/commands/init.py +16 -2
- anemoi/datasets/commands/inspect.py +283 -62
- anemoi/datasets/commands/load-additions.py +16 -2
- anemoi/datasets/commands/load.py +16 -2
- anemoi/datasets/commands/patch.py +17 -2
- anemoi/datasets/commands/publish.py +17 -2
- anemoi/datasets/commands/scan.py +31 -3
- anemoi/datasets/compute/recentre.py +47 -11
- anemoi/datasets/create/__init__.py +612 -85
- anemoi/datasets/create/check.py +142 -20
- anemoi/datasets/create/chunks.py +64 -4
- anemoi/datasets/create/config.py +185 -21
- anemoi/datasets/create/filter.py +50 -0
- anemoi/datasets/create/filters/__init__.py +33 -0
- anemoi/datasets/create/filters/empty.py +37 -0
- anemoi/datasets/create/filters/legacy.py +93 -0
- anemoi/datasets/create/filters/noop.py +37 -0
- anemoi/datasets/create/filters/orog_to_z.py +58 -0
- anemoi/datasets/create/{functions/filters → filters}/pressure_level_relative_humidity_to_specific_humidity.py +33 -10
- anemoi/datasets/create/{functions/filters → filters}/pressure_level_specific_humidity_to_relative_humidity.py +32 -8
- anemoi/datasets/create/filters/rename.py +205 -0
- anemoi/datasets/create/{functions/filters → filters}/rotate_winds.py +43 -28
- anemoi/datasets/create/{functions/filters → filters}/single_level_dewpoint_to_relative_humidity.py +32 -9
- anemoi/datasets/create/{functions/filters → filters}/single_level_relative_humidity_to_dewpoint.py +33 -9
- anemoi/datasets/create/{functions/filters → filters}/single_level_relative_humidity_to_specific_humidity.py +55 -7
- anemoi/datasets/create/{functions/filters → filters}/single_level_specific_humidity_to_relative_humidity.py +98 -37
- anemoi/datasets/create/filters/speeddir_to_uv.py +95 -0
- anemoi/datasets/create/{functions/filters → filters}/sum.py +24 -27
- anemoi/datasets/create/filters/transform.py +53 -0
- anemoi/datasets/create/{functions/filters → filters}/unrotate_winds.py +27 -18
- anemoi/datasets/create/filters/uv_to_speeddir.py +94 -0
- anemoi/datasets/create/{functions/filters → filters}/wz_to_w.py +51 -33
- anemoi/datasets/create/input/__init__.py +76 -5
- anemoi/datasets/create/input/action.py +149 -13
- anemoi/datasets/create/input/concat.py +81 -10
- anemoi/datasets/create/input/context.py +39 -4
- anemoi/datasets/create/input/data_sources.py +72 -6
- anemoi/datasets/create/input/empty.py +21 -3
- anemoi/datasets/create/input/filter.py +60 -12
- anemoi/datasets/create/input/function.py +154 -37
- anemoi/datasets/create/input/join.py +86 -14
- anemoi/datasets/create/input/misc.py +67 -17
- anemoi/datasets/create/input/pipe.py +33 -6
- anemoi/datasets/create/input/repeated_dates.py +189 -41
- anemoi/datasets/create/input/result.py +202 -87
- anemoi/datasets/create/input/step.py +119 -22
- anemoi/datasets/create/input/template.py +100 -13
- anemoi/datasets/create/input/trace.py +62 -7
- anemoi/datasets/create/patch.py +52 -4
- anemoi/datasets/create/persistent.py +134 -17
- anemoi/datasets/create/size.py +15 -1
- anemoi/datasets/create/source.py +51 -0
- anemoi/datasets/create/sources/__init__.py +36 -0
- anemoi/datasets/create/{functions/sources → sources}/accumulations.py +296 -30
- anemoi/datasets/create/{functions/sources → sources}/constants.py +27 -2
- anemoi/datasets/create/{functions/sources → sources}/eccc_fstd.py +7 -3
- anemoi/datasets/create/sources/empty.py +37 -0
- anemoi/datasets/create/{functions/sources → sources}/forcings.py +25 -1
- anemoi/datasets/create/sources/grib.py +297 -0
- anemoi/datasets/create/{functions/sources → sources}/hindcasts.py +38 -4
- anemoi/datasets/create/sources/legacy.py +93 -0
- anemoi/datasets/create/{functions/sources → sources}/mars.py +168 -20
- anemoi/datasets/create/sources/netcdf.py +42 -0
- anemoi/datasets/create/sources/opendap.py +43 -0
- anemoi/datasets/create/{functions/sources/__init__.py → sources/patterns.py} +35 -4
- anemoi/datasets/create/sources/recentre.py +150 -0
- anemoi/datasets/create/{functions/sources → sources}/source.py +27 -5
- anemoi/datasets/create/{functions/sources → sources}/tendencies.py +64 -7
- anemoi/datasets/create/sources/xarray.py +92 -0
- anemoi/datasets/create/sources/xarray_kerchunk.py +36 -0
- anemoi/datasets/create/sources/xarray_support/README.md +1 -0
- anemoi/datasets/create/{functions/sources/xarray → sources/xarray_support}/__init__.py +109 -8
- anemoi/datasets/create/sources/xarray_support/coordinates.py +442 -0
- anemoi/datasets/create/{functions/sources/xarray → sources/xarray_support}/field.py +94 -16
- anemoi/datasets/create/{functions/sources/xarray → sources/xarray_support}/fieldlist.py +90 -25
- anemoi/datasets/create/sources/xarray_support/flavour.py +1036 -0
- anemoi/datasets/create/{functions/sources/xarray → sources/xarray_support}/grid.py +92 -31
- anemoi/datasets/create/sources/xarray_support/metadata.py +395 -0
- anemoi/datasets/create/sources/xarray_support/patch.py +91 -0
- anemoi/datasets/create/sources/xarray_support/time.py +391 -0
- anemoi/datasets/create/sources/xarray_support/variable.py +331 -0
- anemoi/datasets/create/sources/xarray_zarr.py +41 -0
- anemoi/datasets/create/{functions/sources → sources}/zenodo.py +34 -5
- anemoi/datasets/create/statistics/__init__.py +233 -44
- anemoi/datasets/create/statistics/summary.py +52 -6
- anemoi/datasets/create/testing.py +76 -0
- anemoi/datasets/create/{functions/filters/noop.py → typing.py} +6 -3
- anemoi/datasets/create/utils.py +97 -6
- anemoi/datasets/create/writer.py +26 -4
- anemoi/datasets/create/zarr.py +170 -23
- anemoi/datasets/data/__init__.py +51 -4
- anemoi/datasets/data/complement.py +191 -40
- anemoi/datasets/data/concat.py +141 -16
- anemoi/datasets/data/dataset.py +552 -61
- anemoi/datasets/data/debug.py +197 -26
- anemoi/datasets/data/ensemble.py +93 -8
- anemoi/datasets/data/fill_missing.py +165 -18
- anemoi/datasets/data/forwards.py +428 -56
- anemoi/datasets/data/grids.py +323 -97
- anemoi/datasets/data/indexing.py +112 -19
- anemoi/datasets/data/interpolate.py +92 -12
- anemoi/datasets/data/join.py +158 -19
- anemoi/datasets/data/masked.py +129 -15
- anemoi/datasets/data/merge.py +137 -23
- anemoi/datasets/data/misc.py +172 -16
- anemoi/datasets/data/missing.py +233 -29
- anemoi/datasets/data/rescale.py +111 -10
- anemoi/datasets/data/select.py +168 -26
- anemoi/datasets/data/statistics.py +67 -6
- anemoi/datasets/data/stores.py +149 -64
- anemoi/datasets/data/subset.py +159 -25
- anemoi/datasets/data/unchecked.py +168 -57
- anemoi/datasets/data/xy.py +168 -25
- anemoi/datasets/dates/__init__.py +191 -16
- anemoi/datasets/dates/groups.py +189 -47
- anemoi/datasets/grids.py +270 -31
- anemoi/datasets/testing.py +28 -1
- {anemoi_datasets-0.5.15.dist-info → anemoi_datasets-0.5.17.dist-info}/METADATA +10 -7
- anemoi_datasets-0.5.17.dist-info/RECORD +137 -0
- {anemoi_datasets-0.5.15.dist-info → anemoi_datasets-0.5.17.dist-info}/WHEEL +1 -1
- {anemoi_datasets-0.5.15.dist-info → anemoi_datasets-0.5.17.dist-info/licenses}/LICENSE +1 -1
- anemoi/datasets/create/functions/__init__.py +0 -66
- anemoi/datasets/create/functions/filters/__init__.py +0 -9
- anemoi/datasets/create/functions/filters/empty.py +0 -17
- anemoi/datasets/create/functions/filters/orog_to_z.py +0 -58
- anemoi/datasets/create/functions/filters/rename.py +0 -79
- anemoi/datasets/create/functions/filters/speeddir_to_uv.py +0 -78
- anemoi/datasets/create/functions/filters/uv_to_speeddir.py +0 -56
- anemoi/datasets/create/functions/sources/empty.py +0 -15
- anemoi/datasets/create/functions/sources/grib.py +0 -150
- anemoi/datasets/create/functions/sources/netcdf.py +0 -15
- anemoi/datasets/create/functions/sources/opendap.py +0 -15
- anemoi/datasets/create/functions/sources/recentre.py +0 -60
- anemoi/datasets/create/functions/sources/xarray/coordinates.py +0 -255
- anemoi/datasets/create/functions/sources/xarray/flavour.py +0 -472
- anemoi/datasets/create/functions/sources/xarray/metadata.py +0 -148
- anemoi/datasets/create/functions/sources/xarray/patch.py +0 -44
- anemoi/datasets/create/functions/sources/xarray/time.py +0 -177
- anemoi/datasets/create/functions/sources/xarray/variable.py +0 -188
- anemoi/datasets/create/functions/sources/xarray_kerchunk.py +0 -42
- anemoi/datasets/create/functions/sources/xarray_zarr.py +0 -15
- anemoi/datasets/utils/fields.py +0 -47
- anemoi_datasets-0.5.15.dist-info/RECORD +0 -129
- {anemoi_datasets-0.5.15.dist-info → anemoi_datasets-0.5.17.dist-info}/entry_points.txt +0 -0
- {anemoi_datasets-0.5.15.dist-info → anemoi_datasets-0.5.17.dist-info}/top_level.txt +0 -0
anemoi/datasets/grids.py
CHANGED
|
@@ -10,13 +10,43 @@
|
|
|
10
10
|
|
|
11
11
|
import base64
|
|
12
12
|
import logging
|
|
13
|
+
from typing import Any
|
|
14
|
+
from typing import List
|
|
15
|
+
from typing import Optional
|
|
16
|
+
from typing import Tuple
|
|
17
|
+
from typing import Union
|
|
13
18
|
|
|
14
19
|
import numpy as np
|
|
20
|
+
from numpy.typing import NDArray
|
|
15
21
|
|
|
16
22
|
LOG = logging.getLogger(__name__)
|
|
17
23
|
|
|
18
24
|
|
|
19
|
-
def plot_mask(
|
|
25
|
+
def plot_mask(
|
|
26
|
+
path: str,
|
|
27
|
+
mask: NDArray[Any],
|
|
28
|
+
lats: NDArray[Any],
|
|
29
|
+
lons: NDArray[Any],
|
|
30
|
+
global_lats: NDArray[Any],
|
|
31
|
+
global_lons: NDArray[Any],
|
|
32
|
+
) -> None:
|
|
33
|
+
"""Plot and save various visualizations of the mask and coordinates.
|
|
34
|
+
|
|
35
|
+
Parameters
|
|
36
|
+
----------
|
|
37
|
+
path : str
|
|
38
|
+
The base path for saving the plots.
|
|
39
|
+
mask : NDArray[Any]
|
|
40
|
+
The mask array.
|
|
41
|
+
lats : NDArray[Any]
|
|
42
|
+
Latitude coordinates.
|
|
43
|
+
lons : NDArray[Any]
|
|
44
|
+
Longitude coordinates.
|
|
45
|
+
global_lats : NDArray[Any]
|
|
46
|
+
Global latitude coordinates.
|
|
47
|
+
global_lons : NDArray[Any]
|
|
48
|
+
Global longitude coordinates.
|
|
49
|
+
"""
|
|
20
50
|
import matplotlib.pyplot as plt
|
|
21
51
|
|
|
22
52
|
s = 1
|
|
@@ -64,7 +94,23 @@ def plot_mask(path, mask, lats, lons, global_lats, global_lons):
|
|
|
64
94
|
|
|
65
95
|
# TODO: Use the one from anemoi.utils.grids instead
|
|
66
96
|
# from anemoi.utils.grids import ...
|
|
67
|
-
def xyz_to_latlon(x, y, z):
|
|
97
|
+
def xyz_to_latlon(x: NDArray[Any], y: NDArray[Any], z: NDArray[Any]) -> Tuple[NDArray[Any], NDArray[Any]]:
|
|
98
|
+
"""Convert Cartesian coordinates to latitude and longitude.
|
|
99
|
+
|
|
100
|
+
Parameters
|
|
101
|
+
----------
|
|
102
|
+
x : NDArray[Any]
|
|
103
|
+
X coordinates.
|
|
104
|
+
y : NDArray[Any]
|
|
105
|
+
Y coordinates.
|
|
106
|
+
z : NDArray[Any]
|
|
107
|
+
Z coordinates.
|
|
108
|
+
|
|
109
|
+
Returns
|
|
110
|
+
-------
|
|
111
|
+
Tuple[NDArray[Any], NDArray[Any]]
|
|
112
|
+
Latitude and longitude coordinates.
|
|
113
|
+
"""
|
|
68
114
|
return (
|
|
69
115
|
np.rad2deg(np.arcsin(np.minimum(1.0, np.maximum(-1.0, z)))),
|
|
70
116
|
np.rad2deg(np.arctan2(y, x)),
|
|
@@ -73,7 +119,25 @@ def xyz_to_latlon(x, y, z):
|
|
|
73
119
|
|
|
74
120
|
# TODO: Use the one from anemoi.utils.grids instead
|
|
75
121
|
# from anemoi.utils.grids import ...
|
|
76
|
-
def latlon_to_xyz(
|
|
122
|
+
def latlon_to_xyz(
|
|
123
|
+
lat: NDArray[Any], lon: NDArray[Any], radius: float = 1.0
|
|
124
|
+
) -> Tuple[NDArray[Any], NDArray[Any], NDArray[Any]]:
|
|
125
|
+
"""Convert latitude and longitude to Cartesian coordinates.
|
|
126
|
+
|
|
127
|
+
Parameters
|
|
128
|
+
----------
|
|
129
|
+
lat : NDArray[Any]
|
|
130
|
+
Latitude coordinates.
|
|
131
|
+
lon : NDArray[Any]
|
|
132
|
+
Longitude coordinates.
|
|
133
|
+
radius : float, optional
|
|
134
|
+
Radius of the sphere. Defaults to 1.0.
|
|
135
|
+
|
|
136
|
+
Returns
|
|
137
|
+
-------
|
|
138
|
+
Tuple[NDArray[Any], NDArray[Any], NDArray[Any]]
|
|
139
|
+
X, Y, and Z coordinates.
|
|
140
|
+
"""
|
|
77
141
|
# https://en.wikipedia.org/wiki/Geographic_coordinate_conversion#From_geodetic_to_ECEF_coordinates
|
|
78
142
|
# We assume that the Earth is a sphere of radius 1 so N(phi) = 1
|
|
79
143
|
# We assume h = 0
|
|
@@ -94,12 +158,39 @@ def latlon_to_xyz(lat, lon, radius=1.0):
|
|
|
94
158
|
|
|
95
159
|
|
|
96
160
|
class Triangle3D:
|
|
97
|
-
|
|
161
|
+
"""A class to represent a 3D triangle and perform intersection tests with rays."""
|
|
162
|
+
|
|
163
|
+
def __init__(self, v0: NDArray[Any], v1: NDArray[Any], v2: NDArray[Any]) -> None:
|
|
164
|
+
"""Initialize the Triangle3D object.
|
|
165
|
+
|
|
166
|
+
Parameters
|
|
167
|
+
----------
|
|
168
|
+
v0 : NDArray[Any]
|
|
169
|
+
First vertex of the triangle.
|
|
170
|
+
v1 : NDArray[Any]
|
|
171
|
+
Second vertex of the triangle.
|
|
172
|
+
v2 : NDArray[Any]
|
|
173
|
+
Third vertex of the triangle.
|
|
174
|
+
"""
|
|
98
175
|
self.v0 = v0
|
|
99
176
|
self.v1 = v1
|
|
100
177
|
self.v2 = v2
|
|
101
178
|
|
|
102
|
-
def intersect(self, ray_origin, ray_direction):
|
|
179
|
+
def intersect(self, ray_origin: NDArray[Any], ray_direction: NDArray[Any]) -> bool:
|
|
180
|
+
"""Check if a ray intersects with the triangle.
|
|
181
|
+
|
|
182
|
+
Parameters
|
|
183
|
+
----------
|
|
184
|
+
ray_origin : NDArray[Any]
|
|
185
|
+
Origin of the ray.
|
|
186
|
+
ray_direction : NDArray[Any]
|
|
187
|
+
Direction of the ray.
|
|
188
|
+
|
|
189
|
+
Returns
|
|
190
|
+
-------
|
|
191
|
+
bool
|
|
192
|
+
True if the ray intersects with the triangle, False otherwise.
|
|
193
|
+
"""
|
|
103
194
|
# Möller–Trumbore intersection algorithm
|
|
104
195
|
# https://en.wikipedia.org/wiki/M%C3%B6ller%E2%80%93Trumbore_intersection_algorithm
|
|
105
196
|
|
|
@@ -132,7 +223,36 @@ class Triangle3D:
|
|
|
132
223
|
return False
|
|
133
224
|
|
|
134
225
|
|
|
135
|
-
def cropping_mask(
|
|
226
|
+
def cropping_mask(
|
|
227
|
+
lats: NDArray[Any],
|
|
228
|
+
lons: NDArray[Any],
|
|
229
|
+
north: float,
|
|
230
|
+
west: float,
|
|
231
|
+
south: float,
|
|
232
|
+
east: float,
|
|
233
|
+
) -> NDArray[Any]:
|
|
234
|
+
"""Create a mask for the points within the specified latitude and longitude bounds.
|
|
235
|
+
|
|
236
|
+
Parameters
|
|
237
|
+
----------
|
|
238
|
+
lats : NDArray[Any]
|
|
239
|
+
Latitude coordinates.
|
|
240
|
+
lons : NDArray[Any]
|
|
241
|
+
Longitude coordinates.
|
|
242
|
+
north : float
|
|
243
|
+
Northern boundary.
|
|
244
|
+
west : float
|
|
245
|
+
Western boundary.
|
|
246
|
+
south : float
|
|
247
|
+
Southern boundary.
|
|
248
|
+
east : float
|
|
249
|
+
Eastern boundary.
|
|
250
|
+
|
|
251
|
+
Returns
|
|
252
|
+
-------
|
|
253
|
+
NDArray[Any]
|
|
254
|
+
Mask array.
|
|
255
|
+
"""
|
|
136
256
|
mask = (
|
|
137
257
|
(lats >= south)
|
|
138
258
|
& (lats <= north)
|
|
@@ -146,16 +266,41 @@ def cropping_mask(lats, lons, north, west, south, east):
|
|
|
146
266
|
|
|
147
267
|
|
|
148
268
|
def cutout_mask(
|
|
149
|
-
lats,
|
|
150
|
-
lons,
|
|
151
|
-
global_lats,
|
|
152
|
-
global_lons,
|
|
153
|
-
cropping_distance=2.0,
|
|
154
|
-
neighbours=5,
|
|
155
|
-
min_distance_km=None,
|
|
156
|
-
plot=None,
|
|
157
|
-
):
|
|
158
|
-
"""Return a mask for the points in [global_lats, global_lons] that are inside of [lats, lons]
|
|
269
|
+
lats: NDArray[Any],
|
|
270
|
+
lons: NDArray[Any],
|
|
271
|
+
global_lats: NDArray[Any],
|
|
272
|
+
global_lons: NDArray[Any],
|
|
273
|
+
cropping_distance: float = 2.0,
|
|
274
|
+
neighbours: int = 5,
|
|
275
|
+
min_distance_km: Optional[Union[int, float]] = None,
|
|
276
|
+
plot: Optional[str] = None,
|
|
277
|
+
) -> NDArray[Any]:
|
|
278
|
+
"""Return a mask for the points in [global_lats, global_lons] that are inside of [lats, lons].
|
|
279
|
+
|
|
280
|
+
Parameters
|
|
281
|
+
----------
|
|
282
|
+
lats : NDArray[Any]
|
|
283
|
+
Latitude coordinates.
|
|
284
|
+
lons : NDArray[Any]
|
|
285
|
+
Longitude coordinates.
|
|
286
|
+
global_lats : NDArray[Any]
|
|
287
|
+
Global latitude coordinates.
|
|
288
|
+
global_lons : NDArray[Any]
|
|
289
|
+
Global longitude coordinates.
|
|
290
|
+
cropping_distance : float, optional
|
|
291
|
+
Cropping distance. Defaults to 2.0.
|
|
292
|
+
neighbours : int, optional
|
|
293
|
+
Number of neighbours. Defaults to 5.
|
|
294
|
+
min_distance_km : Optional[Union[int, float]], optional
|
|
295
|
+
Minimum distance in kilometers. Defaults to None.
|
|
296
|
+
plot : Optional[str], optional
|
|
297
|
+
Path for saving the plot. Defaults to None.
|
|
298
|
+
|
|
299
|
+
Returns
|
|
300
|
+
-------
|
|
301
|
+
NDArray[Any]
|
|
302
|
+
Mask array.
|
|
303
|
+
"""
|
|
159
304
|
from scipy.spatial import cKDTree
|
|
160
305
|
|
|
161
306
|
# TODO: transform min_distance from lat/lon to xyz
|
|
@@ -232,15 +377,15 @@ def cutout_mask(
|
|
|
232
377
|
inside_lam.append(inside or close)
|
|
233
378
|
|
|
234
379
|
j = 0
|
|
235
|
-
|
|
380
|
+
inside_lam_array = np.array(inside_lam)
|
|
236
381
|
for i, m in enumerate(mask):
|
|
237
382
|
if not m:
|
|
238
383
|
continue
|
|
239
384
|
|
|
240
|
-
mask[i] =
|
|
385
|
+
mask[i] = inside_lam_array[j]
|
|
241
386
|
j += 1
|
|
242
387
|
|
|
243
|
-
assert j == len(
|
|
388
|
+
assert j == len(inside_lam_array)
|
|
244
389
|
|
|
245
390
|
# Invert the mask, so we have only the points outside the cutout
|
|
246
391
|
mask = ~mask
|
|
@@ -252,13 +397,32 @@ def cutout_mask(
|
|
|
252
397
|
|
|
253
398
|
|
|
254
399
|
def thinning_mask(
|
|
255
|
-
lats,
|
|
256
|
-
lons,
|
|
257
|
-
global_lats,
|
|
258
|
-
global_lons,
|
|
259
|
-
cropping_distance=2.0,
|
|
260
|
-
):
|
|
261
|
-
"""Return the list of points in [lats, lons] closest to [global_lats, global_lons]
|
|
400
|
+
lats: NDArray[Any],
|
|
401
|
+
lons: NDArray[Any],
|
|
402
|
+
global_lats: NDArray[Any],
|
|
403
|
+
global_lons: NDArray[Any],
|
|
404
|
+
cropping_distance: float = 2.0,
|
|
405
|
+
) -> NDArray[Any]:
|
|
406
|
+
"""Return the list of points in [lats, lons] closest to [global_lats, global_lons].
|
|
407
|
+
|
|
408
|
+
Parameters
|
|
409
|
+
----------
|
|
410
|
+
lats : NDArray[Any]
|
|
411
|
+
Latitude coordinates.
|
|
412
|
+
lons : NDArray[Any]
|
|
413
|
+
Longitude coordinates.
|
|
414
|
+
global_lats : NDArray[Any]
|
|
415
|
+
Global latitude coordinates.
|
|
416
|
+
global_lons : NDArray[Any]
|
|
417
|
+
Global longitude coordinates.
|
|
418
|
+
cropping_distance : float, optional
|
|
419
|
+
Cropping distance. Defaults to 2.0.
|
|
420
|
+
|
|
421
|
+
Returns
|
|
422
|
+
-------
|
|
423
|
+
NDArray[Any]
|
|
424
|
+
Array of indices of the closest points.
|
|
425
|
+
"""
|
|
262
426
|
from scipy.spatial import cKDTree
|
|
263
427
|
|
|
264
428
|
assert global_lats.ndim == 1
|
|
@@ -301,7 +465,23 @@ def thinning_mask(
|
|
|
301
465
|
return np.array([i for i in indices])
|
|
302
466
|
|
|
303
467
|
|
|
304
|
-
def outline(lats, lons, neighbours=5):
|
|
468
|
+
def outline(lats: NDArray[Any], lons: NDArray[Any], neighbours: int = 5) -> List[int]:
|
|
469
|
+
"""Find the outline of the grid points.
|
|
470
|
+
|
|
471
|
+
Parameters
|
|
472
|
+
----------
|
|
473
|
+
lats : NDArray[Any]
|
|
474
|
+
Latitude coordinates.
|
|
475
|
+
lons : NDArray[Any]
|
|
476
|
+
Longitude coordinates.
|
|
477
|
+
neighbours : int, optional
|
|
478
|
+
Number of neighbours. Defaults to 5.
|
|
479
|
+
|
|
480
|
+
Returns
|
|
481
|
+
-------
|
|
482
|
+
List[int]
|
|
483
|
+
Indices of the outline points.
|
|
484
|
+
"""
|
|
305
485
|
from scipy.spatial import cKDTree
|
|
306
486
|
|
|
307
487
|
xyx = latlon_to_xyz(lats, lons)
|
|
@@ -333,7 +513,19 @@ def outline(lats, lons, neighbours=5):
|
|
|
333
513
|
return outside
|
|
334
514
|
|
|
335
515
|
|
|
336
|
-
def deserialise_mask(encoded):
|
|
516
|
+
def deserialise_mask(encoded: str) -> NDArray[Any]:
|
|
517
|
+
"""Deserialise a mask from a base64 encoded string.
|
|
518
|
+
|
|
519
|
+
Parameters
|
|
520
|
+
----------
|
|
521
|
+
encoded : str
|
|
522
|
+
Base64 encoded string.
|
|
523
|
+
|
|
524
|
+
Returns
|
|
525
|
+
-------
|
|
526
|
+
NDArray[Any]
|
|
527
|
+
Deserialised mask array.
|
|
528
|
+
"""
|
|
337
529
|
import pickle
|
|
338
530
|
import zlib
|
|
339
531
|
|
|
@@ -347,7 +539,19 @@ def deserialise_mask(encoded):
|
|
|
347
539
|
return np.array(mask, dtype=bool)
|
|
348
540
|
|
|
349
541
|
|
|
350
|
-
def _serialise_mask(mask):
|
|
542
|
+
def _serialise_mask(mask: NDArray[Any]) -> str:
|
|
543
|
+
"""Serialise a mask to a base64 encoded string.
|
|
544
|
+
|
|
545
|
+
Parameters
|
|
546
|
+
----------
|
|
547
|
+
mask : NDArray[Any]
|
|
548
|
+
Mask array.
|
|
549
|
+
|
|
550
|
+
Returns
|
|
551
|
+
-------
|
|
552
|
+
str
|
|
553
|
+
Base64 encoded string.
|
|
554
|
+
"""
|
|
351
555
|
import pickle
|
|
352
556
|
import zlib
|
|
353
557
|
|
|
@@ -376,14 +580,49 @@ def _serialise_mask(mask):
|
|
|
376
580
|
return base64.b64encode(zlib.compress(pickle.dumps(packed))).decode("utf-8")
|
|
377
581
|
|
|
378
582
|
|
|
379
|
-
def serialise_mask(mask):
|
|
583
|
+
def serialise_mask(mask: NDArray[Any]) -> str:
|
|
584
|
+
"""Serialise a mask and ensure it can be deserialised.
|
|
585
|
+
|
|
586
|
+
Parameters
|
|
587
|
+
----------
|
|
588
|
+
mask : NDArray[Any]
|
|
589
|
+
Mask array.
|
|
590
|
+
|
|
591
|
+
Returns
|
|
592
|
+
-------
|
|
593
|
+
str
|
|
594
|
+
Base64 encoded string.
|
|
595
|
+
"""
|
|
380
596
|
result = _serialise_mask(mask)
|
|
381
597
|
# Make sure we can deserialise it
|
|
382
598
|
assert np.all(mask == deserialise_mask(result))
|
|
383
599
|
return result
|
|
384
600
|
|
|
385
601
|
|
|
386
|
-
def nearest_grid_points(
|
|
602
|
+
def nearest_grid_points(
|
|
603
|
+
source_latitudes: NDArray[Any],
|
|
604
|
+
source_longitudes: NDArray[Any],
|
|
605
|
+
target_latitudes: NDArray[Any],
|
|
606
|
+
target_longitudes: NDArray[Any],
|
|
607
|
+
) -> NDArray[Any]:
|
|
608
|
+
"""Find the nearest grid points from source to target coordinates.
|
|
609
|
+
|
|
610
|
+
Parameters
|
|
611
|
+
----------
|
|
612
|
+
source_latitudes : NDArray[Any]
|
|
613
|
+
Source latitude coordinates.
|
|
614
|
+
source_longitudes : NDArray[Any]
|
|
615
|
+
Source longitude coordinates.
|
|
616
|
+
target_latitudes : NDArray[Any]
|
|
617
|
+
Target latitude coordinates.
|
|
618
|
+
target_longitudes : NDArray[Any]
|
|
619
|
+
Target longitude coordinates.
|
|
620
|
+
|
|
621
|
+
Returns
|
|
622
|
+
-------
|
|
623
|
+
NDArray[Any]
|
|
624
|
+
Indices of the nearest grid points.
|
|
625
|
+
"""
|
|
387
626
|
# TODO: Use the one from anemoi.utils.grids instead
|
|
388
627
|
# from anemoi.utils.grids import ...
|
|
389
628
|
from scipy.spatial import cKDTree
|
anemoi/datasets/testing.py
CHANGED
|
@@ -11,11 +11,38 @@
|
|
|
11
11
|
# A collection of functions to support pytest testing
|
|
12
12
|
|
|
13
13
|
import logging
|
|
14
|
+
from typing import Any
|
|
15
|
+
from typing import List
|
|
16
|
+
from typing import Optional
|
|
14
17
|
|
|
15
18
|
LOG = logging.getLogger(__name__)
|
|
16
19
|
|
|
17
20
|
|
|
18
|
-
def assert_field_list(
|
|
21
|
+
def assert_field_list(
|
|
22
|
+
fs: List[Any],
|
|
23
|
+
size: Optional[int] = None,
|
|
24
|
+
start: Optional[Any] = None,
|
|
25
|
+
end: Optional[Any] = None,
|
|
26
|
+
constant: bool = False,
|
|
27
|
+
skip: Optional[Any] = None,
|
|
28
|
+
) -> None:
|
|
29
|
+
"""Asserts various properties of a list of fields.
|
|
30
|
+
|
|
31
|
+
Parameters
|
|
32
|
+
----------
|
|
33
|
+
fs : List[Any]
|
|
34
|
+
List of fields to be checked.
|
|
35
|
+
size : Optional[int], optional
|
|
36
|
+
Expected size of the list. If None, the list must be non-empty.
|
|
37
|
+
start : Optional[Any], optional
|
|
38
|
+
Expected start metadata value. If None, no check is performed.
|
|
39
|
+
end : Optional[Any], optional
|
|
40
|
+
Expected end metadata value. If None, no check is performed.
|
|
41
|
+
constant : bool, optional
|
|
42
|
+
If True, checks that all fields are constant.
|
|
43
|
+
skip : Optional[Any], optional
|
|
44
|
+
Placeholder for future use.
|
|
45
|
+
"""
|
|
19
46
|
import numpy as np
|
|
20
47
|
|
|
21
48
|
if size is None:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: anemoi-datasets
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.17
|
|
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
|
|
@@ -191,7 +191,7 @@ License: Apache License
|
|
|
191
191
|
same "printed page" as the copyright notice for easier
|
|
192
192
|
identification within third-party archives.
|
|
193
193
|
|
|
194
|
-
Copyright
|
|
194
|
+
Copyright 2024-2025 Anemoi Contributors
|
|
195
195
|
|
|
196
196
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
197
197
|
you may not use this file except in compliance with the License.
|
|
@@ -224,18 +224,18 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
|
224
224
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
225
225
|
Requires-Python: >=3.9
|
|
226
226
|
License-File: LICENSE
|
|
227
|
-
Requires-Dist: anemoi-transform>=0.1.
|
|
228
|
-
Requires-Dist: anemoi-utils[provenance]>=0.4.
|
|
227
|
+
Requires-Dist: anemoi-transform>=0.1.4
|
|
228
|
+
Requires-Dist: anemoi-utils[provenance]>=0.4.16
|
|
229
229
|
Requires-Dist: cfunits
|
|
230
230
|
Requires-Dist: numpy
|
|
231
231
|
Requires-Dist: pyyaml
|
|
232
232
|
Requires-Dist: semantic-version
|
|
233
233
|
Requires-Dist: tqdm
|
|
234
|
-
Requires-Dist: zarr<=2.
|
|
234
|
+
Requires-Dist: zarr<=2.18.4
|
|
235
235
|
Provides-Extra: all
|
|
236
236
|
Requires-Dist: anemoi-datasets[create,remote,xarray]; extra == "all"
|
|
237
237
|
Provides-Extra: create
|
|
238
|
-
Requires-Dist: earthkit-data[mars]>=0.12; extra == "create"
|
|
238
|
+
Requires-Dist: earthkit-data[mars]>=0.12.4; extra == "create"
|
|
239
239
|
Requires-Dist: earthkit-geo>=0.3; extra == "create"
|
|
240
240
|
Requires-Dist: earthkit-meteo>=0.3; extra == "create"
|
|
241
241
|
Requires-Dist: eccodes>=2.39.1; extra == "create"
|
|
@@ -253,10 +253,13 @@ Provides-Extra: remote
|
|
|
253
253
|
Requires-Dist: boto3; extra == "remote"
|
|
254
254
|
Requires-Dist: requests; extra == "remote"
|
|
255
255
|
Provides-Extra: tests
|
|
256
|
+
Requires-Dist: anemoi-datasets[xarray]; extra == "tests"
|
|
256
257
|
Requires-Dist: pytest; extra == "tests"
|
|
257
258
|
Provides-Extra: xarray
|
|
259
|
+
Requires-Dist: adlfs; extra == "xarray"
|
|
258
260
|
Requires-Dist: gcsfs; extra == "xarray"
|
|
259
261
|
Requires-Dist: kerchunk; extra == "xarray"
|
|
260
262
|
Requires-Dist: pandas; extra == "xarray"
|
|
261
263
|
Requires-Dist: planetary-computer; extra == "xarray"
|
|
262
264
|
Requires-Dist: pystac-client; extra == "xarray"
|
|
265
|
+
Dynamic: license-file
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
anemoi/datasets/__init__.py,sha256=i_wsAT3ezEYF7o5dpqGrpoG4wmLS-QIBug18uJbSYMs,1065
|
|
2
|
+
anemoi/datasets/__main__.py,sha256=ErwAqE3rBc7OaNO2JRsEOhWpB8ldjAt7BFSuRhbnlqQ,936
|
|
3
|
+
anemoi/datasets/_version.py,sha256=G3jgIvqAOb3RgYTFryPuF7LF2dSXviBKmqCnS1RQzaU,513
|
|
4
|
+
anemoi/datasets/grids.py,sha256=ALvRRMvu0GaDCnNlOO-cRCfbpywA-1w_wzSylqpqgNY,17795
|
|
5
|
+
anemoi/datasets/testing.py,sha256=fy_JzavUwLlK_2rtXAT-UGUyo5gjyQW2y826zf334Wg,2645
|
|
6
|
+
anemoi/datasets/commands/__init__.py,sha256=O5W3yHZywRoAqmRUioAr3zMCh0hGVV18wZYGvc00ioM,698
|
|
7
|
+
anemoi/datasets/commands/cleanup.py,sha256=FX082xkHKCSd8d-FUN5zDBSiKA-QYQEeUZ6dCUD-Ob8,1816
|
|
8
|
+
anemoi/datasets/commands/compare.py,sha256=jzhjbbt1U-YANTVRBhrwSh2CcYgk4qX2IiTMJtcn82s,3678
|
|
9
|
+
anemoi/datasets/commands/copy.py,sha256=UlvW9YIlP7jwKAY7TikVAfhkrjaQ9Kkxqfx8jEut-Jg,16010
|
|
10
|
+
anemoi/datasets/commands/create.py,sha256=5BXdPZMO-ZULBnEVgyeSS-IMy4p84HSyFVG855gqj3k,6598
|
|
11
|
+
anemoi/datasets/commands/finalise-additions.py,sha256=2LqU7ke3i-yRQbjkgldX6e2QlyE-tKqp0b6QOhJF19g,1985
|
|
12
|
+
anemoi/datasets/commands/finalise.py,sha256=-YtN9wFFDrM_i_V9YHoXZsajF3eAax-73Zsi4uHAFCI,1709
|
|
13
|
+
anemoi/datasets/commands/init-additions.py,sha256=2vMom5L38UvLLopzP2z-R_Fq31fU2uMvKXoDq5d8oI4,1931
|
|
14
|
+
anemoi/datasets/commands/init.py,sha256=5IKyJ_hJA4lLIbpT88XtcGzXccHLSGwSoqVSvVJGxPg,2852
|
|
15
|
+
anemoi/datasets/commands/inspect.py,sha256=dGx_3IQTNaV3iGfwhHp_G1fIecBWeRbOLU9ckrZ7epg,26578
|
|
16
|
+
anemoi/datasets/commands/load-additions.py,sha256=zqmRherIHXb5WIB4cnAuCBEsxFJmUpGjafvm6RtQ7Co,2004
|
|
17
|
+
anemoi/datasets/commands/load.py,sha256=U1Y8qByjreu7H9WeX4G8-tyKsz48va10fkW1L4U4wWg,2034
|
|
18
|
+
anemoi/datasets/commands/patch.py,sha256=Q9FDabWxlvK1QaeH4D9zhNpoSGB4h7EliWgcV76iFBs,1599
|
|
19
|
+
anemoi/datasets/commands/publish.py,sha256=7YusLCWYdVLuexZzvyh8ztYoBOBzVmve3uJs-XKeMAE,1469
|
|
20
|
+
anemoi/datasets/commands/scan.py,sha256=e5t_oxSi-II38TVQiMlWMJ8AZhDEBk5PcPD22DDbHfU,4008
|
|
21
|
+
anemoi/datasets/compute/__init__.py,sha256=hCW0QcLHJmE-C1r38P27_ZOvCLNewex5iQEtZqx2ckI,393
|
|
22
|
+
anemoi/datasets/compute/recentre.py,sha256=kwxDB8qpgOCFZSQJvjAmVcpH5zWsfk5FSoIureqNHd4,5915
|
|
23
|
+
anemoi/datasets/create/__init__.py,sha256=1Y7IcMPXjCZkNbezhSDiurG-qvGFGgPqvgOMpQH_e0k,50501
|
|
24
|
+
anemoi/datasets/create/check.py,sha256=FrgyZP3Xyx4qXHl8_ZfM31fgNhcxMqxlE5oLweMDGU0,10003
|
|
25
|
+
anemoi/datasets/create/chunks.py,sha256=kZV3dWoCuv3Bttc0wysJB7OPbXsD99exKyrrj4HGFwQ,4025
|
|
26
|
+
anemoi/datasets/create/config.py,sha256=ZF7tEPT6U4ILYVekryFd612tQeMDQK6riaTYtSJrUcM,13295
|
|
27
|
+
anemoi/datasets/create/filter.py,sha256=Hu4o3Z2omIdcu5ycJqmBkY_ZSKTG5JkjbIuxXM8ADfs,1254
|
|
28
|
+
anemoi/datasets/create/patch.py,sha256=u4CeIuo3Ncrbhu9CTyaUbcmaJfBfMrrFVpgEikM9pE4,5398
|
|
29
|
+
anemoi/datasets/create/persistent.py,sha256=XkEBjymXrR-y9KPVLtz9xdd0IB14wSEhcANUhUUzGVw,7832
|
|
30
|
+
anemoi/datasets/create/size.py,sha256=nHjX1manYhQIrcQWDCgBBBiAVDbfoMAG6ybVjytSaKI,1454
|
|
31
|
+
anemoi/datasets/create/source.py,sha256=xoV8uH_y6aBSE4_PWuy5w7Q7cX-tGm8e-2xC9flSAT4,1336
|
|
32
|
+
anemoi/datasets/create/testing.py,sha256=FzTSsbv_JBGViGrD1jT6z_T2yaA0KCrbJ3SCgp-rFPQ,2406
|
|
33
|
+
anemoi/datasets/create/typing.py,sha256=Hs2uDG8ZVtQ-Q-5I9-W0Pik2p1hZH5-JPVjpJXRXP7M,484
|
|
34
|
+
anemoi/datasets/create/utils.py,sha256=94JKPYcNSurA62yFAytW5dUFVz-r-fdwiPOkmu121pM,5572
|
|
35
|
+
anemoi/datasets/create/writer.py,sha256=yjgic7FfVWuVKysi3HbaW6i2j4e831oCUdyD48Ua-MA,2203
|
|
36
|
+
anemoi/datasets/create/zarr.py,sha256=N9PGGD-dYvcc97BZjLVWm5XQeYTiK9gwvhtreRiQzBI,9437
|
|
37
|
+
anemoi/datasets/create/filters/__init__.py,sha256=rhetUFPZKe-vwDIfMY33SbYrJMq909dUJRgBzuX6Q6E,901
|
|
38
|
+
anemoi/datasets/create/filters/empty.py,sha256=Dw1kUnAlFt6b5ds0kmrw9Gak09XjSqF8m1_MpHZNV9I,1013
|
|
39
|
+
anemoi/datasets/create/filters/legacy.py,sha256=6JY6uX7m-8NZjoZ1sqs0EAqT-uorvnZ-eFOwMU3LmRU,2536
|
|
40
|
+
anemoi/datasets/create/filters/noop.py,sha256=WHl-k3NojGJMX4iNYxQ6Ln21pM8ERP4z8pQ5zLRDvXs,1019
|
|
41
|
+
anemoi/datasets/create/filters/orog_to_z.py,sha256=vnZ1hD9LXoOfHCIbzkurMuBl_NSfXSiiHS2yZt8ndeQ,1784
|
|
42
|
+
anemoi/datasets/create/filters/pressure_level_relative_humidity_to_specific_humidity.py,sha256=2xWyqIZm8AFqS9IDPylOB3UfFu9aqe47aZ8qAbmpNUo,2558
|
|
43
|
+
anemoi/datasets/create/filters/pressure_level_specific_humidity_to_relative_humidity.py,sha256=L7cZvPZ1zNHbfbHQw-jn1TZEfO0i0JX5O7AoytuLy1Q,2575
|
|
44
|
+
anemoi/datasets/create/filters/rename.py,sha256=pKi3CU6fvox2sPH7szXdA79NjdIcSz59IB7HsiS_9Co,5779
|
|
45
|
+
anemoi/datasets/create/filters/rotate_winds.py,sha256=fVyAbypO_EsENHjQCujbEXp2gUEb97sMoG0s4YiPXfc,3102
|
|
46
|
+
anemoi/datasets/create/filters/single_level_dewpoint_to_relative_humidity.py,sha256=hCS3yiN9nZf-P6shQmBm5Or9rMOwU1fTwHw_qFIjT9s,2378
|
|
47
|
+
anemoi/datasets/create/filters/single_level_relative_humidity_to_dewpoint.py,sha256=pGwu6YprJ6PwJ8ZRD5k4Mz_wqSXz52jvXP13WDIGOTw,2642
|
|
48
|
+
anemoi/datasets/create/filters/single_level_relative_humidity_to_specific_humidity.py,sha256=a9QVOG8hTVqkDtX4MJ5NB0y-huOKsOm_K4ujakQ36fg,5160
|
|
49
|
+
anemoi/datasets/create/filters/single_level_specific_humidity_to_relative_humidity.py,sha256=bXgm5nKgBZaP1E4tcjSLqJsEl6BlJaNLr3MsR8V9sJ4,14682
|
|
50
|
+
anemoi/datasets/create/filters/speeddir_to_uv.py,sha256=8NXsus1LaYOzAAr7XCHKCh8HAz8BI0A1ZZz_RNDB0-w,2762
|
|
51
|
+
anemoi/datasets/create/filters/sum.py,sha256=aGT6JkdHJ3i2SKzklqiyJ4ZFV3bVMYhHOSoxkdYuzp8,2151
|
|
52
|
+
anemoi/datasets/create/filters/transform.py,sha256=C8tizuYtO1Bp28dTB9mEHeADAO8zHlDFXh8XR1IO1Os,1506
|
|
53
|
+
anemoi/datasets/create/filters/unrotate_winds.py,sha256=3AJf0crnVVySLlXLIdfEUxRRlQeKgheUuD-UCrSrgo8,2798
|
|
54
|
+
anemoi/datasets/create/filters/uv_to_speeddir.py,sha256=Zdc34AG5Bsz-Z7JGuznyRJr6F-BnWKXPiI3mjmOpbek,2883
|
|
55
|
+
anemoi/datasets/create/filters/wz_to_w.py,sha256=42AQvTHk-ISyHlwvXfU3yiTGiDkfrs5kiKNkyqqtQpg,2725
|
|
56
|
+
anemoi/datasets/create/input/__init__.py,sha256=XeURpmbReQvpELltGFKzg3oZFXWRdUxW9SK3K662SBQ,3364
|
|
57
|
+
anemoi/datasets/create/input/action.py,sha256=0P1aSutrzdDDtUU78YMLfdsUEOeJcLvLiH2KDR5kOxM,7565
|
|
58
|
+
anemoi/datasets/create/input/concat.py,sha256=bU8SWfBVfK8bRAmmN4UO9zpIGxwQvRUk9_vwrKPOTE4,5355
|
|
59
|
+
anemoi/datasets/create/input/context.py,sha256=qrLccxMe9UkyQxsNuR6JSK7oLzZq21dt38AxZ9kYzsY,2714
|
|
60
|
+
anemoi/datasets/create/input/data_sources.py,sha256=4xUUShM0pCXIZVPJW_cSNMUwCO_wLx996MLFpTLChm0,4385
|
|
61
|
+
anemoi/datasets/create/input/empty.py,sha256=tOxe3LykoGkEAFuf4yggMpAcvFzMw3E6hCz5pyeQ8Q0,1534
|
|
62
|
+
anemoi/datasets/create/input/filter.py,sha256=R19IUwTdWBueeTKAMxyYKiP-JXOFJQu2vUoEiPYK0rA,3313
|
|
63
|
+
anemoi/datasets/create/input/function.py,sha256=FJ2W5DJBLmpkQ6QFo0-yfUE9iIZyimBn_cZ1b2nRu-Q,6874
|
|
64
|
+
anemoi/datasets/create/input/join.py,sha256=RAdgE4lVcC71_J47dNa1weJuWdTXSQIvo06G2J6dfdg,4016
|
|
65
|
+
anemoi/datasets/create/input/misc.py,sha256=FVaH_ym52RZI_fnLSMM_dKTQmWTrInucP780E3gGqvw,3357
|
|
66
|
+
anemoi/datasets/create/input/pipe.py,sha256=-tCz161IwXoI8pl1hilA9T_j5eHSr-sgbijFLp9HHNc,2083
|
|
67
|
+
anemoi/datasets/create/input/repeated_dates.py,sha256=HaPzDCNHQBY1VVp6gvd3drwjWjYpSBh-GLgHqBRJTz0,12012
|
|
68
|
+
anemoi/datasets/create/input/result.py,sha256=wZHquaytAatwqGZifHzJDsysed_cEwSr9X2ND6Yq9o0,24218
|
|
69
|
+
anemoi/datasets/create/input/step.py,sha256=WcR9NgRvUKF60Fo5veLvRCAQMrOd55x1gOEAmd2t2r4,5948
|
|
70
|
+
anemoi/datasets/create/input/template.py,sha256=Iycw9VmfA0WEIDP_Of8bp-8HsV0EUfwbnm0WjxiO4GA,4092
|
|
71
|
+
anemoi/datasets/create/input/trace.py,sha256=dakPYMmwKq6s17Scww1CN-xYBD3btJTGeDknOhAcnEM,3320
|
|
72
|
+
anemoi/datasets/create/sources/__init__.py,sha256=XNiiGaC6NbxnGfl6glPw-gTJASi3vsGKwVlfkMqYGk4,950
|
|
73
|
+
anemoi/datasets/create/sources/accumulations.py,sha256=Fh4LJi7XptsOZ9CBv4Nxw8CPJpp_-ugRAWg3mtNcmKU,19855
|
|
74
|
+
anemoi/datasets/create/sources/constants.py,sha256=5O6d9tEuAmVjl5vNkNfmkaAjKXFlw1UjeueTsF1GZCI,1528
|
|
75
|
+
anemoi/datasets/create/sources/eccc_fstd.py,sha256=8HK38f444HcWMvBhooP0XqTfMXYoCbN_8G9RI_Ne5rc,659
|
|
76
|
+
anemoi/datasets/create/sources/empty.py,sha256=5mVIVRUwnBfE3zp-bvNA_imXCSpyds-4mewcI8HXAiY,1020
|
|
77
|
+
anemoi/datasets/create/sources/forcings.py,sha256=877OZoXUoJncQ2_AAGSijwWqM-4kJJdxdIa6SFvZBUw,1216
|
|
78
|
+
anemoi/datasets/create/sources/grib.py,sha256=zFBFWNFDVPCMSDRheNuaLZ7EaInjDt9OTJwVOPj9j-U,8371
|
|
79
|
+
anemoi/datasets/create/sources/hindcasts.py,sha256=_4880rgd4AsRxlDXVi6dkh8mlKXrz2i27btVlmlMFjY,2611
|
|
80
|
+
anemoi/datasets/create/sources/legacy.py,sha256=O6sTbI4QBlUiuGwaUwO2kpmfJYCAs_gTid0YOnkm37I,2536
|
|
81
|
+
anemoi/datasets/create/sources/mars.py,sha256=tesQz7Ne6SLBChE_cNJU6Sxr6e0LXFlUKQ8gCdRiCMw,13155
|
|
82
|
+
anemoi/datasets/create/sources/netcdf.py,sha256=UnehMwEMJquqaOeU33zNyFUYfzqQx4Rg-GRmUcgMcbE,1222
|
|
83
|
+
anemoi/datasets/create/sources/opendap.py,sha256=sTm0wXE_BHk9q8vaNNE_Y6BhTOmhxPweS8RTjP4HYjU,1254
|
|
84
|
+
anemoi/datasets/create/sources/patterns.py,sha256=xNl3yI_cClgJsHaoYwE-bmDSzV4pcBgHRanHdz9MsQU,2291
|
|
85
|
+
anemoi/datasets/create/sources/recentre.py,sha256=OtobkmaWzGD3UacjXfK_Oerjf7EnQi85LIs9xBYJK7A,4044
|
|
86
|
+
anemoi/datasets/create/sources/source.py,sha256=x8k---A2_3AglYqNsXLlv1ti4f9n_gVKmmqtyQGLPTs,2117
|
|
87
|
+
anemoi/datasets/create/sources/tendencies.py,sha256=saHGYl-MnvBEeZX-n1zgT8lehA7LC2G5dMNnxklI9-U,5590
|
|
88
|
+
anemoi/datasets/create/sources/xarray.py,sha256=zBuWCmBidEY3Wz6DDRZStBcrkw646AXpIM8B1nHV55c,2555
|
|
89
|
+
anemoi/datasets/create/sources/xarray_kerchunk.py,sha256=vdFaFzze8VLjYUgIX8Lc39ELvwmgfT3ioyxBHAt4nrs,1136
|
|
90
|
+
anemoi/datasets/create/sources/xarray_zarr.py,sha256=McY-vgXmUbGAkBViAfYwBUeVmGUU-Qr8UW-jUGu5-9s,1209
|
|
91
|
+
anemoi/datasets/create/sources/zenodo.py,sha256=KEetFEk5GzGFpoos8rbBQBTa2XElWG7oTYjfZXgbu0Q,2065
|
|
92
|
+
anemoi/datasets/create/sources/xarray_support/README.md,sha256=56olM9Jh0vI0_bU9GI-IqbBcz4DZXWONqvdzN_VeAFE,78
|
|
93
|
+
anemoi/datasets/create/sources/xarray_support/__init__.py,sha256=CLq5gcHhP5XGzr_LD6D4VPYqPUECmlYztzVC842KMU0,5563
|
|
94
|
+
anemoi/datasets/create/sources/xarray_support/coordinates.py,sha256=rPEuijS77mQ9V9tpN7wjg-w9rBxj7bZf_c30lLgSscE,11029
|
|
95
|
+
anemoi/datasets/create/sources/xarray_support/field.py,sha256=YRxx6kh1qO2qQ6I_VyR51h3dwNiiFM7CNwQNfpp-p-E,6375
|
|
96
|
+
anemoi/datasets/create/sources/xarray_support/fieldlist.py,sha256=CG8ecTXCr37pNiykoxR6Sb21Xxsz6AS5K5-KE4qMEmo,8243
|
|
97
|
+
anemoi/datasets/create/sources/xarray_support/flavour.py,sha256=GYodfpKfTBBWiyXytRrin6NK07ltlyz0UF7x4gQ3Fok,31836
|
|
98
|
+
anemoi/datasets/create/sources/xarray_support/grid.py,sha256=P-NPDYU0eZg_mWcEbeNL9ZhtoJHGNw0eWaC1jxYfK5o,5690
|
|
99
|
+
anemoi/datasets/create/sources/xarray_support/metadata.py,sha256=WRO86l-ZB7iJ7pG5Vz9kVv5h1MokfF0fuy0bNSNBRIc,10687
|
|
100
|
+
anemoi/datasets/create/sources/xarray_support/patch.py,sha256=Snk8bz7gp0HrG0MrY5hrXu7VC0tKgtoiWXByi2sBYJc,2037
|
|
101
|
+
anemoi/datasets/create/sources/xarray_support/time.py,sha256=Y_lZTUOXWJH4jcSgyL4WTDwrtPXi7MUiumaXfRoqqAY,12486
|
|
102
|
+
anemoi/datasets/create/sources/xarray_support/variable.py,sha256=fcazws9vuizmx55JCXwbkwffg4WxJllPrEg2US1VysE,9163
|
|
103
|
+
anemoi/datasets/create/statistics/__init__.py,sha256=_BuPcuUrwQAEcMQVds93EV9M5ys2ao8jCWKV4OVoSSA,18291
|
|
104
|
+
anemoi/datasets/create/statistics/summary.py,sha256=JdtChTmsr1Y958_nka36HltTbeZkawuGbprbfZD7Ux8,4790
|
|
105
|
+
anemoi/datasets/data/__init__.py,sha256=dLzKYFX0eCi7urHA9t530SqZ_GYxTUyQeEcXYV8lZho,2521
|
|
106
|
+
anemoi/datasets/data/complement.py,sha256=C55ZyWO8uM-bGbZkpuh80z95XtQjIr_NBnsxiKDWWtE,9643
|
|
107
|
+
anemoi/datasets/data/concat.py,sha256=eY5rujcdal00BJCv00mKSlxp0FKVvPQd7uqrBnL9fj4,8996
|
|
108
|
+
anemoi/datasets/data/dataset.py,sha256=Z1P1bkscPChGNcjjkxonbw9XylixJoM0UIUjqDDvxl8,30494
|
|
109
|
+
anemoi/datasets/data/debug.css,sha256=z2X_ZDSnZ9C3pyZPWnQiEyAxuMxUaxJxET4oaCImTAQ,211
|
|
110
|
+
anemoi/datasets/data/debug.py,sha256=hVa1jAQ-TK7CoKJNyyUC0eZPobFG-FpkVXEaO_3B-MA,10796
|
|
111
|
+
anemoi/datasets/data/ensemble.py,sha256=-36kMjuT2y5jUeSnjCRTCyE4um6DLAADBVSKSTkHZZg,5352
|
|
112
|
+
anemoi/datasets/data/fill_missing.py,sha256=ceONpzD-PWLMTtG4WOw6USw-Cd1O55VYzfpAiEsROK8,8797
|
|
113
|
+
anemoi/datasets/data/forwards.py,sha256=d0LL0AORQApGmuPIfMWevOOZuePlgZ6GldHUKmqnTtg,19732
|
|
114
|
+
anemoi/datasets/data/grids.py,sha256=vTAfGq3SaTU4tQzzfeRpFAKlmfL-JVvpjP4e3nGWO3s,22045
|
|
115
|
+
anemoi/datasets/data/indexing.py,sha256=DasVd1j0FB0iTw6eqvhiLka4ztf2zJcI5NgWxmtxzCw,7526
|
|
116
|
+
anemoi/datasets/data/interpolate.py,sha256=D6yBMlY-PTngbMC0Mx9cQn-wL_Oe5M8JNBQ0RaIj1Hc,6482
|
|
117
|
+
anemoi/datasets/data/join.py,sha256=ZEHOsCecKBkKKH-vki404Sm7r7cV368ECO7PXPpay3s,9212
|
|
118
|
+
anemoi/datasets/data/masked.py,sha256=xYhvdv4z11QVdZE1d4yGxSJ7VKixQcJy6iviZ_s54bo,7802
|
|
119
|
+
anemoi/datasets/data/merge.py,sha256=SvQhJHf-C-Kn7hEjFqomienk-epPPjMtoccRNCJpMtw,8733
|
|
120
|
+
anemoi/datasets/data/misc.py,sha256=WUXqN7IdIdqxM8fIaOcr9FE7UbgvoKHtwsfqPm1cMpU,15253
|
|
121
|
+
anemoi/datasets/data/missing.py,sha256=ogfVDponbs0bGHMxps32Fj_fq4gT26R70yEMco5gdK8,12593
|
|
122
|
+
anemoi/datasets/data/rescale.py,sha256=nGfJ5tWCncMJ7NMXkLbmt6z0ELrD6FxpbjJreQ3W91g,7004
|
|
123
|
+
anemoi/datasets/data/select.py,sha256=Xs6uOzJL0CoOGeWA_E5_ukr8Jav2kXbZ41vhk7Vr8PE,8277
|
|
124
|
+
anemoi/datasets/data/statistics.py,sha256=Hi9tPtNPBFaD0jcBa5vxoZp1radEMS-1RXwA3RbWrK8,3173
|
|
125
|
+
anemoi/datasets/data/stores.py,sha256=-1WSQDYCMJVZlcvBim7Ay_h-VLJffbJ3v7N0uB2VfXc,18918
|
|
126
|
+
anemoi/datasets/data/subset.py,sha256=3h3Y7Mcw-fxs9-S0z8WNk6TcV5Hk5u9ZWfpJCTAZt4g,8804
|
|
127
|
+
anemoi/datasets/data/unchecked.py,sha256=c7YIa9gFxOOjqyyOqrhGaFWQ1pN7_0W1Q8ABUTkI8e8,7311
|
|
128
|
+
anemoi/datasets/data/xy.py,sha256=-jWzYismrK3eI3YCKIBpU1BCmraRncmVn0_2IUY--lk,7579
|
|
129
|
+
anemoi/datasets/dates/__init__.py,sha256=pEArHDQ7w5E0WC8Vvf9ypyKSdm6gnhoN9TmooITB7C4,13617
|
|
130
|
+
anemoi/datasets/dates/groups.py,sha256=IOveL6IyTXZwEdXZEnRAnpu9pINY95VN7LzcpLfJ09E,10105
|
|
131
|
+
anemoi/datasets/utils/__init__.py,sha256=hCW0QcLHJmE-C1r38P27_ZOvCLNewex5iQEtZqx2ckI,393
|
|
132
|
+
anemoi_datasets-0.5.17.dist-info/licenses/LICENSE,sha256=8HznKF1Vi2IvfLsKNE5A2iVyiri3pRjRPvPC9kxs6qk,11354
|
|
133
|
+
anemoi_datasets-0.5.17.dist-info/METADATA,sha256=jIFWwwr0VWMKPo-lTpC82vLpvagt5n2HD99Otf7CKW4,15727
|
|
134
|
+
anemoi_datasets-0.5.17.dist-info/WHEEL,sha256=L0N565qmK-3nM2eBoMNFszYJ_MTx03_tQ0CQu1bHLYo,91
|
|
135
|
+
anemoi_datasets-0.5.17.dist-info/entry_points.txt,sha256=yR-o-4uiPEA_GLBL81SkMYnUoxq3CAV3hHulQiRtGG0,66
|
|
136
|
+
anemoi_datasets-0.5.17.dist-info/top_level.txt,sha256=DYn8VPs-fNwr7fNH9XIBqeXIwiYYd2E2k5-dUFFqUz0,7
|
|
137
|
+
anemoi_datasets-0.5.17.dist-info/RECORD,,
|
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
same "printed page" as the copyright notice for easier
|
|
187
187
|
identification within third-party archives.
|
|
188
188
|
|
|
189
|
-
Copyright
|
|
189
|
+
Copyright 2024-2025 Anemoi Contributors
|
|
190
190
|
|
|
191
191
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
192
|
you may not use this file except in compliance with the License.
|