Skip to content

Commit 425b344

Browse files
committed
[data_array] Catch oob exceptions for Range dimension slices
1 parent 7db7001 commit 425b344

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

nixio/data_array.py

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
from enum import Enum
1212
import numpy as np
1313

14+
from nixio.exceptions.exceptions import OutOfBounds
15+
1416
from .data_view import DataView
1517
from .data_set import DataSet
1618
from .entity import Entity
@@ -360,13 +362,28 @@ def get_slice(self, positions, extents=None, mode=DataSliceMode.Index):
360362
def _get_slice_bydim(self, positions, extents):
361363
dpos, dext = [], []
362364
for dim, pos, ext in zip(self.dimensions, positions, extents):
363-
if dim.dimension_type in (DimensionType.Sample,
364-
DimensionType.Range):
365-
dpos.append(dim.index_of(pos, mode=IndexMode.GreaterOrEqual))
366-
dext.append(dim.index_of(pos + ext) - dpos[-1])
365+
if dim.dimension_type == DimensionType.Sample:
366+
start_pos = dim.index_of(pos, mode=IndexMode.GreaterOrEqual)
367+
extent = dim.index_of(pos + ext) - start_pos
368+
elif dim.dimension_type == DimensionType.Range:
369+
try:
370+
start_pos = dim.index_of(pos, mode=IndexMode.GreaterOrEqual)
371+
extent = dim.index_of(pos + ext) - start_pos
372+
except IndexError:
373+
start_pos = -1
374+
extent = -1
375+
except Exception as e:
376+
raise e
367377
elif dim.dimension_type == DimensionType.Set:
368-
dpos.append(int(pos))
369-
dext.append(int(ext))
378+
start_pos = int(pos)
379+
extent = int(ext)
380+
else:
381+
raise IncompatibleDimensions(f"Unknown dimension type: {dim.dimension_type}")
382+
383+
if extent < 0:
384+
return DataView(self, None)
385+
dpos.append(start_pos)
386+
dext.append(extent)
370387
slices = tuple(slice(p, p + e) for p, e in zip(dpos, dext))
371388
return DataView(self, slices)
372389

0 commit comments

Comments
 (0)