Skip to content

Commit 28d39dc

Browse files
authored
Merge pull request #2857 from jsiirola/fix-pow-0
Resolve handling of {}**0 in LinearRepn/QuadraticRepn
2 parents 3e27bce + 3ff15b9 commit 28d39dc

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

pyomo/repn/linear.py

+2
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,8 @@ def _handle_pow_ANY_constant(visitor, node, arg1, arg2):
344344
visitor, None, ans, (_type, _arg.duplicate())
345345
)
346346
return ans
347+
elif exp == 0:
348+
return _CONSTANT, 1
347349
else:
348350
return _handle_pow_nonlinear(visitor, node, arg1, arg2)
349351

pyomo/repn/tests/test_linear.py

+12
Original file line numberDiff line numberDiff line change
@@ -852,6 +852,18 @@ def test_pow_expr(self):
852852
self.assertEqual(repn.linear, {id(m.x): 1})
853853
self.assertEqual(repn.nonlinear, None)
854854

855+
m.p = 0
856+
857+
cfg = VisitorConfig()
858+
repn = LinearRepnVisitor(*cfg).walk_expression(e)
859+
self.assertEqual(cfg.subexpr, {})
860+
self.assertEqual(cfg.var_map, {id(m.x): m.x})
861+
self.assertEqual(cfg.var_order, {id(m.x): 0})
862+
self.assertEqual(repn.multiplier, 1)
863+
self.assertEqual(repn.constant, 1)
864+
self.assertEqual(repn.linear, {})
865+
self.assertEqual(repn.nonlinear, None)
866+
855867
m.p = 2
856868

857869
cfg = VisitorConfig()

0 commit comments

Comments
 (0)