class PWLCurveModelTest(test_util.PWLFitTest, parameterized.TestCase): def test_simple_properties(self): model = model_util.PWLCurveModel('x', [(1, 10.0), (2, 20.0)]) self.assertEqual('x', model.feature_name) self.assertEqual('f_x', model.name) self.assertEqual('f_x', model.clean_name) @parameterized.named_parameters(( 'not too sensitive', model_util.PWLCurveModel('x', [(1, 10.0), (2, 20.0)]), model_util.PWLCurveModel('x', ((1, 10), (2, 20))), True, ), ( 'not a PWLCurveModel', model_util.PWLCurveModel('x', [(1, 10.0), (2, 20.0)]), 's', False, ), ( 'different points', model_util.PWLCurveModel('x', [(1, 10.0), (2, 20.0)]), model_util.PWLCurveModel('x', [(1, 11.0), (2, 21.0)]), False, )) def test_eq(self, m1, m2, expected): self.assertEqual(expected, m1 == m2) def test_str_for_fx(self): self.assertEqual( model_util.PWLCurveModel('x', [(1, 10.0), (2, 20.0)], np.log), model_util.PWLCurveModel('x', [(1, 10.0), (2, 20.0)], 'log')) def test_eval(self): model = model_util.PWLCurveModel('x', [(1, 10.0), (2, 20.0)]) self.assert_allclose(np.array([10.0, 15.0, 20.0]), model.eval([1, 1.5, 2])) self.assert_allclose( np.array([10.0, 15.0, 20.0]), model.eval(pd.DataFrame({'x': [1, 1.5, 2]}))) def test_expr(self): model = model_util.PWLCurveModel('x', [(1, 10.0), (2, 20.0)]) self.assertEqual('PWLCurve("x", [(1, 10), (2, 20)])', model.expr()) @parameterized.named_parameters(( 'simple', 'PWLCurve("x", [(1, 10.0), (2, 20.0)])', transform.identity, ), ( 'fx', 'PWLCurve("x", [(1, 10.0), (2, 20.0)], fx="log")', np.log, ), ( 'extra spaces', 'PWLCurve( "x", [(1, 10.0), (2, 20.0)])', transform.identity, )) def test_from_expr(self, s, fx): model = model_util.PWLCurveModel('x', [(1, 10.0), (2, 20.0)], fx) self.assertEqual(model, model_util.PWLCurveModel.from_expr(s))
def test_from_expr(self, expr): model = model_util.AdditiveModel([ model_util.PWLCurveModel('x1', [(1, 1), (2, 2)]), model_util.EnumCurveModel('x2', { 1: 1, 2: 2 }), model_util.ColumnModel('x3') ], 'my_model') self.assertEqual(model, model_util.AdditiveModel.from_expr(expr, 'my_model'))
def test_eval(self): model = model_util.AdditiveModel([ model_util.PWLCurveModel('x1', [(1, 1), (2, 2)]), model_util.EnumCurveModel('x2', { 1: 10, 2: 20 }), model_util.ColumnModel('x3') ], 'my_model') df = pd.DataFrame({'x1': [1, 1, 2], 'x2': [1, 1, 2], 'x3': [3, 3, 3]}) self.assert_allclose(np.array([14, 14, 25]), model.eval(df))
def test_simple_properties(self): model = model_util.AdditiveModel([ model_util.PWLCurveModel('x1', [(1, 1), (2, 2)]), model_util.EnumCurveModel('x2', { 1: 1, 2: 2 }), model_util.ColumnModel('x3') ], 'my_model') self.assertEqual('my_model', model.name) self.assertEqual(['x1', 'x2', 'x3'], model.feature_names)
def test_expr(self): model = model_util.AdditiveModel([ model_util.PWLCurveModel('x1', [(1, 1), (2, 2)]), model_util.EnumCurveModel('x2', { 1: 1, 2: 2 }), model_util.ColumnModel('x3') ], 'my_model') expr = """score = sum([ PWLCurve("x1", [(1, 1), (2, 2)]), EnumCurve("x2", {1: 1, 2: 2}), Column("x3"), ])""" self.assertEqual(expr, model.expr())
def test_simple_properties(self): model = model_util.PWLCurveModel('x', [(1, 10.0), (2, 20.0)]) self.assertEqual('x', model.feature_name) self.assertEqual('f_x', model.name) self.assertEqual('f_x', model.clean_name)
def test_no_duplicate_features_allowed(self): with self.assertRaisesRegex(ValueError, 'Duplicate submodels'): model_util.AdditiveModel([ model_util.ColumnModel('x1'), model_util.PWLCurveModel('x1', [(1, 1), (2, 2)]) ], 'my_model')
def test_from_expr(self, s, fx): model = model_util.PWLCurveModel('x', [(1, 10.0), (2, 20.0)], fx) self.assertEqual(model, model_util.PWLCurveModel.from_expr(s))
def test_expr(self): model = model_util.PWLCurveModel('x', [(1, 10.0), (2, 20.0)]) self.assertEqual('PWLCurve("x", [(1, 10), (2, 20)])', model.expr())
def test_eval(self): model = model_util.PWLCurveModel('x', [(1, 10.0), (2, 20.0)]) self.assert_allclose(np.array([10.0, 15.0, 20.0]), model.eval([1, 1.5, 2])) self.assert_allclose(np.array([10.0, 15.0, 20.0]), model.eval(pd.DataFrame({'x': [1, 1.5, 2]})))
def test_str_for_fx(self): self.assertEqual( model_util.PWLCurveModel('x', [(1, 10.0), (2, 20.0)], np.log), model_util.PWLCurveModel('x', [(1, 10.0), (2, 20.0)], 'log'))