ENH: Make aliases filters, factors, and classifiers to give them their methods

This commit is contained in:
Joe Jevnik
2016-10-28 15:04:18 -04:00
parent 13c8139d45
commit c8e40a3736
8 changed files with 175 additions and 43 deletions
+54
View File
@@ -0,0 +1,54 @@
import numpy as np
from zipline.testing.predicates import assert_equal
from zipline.pipeline import Classifier, Factor, Filter
from zipline.utils.numpy_utils import float64_dtype, int64_dtype
from .base import BasePipelineTestCase
class WithAlias(object):
def test_alias(self):
f = self.Term()
alias = f.alias('ayy lmao')
f_values = np.random.RandomState(5).randn(5, 5)
self.check_terms(
terms={
'f_alias': alias,
},
expected={
'f_alias': f_values,
},
initial_workspace={f: f_values},
mask=self.build_mask(np.ones((5, 5))),
)
def test_repr(self):
assert_equal(
repr(self.Term().alias('ayy lmao')),
"Aliased%s(..., name='ayy lmao')" % self.Term.__base__.__name__,
)
class TestFactorAlias(WithAlias, BasePipelineTestCase):
class Term(Factor):
dtype = float64_dtype
inputs = ()
window_length = 0
class TestFilterAlias(WithAlias, BasePipelineTestCase):
class Term(Filter):
inputs = ()
window_length = 0
class TestClassifierAlias(WithAlias, BasePipelineTestCase):
class Term(Classifier):
dtype = int64_dtype
inputs = ()
window_length = 0
missing_value = -1
+1 -22
View File
@@ -20,14 +20,13 @@ from numpy import (
rot90,
where,
)
from numpy.random import randn, RandomState, seed
from numpy.random import randn, seed
from zipline.errors import UnknownRankMethod
from zipline.lib.labelarray import LabelArray
from zipline.lib.rank import masked_rankdata_2d
from zipline.lib.normalize import naive_grouped_rowwise_apply as grouped_apply
from zipline.pipeline import Classifier, Factor, Filter
from zipline.pipeline.term import Alias
from zipline.pipeline.factors import (
Returns,
RSI,
@@ -1059,23 +1058,3 @@ class TestWindowSafety(TestCase):
self.assertFalse(F().demean().window_safe)
self.assertFalse(F(window_safe=False).demean().window_safe)
self.assertTrue(F(window_safe=True).demean().window_safe)
class TestAlias(BasePipelineTestCase):
def test_alias_factor(self):
f = F()
a = Alias(f)
f_values = RandomState(5).randn(5, 5)
self.check_terms(
terms={
'f_alias': a,
},
expected={
'f_alias': f_values,
},
initial_workspace={f: f_values},
mask=self.build_mask(ones((5, 5))),
)