def test_transformer_with_multiple_expression(self): test_df = pd.DataFrame( { 'code': [1, 2, 3, 4, 1, 2, 3], 'b': [4, 5, 6, 7, 6, 5, 4], 'c': [9, 8, 7, 6, 5, 4, 3] }, index=[1, 1, 1, 1, 2, 2, 2], dtype=float) expression1 = SecurityMovingMax(20, 'b') expression2 = SecurityMovingMin(20, 'c') expression3 = SecurityMovingMax(20, 'b') + SecurityMovingMin(20, 'c') calculated = transform(test_df, [expression1, expression2, expression3], cols=['factor1', 'factor2', 'factor3'], category_field='code') expected = [13., 13., 13., 13., 11., 9, 9.] np.testing.assert_array_almost_equal(calculated['factor3'], expected) np.testing.assert_array_almost_equal( calculated['factor1'] + calculated['factor2'], calculated['factor3'])
def test_transformer_without_category_name(self): test_df = pd.DataFrame({'b': [4, 5, 6, 7, 6, 5, 4], 'c': [9, 8, 7, 6, 5, 4, 3]}, index=[1, 2, 3, 4, 5, 6, 7], dtype=float) expression = SecurityMovingMax(20, 'b') + SecurityMovingMinimum(20, 'c') calculated = transform(test_df, [expression], cols=['user_factor']) expected = [13., 13., 13., 13., 12., 11., 10.] np.testing.assert_array_almost_equal(calculated['user_factor'], expected)
def test_transformer_with_category_group_totally_different(self): test_df = pd.DataFrame({'code': [1, 2, 3, 4, 5, 6, 7], 'b': [4, 5, 6, 7, 6, 5, 4], 'c': [9, 8, 7, 6, 5, 4, 3]}, index=[1, 1, 1, 1, 2, 2, 2], dtype=float) expression = SecurityMovingAverage(2, 'b') calculated = transform(test_df, [expression], cols=['ma'], category_field='code') expected = [4., 5., 6., 7., 6., 5., 4.] np.testing.assert_array_almost_equal(calculated['ma'], expected)
def test_transformer_with_category_for_comparing(): test_df = pd.DataFrame( { 'code': [1, 2, 3, 4, 1, 2, 3], 'b': [4, 5, 6, 7, 6, 5, 4], 'c': [9, 8, 7, 6, 5, 4, 3] }, index=[1, 1, 1, 1, 2, 2, 2], dtype=float) value_holder = SecurityLatestValueHolder('b') > 4. calculated = transform(test_df, [value_holder], cols=['filter'], category_field='code') expected = [0., 1., 1., 1., 1., 1., 0.] np.testing.assert_array_almost_equal(expected, calculated['filter'])
def test_transformer_with_category_value(self): test_df = pd.DataFrame({'code': [1, 2, 3, 4, 1, 2, 3], 'b': [4, 5, 6, 7, 6, 5, 4], 'c': [9, 8, 7, 6, 5, 4, 3]}, index=[1, 1, 1, 1, 2, 2, 2], dtype=float) value_holder = SecurityLatestValueHolder('b') filter = SecurityLatestValueHolder('b') >= 5 filtered_value_holder = value_holder[filter] calculated = transform(test_df, [filtered_value_holder], cols=['filtered_b'], category_field='code') self.assertTrue(np.all(calculated['filtered_b'] >= 5)) expected = test_df[test_df.b >= 5] np.testing.assert_array_almost_equal(expected.b, calculated['filtered_b']) np.testing.assert_array_equal(expected.code, calculated['code'])