diff --git a/linopy/objective.py b/linopy/objective.py index cbfdd84a..426a6879 100644 --- a/linopy/objective.py +++ b/linopy/objective.py @@ -99,9 +99,6 @@ def expression(self, expr): if isinstance(expr, (list, tuple)): expr = self.model.linexpr(*expr) - if isinstance(expr, Objective): - expr = expr.expression - if not isinstance( expr, (expressions.LinearExpression, expressions.QuadraticExpression) ): diff --git a/test/test_objective.py b/test/test_objective.py index 7cded4eb..f3ec9524 100644 --- a/test/test_objective.py +++ b/test/test_objective.py @@ -111,12 +111,24 @@ def test_add(linear_objective, quadratic_objective): assert isinstance(obj.expression, QuadraticExpression) +def test_add_expr(linear_objective, quadratic_objective): + obj = linear_objective + quadratic_objective.expression + assert isinstance(obj, Objective) + assert isinstance(obj.expression, QuadraticExpression) + + def test_sub(linear_objective, quadratic_objective): obj = quadratic_objective - linear_objective assert isinstance(obj, Objective) assert isinstance(obj.expression, QuadraticExpression) +def test_sub_epxr(linear_objective, quadratic_objective): + obj = quadratic_objective - linear_objective.expression + assert isinstance(obj, Objective) + assert isinstance(obj.expression, QuadraticExpression) + + def test_mul(quadratic_objective): obj = quadratic_objective * 2 assert isinstance(obj, Objective) @@ -135,9 +147,21 @@ def test_truediv(quadratic_objective): assert isinstance(obj.expression, QuadraticExpression) +def test_truediv_false(quadratic_objective): + with pytest.raises(ValueError): + quadratic_objective / quadratic_objective + + def test_repr(linear_objective, quadratic_objective): assert isinstance(linear_objective.__repr__(), str) assert isinstance(quadratic_objective.__repr__(), str) assert "Linear" in linear_objective.__repr__() assert "Quadratic" in quadratic_objective.__repr__() + + +def test_objective_constant(): + m = Model() + linear_expr = LinearExpression(None, m) + 1 + with pytest.raises(ValueError): + m.objective = Objective(linear_expr, m) diff --git a/test/test_optimization.py b/test/test_optimization.py index 72c3d06f..4322c5d7 100644 --- a/test/test_optimization.py +++ b/test/test_optimization.py @@ -294,6 +294,9 @@ def test_default_setting(model, solver, io_api): assert status == "ok" assert np.isclose(model.objective.value, 3.3) + with pytest.warns(DeprecationWarning): + assert np.isclose(model.objective_value, 3.3) + @pytest.mark.parametrize("solver,io_api", params) def test_default_setting_sol_and_dual_accessor(model, solver, io_api):