Skip to content

Commit

Permalink
LpConstraint should have its own name (#806)
Browse files Browse the repository at this point in the history
* LpConstraint should have its own name

* Add name to LpConstraint

* Add test for #805
  • Loading branch information
MBradbury authored Feb 26, 2025
1 parent 7c8aa93 commit ebbbfde
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 7 deletions.
16 changes: 9 additions & 7 deletions pulp/pulp.py
Original file line number Diff line number Diff line change
Expand Up @@ -1061,9 +1061,8 @@ def __init__(self, e=None, sense=const.LpConstraintEQ, name=None, rhs=None):
:param name: identifying string
:param rhs: numerical value of constraint target
"""
self.expr = (
e if isinstance(e, LpAffineExpression) else LpAffineExpression(e, name=name)
)
self.expr = e if isinstance(e, LpAffineExpression) else LpAffineExpression(e)
self.name = name
self.constant: float = self.expr.constant
if rhs is not None:
self.constant -= rhs
Expand Down Expand Up @@ -1265,12 +1264,15 @@ def fromDict(cls, _dict):
from_dict = fromDict

@property
def name(self):
return self.expr.name
def name(self) -> str | None:
return self.__name

@name.setter
def name(self, v):
self.expr.name = v
def name(self, name: str | None):
if name is not None:
self.__name = name.translate(LpAffineExpression.trans)
else:
self.__name = None

def isAtomic(self):
return len(self) == 1 and self.constant == 0 and next(iter(self.values())) == 1
Expand Down
17 changes: 17 additions & 0 deletions pulp/tests/test_pulp.py
Original file line number Diff line number Diff line change
Expand Up @@ -1775,6 +1775,23 @@ def test_regression_794(self):
self.assertEqual(str(rhs), f"s_{t-1} + x_{t} - {demands[t-1]}")
self.assertEqual(expr.constant, -rhs.constant)

def test_regression_805(self):
# See: https://github.com/coin-or/pulp/issues/805

e = LpAffineExpression(1)
self.assertIsNone(e.name)

c = LpConstraint(e, name="Test2")
self.assertEqual(c.name, "Test2")
self.assertIsNone(c.expr.name)

e = LpAffineExpression(1, name="Test1")
self.assertEqual(e.name, "Test1")

c = LpConstraint(e, name="Test2")
self.assertEqual(c.name, "Test2")
self.assertEqual(c.expr.name, "Test1")


class PULP_CBC_CMDTest(BaseSolverTest.PuLPTest):
solveInst = PULP_CBC_CMD
Expand Down

0 comments on commit ebbbfde

Please sign in to comment.