def test_fromfuncs(self): _vol_ave_int = 2 _sma_window = 4 _skipatstart = _sma_window - 1 _n_sess = 3 _smafunc = pn.expand(pn.tech.sma, 'Adj Close') _funcs = [ pn.decorate(partial(pn.tech.ratio_to_ave, _vol_ave_int), title='MyRelVol'), pn.decorate(partial(_smafunc, window=_sma_window), title='MySMA')] _features = pn.data.feat.fromfuncs(_funcs, _n_sess, self.equity_data, skipatstart=_skipatstart) self.assertEqual(len(_features.index), len(self.equity_data.index) - _n_sess - _skipatstart + 1) for i in range(len(_features.index)): self.assertAlmostEqual(_features.iloc[i, 0], 1.) self.assertEqual(_features.index[i], self.equity_data.index[i + _n_sess + _skipatstart - 1]) for j in range(_n_sess): # relative volumes all between 1.0 and 2.0 self.assertTrue(_features.iloc[i, j + 1] < 2.) self.assertTrue(_features.iloc[i, j + 1] > 1.) # SMAs are means of values like 4, 6, 8, 10 self.assertAlmostEqual(_features.iloc[i, j + _n_sess + 1], 1. + _sma_window + 2. * (i + j)) # properties of relative volumes if i >= 1: # strictly decreasing self.assertTrue(_features.iloc[i, 1] < _features.iloc[i - 1, 1]) # columns match with offset self.assertAlmostEqual(_features.iloc[i, 1], _features.iloc[i - 1, 2]) self.assertAlmostEqual(_features.iloc[i, 2], _features.iloc[i - 1, 3])
def test_labeledfeatures(self): _n_featsess = 2 _ave_int = 3 _pred_int = 1 _featfuncs = [] # growth and relative volume functions _featfuncs.append( pn.decorate(partial(pn.tech.growth, selection='Adj Close'), title='G')) _featfuncs.append( pn.decorate(partial(pn.tech.ratio_to_ave, _ave_int), title='V')) _featfunc = pn.decorate( partial(pn.data.feat.fromfuncs, _featfuncs, _n_featsess, skipatstart=_ave_int), _ave_int + _n_featsess - 1) _labfunc = pn.decorate( partial(pn.data.lab.growth, _pred_int, 'Adj Close'), _pred_int) features, labels = pn.data.labeledfeatures(self.equity_data, _featfunc, _labfunc) self.assertEqual(features.values.shape[0], labels.values.shape[0]) self.assertEqual(features.values.shape[1], 5) for i in range(1, len(features.index)): self.assertAlmostEqual(features.loc[:, '-1 G'].values[i], features.loc[:, '0 G'].values[i - 1]) self.assertAlmostEqual(features.loc[:, '-1 V'].values[i], features.loc[:, '0 V'].values[i - 1]) for i in range(5): self.assertAlmostEqual(features.loc[:, '0 G'].values[i], (i + 5.) / (i + 4.)) self.assertAlmostEqual(features.loc[:, '0 V'].values[i], (2. * i + 9.) / (2. * i + 5.)) self.assertAlmostEqual(labels.values[i], (i + 6.) / (i + 5.))
def test_decorate(self): def _f(): return 0, 1 self.assertEqual(pn.decorate(_f, 2, 3)(), (0, 1, 2, 3)) self.assertEqual(pn.decorate(lambda x: x * 2, 0)(3), (6, 0)) self.assertEqual(pn.decorate(lambda x: x, 4, 5)('foo'), ('foo', 4, 5)) self.assertEqual(pn.decorate(_f, 'foo')(), (0, 1, 'foo')) _g = pn.decorate(_f, 2, foo='bar') self.assertEqual(_g.foo, 'bar') self.assertFalse(hasattr(_f, 'foo')) self.assertEqual(_g(), (0, 1, 2))
def test_labeledfeatures(self): _n_featsess = 2 _ave_int = 3 _pred_int = 1 _featfuncs = [] # growth and relative volume functions _featfuncs.append(pn.decorate(partial(pn.tech.growth, selection='Adj Close'), title='G')) _featfuncs.append(pn.decorate(partial(pn.tech.ratio_to_ave, _ave_int), title='V')) _featfunc = pn.decorate(partial(pn.data.feat.fromfuncs, _featfuncs, _n_featsess, skipatstart=_ave_int), _ave_int + _n_featsess - 1) _labfunc = pn.decorate(partial(pn.data.lab.growth, _pred_int, 'Adj Close'), _pred_int) features, labels = pn.data.labeledfeatures(self.equity_data, _featfunc, _labfunc) self.assertEqual(features.values.shape[0], labels.values.shape[0]) self.assertEqual(features.values.shape[1], 5) for i in range(1, len(features.index)): self.assertAlmostEqual(features.loc[:, '-1 G'].values[i], features.loc[:, '0 G'].values[i - 1]) self.assertAlmostEqual(features.loc[:, '-1 V'].values[i], features.loc[:, '0 V'].values[i - 1]) for i in range(5): self.assertAlmostEqual(features.loc[:, '0 G'].values[i], (i + 5.) / (i + 4.)) self.assertAlmostEqual(features.loc[:, '0 V'].values[i], (2. * i + 9.) / (2. * i + 5.)) self.assertAlmostEqual(labels.values[i], (i + 6.) / (i + 5.))