From 98a8fdfb0958e31df1c6cfa681d480137984acf1 Mon Sep 17 00:00:00 2001 From: Maya Tydykov Date: Fri, 27 Jan 2017 12:27:31 -0500 Subject: [PATCH] MAINT: determine core loader overwrite types dynamically TST: update test to reflect adjustment mapping change --- tests/pipeline/test_adjustment.py | 28 ++++++++++++++------------ zipline/lib/adjustment.pyx | 8 ++++---- zipline/pipeline/loaders/blaze/core.py | 6 ++++-- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/tests/pipeline/test_adjustment.py b/tests/pipeline/test_adjustment.py index d5c99c0e..69f8294a 100644 --- a/tests/pipeline/test_adjustment.py +++ b/tests/pipeline/test_adjustment.py @@ -51,20 +51,22 @@ class AdjustmentTestCase(TestCase): ) self.assertEqual(result, expected) - def test_unsupported_type(self): + def test_make_object_adjustment(self): class SomeClass(object): pass + my_value = SomeClass() - with self.assertRaises(TypeError) as e: - adj.make_adjustment_from_indices( - 1, 2, 3, 4, - adjustment_kind=adj.OVERWRITE, - value=SomeClass(), - ) - - exc = e.exception - expected_msg = ( - "Don't know how to make overwrite adjustments for values of type " - "%r." % SomeClass + result = adj.make_adjustment_from_indices( + 1, 2, 3, 4, + adjustment_kind=adj.OVERWRITE, + value=my_value, ) - self.assertEqual(str(exc), expected_msg) + + expected = adj.ObjectOverwrite( + first_row=1, + last_row=2, + first_col=3, + last_col=4, + value=my_value, + ) + self.assertEqual(result, expected) diff --git a/zipline/lib/adjustment.pyx b/zipline/lib/adjustment.pyx index aea8df5c..ebf0d4f2 100644 --- a/zipline/lib/adjustment.pyx +++ b/zipline/lib/adjustment.pyx @@ -29,6 +29,9 @@ cdef dict _float_adjustment_types = { cdef dict _datetime_adjustment_types = { OVERWRITE: Datetime64Overwrite, } +cdef dict _object_adjustment_types = { + OVERWRITE: ObjectOverwrite, +} cdef _is_float(object value): return isinstance(value, (float, float64)) @@ -68,10 +71,7 @@ cpdef choose_adjustment_type(AdjustmentKind adjustment_kind, object value): elif _is_datetime(value): return _datetime_adjustment_types[adjustment_kind] else: - raise TypeError( - "Don't know how to make overwrite " - "adjustments for values of type %r." % type(value), - ) + return _object_adjustment_types[adjustment_kind] else: raise ValueError("Unknown adjustment type %d." % adjustment_kind) diff --git a/zipline/pipeline/loaders/blaze/core.py b/zipline/pipeline/loaders/blaze/core.py index 00755078..7c4dcf80 100644 --- a/zipline/pipeline/loaders/blaze/core.py +++ b/zipline/pipeline/loaders/blaze/core.py @@ -182,7 +182,7 @@ from zipline.pipeline.loaders.utils import ( ) from zipline.pipeline.sentinels import NotSpecified from zipline.lib.adjusted_array import AdjustedArray, can_represent_dtype -from zipline.lib.adjustment import Float64Overwrite +from zipline.lib.adjustment import make_adjustment_from_indices, OVERWRITE from zipline.utils.input_validation import ( expect_element, ensure_timezone, @@ -815,7 +815,9 @@ def overwrite_from_dates(asof, dense_dates, sparse_dates, asset_idx, value): return first, last = asset_idx - yield Float64Overwrite(first_row, last_row, first, last, value) + yield make_adjustment_from_indices( + first_row, last_row, first, last, OVERWRITE, value + ) def adjustments_from_deltas_no_sids(dense_dates,