def test_equality(self): name_1 = 'test_1' name_2 = 'test_2' f_type_1 = ft.FEATURE_TYPE_FLOAT_64 f_type_2 = ft.FEATURE_TYPE_FLOAT_32 fa_1 = ft.FeatureSource('Amount', ft.FEATURE_TYPE_FLOAT) fa_2 = ft.FeatureSource('Amount2', ft.FEATURE_TYPE_FLOAT) fs_1 = ft.FeatureSource('Source', ft.FEATURE_TYPE_STRING) fs_2 = ft.FeatureSource('Source2', ft.FEATURE_TYPE_STRING) ff_1 = ft.FeatureFilter('Filter', ft.FEATURE_TYPE_BOOL, feature_expression, [fs_1]) ff_2 = ft.FeatureFilter('Filter2', ft.FEATURE_TYPE_BOOL, feature_expression, [fs_2]) tp_1 = ft.TIME_PERIOD_DAY tp_2 = ft.TIME_PERIOD_WEEK tw_1 = 3 tw_2 = 4 ag_1 = ft.AGGREGATOR_COUNT ag_2 = ft.AGGREGATOR_STDDEV fg_1 = ft.FeatureGrouper(name_1, f_type_1, fa_1, fs_1, ff_1, tp_1, tw_1, ag_1) fg_9 = ft.FeatureGrouper(name_2, f_type_1, fa_1, fs_1, ff_1, tp_1, tw_1, ag_2) fg_2 = ft.FeatureGrouper(name_1, f_type_1, fa_1, fs_1, ff_1, tp_1, tw_1, ag_1) fg_3 = ft.FeatureGrouper(name_1, f_type_2, fa_1, fs_1, ff_1, tp_1, tw_1, ag_1) fg_4 = ft.FeatureGrouper(name_1, f_type_1, fa_1, fs_2, ff_1, tp_1, tw_1, ag_1) fg_5 = ft.FeatureGrouper(name_1, f_type_1, fa_1, fs_1, ff_2, tp_1, tw_1, ag_1) fg_6 = ft.FeatureGrouper(name_1, f_type_1, fa_1, fs_1, ff_1, tp_2, tw_1, ag_1) fg_7 = ft.FeatureGrouper(name_1, f_type_1, fa_1, fs_1, ff_1, tp_1, tw_2, ag_1) fg_8 = ft.FeatureGrouper(name_1, f_type_1, fa_1, fs_1, ff_1, tp_1, tw_1, ag_2) fg_10 = ft.FeatureGrouper(name_1, f_type_1, fa_2, fs_1, ff_1, tp_1, tw_1, ag_1) self.assertEqual(fg_1, fg_2, f'Should have been equal') self.assertNotEqual(fg_1, fg_9, f'Should not have been equal. Different Name') self.assertNotEqual(fg_1, fg_3, f'Should have been not equal. Different Type') self.assertNotEqual( fg_1, fg_10, f'Should have been not equal. Different Base Feature') self.assertNotEqual( fg_1, fg_4, f'Should not have been equal. Different Group Feature') self.assertNotEqual( fg_1, fg_5, f'Should not have been equal. Different Filter Feature') self.assertNotEqual( fg_1, fg_6, f'Should not have been equal. Different Time Period') self.assertNotEqual( fg_1, fg_7, f'Should not have been equal. Different Time Window') self.assertNotEqual( fg_1, fg_8, f'Should not have been equal. Different Aggregator')
def test_bad_non_bool_type(self): name = 'filter' f_type = ft.FEATURE_TYPE_INT_8 sf = ft.FeatureSource('Source', ft.FEATURE_TYPE_INT_16) par = [sf] with self.assertRaises(ft.FeatureDefinitionException): _ = ft.FeatureFilter(name, f_type, feature_expression, par)
def test_creation_base(self): name = 'test' f_type = ft.FEATURE_TYPE_FLOAT fa = ft.FeatureSource('Amount', ft.FEATURE_TYPE_FLOAT) fs = ft.FeatureSource('Source', ft.FEATURE_TYPE_STRING) ff = ft.FeatureFilter('Filter', ft.FEATURE_TYPE_BOOL, feature_expression, [fs]) tp = ft.TIME_PERIOD_DAY tw = 3 ag = ft.AGGREGATOR_COUNT f = ft.FeatureGrouper(name, f_type, fa, fs, ff, tp, tw, ag) self.assertIsInstance(f, ft.FeatureGrouper, f'Unexpected Type {type(f)}') self.assertEqual(f.name, name, f'Feature Name should be {name}') self.assertEqual(f.type, f_type, f'Feature Type should be {f_type}') self.assertEqual(f.group_feature, fs, f'Group should have been {fs}') self.assertEqual(f.filter_feature, ff, f'Filter should have been {ff}') self.assertEqual(f.time_period, tp, f'TimePeriod should have been {tp}') self.assertEqual(f.time_window, tw, f'TimeWindow should have been {tw}') self.assertEqual(f.aggregator, ag, f'Aggregator should have been {ag}') self.assertEqual(len(f.embedded_features), 3, 'Should have had 3 embedded features') self.assertEqual(f.learning_category, ft.LEARNING_CATEGORY_CONTINUOUS, f'String should have learning type cont')
def creation_not_float_bad(self): name = 'test' f_type = ft.FEATURE_TYPE_STRING fa = ft.FeatureSource('Amount', ft.FEATURE_TYPE_FLOAT) fs = ft.FeatureSource('Source', ft.FEATURE_TYPE_STRING) ff = ft.FeatureFilter('Filter', ft.FEATURE_TYPE_BOOL, feature_expression, [fs]) tp = ft.TIME_PERIOD_DAY tw = 3 ag = ft.AGGREGATOR_COUNT with self.assertRaises(TypeError): _ = ft.FeatureGrouper(name, f_type, fa, fs, ff, tp, tw, ag) with self.assertRaises(ft.FeatureDefinitionException): # base is not a float _ = ft.FeatureGrouper(name, ft.FEATURE_TYPE_FLOAT, fs, fs, ff, tp, tw, ag)
def test_creation_base(self): name = 'filter' f_type = ft.FEATURE_TYPE_BOOL sf = ft.FeatureSource('Source', ft.FEATURE_TYPE_INT_16) par = [sf] ff = ft.FeatureFilter(name, f_type, feature_expression, par) self.assertIsInstance(ff, ft.FeatureFilter, f'Not expected type {type(ff)}') self.assertEqual(ff.name, name, f'Feature Name should be {name}') self.assertEqual(ff.type, f_type, f'Feature Type incorrect. Got {ff.type}') self.assertEqual(len(ff.embedded_features), len(par), f'Should have had {len(par)} embedded features') self.assertEqual(ff.embedded_features[0], par[0], f'Embedded Features should have been the parameters') self.assertEqual( ff.expression, feature_expression, f'Should have gotten the expression. Got {ff.expression}') self.assertEqual(ff.param_features, par, f'Did not get the parameters {ff.param_features}') self.assertIsInstance(hash(ff), int, f'Hash function not working')