def test_divide_by_mutable(self): # # Test from https://github.com/Pyomo/pyomo/issues/153 # m = ConcreteModel() m.x = Var(bounds=(1, 5)) m.p = Param(initialize=100, mutable=True) m.con = Constraint(expr=exp(5 * (1 / m.x - 1 / m.p)) <= 10) m.obj = Objective(expr=m.x**2) test = gar(m.con.body) self.assertEqual(test._constant, 0) self.assertEqual(test._linear_vars, {}) self.assertEqual(test._linear_terms_coef, {}) self.assertEqual(test._nonlinear_vars, {id(m.x): m.x}) self.assertIs(test._nonlinear_expr, m.con.body)
def testSumCommutativeEquality(self): e1 = self.model.x + self.model.y e2 = self.model.y + self.model.x self.assertEqual(gar(e1), gar(e2))
def testSumEquality(self): expr = self.model.x + self.model.y self.assertEqual(gar(expr), gar(expr))
def testProductEquality(self): expr = self.model.x * self.model.y self.assertEqual(gar(expr), gar(expr))
def testFixedValueEquality(self): self.assertEqual(gar(MockFixedValue()), gar(MockFixedValue()))
def testVarInequality(self): self.assertNotEqual(gar(self.model.x), gar(self.model.y))
def testCantilvrObjective(self): # originally from pyomo.data.cute cantilvr model. # exposes problem in linear product handling, if present. expr = sum(self.model.z[i] for i in self.model.s) * 0.0624 self.assertAmplRepnMatch(gar(expr), cgar(expr))
def testSumExpressionParam(self): expr = sum(value(self.model.q[i]) / self.model.z[i] ** 3 for i in self.model.s) self.assertAmplRepnMatch(gar(expr), cgar(expr))
def testSumCommutative(self): e1 = self.model.x + self.model.y e2 = self.model.y + self.model.x self.assertAmplRepnMatch(gar(e1), cgar(e2))
def testSum(self): expr = self.model.x + self.model.y self.assertAmplRepnMatch(gar(expr), cgar(expr))
def testProduct(self): expr = self.model.x * self.model.y self.assertAmplRepnMatch(gar(expr), cgar(expr))
def testVar(self): expr = self.model.x self.assertAmplRepnMatch(gar(expr), cgar(expr))
def testFixedValue(self): expr = MockFixedValue() self.assertAmplRepnMatch(gar(expr), cgar(expr))
def testCompoundSumEquality(self): expr = sum(self.model.z[i] for i in self.model.s) + self.model.x / self.model.y self.assertEqual(gar(expr), gar(expr))
def testSumEquality(self): expr = sum(self.model.z[i] for i in self.model.s) self.assertEqual(gar(expr), gar(expr))
def testSumExpression(self): expr = sum(self.model.w[i] / self.model.z[i] ** 3 for i in self.model.s) self.assertAmplRepnMatch(gar(expr), cgar(expr))
def testPow(self): expr = self.model.x ** 2 self.assertAmplRepnMatch(gar(expr), cgar(expr))
def testCantilvrConstraintExpr(self): # originally from pyomo.data.cute cantilvr model. expr = sum(value(self.model.q[i]) / self.model.z[i] ** 3 for i in self.model.s) - 1.0 self.assertAmplRepnMatch(gar(expr), cgar(expr))
def testIntrinsic(self): fns = [sin, cos, tan, sinh, cosh, tanh, asin, acos, atan, asinh, acosh, atanh, log, exp] for fn in fns: expr = fn(self.model.x) self.assertAmplRepnMatch(gar(expr), cgar(expr))
def testVarEquality(self): self.assertEqual(gar(self.model.x), gar(self.model.x))
def testCompound(self): expr = self.model.x + self.model.y + self.model.x * self.model.y self.assertAmplRepnMatch(gar(expr), cgar(expr))
def testVarCoefInequality(self): self.assertNotEqual(gar(self.model.x), gar(2.0 * self.model.x))
def testMoreCompound(self): expr = ((self.model.x + self.model.y) * self.model.x) ** 2 self.assertAmplRepnMatch(gar(expr), cgar(expr))
def testFixedValueInequality(self): self.assertNotEqual(gar(MockFixedValue(1)), gar(MockFixedValue(2)))
def testQuotient(self): expr = self.model.x / self.model.y self.assertAmplRepnMatch(gar(expr), cgar(expr))
def testProductInequality(self): e1 = self.model.x * self.model.x e2 = self.model.y * self.model.y self.assertNotEqual(gar(e1), gar(e2))
def testCompoundQuotient(self): expr = self.model.y + self.model.x / self.model.y + self.model.y ** 2 self.assertAmplRepnMatch(gar(expr), cgar(expr))
def testSumInequality(self): e1 = self.model.x + self.model.y e2 = self.model.x + self.model.x self.assertNotEqual(gar(e1), gar(e2))
def testSum(self): expr = sum(self.model.z[i] for i in self.model.s) self.assertAmplRepnMatch(gar(expr), cgar(expr))
def testCompoundSum(self): expr = sum(self.model.z[i] for i in self.model.s) + self.model.x / self.model.y self.assertAmplRepnMatch(gar(expr), cgar(expr))
def testQuotientInequality(self): e1 = self.model.x / self.model.y e2 = self.model.y / self.model.x self.assertNotEqual(gar(e1), gar(e2))