Skip to content

Commit 14ef1d3

Browse files
Joe Jevnikllllllllll
authored andcommitted
ENH: add repr to MultiDimensionalDataset
1 parent 1d9aeae commit 14ef1d3

File tree

2 files changed

+52
-16
lines changed

2 files changed

+52
-16
lines changed

tests/pipeline/test_multidimensional_dataset.py

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,31 @@
2121

2222

2323
class TestMultiDimensionalDataSet(ZiplineTestCase):
24+
def test_repr(self):
25+
class MD1(MultiDimensionalDataSet):
26+
extra_dims = [('dim_0', [])]
27+
28+
expected_repr = (
29+
"<MultiDimensionalDataSet: 'MD1', extra_dims=['dim_0']>"
30+
)
31+
assert_equal(repr(MD1), expected_repr)
32+
33+
class MD2(MultiDimensionalDataSet):
34+
extra_dims = [('dim_0', []), ('dim_1', [])]
35+
36+
expected_repr = (
37+
"<MultiDimensionalDataSet: 'MD2', extra_dims=['dim_0', 'dim_1']>"
38+
)
39+
assert_equal(repr(MD2), expected_repr)
40+
41+
class MD3(MultiDimensionalDataSet):
42+
extra_dims = [('dim_1', []), ('dim_0', [])]
43+
44+
expected_repr = (
45+
"<MultiDimensionalDataSet: 'MD3', extra_dims=['dim_1', 'dim_0']>"
46+
)
47+
assert_equal(repr(MD3), expected_repr)
48+
2449
def test_cache(self):
2550
class MD1(MultiDimensionalDataSet):
2651
extra_dims = [('dim_0', ['a', 'b', 'c'])]
@@ -270,12 +295,14 @@ class Child(Parent):
270295
def make_expected_msg(ds, attr):
271296
return dedent(
272297
"""\
273-
Attempted to access column from a MultiDimensionalDataSet.
274-
You must first slice the dataset along the extra dimensions like:
298+
Attempted to access column {c} from multi-dimensional dataset {d}:
299+
300+
To work with multi-dimensional datasets, you must first choose a
301+
slice using the ``slice`` method:
275302
276-
%s.slice(...).%s
277-
""", # noqa
278-
) % (ds, attr)
303+
{d}.slice(...).{c}
304+
""".format(c=attr, d=ds), # noqa
305+
)
279306

280307
expected_msg = make_expected_msg('Parent', 'column_0')
281308
with assert_raises_str(AttributeError, expected_msg):

zipline/pipeline/data/dataset.py

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -521,14 +521,17 @@ def __init__(self, dataset_name, column_name):
521521
self.column_name = column_name
522522

523523
def __str__(self):
524+
# NOTE: when ``aggregate`` is added, remember to update this message
524525
return dedent(
525526
"""\
526-
Attempted to access column from a MultiDimensionalDataSet.
527-
You must first slice the dataset along the extra dimensions like:
527+
Attempted to access column {c} from multi-dimensional dataset {d}:
528528
529-
%s.slice(...).%s
530-
"""
531-
) % (self.dataset_name, self.column_name)
529+
To work with multi-dimensional datasets, you must first choose a
530+
slice using the ``slice`` method:
531+
532+
{d}.slice(...).{c}
533+
""".format(c=self.column_name, d=self.dataset_name)
534+
)
532535

533536

534537
class _MultiDimensionalDataSetColumn(object):
@@ -596,6 +599,12 @@ class BaseSlice(self._SliceType):
596599
self._slice_cache = {}
597600
return self
598601

602+
def __repr__(self):
603+
return '<MultiDimensionalDataSet: %r, extra_dims=%r>' % (
604+
self.__name__,
605+
list(self.extra_dims),
606+
)
607+
599608

600609
_base = with_metaclass(
601610
MultiDimensionalDataSetMeta,
@@ -672,12 +681,12 @@ class SomeDataSet(MultiDimensionalDataSet):
672681

673682
_SliceType = MultiDimensionalDataSetSlice
674683

675-
@abc.abstractproperty
676-
def extra_dims(self):
677-
raise NotImplementedError(
678-
'extra_dims must be specified as a sequence of tuples of dimension'
679-
' name and the set of values on the given dimension',
680-
)
684+
@type.__call__
685+
class extra_dims(object):
686+
__isabstractmethod__ = True
687+
688+
def __get__(self, instance, owner):
689+
return []
681690

682691
@classmethod
683692
def _canonical_key(cls, args, kwargs):

0 commit comments

Comments
 (0)