anemoi-datasets 0.5.16__py3-none-any.whl → 0.5.18__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 +558 -62
- 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.16.dist-info → anemoi_datasets-0.5.18.dist-info}/METADATA +9 -6
- anemoi_datasets-0.5.18.dist-info/RECORD +137 -0
- {anemoi_datasets-0.5.16.dist-info → anemoi_datasets-0.5.18.dist-info}/WHEEL +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.16.dist-info/RECORD +0 -129
- {anemoi_datasets-0.5.16.dist-info → anemoi_datasets-0.5.18.dist-info}/entry_points.txt +0 -0
- {anemoi_datasets-0.5.16.dist-info → anemoi_datasets-0.5.18.dist-info/licenses}/LICENSE +0 -0
- {anemoi_datasets-0.5.16.dist-info → anemoi_datasets-0.5.18.dist-info}/top_level.txt +0 -0
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
# (C) Copyright 2024 Anemoi contributors.
|
|
2
|
-
#
|
|
3
|
-
# This software is licensed under the terms of the Apache Licence Version 2.0
|
|
4
|
-
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
|
|
5
|
-
#
|
|
6
|
-
# In applying this licence, ECMWF does not waive the privileges and immunities
|
|
7
|
-
# granted to it by virtue of its status as an intergovernmental organisation
|
|
8
|
-
# nor does it submit to any jurisdiction.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import datetime
|
|
12
|
-
import logging
|
|
13
|
-
|
|
14
|
-
from anemoi.utils.dates import as_datetime
|
|
15
|
-
|
|
16
|
-
LOG = logging.getLogger(__name__)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class Time:
|
|
20
|
-
|
|
21
|
-
@classmethod
|
|
22
|
-
def from_coordinates(cls, coordinates):
|
|
23
|
-
time_coordinate = [c for c in coordinates if c.is_time]
|
|
24
|
-
step_coordinate = [c for c in coordinates if c.is_step]
|
|
25
|
-
date_coordinate = [c for c in coordinates if c.is_date]
|
|
26
|
-
|
|
27
|
-
if len(date_coordinate) == 0 and len(time_coordinate) == 1 and len(step_coordinate) == 1:
|
|
28
|
-
return ForecastFromValidTimeAndStep(time_coordinate[0], step_coordinate[0])
|
|
29
|
-
|
|
30
|
-
if len(date_coordinate) == 0 and len(time_coordinate) == 1 and len(step_coordinate) == 0:
|
|
31
|
-
return Analysis(time_coordinate[0])
|
|
32
|
-
|
|
33
|
-
if len(date_coordinate) == 0 and len(time_coordinate) == 0 and len(step_coordinate) == 0:
|
|
34
|
-
return Constant()
|
|
35
|
-
|
|
36
|
-
if len(date_coordinate) == 1 and len(time_coordinate) == 1 and len(step_coordinate) == 0:
|
|
37
|
-
return ForecastFromValidTimeAndBaseTime(date_coordinate[0], time_coordinate[0])
|
|
38
|
-
|
|
39
|
-
if len(date_coordinate) == 1 and len(time_coordinate) == 0 and len(step_coordinate) == 1:
|
|
40
|
-
return ForecastFromBaseTimeAndDate(date_coordinate[0], step_coordinate[0])
|
|
41
|
-
|
|
42
|
-
if len(date_coordinate) == 1 and len(time_coordinate) == 1 and len(step_coordinate) == 1:
|
|
43
|
-
return ForecastFromValidTimeAndStep(time_coordinate[0], step_coordinate[0], date_coordinate[0])
|
|
44
|
-
|
|
45
|
-
LOG.error("")
|
|
46
|
-
LOG.error(f"{len(date_coordinate)} date_coordinate")
|
|
47
|
-
for c in date_coordinate:
|
|
48
|
-
LOG.error(" %s %s %s %s", c, c.is_date, c.is_time, c.is_step)
|
|
49
|
-
# LOG.error(' %s', c.variable)
|
|
50
|
-
|
|
51
|
-
LOG.error("")
|
|
52
|
-
LOG.error(f"{len(time_coordinate)} time_coordinate")
|
|
53
|
-
for c in time_coordinate:
|
|
54
|
-
LOG.error(" %s %s %s %s", c, c.is_date, c.is_time, c.is_step)
|
|
55
|
-
# LOG.error(' %s', c.variable)
|
|
56
|
-
|
|
57
|
-
LOG.error("")
|
|
58
|
-
LOG.error(f"{len(step_coordinate)} step_coordinate")
|
|
59
|
-
for c in step_coordinate:
|
|
60
|
-
LOG.error(" %s %s %s %s", c, c.is_date, c.is_time, c.is_step)
|
|
61
|
-
# LOG.error(' %s', c.variable)
|
|
62
|
-
|
|
63
|
-
raise NotImplementedError(f"{len(date_coordinate)=} {len(time_coordinate)=} {len(step_coordinate)=}")
|
|
64
|
-
|
|
65
|
-
def select_valid_datetime(self, variable):
|
|
66
|
-
raise NotImplementedError(f"{self.__class__.__name__}.select_valid_datetime()")
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
class Constant(Time):
|
|
70
|
-
|
|
71
|
-
def fill_time_metadata(self, coords_values, metadata):
|
|
72
|
-
return None
|
|
73
|
-
|
|
74
|
-
def select_valid_datetime(self, variable):
|
|
75
|
-
return None
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
class Analysis(Time):
|
|
79
|
-
|
|
80
|
-
def __init__(self, time_coordinate):
|
|
81
|
-
self.time_coordinate_name = time_coordinate.variable.name
|
|
82
|
-
|
|
83
|
-
def fill_time_metadata(self, coords_values, metadata):
|
|
84
|
-
valid_datetime = coords_values[self.time_coordinate_name]
|
|
85
|
-
|
|
86
|
-
metadata["date"] = as_datetime(valid_datetime).strftime("%Y%m%d")
|
|
87
|
-
metadata["time"] = as_datetime(valid_datetime).strftime("%H%M")
|
|
88
|
-
metadata["step"] = 0
|
|
89
|
-
|
|
90
|
-
return valid_datetime
|
|
91
|
-
|
|
92
|
-
def select_valid_datetime(self, variable):
|
|
93
|
-
return self.time_coordinate_name
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
class ForecastFromValidTimeAndStep(Time):
|
|
97
|
-
|
|
98
|
-
def __init__(self, time_coordinate, step_coordinate, date_coordinate=None):
|
|
99
|
-
self.time_coordinate_name = time_coordinate.variable.name
|
|
100
|
-
self.step_coordinate_name = step_coordinate.variable.name
|
|
101
|
-
self.date_coordinate_name = date_coordinate.variable.name if date_coordinate else None
|
|
102
|
-
|
|
103
|
-
def fill_time_metadata(self, coords_values, metadata):
|
|
104
|
-
valid_datetime = coords_values[self.time_coordinate_name]
|
|
105
|
-
step = coords_values[self.step_coordinate_name]
|
|
106
|
-
|
|
107
|
-
assert isinstance(step, datetime.timedelta)
|
|
108
|
-
base_datetime = valid_datetime - step
|
|
109
|
-
|
|
110
|
-
hours = step.total_seconds() / 3600
|
|
111
|
-
assert int(hours) == hours
|
|
112
|
-
|
|
113
|
-
metadata["date"] = as_datetime(base_datetime).strftime("%Y%m%d")
|
|
114
|
-
metadata["time"] = as_datetime(base_datetime).strftime("%H%M")
|
|
115
|
-
metadata["step"] = int(hours)
|
|
116
|
-
|
|
117
|
-
# When date is present, it should be compatible with time and step
|
|
118
|
-
|
|
119
|
-
if self.date_coordinate_name is not None:
|
|
120
|
-
# Not sure that this is the correct assumption
|
|
121
|
-
assert coords_values[self.date_coordinate_name] == base_datetime, (
|
|
122
|
-
coords_values[self.date_coordinate_name],
|
|
123
|
-
base_datetime,
|
|
124
|
-
)
|
|
125
|
-
|
|
126
|
-
return valid_datetime
|
|
127
|
-
|
|
128
|
-
def select_valid_datetime(self, variable):
|
|
129
|
-
return self.time_coordinate_name
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
class ForecastFromValidTimeAndBaseTime(Time):
|
|
133
|
-
|
|
134
|
-
def __init__(self, date_coordinate, time_coordinate):
|
|
135
|
-
self.date_coordinate.name = date_coordinate.name
|
|
136
|
-
self.time_coordinate.name = time_coordinate.name
|
|
137
|
-
|
|
138
|
-
def fill_time_metadata(self, coords_values, metadata):
|
|
139
|
-
valid_datetime = coords_values[self.time_coordinate_name]
|
|
140
|
-
base_datetime = coords_values[self.date_coordinate_name]
|
|
141
|
-
|
|
142
|
-
step = valid_datetime - base_datetime
|
|
143
|
-
|
|
144
|
-
hours = step.total_seconds() / 3600
|
|
145
|
-
assert int(hours) == hours
|
|
146
|
-
|
|
147
|
-
metadata["date"] = as_datetime(base_datetime).strftime("%Y%m%d")
|
|
148
|
-
metadata["time"] = as_datetime(base_datetime).strftime("%H%M")
|
|
149
|
-
metadata["step"] = int(hours)
|
|
150
|
-
|
|
151
|
-
return valid_datetime
|
|
152
|
-
|
|
153
|
-
def select_valid_datetime(self, variable):
|
|
154
|
-
return self.time_coordinate_name
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
class ForecastFromBaseTimeAndDate(Time):
|
|
158
|
-
|
|
159
|
-
def __init__(self, date_coordinate, step_coordinate):
|
|
160
|
-
self.date_coordinate_name = date_coordinate.name
|
|
161
|
-
self.step_coordinate_name = step_coordinate.name
|
|
162
|
-
|
|
163
|
-
def fill_time_metadata(self, coords_values, metadata):
|
|
164
|
-
|
|
165
|
-
date = coords_values[self.date_coordinate_name]
|
|
166
|
-
step = coords_values[self.step_coordinate_name]
|
|
167
|
-
assert isinstance(step, datetime.timedelta)
|
|
168
|
-
|
|
169
|
-
metadata["date"] = as_datetime(date).strftime("%Y%m%d")
|
|
170
|
-
metadata["time"] = as_datetime(date).strftime("%H%M")
|
|
171
|
-
|
|
172
|
-
hours = step.total_seconds() / 3600
|
|
173
|
-
|
|
174
|
-
assert int(hours) == hours
|
|
175
|
-
metadata["step"] = int(hours)
|
|
176
|
-
|
|
177
|
-
return date + step
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
# (C) Copyright 2024 Anemoi contributors.
|
|
2
|
-
#
|
|
3
|
-
# This software is licensed under the terms of the Apache Licence Version 2.0
|
|
4
|
-
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
|
|
5
|
-
#
|
|
6
|
-
# In applying this licence, ECMWF does not waive the privileges and immunities
|
|
7
|
-
# granted to it by virtue of its status as an intergovernmental organisation
|
|
8
|
-
# nor does it submit to any jurisdiction.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import logging
|
|
12
|
-
import math
|
|
13
|
-
from functools import cached_property
|
|
14
|
-
|
|
15
|
-
import numpy as np
|
|
16
|
-
|
|
17
|
-
from .field import XArrayField
|
|
18
|
-
|
|
19
|
-
LOG = logging.getLogger(__name__)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class Variable:
|
|
23
|
-
def __init__(
|
|
24
|
-
self,
|
|
25
|
-
*,
|
|
26
|
-
ds,
|
|
27
|
-
variable,
|
|
28
|
-
coordinates,
|
|
29
|
-
grid,
|
|
30
|
-
time,
|
|
31
|
-
metadata,
|
|
32
|
-
):
|
|
33
|
-
self.ds = ds
|
|
34
|
-
self.variable = variable
|
|
35
|
-
|
|
36
|
-
self.grid = grid
|
|
37
|
-
self.coordinates = coordinates
|
|
38
|
-
|
|
39
|
-
self._metadata = metadata.copy()
|
|
40
|
-
self._metadata.update({"variable": variable.name, "param": variable.name})
|
|
41
|
-
|
|
42
|
-
self.time = time
|
|
43
|
-
|
|
44
|
-
self.shape = tuple(len(c.variable) for c in coordinates if c.is_dim and not c.scalar and not c.is_grid)
|
|
45
|
-
self.names = {c.variable.name: c for c in coordinates if c.is_dim and not c.scalar and not c.is_grid}
|
|
46
|
-
self.by_name = {c.variable.name: c for c in coordinates}
|
|
47
|
-
|
|
48
|
-
# We need that alias for the time dimension
|
|
49
|
-
self._aliases = dict(valid_datetime="time")
|
|
50
|
-
|
|
51
|
-
self.length = math.prod(self.shape)
|
|
52
|
-
|
|
53
|
-
@property
|
|
54
|
-
def name(self):
|
|
55
|
-
return self.variable.name
|
|
56
|
-
|
|
57
|
-
def __len__(self):
|
|
58
|
-
return self.length
|
|
59
|
-
|
|
60
|
-
@property
|
|
61
|
-
def grid_mapping(self):
|
|
62
|
-
grid_mapping = self.variable.attrs.get("grid_mapping", None)
|
|
63
|
-
if grid_mapping is None:
|
|
64
|
-
return None
|
|
65
|
-
return self.ds[grid_mapping].attrs
|
|
66
|
-
|
|
67
|
-
def grid_points(self):
|
|
68
|
-
return self.grid.grid_points
|
|
69
|
-
|
|
70
|
-
@property
|
|
71
|
-
def latitudes(self):
|
|
72
|
-
return self.grid.latitudes
|
|
73
|
-
|
|
74
|
-
@property
|
|
75
|
-
def longitudes(self):
|
|
76
|
-
return self.grid.longitudes
|
|
77
|
-
|
|
78
|
-
def __repr__(self):
|
|
79
|
-
return "Variable[name=%s,coordinates=%s,metadata=%s]" % (
|
|
80
|
-
self.variable.name,
|
|
81
|
-
self.coordinates,
|
|
82
|
-
self._metadata,
|
|
83
|
-
)
|
|
84
|
-
|
|
85
|
-
def __getitem__(self, i):
|
|
86
|
-
"""Get a 2D field from the variable"""
|
|
87
|
-
|
|
88
|
-
if i >= self.length:
|
|
89
|
-
raise IndexError(i)
|
|
90
|
-
|
|
91
|
-
coords = np.unravel_index(i, self.shape)
|
|
92
|
-
kwargs = {k: v for k, v in zip(self.names, coords)}
|
|
93
|
-
return XArrayField(self, self.variable.isel(kwargs))
|
|
94
|
-
|
|
95
|
-
def sel(self, missing, **kwargs):
|
|
96
|
-
|
|
97
|
-
if not kwargs:
|
|
98
|
-
return self
|
|
99
|
-
|
|
100
|
-
k, v = kwargs.popitem()
|
|
101
|
-
|
|
102
|
-
user_provided_k = k
|
|
103
|
-
|
|
104
|
-
if k == "valid_datetime":
|
|
105
|
-
# Ask the Time object to select the valid datetime
|
|
106
|
-
k = self.time.select_valid_datetime(self)
|
|
107
|
-
if k is None:
|
|
108
|
-
return None
|
|
109
|
-
|
|
110
|
-
c = self.by_name.get(k)
|
|
111
|
-
|
|
112
|
-
# assert c is not None, f"Could not find coordinate {k} in {self.variable.name} {self.coordinates} {list(self.by_name)}"
|
|
113
|
-
|
|
114
|
-
if c is None:
|
|
115
|
-
missing[k] = v
|
|
116
|
-
return self.sel(missing, **kwargs)
|
|
117
|
-
|
|
118
|
-
i = c.index(v)
|
|
119
|
-
if i is None:
|
|
120
|
-
if k != user_provided_k:
|
|
121
|
-
LOG.warning(f"Could not find {user_provided_k}={v} in {c} (alias of {k})")
|
|
122
|
-
else:
|
|
123
|
-
LOG.warning(f"Could not find {k}={v} in {c}")
|
|
124
|
-
return None
|
|
125
|
-
|
|
126
|
-
coordinates = [x.reduced(i) if c is x else x for x in self.coordinates]
|
|
127
|
-
|
|
128
|
-
metadata = self._metadata.copy()
|
|
129
|
-
metadata.update({k: v})
|
|
130
|
-
|
|
131
|
-
variable = Variable(
|
|
132
|
-
ds=self.ds,
|
|
133
|
-
variable=self.variable.isel({k: i}),
|
|
134
|
-
coordinates=coordinates,
|
|
135
|
-
grid=self.grid,
|
|
136
|
-
time=self.time,
|
|
137
|
-
metadata=metadata,
|
|
138
|
-
)
|
|
139
|
-
|
|
140
|
-
return variable.sel(missing, **kwargs)
|
|
141
|
-
|
|
142
|
-
def match(self, **kwargs):
|
|
143
|
-
|
|
144
|
-
if "param" in kwargs:
|
|
145
|
-
assert "variable" not in kwargs
|
|
146
|
-
kwargs["variable"] = kwargs.pop("param")
|
|
147
|
-
|
|
148
|
-
if "variable" in kwargs:
|
|
149
|
-
name = kwargs.pop("variable")
|
|
150
|
-
if not isinstance(name, (list, tuple)):
|
|
151
|
-
name = [name]
|
|
152
|
-
if self.variable.name not in name:
|
|
153
|
-
return False, None
|
|
154
|
-
return True, kwargs
|
|
155
|
-
return True, kwargs
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
class FilteredVariable:
|
|
159
|
-
def __init__(self, variable, **kwargs):
|
|
160
|
-
self.variable = variable
|
|
161
|
-
self.kwargs = kwargs
|
|
162
|
-
|
|
163
|
-
@cached_property
|
|
164
|
-
def fields(self):
|
|
165
|
-
"""Filter the fields of a variable based on metadata.
|
|
166
|
-
|
|
167
|
-
Returns
|
|
168
|
-
-------
|
|
169
|
-
list
|
|
170
|
-
A list of fields that match the metadata.
|
|
171
|
-
"""
|
|
172
|
-
return [
|
|
173
|
-
field
|
|
174
|
-
for field in self.variable
|
|
175
|
-
if all(field.metadata(k, default=None) == v for k, v in self.kwargs.items())
|
|
176
|
-
]
|
|
177
|
-
|
|
178
|
-
@property
|
|
179
|
-
def length(self):
|
|
180
|
-
return len(self.fields)
|
|
181
|
-
|
|
182
|
-
def __len__(self):
|
|
183
|
-
return self.length
|
|
184
|
-
|
|
185
|
-
def __getitem__(self, i):
|
|
186
|
-
if i >= self.length:
|
|
187
|
-
raise IndexError(i)
|
|
188
|
-
return self.fields[i]
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
# (C) Copyright 2024 Anemoi contributors.
|
|
2
|
-
#
|
|
3
|
-
# This software is licensed under the terms of the Apache Licence Version 2.0
|
|
4
|
-
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
|
|
5
|
-
#
|
|
6
|
-
# In applying this licence, ECMWF does not waive the privileges and immunities
|
|
7
|
-
# granted to it by virtue of its status as an intergovernmental organisation
|
|
8
|
-
# nor does it submit to any jurisdiction.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
from earthkit.data.core.fieldlist import MultiFieldList
|
|
12
|
-
|
|
13
|
-
from . import iterate_patterns
|
|
14
|
-
from .xarray import load_one
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
def load_many(emoji, context, dates, pattern, options, **kwargs):
|
|
18
|
-
|
|
19
|
-
result = []
|
|
20
|
-
options = options.copy() if options is not None else {}
|
|
21
|
-
|
|
22
|
-
options.setdefault("engine", "zarr")
|
|
23
|
-
options.setdefault("backend_kwargs", {})
|
|
24
|
-
|
|
25
|
-
backend_kwargs = options["backend_kwargs"]
|
|
26
|
-
backend_kwargs.setdefault("consolidated", False)
|
|
27
|
-
backend_kwargs.setdefault("storage_options", {})
|
|
28
|
-
|
|
29
|
-
storage_options = backend_kwargs["storage_options"]
|
|
30
|
-
storage_options.setdefault("remote_protocol", "s3")
|
|
31
|
-
storage_options.setdefault("remote_options", {"anon": True})
|
|
32
|
-
|
|
33
|
-
for path, dates in iterate_patterns(pattern, dates, **kwargs):
|
|
34
|
-
storage_options["fo"] = path
|
|
35
|
-
|
|
36
|
-
result.append(load_one(emoji, context, dates, "reference://", options=options, **kwargs))
|
|
37
|
-
|
|
38
|
-
return MultiFieldList(result)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
def execute(context, dates, json, options=None, **kwargs):
|
|
42
|
-
return load_many("🧱", context, dates, json, options, **kwargs)
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
# (C) Copyright 2024 Anemoi contributors.
|
|
2
|
-
#
|
|
3
|
-
# This software is licensed under the terms of the Apache Licence Version 2.0
|
|
4
|
-
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
|
|
5
|
-
#
|
|
6
|
-
# In applying this licence, ECMWF does not waive the privileges and immunities
|
|
7
|
-
# granted to it by virtue of its status as an intergovernmental organisation
|
|
8
|
-
# nor does it submit to any jurisdiction.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
from .xarray import load_many
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def execute(context, dates, url, *args, **kwargs):
|
|
15
|
-
return load_many("🇿", context, dates, url, *args, **kwargs)
|
anemoi/datasets/utils/fields.py
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
# (C) Copyright 2024 Anemoi contributors.
|
|
2
|
-
#
|
|
3
|
-
# This software is licensed under the terms of the Apache Licence Version 2.0
|
|
4
|
-
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
|
|
5
|
-
#
|
|
6
|
-
# In applying this licence, ECMWF does not waive the privileges and immunities
|
|
7
|
-
# granted to it by virtue of its status as an intergovernmental organisation
|
|
8
|
-
# nor does it submit to any jurisdiction.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class WrappedField:
|
|
12
|
-
def __init__(self, field):
|
|
13
|
-
self._field = field
|
|
14
|
-
|
|
15
|
-
def __getattr__(self, name):
|
|
16
|
-
return getattr(self._field, name)
|
|
17
|
-
|
|
18
|
-
def __repr__(self) -> str:
|
|
19
|
-
return repr(self._field)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class NewDataField(WrappedField):
|
|
23
|
-
def __init__(self, field, data):
|
|
24
|
-
super().__init__(field)
|
|
25
|
-
self._data = data
|
|
26
|
-
self.shape = data.shape
|
|
27
|
-
|
|
28
|
-
def to_numpy(self, flatten=False, dtype=None, index=None):
|
|
29
|
-
data = self._data
|
|
30
|
-
if dtype is not None:
|
|
31
|
-
data = data.astype(dtype)
|
|
32
|
-
if flatten:
|
|
33
|
-
data = data.flatten()
|
|
34
|
-
if index is not None:
|
|
35
|
-
data = data[index]
|
|
36
|
-
return data
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
class NewMetadataField(WrappedField):
|
|
40
|
-
def __init__(self, field, **kwargs):
|
|
41
|
-
super().__init__(field)
|
|
42
|
-
self._metadata = kwargs
|
|
43
|
-
|
|
44
|
-
def metadata(self, *args, **kwargs):
|
|
45
|
-
if len(args) == 1 and args[0] in self._metadata:
|
|
46
|
-
return self._metadata[args[0]]
|
|
47
|
-
return self._field.metadata(*args, **kwargs)
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
anemoi/datasets/__init__.py,sha256=0GOHATiKgkUqLRgAVQhNP1aPO7ULfSr8DqUf2ANPEv8,1010
|
|
2
|
-
anemoi/datasets/__main__.py,sha256=5NW2A3OgTimB4ptwYThivIRSeCrvabMuvnr8mmnVx0E,715
|
|
3
|
-
anemoi/datasets/_version.py,sha256=2cL-_pzEwHOhqhZvMuQ5G5-PKmh58YpDDGsGLMEepvQ,413
|
|
4
|
-
anemoi/datasets/grids.py,sha256=qG4TDESkbS48AJr7Q5PKgAagkwrz4KpSktnNmn_zTsQ,11673
|
|
5
|
-
anemoi/datasets/testing.py,sha256=7HGOz5_V9MbkHTDJ4KbklGRndBMrFfVrBBu6a9k0_qY,1825
|
|
6
|
-
anemoi/datasets/commands/__init__.py,sha256=O5W3yHZywRoAqmRUioAr3zMCh0hGVV18wZYGvc00ioM,698
|
|
7
|
-
anemoi/datasets/commands/cleanup.py,sha256=2rD34bHtfOCLwQh7yXa02IJmmOYMOma4YDj0PM-2-Jc,1456
|
|
8
|
-
anemoi/datasets/commands/compare.py,sha256=8YOlFi9Ydw81qNx4kmI35gvoldUAjYae1enBhxqLrvQ,3256
|
|
9
|
-
anemoi/datasets/commands/copy.py,sha256=2owwwcih6mzrmgxrKNmm1B9ngjxZ6q3ZVo3S7grrGWQ,11305
|
|
10
|
-
anemoi/datasets/commands/create.py,sha256=Es8BV2d9iazAjiGWaXf5EUmjkGk6-whGHaOEYG34CBU,5567
|
|
11
|
-
anemoi/datasets/commands/finalise-additions.py,sha256=ZCUa5CbScR_tEImcJe9AhhGryyrsq1bYhM-dtjaIw7M,1552
|
|
12
|
-
anemoi/datasets/commands/finalise.py,sha256=glFj3lhPwf5niybx8u053zMItNjIxYebt3r6E6W2D9Y,1307
|
|
13
|
-
anemoi/datasets/commands/init-additions.py,sha256=JFTPu5cGNsmojbkb5DRhKF0rSku0S_2O6wRf7EvjEnM,1540
|
|
14
|
-
anemoi/datasets/commands/init.py,sha256=GEPWfBv95DbY7Ssd4wwEHx_4suJ2Dk2S0e3ILrpcoBY,2427
|
|
15
|
-
anemoi/datasets/commands/inspect.py,sha256=r6MN59ndyRi9x8yah0xRN__663FKBPU_5rl-eUgPtuM,18795
|
|
16
|
-
anemoi/datasets/commands/load-additions.py,sha256=7jmeSKjRzWRpgT0P5Sp9TwUvw7Bo2KbGO645qmIZFDE,1628
|
|
17
|
-
anemoi/datasets/commands/load.py,sha256=IAw3zGZ_tY127ziExz62snPhyYM8qgNmLRZY0lX0aPE,1698
|
|
18
|
-
anemoi/datasets/commands/patch.py,sha256=UBIO-vhytfuwTzTqlwkpTg-ziRSdoq7GCgpZiO54VDk,1235
|
|
19
|
-
anemoi/datasets/commands/publish.py,sha256=z1MV9_1BsEnw81Y_17fHkKGYe8_ZJo9eeQ1kGP5RAsg,1080
|
|
20
|
-
anemoi/datasets/commands/scan.py,sha256=mXzYEcYsncxC7ItyL_TlVRiWji6OFYfVxO5OMD9mbEI,3304
|
|
21
|
-
anemoi/datasets/compute/__init__.py,sha256=hCW0QcLHJmE-C1r38P27_ZOvCLNewex5iQEtZqx2ckI,393
|
|
22
|
-
anemoi/datasets/compute/recentre.py,sha256=tKs-YZLhqsMRBNEUF41hcuMmyvbRuFX07xJq-Cqg2_w,4954
|
|
23
|
-
anemoi/datasets/create/__init__.py,sha256=0kGaWi3WA3rD-Jfps6HBa6v8J8CNTvXtoaXeT9DpfgU,36913
|
|
24
|
-
anemoi/datasets/create/check.py,sha256=q205XxzR7UtBRI5qOANav_NAVqAERs0aLJ8oBL3VNc4,6153
|
|
25
|
-
anemoi/datasets/create/chunks.py,sha256=c7ufk-EamAGqxOI4ScTFlBzdEiH6V1R0f0SPavtZ2Xw,2457
|
|
26
|
-
anemoi/datasets/create/config.py,sha256=Tq9kJ-bKhYSTWCXNa8lZIJpO3RteZfCr5hQVM12IgD0,8892
|
|
27
|
-
anemoi/datasets/create/patch.py,sha256=YkDiFGV0DDg4WShVrIHhtRaAp9c82mANnR93YTVl36o,4171
|
|
28
|
-
anemoi/datasets/create/persistent.py,sha256=V3agRYKbmYqAyhsznsgC3PLSoFbFCSCXqcQZvvJfVTw,4381
|
|
29
|
-
anemoi/datasets/create/size.py,sha256=5fIF0yo63dTowojfeG9-MNkgypP5SA94WralxTZwxw4,1055
|
|
30
|
-
anemoi/datasets/create/utils.py,sha256=3vRCPOrW0a7ZVx7gsflORwab74LV_BVVkgo_3SgyLpw,3347
|
|
31
|
-
anemoi/datasets/create/writer.py,sha256=6XSIgNwKkjrkdnSvr69mXD8McjT3iYJ0d1rOnxaGuCQ,1394
|
|
32
|
-
anemoi/datasets/create/zarr.py,sha256=0DkHwKaBpvTOrU1KmScLEfff_KfT1Rw5DXiRMD2d3Ws,5506
|
|
33
|
-
anemoi/datasets/create/functions/__init__.py,sha256=qeoEndq4f0gosfyfb-t0CZcLdngJ4GlZIgGs0bp9j0U,1965
|
|
34
|
-
anemoi/datasets/create/functions/filters/__init__.py,sha256=SP6ReV1WYIf2Typf1FUaRHhphFGpU9kBoYtI-bYdu5U,395
|
|
35
|
-
anemoi/datasets/create/functions/filters/empty.py,sha256=EGLufFcNFoqIXTZj7jQFjtFahMfgCVWj6W5j--u5Q-Q,636
|
|
36
|
-
anemoi/datasets/create/functions/filters/noop.py,sha256=5YqumPxlGDOZOrYWayLr8PTycVWG2X_0PmoFi3Hj584,458
|
|
37
|
-
anemoi/datasets/create/functions/filters/orog_to_z.py,sha256=PZwqiTVBLlwp2yuHCW_D8Epcb0fPNjzuYYtmL3Gu1XY,1658
|
|
38
|
-
anemoi/datasets/create/functions/filters/pressure_level_relative_humidity_to_specific_humidity.py,sha256=jjmocA4WDKCAL49QUFk_3S0JRiPMmeVM7Wlxmfr1v6c,1857
|
|
39
|
-
anemoi/datasets/create/functions/filters/pressure_level_specific_humidity_to_relative_humidity.py,sha256=e8LvXUq-qNKJrcjb1DSUXaPeFfxcWxFjGAkm47cOnE8,1855
|
|
40
|
-
anemoi/datasets/create/functions/filters/rename.py,sha256=cDF3xmdhwzIZn_nwaO3hxG4fb2vpKtJtmy0ZdLGXyHI,2481
|
|
41
|
-
anemoi/datasets/create/functions/filters/rotate_winds.py,sha256=GZq8DFbwOxeROvPS5qVKlYuXq8xKbCAwlZprS6I04Hc,2429
|
|
42
|
-
anemoi/datasets/create/functions/filters/single_level_dewpoint_to_relative_humidity.py,sha256=X5HbuMHFQoC2v_SYH4S7ocWFqV4JQUUGybvtyP-twaA,1719
|
|
43
|
-
anemoi/datasets/create/functions/filters/single_level_relative_humidity_to_dewpoint.py,sha256=pTM5Hwsi9yeuBmz66m3Zlmr554USoLzgzMMGSMh4BmM,1908
|
|
44
|
-
anemoi/datasets/create/functions/filters/single_level_relative_humidity_to_specific_humidity.py,sha256=BnuLrIFcOh_qJBmxwdJqjGqoH0ca5zyKdZgF6QPmJY8,4090
|
|
45
|
-
anemoi/datasets/create/functions/filters/single_level_specific_humidity_to_relative_humidity.py,sha256=xqfklEwCqrQlhU6NV8vlVEZdY-hN3SpPpcNny2geVUI,12686
|
|
46
|
-
anemoi/datasets/create/functions/filters/speeddir_to_uv.py,sha256=d5t78GToTTXCb1S3HyhTJ2tuwZDnk7UBsHPV4Wn4M_w,2249
|
|
47
|
-
anemoi/datasets/create/functions/filters/sum.py,sha256=_f_xyIAbGdKoCXdd5zO7XOL2AHq_c04DFO8s6PhRR8I,1979
|
|
48
|
-
anemoi/datasets/create/functions/filters/unrotate_winds.py,sha256=tDFXUSF2flD83W7GgwP1RoVXBUO0445DvQdImulzDzA,2429
|
|
49
|
-
anemoi/datasets/create/functions/filters/uv_to_speeddir.py,sha256=niNuTSmyxLn4MGeNL1lowl5M0dH7har-flXy3ZtmKPM,1762
|
|
50
|
-
anemoi/datasets/create/functions/filters/wz_to_w.py,sha256=SbTYE6rRjObR-sJEDYyc0-1Kw39zZOAheGMznD7Ic9A,2161
|
|
51
|
-
anemoi/datasets/create/functions/sources/__init__.py,sha256=TMm8LerGY7--b0AMUqnz07ZGo-F7I9FF0DGlozcTtSg,1364
|
|
52
|
-
anemoi/datasets/create/functions/sources/accumulations.py,sha256=lOICpg8T1sKn7n0X0EkMrNDFBYIqmHYSF_-_LYIEPaw,12527
|
|
53
|
-
anemoi/datasets/create/functions/sources/constants.py,sha256=GaiUpJPYupiLWl8O9GEZ9KmlD88pH6dlBiUVrhNl_uA,918
|
|
54
|
-
anemoi/datasets/create/functions/sources/eccc_fstd.py,sha256=pcF-N9IarrXuoZ85lmKRbESr8QsSc2VWxUGKT9aNw_M,597
|
|
55
|
-
anemoi/datasets/create/functions/sources/empty.py,sha256=YTpOJ3rcb_eS9CbnpwPWBR9r1APIAaG6a_N803YFZFE,500
|
|
56
|
-
anemoi/datasets/create/functions/sources/forcings.py,sha256=p442lCOXm8TJFRlP0mgwZujveo9gCtdAGLS4KSIqYfk,661
|
|
57
|
-
anemoi/datasets/create/functions/sources/grib.py,sha256=BSieYEnoG92-8lPlrK7CIaGX7qozpkixqHarucDZtLk,4543
|
|
58
|
-
anemoi/datasets/create/functions/sources/hindcasts.py,sha256=AWtSW_VoeWIjwjojyAL8FskKMq9fTUfnQ1OI30_J2qA,1677
|
|
59
|
-
anemoi/datasets/create/functions/sources/mars.py,sha256=AXz2q1XhvIEVtj0gJNWqcZNkyvXSL-8r6i93GhnmGn4,8890
|
|
60
|
-
anemoi/datasets/create/functions/sources/netcdf.py,sha256=GZvd8-d9lQFQ6sJL1usJPtnVqRz2UWqJOX3Fup1CAcI,547
|
|
61
|
-
anemoi/datasets/create/functions/sources/opendap.py,sha256=vkbk14-1PFwN9o1wlGROLoF3P-t9WtUVSum6aW_2JoM,545
|
|
62
|
-
anemoi/datasets/create/functions/sources/recentre.py,sha256=cCA4TIdRp5r7PaGe7skOuwB1Np9-FcuRX1JXIpUSuyc,1825
|
|
63
|
-
anemoi/datasets/create/functions/sources/source.py,sha256=aJHT0USXm52X_Kk_ObXlRJ_xc_1H7g3BG0I2Iumz6h8,1437
|
|
64
|
-
anemoi/datasets/create/functions/sources/tendencies.py,sha256=z8iDelu0vvDE8S-Rus6nqg3FIsZNJhojW17ALwkRPxc,4123
|
|
65
|
-
anemoi/datasets/create/functions/sources/xarray_kerchunk.py,sha256=8evD6Sype3ffCbmQ0jMBpgR97UeNvkTB5rwchhy4YzY,1446
|
|
66
|
-
anemoi/datasets/create/functions/sources/xarray_zarr.py,sha256=3JvoGfQZ4NCUcfxDAbNZOL7z2VRNJzr1H3r8dsWbrgk,545
|
|
67
|
-
anemoi/datasets/create/functions/sources/zenodo.py,sha256=rPL9uNPeFTdI9XvVEahtHkxzE18MyrjNXZjpt_sNeH4,1251
|
|
68
|
-
anemoi/datasets/create/functions/sources/xarray/__init__.py,sha256=byu5zPP_4b7CjgSKvO3iL4xyZPmdoEVX93Tl7LBZc0c,3174
|
|
69
|
-
anemoi/datasets/create/functions/sources/xarray/coordinates.py,sha256=-FkcAaio2KumOd20eb1hLv9rRhjnu-CyqtqzrMsZx18,6213
|
|
70
|
-
anemoi/datasets/create/functions/sources/xarray/field.py,sha256=VfEuY-o1KZS1Bn4l7pR8FCx9hTtDbzKzPqJfwunwvRE,3816
|
|
71
|
-
anemoi/datasets/create/functions/sources/xarray/fieldlist.py,sha256=3wCLbdqpPlBlzJHKp_ETxAochPA9iFDyF94JVn1DOB8,6281
|
|
72
|
-
anemoi/datasets/create/functions/sources/xarray/flavour.py,sha256=6mqldGyx40Zgy4_VkuGWKgrSuPbWKe__nmEradQO5qg,14855
|
|
73
|
-
anemoi/datasets/create/functions/sources/xarray/grid.py,sha256=OuLBVv_CdgtLgGACpqhjX8fwtYzM7tfJiwUOXbG_ifw,3644
|
|
74
|
-
anemoi/datasets/create/functions/sources/xarray/metadata.py,sha256=zbbb0ssKhZJvogLJ1WPJMBVVHl40GjHWbmE6RzLwAz4,4336
|
|
75
|
-
anemoi/datasets/create/functions/sources/xarray/patch.py,sha256=k1v7bUs-sO7-431T0bh5CSTE1FtgjhIlaPQ2-kSpc2E,1051
|
|
76
|
-
anemoi/datasets/create/functions/sources/xarray/time.py,sha256=jGnaupnNQr9x4F7ijahzxtMQltC5fLbrEKajq5dIxR8,6458
|
|
77
|
-
anemoi/datasets/create/functions/sources/xarray/variable.py,sha256=IdxZGOu1DMaUVlDGyVHuZiGUsN4buJoxexSFUD_NyFg,5029
|
|
78
|
-
anemoi/datasets/create/input/__init__.py,sha256=cAwfW9AQiG2PfmZ2Irll7HX8HyiC0Nk1Q9OhoQ84ZAg,1625
|
|
79
|
-
anemoi/datasets/create/input/action.py,sha256=SApZApq-_mlOwk1NTERgQlPdPL8lBlIk6rxYX3JBw_E,3857
|
|
80
|
-
anemoi/datasets/create/input/concat.py,sha256=DwxgoTSTqNDsVcX5btUBAA7vXtX3G5m-zJ-jDrmAC-c,3279
|
|
81
|
-
anemoi/datasets/create/input/context.py,sha256=ohpbdlX7HKVR9peaX_yhx089AeJdhKLPsvPDttcz-uE,1748
|
|
82
|
-
anemoi/datasets/create/input/data_sources.py,sha256=lXBD9gJ1EbInKElhUSY7HKz_9wnep9N2RzFJPDcoFbw,2493
|
|
83
|
-
anemoi/datasets/create/input/empty.py,sha256=1rWFpHiKIUa-YhlmSSSU0R8dlUVQ9qFVDyJH1NrMmtU,980
|
|
84
|
-
anemoi/datasets/create/input/filter.py,sha256=TmUEGFl4hkeXvUeVAwnowO0uEOQ0vn0DQZIhslc2C0Q,2068
|
|
85
|
-
anemoi/datasets/create/input/function.py,sha256=F5GQgbtFYmyqFAgNGoGDuWw-xqkcCLzuu20n1TT4GfA,3719
|
|
86
|
-
anemoi/datasets/create/input/join.py,sha256=wQP1-vVg4as-R5i3pstgK6HmTJAY7WyWYhCEF6FIU1c,1991
|
|
87
|
-
anemoi/datasets/create/input/misc.py,sha256=r7NC_QRYA8iiJJbSFgQnNuixymATK0CPZknGxgYcLOk,1975
|
|
88
|
-
anemoi/datasets/create/input/pipe.py,sha256=KfPCtiqyfqkXbmC-2LTqHkCQ7bJY46XMvNDnp9QeHTQ,1344
|
|
89
|
-
anemoi/datasets/create/input/repeated_dates.py,sha256=59EvJ_cQwA-p_42cmMFy3pBAAWV0xwPg4E3q2PIofcM,7461
|
|
90
|
-
anemoi/datasets/create/input/result.py,sha256=AW6BGDQkrL1XQLXt-h-3lzFOCrVgXjAm3SYk2ZlDfrE,20016
|
|
91
|
-
anemoi/datasets/create/input/step.py,sha256=CoowF9mc3kepT8XQ2ObxO750rnQEkYNTviIHQ1m-4UA,2886
|
|
92
|
-
anemoi/datasets/create/input/template.py,sha256=Vgi4wQ1aeswLbji0fIzshYhISmzdrt7b0BmgeJJjYGc,1859
|
|
93
|
-
anemoi/datasets/create/input/trace.py,sha256=DYXMSnwKqOIx0XWZTKNJojWz4EqaFLknTh6ysxsW9uY,2198
|
|
94
|
-
anemoi/datasets/create/statistics/__init__.py,sha256=Z3UXauDVYyfNjsBvfJGjK1unnxEkqNIfpjLCQCiLS2k,12994
|
|
95
|
-
anemoi/datasets/create/statistics/summary.py,sha256=wmnz4fZkr6fomXgI8JlMutU8gakfrXTc5ixf3Np7gZA,3385
|
|
96
|
-
anemoi/datasets/data/__init__.py,sha256=AW1-Ycj77pWQsZcDGsp0pgTS5rFW6XC4CzuUEIUPAIk,1558
|
|
97
|
-
anemoi/datasets/data/complement.py,sha256=hTvA_zTGIHAvZYPv1npVpRpxPg8nXbNTEBAU8r33rlc,5105
|
|
98
|
-
anemoi/datasets/data/concat.py,sha256=udtYINuoLOEYYKhi_VpG2-emv80pwZbFAZKwNwXJk3s,5244
|
|
99
|
-
anemoi/datasets/data/dataset.py,sha256=mKUwGn_4Rz_Q-RDiCrGjzc0GQGZAWg8xIu-nTs1mcMM,17936
|
|
100
|
-
anemoi/datasets/data/debug.css,sha256=z2X_ZDSnZ9C3pyZPWnQiEyAxuMxUaxJxET4oaCImTAQ,211
|
|
101
|
-
anemoi/datasets/data/debug.py,sha256=IjCMwtAvknF51PCl_YRYgMZB2iX_9DC5DKILNgl_UHQ,6300
|
|
102
|
-
anemoi/datasets/data/ensemble.py,sha256=7ognsmoHDGw0cCs3hsARoV32J1qlQys6iUCJ7XSrARI,2923
|
|
103
|
-
anemoi/datasets/data/fill_missing.py,sha256=4btLi-D-hFTsS_57_gIC1nK5AVifAO-V4M-fqMrtrxk,4636
|
|
104
|
-
anemoi/datasets/data/forwards.py,sha256=P9DfSY5B9w9gtkKfV6TIzXel_LY83g-2nEreJy2rYkU,8916
|
|
105
|
-
anemoi/datasets/data/grids.py,sha256=p7_nT7RLH6uKcxeAzQiGYk9lFxU_OOikDrwlb2rdEqI,15765
|
|
106
|
-
anemoi/datasets/data/indexing.py,sha256=9lycQXSqUIbYj52JlFv0w_Gf6soVZnbVGswYMvGPpqs,4773
|
|
107
|
-
anemoi/datasets/data/interpolate.py,sha256=D27lSH8yNhm0aoO0U3UoRbr3kni7OWXSu_X4jCbIrA0,4137
|
|
108
|
-
anemoi/datasets/data/join.py,sha256=IG9Bj4o4Z25cl5YGMqtl75UuSZCWIJwGIUB0fsfnkE8,5456
|
|
109
|
-
anemoi/datasets/data/masked.py,sha256=eAVGVmQR7tWsd3xXYGXGyq28uRLwL50vOXWTNNdHxl0,4530
|
|
110
|
-
anemoi/datasets/data/merge.py,sha256=dr0sX2ufm-qOgOAMV5oh8qQwPvSdYbU-mhux6u-cmQw,5547
|
|
111
|
-
anemoi/datasets/data/misc.py,sha256=lYRE-vfRIra9bhyG3-kdruoQvxyYWaE9EN9qTFoM7bA,11074
|
|
112
|
-
anemoi/datasets/data/missing.py,sha256=SWEjiC1usBjZtlKMr73uKetnoQZoflVQVGqLP2gJR7A,7131
|
|
113
|
-
anemoi/datasets/data/rescale.py,sha256=wMU7tFZebnOqJJxaIGOqNqhpNKGsPNZMC1YxuiHvri4,4112
|
|
114
|
-
anemoi/datasets/data/select.py,sha256=XW_ohlhrF8FLe13pdM3DRZDxbHxntcsO0F56GRqZQY0,4293
|
|
115
|
-
anemoi/datasets/data/statistics.py,sha256=vBVrLpI2rLQHo-qRDBwTc1N9pWkVXYONU2wdhpp_5Gc,1619
|
|
116
|
-
anemoi/datasets/data/stores.py,sha256=4Ax_fA6OEwkDRVRIYfwFNbbQzbQVuiDquJolF7KfNZA,14320
|
|
117
|
-
anemoi/datasets/data/subset.py,sha256=M9oVdwjMdDEEtpri6qcGCTL9l6Xw2epA7DFusy9IOsg,4806
|
|
118
|
-
anemoi/datasets/data/unchecked.py,sha256=Vk9P3Y-JGgsWTcOhb878qV_dJv3lP4S-4I8rFWnRAJI,4278
|
|
119
|
-
anemoi/datasets/data/xy.py,sha256=YzAB12jq-IoCHcjbZlS4SJKLK8e2QvIIfPwHDgkH5vM,3568
|
|
120
|
-
anemoi/datasets/dates/__init__.py,sha256=wX2FvlmRfHV5HDmllIxwfrC1LuRlb7i6SguLLasP0l4,8042
|
|
121
|
-
anemoi/datasets/dates/groups.py,sha256=i7x8z0kv6E8qUfm1tMZR1aaOqNwQzEkV-VWpOvHjoX4,5390
|
|
122
|
-
anemoi/datasets/utils/__init__.py,sha256=hCW0QcLHJmE-C1r38P27_ZOvCLNewex5iQEtZqx2ckI,393
|
|
123
|
-
anemoi/datasets/utils/fields.py,sha256=l7xKOiRLgk9Eewykqu7xZP9xOajG2dx2CiDlGvBVejU,1411
|
|
124
|
-
anemoi_datasets-0.5.16.dist-info/LICENSE,sha256=8HznKF1Vi2IvfLsKNE5A2iVyiri3pRjRPvPC9kxs6qk,11354
|
|
125
|
-
anemoi_datasets-0.5.16.dist-info/METADATA,sha256=xUFtTUG3gGbmUBQsFjH_4v1UvKOZvhfI9E1f7aYpWc4,15604
|
|
126
|
-
anemoi_datasets-0.5.16.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
127
|
-
anemoi_datasets-0.5.16.dist-info/entry_points.txt,sha256=yR-o-4uiPEA_GLBL81SkMYnUoxq3CAV3hHulQiRtGG0,66
|
|
128
|
-
anemoi_datasets-0.5.16.dist-info/top_level.txt,sha256=DYn8VPs-fNwr7fNH9XIBqeXIwiYYd2E2k5-dUFFqUz0,7
|
|
129
|
-
anemoi_datasets-0.5.16.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|