Skip to content

Commit 126d7df

Browse files
committed
ENH : implement __getitem__ for Cycler
Implement `__getitem__` for Cycler by broadcasting down to the lists in the transposed data. Raises on trying to use anything else but a slice. Numpy-style fancy slicing might be worth adding. Adding integer slicing is probably of minilmal value.
1 parent 2ffc5e1 commit 126d7df

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

lib/matplotlib/cycler.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,15 @@ def _from_iter(cls, label, itr):
9494
ret._keys = set([label])
9595
return ret
9696

97+
def __getitem__(self, key):
98+
# TODO : maybe add numpy style fancy slicing
99+
if isinstance(key, slice):
100+
trans = self._transpose()
101+
return reduce(add, (cycler(k, v[key])
102+
for k, v in six.iteritems(trans)))
103+
else:
104+
raise ValueError("Can only use slices with Cycler.__getitem__")
105+
97106
def __iter__(self):
98107
if self._right is None:
99108
return iter(self._left)

lib/matplotlib/tests/test_cycler.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import six
55
from six.moves import zip
6-
from matplotlib.cycler import cycler
6+
from matplotlib.cycler import cycler, Cycler
77
from nose.tools import assert_equal, assert_raises
88
from itertools import product
99
from operator import add, iadd, mul, imul
@@ -110,3 +110,18 @@ def test_mul_fails():
110110
assert_raises(TypeError, mul, c1, 2.0)
111111
assert_raises(TypeError, mul, c1, 'a')
112112
assert_raises(TypeError, mul, c1, [])
113+
114+
115+
def test_getitem():
116+
c1 = cycler('lw', range(15))
117+
for slc in (slice(None, None, None),
118+
slice(None, None, -1),
119+
slice(1, 5, None),
120+
slice(0, 5, 2)):
121+
yield _cycles_equal, c1[slc], cycler('lw', range(15)[slc])
122+
123+
124+
def test_fail_getime():
125+
c1 = cycler('lw', range(15))
126+
assert_raises(ValueError, Cycler.__getitem__, c1, 0)
127+
assert_raises(ValueError, Cycler.__getitem__, c1, [0, 1])

0 commit comments

Comments
 (0)