BUG: Interface of load_adjusted_array is to return a list of arrays

but MultiColumnLoader was returning a list of lists of arrays in some
cases.
This commit is contained in:
Richard Frank
2015-08-06 13:46:40 -04:00
parent 8528556970
commit 30847a10a7
4 changed files with 45 additions and 4 deletions
+41
View File
@@ -16,6 +16,7 @@ from pandas import (
Int64Index,
rolling_mean,
Timestamp,
Series,
)
from pandas.util.testing import assert_frame_equal
from testfixtures import TempDirectory
@@ -48,6 +49,7 @@ from zipline.utils.test_utils import (
make_rotating_asset_info,
make_simple_asset_info,
product_upper_triangle,
check_arrays,
)
@@ -430,3 +432,42 @@ class SyntheticBcolzTestCase(TestCase):
columns=assets,
),
)
class MultiColumnLoaderTestCase(TestCase):
def setUp(self):
self.assets = [1, 2, 3]
self.dates = date_range('2014-01-01', '2014-02-01', freq='D', tz='UTC')
asset_info = make_simple_asset_info(
self.assets,
start_date=self.dates[0],
end_date=self.dates[-1],
)
self.asset_finder = AssetFinder(asset_info)
def test_engine_with_multicolumn_loader(self):
open_, close = USEquityPricing.open, USEquityPricing.close
loader = MultiColumnLoader({
open_: ConstantLoader(dates=self.dates,
assets=self.assets,
constants={open_: 1}),
close: ConstantLoader(dates=self.dates,
assets=self.assets,
constants={close: 2})
})
engine = SimpleFFCEngine(loader, self.dates, self.asset_finder)
factor = RollingSumDifference()
result = engine.factor_matrix({'f': factor},
self.dates[2],
self.dates[-1])
self.assertIsNotNone(result)
self.assertEqual({'f'}, set(result.columns))
# (close - open) * window = (1 - 2) * 3 = -3
# skipped 2 from the start, so that the window is full
check_arrays(result['f'],
Series([-3] * len(self.assets) * (len(self.dates) - 2)))
+1 -1
View File
@@ -79,7 +79,7 @@ class DataFrameFFCLoaderTestCase(TestCase):
dates_slice = slice(None, 10, None)
sids_slice = slice(1, 3, None)
adj_array = loader.load_adjusted_array(
[adj_array] = loader.load_adjusted_array(
[USEquityPricing.close],
self.mask.iloc[dates_slice, sids_slice]
)
+2 -2
View File
@@ -176,10 +176,10 @@ class DataFrameFFCLoader(FFCLoader):
good_dates = (date_indexer != -1)
good_assets = (assets_indexer != -1)
return adjusted_array(
return [adjusted_array(
# Pull out requested columns/rows from our baseline data.
data=self.baseline[ix_(date_indexer, assets_indexer)],
# Mask out requested columns/rows that didnt match.
mask=(good_assets & good_dates[:, None]) & mask_values,
adjustments=self.format_adjustments(dates, assets),
)
)]
+1 -1
View File
@@ -58,7 +58,7 @@ class MultiColumnLoader(FFCLoader):
loader = self._loaders[column]
except KeyError:
raise ValueError("Couldn't find loader for %s" % column)
out.append(loader.load_adjusted_array([column], mask))
out.extend(loader.load_adjusted_array([column], mask))
return out