Skip to content
Open
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
8 changes: 6 additions & 2 deletions nibabel/cifti2/cifti2_axes.py
Original file line number Diff line number Diff line change
Expand Up @@ -481,6 +481,8 @@ def iter_structures(self):
- slice to select the data associated with the brain structure from the tensor
- :class:`BrainModelAxis` covering that specific brain structure
"""
if self.size == 0:
return
idx_start = 0
start_name = self.name[idx_start]
for idx_current, name in enumerate(self.name):
Expand Down Expand Up @@ -567,14 +569,16 @@ def surface_mask(self):
"""
(N, ) boolean array which is true for any element on the surface
"""
return np.vectorize(lambda name: name in self.nvertices.keys())(self.name)
return np.vectorize(lambda name: name in self.nvertices.keys(), otypes=[bool])(self.name)

@property
def volume_mask(self):
"""
(N, ) boolean array which is true for any element on the surface
"""
return np.vectorize(lambda name: name not in self.nvertices.keys())(self.name)
return np.vectorize(lambda name: name not in self.nvertices.keys(), otypes=[bool])(
self.name
)

_affine = None

Expand Down
21 changes: 21 additions & 0 deletions nibabel/cifti2/tests/test_axes.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,27 @@
use_label = {0: ('something', (0.2, 0.4, 0.1, 0.5)), 1: ('even better', (0.3, 0.8, 0.43, 0.9))}


@pytest.mark.parametrize('shape', [(4,), (2, 3, 4)])
def test_empty_brain_model_mask(shape):
axis = axes.BrainModelAxis.from_mask(np.zeros(shape, dtype=bool), name='CortexLeft')
assert len(axis) == 0
assert axis.surface_mask.shape == (0,)
assert axis.volume_mask.shape == (0,)
assert axis.surface_mask.dtype == bool
assert axis.volume_mask.dtype == bool
assert list(axis.iter_structures()) == []


@pytest.mark.parametrize('selection', [slice(0, 0), np.array([False, False])])
def test_empty_brain_model_selection(selection):
axis = axes.BrainModelAxis.from_surface([0, 1], 4, name='CortexLeft')
empty = axis[selection]
assert len(empty) == 0
assert list(empty.iter_structures()) == []
assert empty + axis == axis
assert axis + empty == axis


def get_brain_models():
"""
Generates a set of practice BrainModelAxis axes
Expand Down