Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
253 changes: 66 additions & 187 deletions docs/source/how-tos/xr_engine/xarray_engine_ensemble.ipynb

Large diffs are not rendered by default.

467 changes: 134 additions & 333 deletions docs/source/how-tos/xr_engine/xarray_engine_mono_variable.ipynb

Large diffs are not rendered by default.

5 changes: 2 additions & 3 deletions src/earthkit/data/field/component/ensemble.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,13 +144,12 @@ class Ensemble(EnsembleBase):
----------
member : str, int, optional
The ensemble member, by default None. Internally stored as a string,
so if an integer is provided, it will be converted to a string.
None is treated as "0".
valid non-string values will be converted to a string.
"""

def __init__(self, member=None) -> None:
if member is None:
self._member = "0"
self._member = None
elif isinstance(member, int):
self._member = str(member)
else:
Expand Down
2 changes: 2 additions & 0 deletions src/earthkit/data/field/grib/ensemble.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,10 @@ def _get(key, default=None):
return handle.get(key, default=default)

v = _get("number")
print("number", v)
if v is None:
v = _get("perturbationNumber")
print

return dict(
member=v,
Expand Down
3 changes: 2 additions & 1 deletion src/earthkit/data/sources/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
from earthkit.data.core.caching import cache_file
from earthkit.data.core.plugins import find_plugin
from earthkit.data.core.plugins import register as register_plugin
from earthkit.data.data.source import DefaultSourceData


class Source(Loader):
Expand Down Expand Up @@ -64,6 +63,8 @@ def graph(self, depth=0):

def to_data_object(self):
"""Convert this source into a data object, if possible."""
from earthkit.data.data.source import DefaultSourceData

return DefaultSourceData(self)


Expand Down
Binary file added tests/data/ens_none.grib
Binary file not shown.
15 changes: 15 additions & 0 deletions tests/field/test_ensemble_component.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,13 @@ def test_ensemble_component_alias_1():
assert r.realization() == "1"


def test_ensemble_component_alias_2():
r = Ensemble(member=None)
assert r.member() is None
assert r.realisation() is None
assert r.realization() is None


@pytest.mark.parametrize(
"input_d,ref",
[
Expand All @@ -35,6 +42,14 @@ def test_ensemble_component_alias_1():
],
("5",),
),
(
[
{"member": None},
{"realisation": None},
{"realization": None},
],
(None,),
),
],
)
def test_ensemble_component_from_dict_ok(input_d, ref):
Expand Down
24 changes: 21 additions & 3 deletions tests/grib/test_grib_ensemble.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,35 @@

import pytest
from grib_fixtures import (
FL_TYPES, # noqa: E402
load_grib_data, # noqa: E402
)


@pytest.mark.parametrize("fl_type", FL_TYPES)
# @pytest.mark.parametrize("fl_type", ["file"])
@pytest.mark.parametrize("fl_type", ["file"])
def test_grib_ensemble_1(fl_type):
ds, _ = load_grib_data("ens_50.grib", fl_type, folder="data")
f = ds[0]

assert f.ensemble.member() == "1"
assert f.ensemble.realization() == "1"
assert f.ensemble.realisation() == "1"


@pytest.mark.parametrize("fl_type", ["file"])
def test_grib_ensemble_2(fl_type):
ds, _ = load_grib_data("test.grib", fl_type)
f = ds[0]

assert f.ensemble.member() == "0"
assert f.ensemble.realization() == "0"
assert f.ensemble.realisation() == "0"


@pytest.mark.parametrize("fl_type", ["file"])
def test_grib_ensemble_3(fl_type):
ds, _ = load_grib_data("ens_none.grib", fl_type, folder="data")
f = ds[0]

assert f.ensemble.member() is None
assert f.ensemble.realization() is None
assert f.ensemble.realisation() is None
Loading