Skip to content

Commit ee0d11b

Browse files
committed
Throws error when calling add_linear_constraint for a quadratic expression
1 parent 1addaf8 commit ee0d11b

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

include/pyoptinterface/solver_common.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ class OnesideLinearConstraintMixin
3838
ConstraintSense sense, CoeffT rhs,
3939
const char *name = nullptr)
4040
{
41+
if (function.degree() >= 2)
42+
{
43+
throw std::runtime_error("add_linear_constraint expects linear expression but receives a quadratic expression.");
44+
}
4145
ScalarAffineFunction f(function);
4246
return get_base()->add_linear_constraint(f, sense, rhs, name);
4347
}

tests/test_simple_opt.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import pyoptinterface as poi
22
from pytest import approx
3+
import pytest
34

45

56
def test_simple_opt(model_interface):
@@ -134,3 +135,13 @@ def test_constraint_primal_dual(model_interface):
134135

135136
dual_val = model.get_constraint_attribute(con1, poi.ConstraintAttribute.Dual)
136137
assert dual_val == approx(0.5)
138+
139+
140+
def test_add_quadratic_expr_as_linear_throws_error(model_interface):
141+
model = model_interface
142+
143+
xs = model.add_m_variables(10)
144+
x2_sum = poi.quicksum(x * x for x in xs.flat)
145+
146+
with pytest.raises(RuntimeError, match="add_linear_constraint"):
147+
model.add_linear_constraint(x2_sum <= 1.0)

0 commit comments

Comments
 (0)