Skip to content

Commit 4f8fed9

Browse files
authored
Fix isel on Dfsu 3d single timestep. (#828)
* Failing test * Fix error (+ minor refactoring) * Ignore/assert types * Not needed * Remove useless comment
1 parent 67bfc53 commit 4f8fed9

File tree

3 files changed

+21
-8
lines changed

3 files changed

+21
-8
lines changed

mikeio/dataset/_dataarray.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -804,12 +804,15 @@ def isel(
804804
spatial_axis = axis - 1 if self.dims[0] == "time" else axis
805805
geometry = self.geometry.isel(idx, axis=spatial_axis)
806806

807-
# TODO this is ugly
808807
if isinstance(geometry, _GeometryFMLayered):
809808
node_ids, _ = self.geometry._get_nodes_and_table_for_elements(
810809
idx, node_layers="all"
811810
)
812-
zn = self._zn[:, node_ids] # type: ignore
811+
assert isinstance(self._zn, np.ndarray)
812+
if self._zn.ndim == 2:
813+
zn = self._zn[:, node_ids]
814+
else:
815+
zn = self._zn[node_ids]
813816

814817
# reduce dims only if singleton idx
815818
dims = (

mikeio/spatial/_FM_geometry_layered.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -206,19 +206,18 @@ def _get_nodes_and_table_for_elements(
206206
207207
"""
208208
elem_tbl = np.empty(len(elements), dtype=np.dtype("O"))
209-
if (node_layers == "all") or self.is_2d:
209+
if node_layers == "all":
210210
for j, eid in enumerate(elements):
211-
elem_tbl[j] = np.asarray(self.element_table[eid])
211+
elem_tbl[j] = self.element_table[eid]
212212

213213
else:
214214
# 3D => 2D
215215
for j, eid in enumerate(elements):
216-
elem_nodes = np.asarray(self.element_table[eid])
217-
nn = len(elem_nodes)
218-
halfn = int(nn / 2)
216+
elem_nodes = self.element_table[eid]
217+
halfn = len(elem_nodes) // 2
219218
if node_layers == "bottom":
220219
elem_nodes = elem_nodes[:halfn]
221-
if node_layers == "top":
220+
elif node_layers == "top":
222221
elem_nodes = elem_nodes[halfn:]
223222
elem_tbl[j] = elem_nodes
224223

tests/test_dfsu3d.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -662,3 +662,14 @@ def test_write_3d_non_equidistant(tmp_path: Path) -> None:
662662

663663
# but getting the end time is not that expensive
664664
assert dfs.end_time == pd.Timestamp("2000-01-10")
665+
666+
667+
def test_isel_3d_single_time() -> None:
668+
ds = mikeio.Dfsu3D("tests/testdata/basin_3d.dfsu").read()
669+
ds1 = ds.isel(element=[0, 1])
670+
assert ds1.geometry.n_elements == 2
671+
672+
ds2 = ds.isel(time=-1)
673+
assert "time" not in ds2.dims
674+
ds3 = ds2.isel(element=[0, 1])
675+
assert ds3.geometry.n_elements == 2

0 commit comments

Comments
 (0)