From 32a400a9fbbed9e1be7b432f0b8c0fe8a77b0973 Mon Sep 17 00:00:00 2001 From: Richard Frank Date: Thu, 7 Apr 2016 12:52:06 -0400 Subject: [PATCH] BUG: Fixing bitness issues on 32-bit systems by being explicit with sizes --- tests/test_algorithm.py | 10 +++++----- tests/test_api_shim.py | 10 +++++----- tests/utils/daily_bar_writer.py | 8 +++++--- zipline/data/minute_bars.py | 10 +++++----- zipline/testing/core.py | 23 +++++++++++++---------- 5 files changed, 33 insertions(+), 28 deletions(-) diff --git a/tests/test_algorithm.py b/tests/test_algorithm.py index 700818d0..c93ea308 100644 --- a/tests/test_algorithm.py +++ b/tests/test_algorithm.py @@ -1131,15 +1131,15 @@ class TestBeforeTradingStart(TestCase): # Mergers and Dividends are not tested, but we need to have these # anyway mergers = pd.DataFrame({}, columns=['effective_date', 'ratio', 'sid']) - mergers.effective_date = mergers.effective_date.astype(int) - mergers.ratio = mergers.ratio.astype(float) - mergers.sid = mergers.sid.astype(int) + mergers.effective_date = mergers.effective_date.astype(np.int64) + mergers.ratio = mergers.ratio.astype(np.float64) + mergers.sid = mergers.sid.astype(np.int64) dividends = pd.DataFrame({}, columns=['ex_date', 'record_date', 'declared_date', 'pay_date', 'amount', 'sid']) - dividends.amount = dividends.amount.astype(float) - dividends.sid = dividends.sid.astype(int) + dividends.amount = dividends.amount.astype(np.float64) + dividends.sid = dividends.sid.astype(np.int64) adj_writer.write(splits, mergers, dividends) diff --git a/tests/test_api_shim.py b/tests/test_api_shim.py index d33c3e23..594a0a5a 100644 --- a/tests/test_api_shim.py +++ b/tests/test_api_shim.py @@ -203,15 +203,15 @@ class TestAPIShim(TestCase): # Mergers and Dividends are not tested, but we need to have these # anyway mergers = pd.DataFrame({}, columns=['effective_date', 'ratio', 'sid']) - mergers.effective_date = mergers.effective_date.astype(int) - mergers.ratio = mergers.ratio.astype(float) - mergers.sid = mergers.sid.astype(int) + mergers.effective_date = mergers.effective_date.astype(np.int64) + mergers.ratio = mergers.ratio.astype(np.float64) + mergers.sid = mergers.sid.astype(np.int64) dividends = pd.DataFrame({}, columns=['ex_date', 'record_date', 'declared_date', 'pay_date', 'amount', 'sid']) - dividends.amount = dividends.amount.astype(float) - dividends.sid = dividends.sid.astype(int) + dividends.amount = dividends.amount.astype(np.float64) + dividends.sid = dividends.sid.astype(np.int64) adj_writer.write(splits, mergers, dividends) diff --git a/tests/utils/daily_bar_writer.py b/tests/utils/daily_bar_writer.py index 344e664f..df69c55c 100644 --- a/tests/utils/daily_bar_writer.py +++ b/tests/utils/daily_bar_writer.py @@ -1,6 +1,7 @@ from numpy import ( float64, - uint32 + uint32, + int64, ) from bcolz import ctable @@ -37,8 +38,9 @@ class DailyBarWriterFromDataFrames(BcolzDailyBarWriter): return array.astype(uint32) elif colname == 'day': nanos_per_second = (1000 * 1000 * 1000) - self.check_uint_safe(arrmax.view(int) / nanos_per_second, colname) - return (array.view(int) / nanos_per_second).astype(uint32) + self.check_uint_safe(arrmax.view(int64) / nanos_per_second, + colname) + return (array.view(int64) / nanos_per_second).astype(uint32) @staticmethod def check_uint_safe(value, colname): diff --git a/zipline/data/minute_bars.py b/zipline/data/minute_bars.py index fbee5f4c..09c9d994 100644 --- a/zipline/data/minute_bars.py +++ b/zipline/data/minute_bars.py @@ -163,10 +163,10 @@ class BcolzMinuteBarMetadata(object): 'first_trading_day': str(self.first_trading_day.date()), 'market_opens': self.market_opens.values. astype('datetime64[m]'). - astype(int).tolist(), + astype(np.int64).tolist(), 'market_closes': self.market_closes.values. astype('datetime64[m]'). - astype(int).tolist(), + astype(np.int64).tolist(), 'ohlc_ratio': self.ohlc_ratio, } with open(self.metadata_path(rootdir), 'w+') as fp: @@ -603,10 +603,10 @@ class BcolzMinuteBarReader(object): self._market_opens = metadata.market_opens self._market_open_values = metadata.market_opens.values.\ - astype('datetime64[m]').astype(int) + astype('datetime64[m]').astype(np.int64) self._market_closes = metadata.market_closes self._market_close_values = metadata.market_closes.values.\ - astype('datetime64[m]').astype(int) + astype('datetime64[m]').astype(np.int64) self._ohlc_inverse = 1.0 / metadata.ohlc_ratio @@ -643,7 +643,7 @@ class BcolzMinuteBarReader(object): """ market_opens = self._market_opens.values.astype('datetime64[m]') market_closes = self._market_closes.values.astype('datetime64[m]') - minutes_per_day = (market_closes - market_opens).astype(int) + minutes_per_day = (market_closes - market_opens).astype(np.int64) early_indices = np.where( minutes_per_day != US_EQUITIES_MINUTES_PER_DAY - 1)[0] regular_closes = market_opens[early_indices] + timedelta64( diff --git a/zipline/testing/core.py b/zipline/testing/core.py index 4a236a3f..8a99b8d2 100644 --- a/zipline/testing/core.py +++ b/zipline/testing/core.py @@ -45,7 +45,8 @@ from zipline.utils.tradingcalendar import trading_days import numpy as np from numpy import ( float64, - uint32 + uint32, + int64, ) @@ -456,8 +457,9 @@ def make_trade_data_for_asset_info(dates, sids = asset_info.keys() date_field = 'day' if frequency == 'daily' else 'dt' - price_sid_deltas = np.arange(len(sids), dtype=float) * price_step_by_sid - price_date_deltas = np.arange(len(dates), dtype=float) * price_step_by_date + price_sid_deltas = np.arange(len(sids), dtype=float64) * price_step_by_sid + price_date_deltas = (np.arange(len(dates), dtype=float64) * + price_step_by_date) prices = (price_sid_deltas + price_date_deltas[:, None]) + price_start volume_sid_deltas = np.arange(len(sids)) * volume_step_by_sid @@ -723,8 +725,9 @@ class DailyBarWriterFromDataFrames(BcolzDailyBarWriter): return array.astype(uint32) elif colname == 'day': nanos_per_second = (1000 * 1000 * 1000) - self.check_uint_safe(arrmax.view(int) / nanos_per_second, colname) - return (array.view(int) / nanos_per_second).astype(uint32) + self.check_uint_safe(arrmax.view(int64) / nanos_per_second, + colname) + return (array.view(int64) / nanos_per_second).astype(uint32) @staticmethod def check_uint_safe(value, colname): @@ -1198,8 +1201,8 @@ def create_mock_adjustments(tempdir, days, splits=None, dividends=None, 'pay_date': np.array([], dtype='datetime64[ns]'), 'record_date': np.array([], dtype='datetime64[ns]'), 'declared_date': np.array([], dtype='datetime64[ns]'), - 'amount': np.array([], dtype=float), - 'sid': np.array([], dtype=int), + 'amount': np.array([], dtype=float64), + 'sid': np.array([], dtype=int64), } dividends = pd.DataFrame( data, @@ -1360,9 +1363,9 @@ def create_empty_splits_mergers_frame(): return pd.DataFrame( { # Hackery to make the dtypes correct on an empty frame. - 'effective_date': np.array([], dtype=int), - 'ratio': np.array([], dtype=float), - 'sid': np.array([], dtype=int), + 'effective_date': np.array([], dtype=int64), + 'ratio': np.array([], dtype=float64), + 'sid': np.array([], dtype=int64), }, index=pd.DatetimeIndex([]), columns=['effective_date', 'ratio', 'sid'],