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
2 changes: 0 additions & 2 deletions src/earthkit/data/field/component/vertical.py
Original file line number Diff line number Diff line change
Expand Up @@ -356,8 +356,6 @@ class Vertical(VerticalBase):
metadata such as units and CF attributes.
"""

_level_parameters: Optional[LevelParameters] = None

def __init__(
self,
level: Union[int, float] = None,
Expand Down
10 changes: 5 additions & 5 deletions src/earthkit/data/field/grib/vertical.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class GribHybridLevelParameters(HybridLevelParametersBase):
def __init__(self, handle):
self._handle = handle

# TODO: this method should be cached
def number_of_levels(self):
coeff_num = self._handle.get("NV", default=None)
if coeff_num is not None:
Expand Down Expand Up @@ -170,11 +171,10 @@ def to_grib(self, component, handle=None):

# this tries to avoid writing the coefficients back to the handle if they are already
# present and correct, which can be expensive for large coefficient arrays. The check
# is not robust enough and should be improved.
# TODO: should be: if handle is not None and hasattr(component, "_level_parameters"): ?
if handle is not None and hasattr(component, "level_parameters"):
level_parameters = component._level_parameters # it seems nobody sets it to other than None!
if isinstance(level_parameters, GribFieldComponentHandler):
# is not robust enough, and should be improved.
if handle is not None and hasattr(component, "_coefficients"):
level_parameters = component._coefficients
if isinstance(level_parameters, GribHybridLevelParameters):
nv = handle.get("NV", default=None)
if level_parameters.coefficient_size() == nv:
return r
Expand Down
10 changes: 10 additions & 0 deletions tests/grib/test_grib_set_vertical.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,16 @@ def test_grib_set_vertical_hybrid_1(fl_type):
assert len(A) == 138
assert len(B) == 138

with temp_file() as tmp:
f.to_target("file", tmp)
f_saved = from_source("file", tmp).to_fieldlist()[0]
assert f_saved.vertical.level() == 2
assert f_saved.vertical.level_type() == "hybrid"
assert f_saved.vertical.number_of_levels() == 137
A1, B1 = f_saved.vertical.coefficients()
assert np.allclose(A, A1)
assert np.allclose(B, B1)


@pytest.mark.parametrize("fl_type", ["file"])
@pytest.mark.parametrize("coeff_mode", ["object", "tuple"])
Expand Down
Loading