Skip to content

Commit d83fbf6

Browse files
committed
added support for ellipsis in __(set|get)item__
1 parent 63bcb95 commit d83fbf6

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

larray/core.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -880,6 +880,16 @@ def full_key(self, key):
880880
if not isinstance(key, (tuple, dict)):
881881
key = (key,)
882882

883+
# handle keys containing an Ellipsis
884+
if isinstance(key, tuple):
885+
num_ellipses = key.count(Ellipsis)
886+
if num_ellipses > 1:
887+
raise ValueError("cannot use more than one Ellipsis (...)")
888+
elif num_ellipses == 1:
889+
pos = key.index(Ellipsis)
890+
none_slices = (slice(None),) * (self.ndim - len(key) + 1)
891+
key = key[:pos] + none_slices + key[pos + 1:]
892+
883893
# handle keys containing ValueGroups (at potentially wrong places)
884894
if any(isinstance(axis_key, ValueGroup) for axis_key in key):
885895
#XXX: support ValueGroup without axis?

larray/tests/test_la.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,12 @@ def test_getitem(self):
596596
# single None slice
597597
self._assert_equal_raw(la[:], raw)
598598

599+
# only Ellipsis
600+
self._assert_equal_raw(la[...], raw)
601+
602+
# Ellipsis and VG
603+
self._assert_equal_raw(la[..., lipro159], raw[..., [0, 4, 8]])
604+
599605
# key with duplicate axes
600606
# la[[1, 5, 9], age['1,5,9']]
601607
self.assertRaises(ValueError, la.__getitem__, ([1, 5], age['1,5']))
@@ -650,6 +656,19 @@ def test_setitem_larray(self):
650656
raw[[1, 5, 9]] = raw[[2, 7, 3]] + 27.0
651657
self._assert_equal_raw(la, raw)
652658

659+
# 3) using ellipsis keys
660+
# only Ellipsis
661+
la = self.larray.copy()
662+
la[...] = 0
663+
self._assert_equal_raw(la, np.zeros_like(raw))
664+
665+
# Ellipsis and VG
666+
la = self.larray.copy()
667+
raw = self.array.copy()
668+
la[..., lipro['P01,P05,P09']] = 0
669+
raw[..., [0, 4, 8]] = 0
670+
self._assert_equal_raw(la, raw)
671+
653672
def test_setitem_ndarray(self):
654673
"""
655674
tests LArray.__setitem__(key, value) where value is a raw ndarray.

0 commit comments

Comments
 (0)