Skip to content

Commit 131c5d6

Browse files
committed
Fall back on .vindex when basic indexing fails
Addresses zarr-developers#657 This matches NumPy behaviour in that basic, boolean, and vectorized integer (fancy) indexing are all accessible from `__{get,set}item__`. Users still have access to all the indexing methods if they want to be sure to use only basic indexing (integer + slices).
1 parent 7dc8b05 commit 131c5d6

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

zarr/core.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -658,8 +658,12 @@ def __getitem__(self, selection):
658658
659659
"""
660660

661-
fields, selection = pop_fields(selection)
662-
return self.get_basic_selection(selection, fields=fields)
661+
fields, pure_selection = pop_fields(selection)
662+
try:
663+
result = self.get_basic_selection(pure_selection, fields=fields)
664+
except IndexError:
665+
result = self.vindex[selection]
666+
return result
663667

664668
def get_basic_selection(self, selection=Ellipsis, out=None, fields=None):
665669
"""Retrieve data for an item or region of the array.
@@ -1209,8 +1213,11 @@ def __setitem__(self, selection, value):
12091213
12101214
"""
12111215

1212-
fields, selection = pop_fields(selection)
1213-
self.set_basic_selection(selection, value, fields=fields)
1216+
fields, pure_selection = pop_fields(selection)
1217+
try:
1218+
self.set_basic_selection(pure_selection, value, fields=fields)
1219+
except IndexError:
1220+
self.vindex[selection] = value
12141221

12151222
def set_basic_selection(self, selection, value, fields=None):
12161223
"""Modify data for an item or region of the array.

0 commit comments

Comments
 (0)