Skip to content

Commit

Permalink
Merge pull request Pyomo#3310 from sadavis1/conic-geomean-fix
Browse files Browse the repository at this point in the history
Conic geomean fix
  • Loading branch information
jsiirola authored Jul 23, 2024
2 parents 5ec615e + d77bb0d commit d085500
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 2 deletions.
4 changes: 2 additions & 2 deletions pyomo/core/kernel/conic.py
Original file line number Diff line number Diff line change
Expand Up @@ -632,7 +632,7 @@ def as_domain(cls, r, x):
b = block()
b.r = variable_tuple([variable(lb=0) for i in range(len(r))])
b.x = variable()
b.c = _build_linking_constraints(list(r) + [x], list(b.r) + [x])
b.c = _build_linking_constraints(list(r) + [x], list(b.r) + [b.x])
b.q = cls(r=b.r, x=b.x)
return b

Expand Down Expand Up @@ -934,7 +934,7 @@ def as_domain(cls, r, x):
b = block()
b.r = variable_tuple([variable(lb=0) for i in range(len(r))])
b.x = variable()
b.c = _build_linking_constraints(list(r) + [x], list(b.r) + [x])
b.c = _build_linking_constraints(list(r) + [x], list(b.r) + [b.x])
b.q = cls(r=b.r, x=b.x)
return b

Expand Down
36 changes: 36 additions & 0 deletions pyomo/core/tests/unit/kernel/test_conic.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
primal_power,
dual_exponential,
dual_power,
primal_geomean,
dual_geomean,
)


Expand Down Expand Up @@ -784,6 +786,40 @@ def test_as_domain(self):
x[1].value = None


# These mosek 10 constraints can't be evaluated, pprinted, checked for convexity,
# pickled, etc., so I won't use the _conic_tester_base for them
class Test_primal_geomean(unittest.TestCase):
def test_as_domain(self):
b = primal_geomean.as_domain(r=[2, 3], x=6)
self.assertIs(type(b), block)
self.assertIs(type(b.q), primal_geomean)
self.assertIs(type(b.r), variable_tuple)
self.assertIs(type(b.x), variable)
self.assertIs(type(b.c), constraint_tuple)
self.assertExpressionsEqual(b.c[0].body, b.r[0])
self.assertExpressionsEqual(b.c[0].rhs, 2)
self.assertExpressionsEqual(b.c[1].body, b.r[1])
self.assertExpressionsEqual(b.c[1].rhs, 3)
self.assertExpressionsEqual(b.c[2].body, b.x)
self.assertExpressionsEqual(b.c[2].rhs, 6)


class Test_dual_geomean(unittest.TestCase):
def test_as_domain(self):
b = dual_geomean.as_domain(r=[2, 3], x=6)
self.assertIs(type(b), block)
self.assertIs(type(b.q), dual_geomean)
self.assertIs(type(b.r), variable_tuple)
self.assertIs(type(b.x), variable)
self.assertIs(type(b.c), constraint_tuple)
self.assertExpressionsEqual(b.c[0].body, b.r[0])
self.assertExpressionsEqual(b.c[0].rhs, 2)
self.assertExpressionsEqual(b.c[1].body, b.r[1])
self.assertExpressionsEqual(b.c[1].rhs, 3)
self.assertExpressionsEqual(b.c[2].body, b.x)
self.assertExpressionsEqual(b.c[2].rhs, 6)


class TestMisc(unittest.TestCase):
def test_build_linking_constraints(self):
c = _build_linking_constraints([], [])
Expand Down

0 comments on commit d085500

Please sign in to comment.