def test_pickle(self): v = variable() e = noclone(v) self.assertEqual(type(e), noclone) self.assertIs(type(e.expr), variable) eup = pickle.loads(pickle.dumps(e)) self.assertEqual(type(eup), noclone) self.assertTrue(e is not eup) self.assertIs(type(eup.expr), variable) self.assertIs(type(e.expr), variable) self.assertTrue(eup.expr is not e.expr) del e del v v = variable(value=1) b = block() b.v = v eraw = b.v + 1 b.e = 1 + noclone(eraw) bup = pickle.loads(pickle.dumps(b)) self.assertTrue(isinstance(bup.e, NumericValue)) self.assertEqual(value(bup.e), 3.0) b.v.value = 2 self.assertEqual(value(b.e), 4.0) self.assertEqual(value(bup.e), 3.0) bup.v.value = -1 self.assertEqual(value(b.e), 4.0) self.assertEqual(value(bup.e), 1.0) self.assertIs(b.v.parent, b) self.assertIs(bup.v.parent, bup) del b.v
def test_init_non_NumericValue(self): types = [None, 1, 1.1, True, ""] if numpy_available: types.extend([numpy.float32(1), numpy.bool_(True), numpy.int32(1)]) types.append(block()) types.append(block) for obj in types: self.assertEqual(noclone(obj), obj) self.assertIs(type(noclone(obj)), type(obj))
def test_call(self): e = noclone(None) self.assertIs(e, None) e = noclone(1) self.assertEqual(e, 1) p = parameter() p.value = 2 e = noclone(p + 1) self.assertEqual(e(), 3)
def test_clone(self): p = parameter() e = noclone(p) self.assertTrue(e.clone() is e) self.assertTrue(e.clone().expr is p) sube = p**2 + 1 e = noclone(sube) self.assertTrue(e.clone() is e) self.assertTrue(e.clone().expr is sube)
def test_init_NumericValue(self): v = variable() p = parameter() e = expression() d = data_expression() o = objective() for obj in (v, v + 1, v**2, p, p + 1, p**2, e, e + 1, e**2, d, d + 1, d**2, o, o + 1, o**2): self.assertTrue(isinstance(noclone(obj), NumericValue)) self.assertTrue(isinstance(noclone(obj), IIdentityExpression)) self.assertTrue(isinstance(noclone(obj), noclone)) self.assertIs(noclone(obj).expr, obj)
def test_is_fixed(self): v = variable() e = noclone(v + 1) self.assertEqual(e.is_fixed(), False) self.assertEqual(is_fixed(e), False) v.fix() self.assertEqual(e.is_fixed(), True) self.assertEqual(is_fixed(e), True) e = noclone(parameter()) self.assertEqual(e.is_fixed(), True) self.assertEqual(is_fixed(e), True)
def testis_potentially_variable(self): e = noclone(variable()) self.assertEqual(e.is_potentially_variable(), True) self.assertEqual(potentially_variable(e), True) e = noclone(parameter()) self.assertEqual(e.is_potentially_variable(), False) self.assertEqual(potentially_variable(e), False) e = noclone(expression()) self.assertEqual(e.is_potentially_variable(), True) self.assertEqual(potentially_variable(e), True) e = noclone(data_expression()) self.assertEqual(e.is_potentially_variable(), False) self.assertEqual(potentially_variable(e), False)
def test_is_constant(self): v = variable() e = noclone(v) self.assertEqual(e.is_constant(), False) self.assertEqual(is_constant(e), False) v.fix(1) self.assertEqual(e.is_constant(), False) self.assertEqual(is_constant(e), False) p = parameter() e = noclone(p) self.assertEqual(p.is_constant(), False) self.assertEqual(is_constant(p), False) self.assertEqual(is_constant(noclone(1)), True)
def test_to_string(self): b = block() p = parameter() e = noclone(p**2) self.assertEqual(str(e.expr), "<parameter>**2.0") self.assertEqual(str(e), "{<parameter>**2.0}") e.to_string() out = StringIO() e.to_string(ostream=out) self.assertEqual(out.getvalue(), "<parameter>**2.0") e.to_string(verbose=False) out = StringIO() e.to_string(ostream=out, verbose=False) self.assertEqual(out.getvalue(), "<parameter>**2.0") e.to_string(verbose=True) out = StringIO() e.to_string(ostream=out, verbose=True) self.assertEqual(out.getvalue(), "{pow( <parameter> , 2.0 )}") b.e = e b.p = p self.assertNotEqual(p.name, None) e.to_string(verbose=True) out = StringIO() e.to_string(ostream=out, verbose=True) self.assertEqual(out.getvalue(), "{pow( " + p.name + " , 2.0 )}") self.assertEqual(out.getvalue(), "{pow( p , 2.0 )}") del b.e del b.p
def test_polynomial_degree(self): e = noclone(parameter()) self.assertEqual(e.polynomial_degree(), 0) e = noclone(parameter(value=1)) self.assertEqual(e.polynomial_degree(), 0) v = variable() v.value = 2 e = noclone(v + 1) self.assertEqual(e.polynomial_degree(), 1) e = noclone(v**2 + v + 1) self.assertEqual(e.polynomial_degree(), 2) v.fix() self.assertEqual(e.polynomial_degree(), 0) e = noclone(v**v) self.assertEqual(e.polynomial_degree(), 0) v.free() self.assertEqual(e.polynomial_degree(), None)
def test_division_behavior(self): # make sure integers involved in Pyomo expression # use __future__ behavior e = noclone(parameter(value=2)) self.assertIs(type(e.expr), parameter) self.assertEqual((1 / e)(), 0.5) self.assertEqual((parameter(1) / e)(), 0.5) # since the type returned is int, this should result # in the behavior used by the interpreter if six.PY3: self.assertEqual((1 / e.expr()), 0.5) else: self.assertEqual((1 / e.expr()), 0)
def test_to_string(self): b = block() p = parameter() e = noclone(p**2) self.assertEqual(str(e.expr), "<parameter>**2") self.assertEqual(str(e), "{(<parameter>**2)}") self.assertEqual(e.to_string(), "(<parameter>**2)") self.assertEqual(e.to_string(verbose=False), "(<parameter>**2)") self.assertEqual(e.to_string(verbose=True), "{pow(<parameter>, 2)}") b.e = e b.p = p self.assertNotEqual(p.name, None) self.assertEqual(e.to_string(verbose=True), "{pow(" + p.name + ", 2)}") self.assertEqual(e.to_string(verbose=True), "{pow(p, 2)}") del b.e del b.p
def test_pprint(self): # Not really testing what the output is, just that # an error does not occur. The pprint functionality # is still in the early stages. v = variable() e = noclone(v**2) pyomo.core.kernel.pprint(e) pyomo.core.kernel.pprint(e, indent=1) b = block() b.e = expression(expr=e) pyomo.core.kernel.pprint(e) pyomo.core.kernel.pprint(b) m = block() m.b = b pyomo.core.kernel.pprint(e) pyomo.core.kernel.pprint(b) pyomo.core.kernel.pprint(m)
def test_aruments(self): e = noclone(parameter() + 1) self.assertEqual(len(tuple(e.args)), 1) self.assertTrue(tuple(e.args)[0] is e.expr)
def test_is_expression_type(self): for obj in (variable(), parameter(), objective(), expression(), data_expression()): self.assertEqual(noclone(obj).is_expression_type(), True)
def test_args(self): e = noclone(parameter() + 1) self.assertEqual(e.nargs(), 1) self.assertTrue(e.arg(0) is e.expr)
def test_args(self): e = noclone(parameter() + 1) self.assertEqual(len(e._args), 1) self.assertTrue(e._args[0] is e.expr)