Skip to content

Commit

Permalink
Merge pull request #3017 from jsiirola/ad-named-expr
Browse files Browse the repository at this point in the history
Fix differentiation of `Expressions` containing `native_numeric_types`
  • Loading branch information
jsiirola authored Oct 20, 2023
2 parents 40c3dae + 4c13589 commit 12be54c
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 12be54c

Please sign in to comment.