From f093b2fb592eeadb819ef69074a678ea18c2c37c Mon Sep 17 00:00:00 2001 From: Eddie Hebert Date: Mon, 6 Jan 2014 16:10:51 -0500 Subject: [PATCH] MAINT: Adjust for comparison changes in Python 3. Use date sorted sources instead, instead of sorting with second argument of Event, etc. since the `heapq.merge` behavior is using the second part of the tuple, thus requiring a richer set of comparison methods, which would only be used in the test context. Use `date_sorted_sources` instead, so that sorting is done on algo time and source id. --- tests/test_perf_tracking.py | 20 ++++++++++---------- zipline/utils/factory.py | 12 ++++++++---- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/tests/test_perf_tracking.py b/tests/test_perf_tracking.py index f52b2ad2..296dd1ff 100644 --- a/tests/test_perf_tracking.py +++ b/tests/test_perf_tracking.py @@ -49,7 +49,9 @@ tradingday = datetime.timedelta(hours=6, minutes=30) def create_txn(event, price, amount): mock_order = Order(None, None, event.sid, id=None) - return create_transaction(event, mock_order, price, amount) + txn = create_transaction(event, mock_order, price, amount) + txn.source_id = 'MockTransactionSource' + return txn def benchmark_events_in_range(sim_params): @@ -69,12 +71,10 @@ def calculate_results(host, events): perf_tracker = perf.PerformanceTracker(host.sim_params) - all_events = heapq.merge( - ((event.dt, event) for event in events), - ((event.dt, event) for event in host.benchmark_events)) + all_events = date_sorted_sources(events, host.benchmark_events) - filtered_events = [(date, filt_event) for (date, filt_event) - in all_events if date <= events[-1].dt] + filtered_events = [(filt_event.dt, filt_event) for filt_event + in all_events if filt_event.dt <= events[-1].dt] filtered_events.sort(key=lambda x: x[0]) grouped_events = itertools.groupby(filtered_events, lambda x: x[0]) results = [] @@ -1135,12 +1135,10 @@ class TestPerformanceTracker(unittest.TestCase): orders = [event for event in events if event.type == DATASOURCE_TYPE.ORDER] - all_events = (msg[1] for msg in heapq.merge( - ((event.dt, event) for event in events), - ((event.dt, event) for event in benchmark_events))) + all_events = date_sorted_sources(events, benchmark_events) filtered_events = [filt_event for filt_event - in all_events if event.dt <= end_dt] + in all_events if filt_event.dt <= end_dt] filtered_events.sort(key=lambda x: x.dt) grouped_events = itertools.groupby(filtered_events, lambda x: x.dt) perf_messages = [] @@ -1172,6 +1170,7 @@ class TestPerformanceTracker(unittest.TestCase): amount=-25, dt=event.dt ) + order.source_id = 'MockOrderSource' yield order yield event txn = Transaction( @@ -1182,6 +1181,7 @@ class TestPerformanceTracker(unittest.TestCase): commission=0.50, order_id=order.id ) + txn.source_id = 'MockTransactionSource' yield txn else: yield event diff --git a/zipline/utils/factory.py b/zipline/utils/factory.py index 16b371fe..db0ae182 100644 --- a/zipline/utils/factory.py +++ b/zipline/utils/factory.py @@ -141,7 +141,8 @@ def create_dividend(sid, payment, declared_date, ex_date, pay_date): 'ex_date': ex_date.replace(hour=0, minute=0, second=0, microsecond=0), 'pay_date': pay_date.replace(hour=0, minute=0, second=0, microsecond=0), - 'type': DATASOURCE_TYPE.DIVIDEND + 'type': DATASOURCE_TYPE.DIVIDEND, + 'source_id': 'MockDividendSource' }) return div @@ -152,7 +153,8 @@ def create_split(sid, ratio, date): 'sid': sid, 'ratio': ratio, 'dt': date.replace(hour=0, minute=0, second=0, microsecond=0), - 'type': DATASOURCE_TYPE.SPLIT + 'type': DATASOURCE_TYPE.SPLIT, + 'source_id': 'MockSplitSource' }) @@ -162,7 +164,8 @@ def create_txn(sid, price, amount, datetime): 'amount': amount, 'dt': datetime, 'price': price, - 'type': DATASOURCE_TYPE.TRANSACTION + 'type': DATASOURCE_TYPE.TRANSACTION, + 'source_id': 'MockTransactionSource' }) return txn @@ -172,7 +175,8 @@ def create_commission(sid, value, datetime): 'dt': datetime, 'type': DATASOURCE_TYPE.COMMISSION, 'cost': value, - 'sid': sid + 'sid': sid, + 'source_id': 'MockCommissionSource' }) return txn