Skip to content

Commit ebbbfde

Browse files
authored
LpConstraint should have its own name (#806)
* LpConstraint should have its own name * Add name to LpConstraint * Add test for #805
1 parent 7c8aa93 commit ebbbfde

File tree

2 files changed

+26
-7
lines changed

2 files changed

+26
-7
lines changed

pulp/pulp.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,9 +1061,8 @@ def __init__(self, e=None, sense=const.LpConstraintEQ, name=None, rhs=None):
10611061
:param name: identifying string
10621062
:param rhs: numerical value of constraint target
10631063
"""
1064-
self.expr = (
1065-
e if isinstance(e, LpAffineExpression) else LpAffineExpression(e, name=name)
1066-
)
1064+
self.expr = e if isinstance(e, LpAffineExpression) else LpAffineExpression(e)
1065+
self.name = name
10671066
self.constant: float = self.expr.constant
10681067
if rhs is not None:
10691068
self.constant -= rhs
@@ -1265,12 +1264,15 @@ def fromDict(cls, _dict):
12651264
from_dict = fromDict
12661265

12671266
@property
1268-
def name(self):
1269-
return self.expr.name
1267+
def name(self) -> str | None:
1268+
return self.__name
12701269

12711270
@name.setter
1272-
def name(self, v):
1273-
self.expr.name = v
1271+
def name(self, name: str | None):
1272+
if name is not None:
1273+
self.__name = name.translate(LpAffineExpression.trans)
1274+
else:
1275+
self.__name = None
12741276

12751277
def isAtomic(self):
12761278
return len(self) == 1 and self.constant == 0 and next(iter(self.values())) == 1

pulp/tests/test_pulp.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1775,6 +1775,23 @@ def test_regression_794(self):
17751775
self.assertEqual(str(rhs), f"s_{t-1} + x_{t} - {demands[t-1]}")
17761776
self.assertEqual(expr.constant, -rhs.constant)
17771777

1778+
def test_regression_805(self):
1779+
# See: https://github.com/coin-or/pulp/issues/805
1780+
1781+
e = LpAffineExpression(1)
1782+
self.assertIsNone(e.name)
1783+
1784+
c = LpConstraint(e, name="Test2")
1785+
self.assertEqual(c.name, "Test2")
1786+
self.assertIsNone(c.expr.name)
1787+
1788+
e = LpAffineExpression(1, name="Test1")
1789+
self.assertEqual(e.name, "Test1")
1790+
1791+
c = LpConstraint(e, name="Test2")
1792+
self.assertEqual(c.name, "Test2")
1793+
self.assertEqual(c.expr.name, "Test1")
1794+
17781795

17791796
class PULP_CBC_CMDTest(BaseSolverTest.PuLPTest):
17801797
solveInst = PULP_CBC_CMD

0 commit comments

Comments
 (0)