Skip to content

Commit

Permalink
Track change in general expression API (use arg(0) and not expr).
Browse files Browse the repository at this point in the history
  • Loading branch information
jsiirola committed Oct 18, 2023
1 parent 4267cbd commit 4c13589
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
2 changes: 1 addition & 1 deletion pyomo/core/expr/calculus/diff_with_pyomo.py
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ def _diff_GeneralExpression(node, val_dict, der_dict):
val_dict: ComponentMap
der_dict: ComponentMap
"""
der_dict[node.expr] += der_dict[node]
der_dict[node.arg(0)] += der_dict[node]


def _diff_ExternalFunctionExpression(node, val_dict, der_dict):
Expand Down
11 changes: 11 additions & 0 deletions pyomo/core/tests/unit/test_derivs.py
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,17 @@ def e2(m, i):
symbolic = reverse_sd(m.o.expr)
self.assertAlmostEqual(derivs[m.x], pyo.value(symbolic[m.x]), tol)

def test_constant_named_expressions(self):
m = pyo.ConcreteModel()
m.x = pyo.Var(initialize=3)
m.e = pyo.Expression(expr=2)

e = m.x * m.e
derivs = reverse_ad(e)
symbolic = reverse_sd(e)
self.assertAlmostEqual(derivs[m.x], pyo.value(symbolic[m.x]), tol + 3)
self.assertAlmostEqual(derivs[m.x], approx_deriv(e, m.x), tol)

def test_multiple_named_expressions(self):
m = pyo.ConcreteModel()
m.x = pyo.Var()
Expand Down

0 comments on commit 4c13589

Please sign in to comment.