Skip to content

Commit 76fab1b

Browse files
authored
Merge pull request #3246 from emma58/fix-linear-repn-div-0
Fix division-by-0 bug in linear walker
2 parents ed6296b + cfc6951 commit 76fab1b

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

Diff for: pyomo/repn/linear.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ def _handle_division_constant_constant(visitor, node, arg1, arg2):
292292

293293

294294
def _handle_division_ANY_constant(visitor, node, arg1, arg2):
295-
arg1[1].multiplier /= arg2[1]
295+
arg1[1].multiplier = apply_node_operation(node, (arg1[1].multiplier, arg2[1]))
296296
return arg1
297297

298298

Diff for: pyomo/repn/tests/test_linear.py

+16
Original file line numberDiff line numberDiff line change
@@ -1436,6 +1436,22 @@ def test_errors_propagate_nan(self):
14361436
m.z = Var()
14371437
m.y.fix(1)
14381438

1439+
expr = (m.x + 1) / m.p
1440+
cfg = VisitorConfig()
1441+
with LoggingIntercept() as LOG:
1442+
repn = LinearRepnVisitor(*cfg).walk_expression(expr)
1443+
self.assertEqual(
1444+
LOG.getvalue(),
1445+
"Exception encountered evaluating expression 'div(1, 0)'\n"
1446+
"\tmessage: division by zero\n"
1447+
"\texpression: (x + 1)/p\n",
1448+
)
1449+
self.assertEqual(repn.multiplier, 1)
1450+
self.assertEqual(str(repn.constant), 'InvalidNumber(nan)')
1451+
self.assertEqual(len(repn.linear), 1)
1452+
self.assertEqual(str(repn.linear[id(m.x)]), 'InvalidNumber(nan)')
1453+
self.assertEqual(repn.nonlinear, None)
1454+
14391455
expr = m.y + m.x + m.z + ((3 * m.x) / m.p) / m.y
14401456
cfg = VisitorConfig()
14411457
with LoggingIntercept() as LOG:

0 commit comments

Comments
 (0)