def test_x(self): A = numpy.ones((4, 5)) ctuple = matrix_constraint(A) self.assertEqual(ctuple.x, None) for c in ctuple: with self.assertRaises(ValueError): list(c.terms) vlist = create_variable_list(5) ctuple.x = vlist self.assertEqual(len(ctuple.x), 5) self.assertEqual(len(ctuple.x), len(vlist)) self.assertIsNot(ctuple.x, len(vlist)) for i, v in enumerate(ctuple.x): self.assertIs(v, vlist[i]) ctuple = matrix_constraint(A, x=vlist) self.assertEqual(len(ctuple.x), 5) self.assertEqual(len(ctuple.x), len(vlist)) self.assertIsNot(ctuple.x, len(vlist)) for i, v in enumerate(ctuple.x): self.assertIs(v, vlist[i]) vlist = create_variable_list(4) with self.assertRaises(ValueError): ctuple = matrix_constraint(A, x=vlist) ctuple = matrix_constraint(A) with self.assertRaises(ValueError): ctuple.x = vlist
def test_init(self): vlist = create_variable_list(3, value=1.0) ctuple = matrix_constraint(numpy.zeros((3, 3)), x=vlist) self.assertEqual(len(ctuple), 3) self.assertTrue(ctuple.parent is None) self.assertEqual(ctuple.ctype, Constraint) self.assertTrue((ctuple.lb == -numpy.inf).all()) self.assertTrue((ctuple.ub == numpy.inf).all()) self.assertTrue((ctuple.equality == False).all()) for c in ctuple: self.assertEqual(c.lb, -numpy.inf) self.assertEqual(c.ub, numpy.inf) self.assertEqual(c.equality, False) self.assertEqual(c(), 0) self.assertEqual(c.slack, float('inf')) self.assertEqual(c.lslack, float('inf')) self.assertEqual(c.uslack, float('inf')) self.assertEqual(c.has_lb(), False) self.assertEqual(c.has_ub(), False) vlist = create_variable_list(3, value=3) A = numpy.ones((2, 3)) ctuple = matrix_constraint(A, lb=0, ub=2, x=vlist) self.assertEqual(len(ctuple), 2) self.assertTrue((ctuple.lb == 0).all()) self.assertTrue((ctuple.ub == 2).all()) self.assertTrue((ctuple.equality == False).all()) for c in ctuple: self.assertEqual(len(list(c.terms)), 3) self.assertEqual(c.lb, 0) self.assertEqual(c.body(), 9) self.assertEqual(c(), 9) self.assertEqual(c.ub, 2) ctuple = matrix_constraint(A, rhs=1, x=vlist) self.assertEqual(len(ctuple), 2) self.assertTrue((ctuple.lb == 1).all()) self.assertTrue((ctuple.ub == 1).all()) self.assertTrue((ctuple.rhs == 1).all()) self.assertTrue((ctuple.equality == True).all()) for c in ctuple: self.assertEqual(len(list(c.terms)), 3) self.assertEqual(c.lb, 1) self.assertEqual(c.body(), 9) self.assertEqual(c(), 9) self.assertEqual(c.ub, 1) self.assertEqual(c.rhs, 1) # can't use both lb and rhs with self.assertRaises(ValueError): matrix_constraint(A, lb=0, rhs=0, x=vlist) # can't use both ub and rhs with self.assertRaises(ValueError): matrix_constraint(A, ub=0, rhs=0, x=vlist)
def test_create_variable_list(self): vlist = create_variable_list(5, lb=1, ub=10) self.assertEqual(len(vlist), 5) for v in vlist: self.assertIs(v.parent, vlist) self.assertEqual(v.bounds, (1, 10)) self.assertIs(type(v), variable) vlist = create_variable_list(5, type_=_variable_subclass, lb=1, ub=10) self.assertEqual(len(vlist), 5) for v in vlist: self.assertIs(v.parent, vlist) self.assertEqual(v.bounds, (1, 10)) self.assertIs(type(v), _variable_subclass)
def test_slack(self): vlist = create_variable_list(3) vlist[0].value = 1 vlist[1].value = 0 vlist[2].value = 3 A = numpy.ones((3, 3)) ctuple = matrix_constraint(A, x=vlist) self.assertTrue((ctuple() == 4).all()) self.assertEqual(ctuple[0](), 4) self.assertEqual(ctuple[1](), 4) self.assertEqual(ctuple[2](), 4) A[:, 0] = 0 A[:, 2] = 2 ctuple = matrix_constraint(A, x=vlist) vlist[2].value = 4 self.assertTrue((ctuple() == 8).all()) self.assertEqual(ctuple[0](), 8) self.assertEqual(ctuple[1](), 8) self.assertEqual(ctuple[2](), 8) A = numpy.random.rand(4, 3) ctuple = matrix_constraint(A, x=vlist) vlist[1].value = 2 cvals = numpy.array( [ctuple[0](), ctuple[1](), ctuple[2](), ctuple[3]()]) self.assertTrue((ctuple() == cvals).all())
def test_canonical_form_dense(self): A = numpy.array([[0, 2]]) vlist = create_variable_list(2) ctuple = matrix_constraint(A, x=vlist, sparse=False) self.assertEqual(ctuple.sparse, False) terms = list(ctuple[0].terms) vs, cs = zip(*terms) self.assertEqual(len(terms), 2) self.assertIs(vs[0], vlist[0]) self.assertIs(vs[1], vlist[1]) self.assertEqual(cs[0], 0) self.assertEqual(cs[1], 2) repn = ctuple[0].canonical_form() self.assertEqual(len(repn.variables), 2) self.assertIs(repn.variables[0], vlist[0]) self.assertIs(repn.variables[1], vlist[1]) self.assertEqual(repn.linear, (0, 2)) self.assertEqual(repn.constant, 0) vlist[0].fix(1) repn = ctuple[0].canonical_form() self.assertEqual(len(repn.variables), 1) self.assertIs(repn.variables[0], vlist[1]) self.assertEqual(repn.linear, (2, )) self.assertEqual(repn.constant, 0) vlist[1].fix(2) repn = ctuple[0].canonical_form() self.assertEqual(repn.variables, ()) self.assertEqual(repn.linear, ()) self.assertEqual(repn.constant, 4)
def test_canonical_form_sparse(self): A = numpy.array([[0, 2]]) vlist = create_variable_list(2) ctuple = matrix_constraint(A, x=vlist) self.assertEqual(ctuple.sparse, True) terms = list(ctuple[0].terms) vs, cs = zip(*terms) self.assertEqual(len(terms), 1) self.assertIs(vs[0], vlist[1]) self.assertEqual(cs[0], 2) repn = ctuple[0].canonical_form() self.assertEqual(len(repn.linear_vars), 1) self.assertIs(repn.linear_vars[0], vlist[1]) self.assertEqual(repn.linear_coefs, (2, )) self.assertEqual(repn.constant, 0) vlist[0].fix(1) repn = ctuple[0].canonical_form() self.assertEqual(len(repn.linear_vars), 1) self.assertIs(repn.linear_vars[0], vlist[1]) self.assertEqual(repn.linear_coefs, (2, )) self.assertEqual(repn.constant, 0) vlist[1].fix(2) repn = ctuple[0].canonical_form() self.assertEqual(repn.linear_vars, ()) self.assertEqual(repn.linear_coefs, ()) self.assertEqual(repn.constant, 4) repn = ctuple[0].canonical_form(compute_values=False) self.assertEqual(repn.linear_vars, ()) self.assertEqual(repn.linear_coefs, ()) self.assertEqual(repn.constant(), 4)
def test_pickle(self): vlist = create_variable_list(3) ctuple = matrix_constraint( numpy.array([[0,0,0],[0,0,0]]), x=vlist) self.assertTrue((ctuple.lb == -numpy.inf).all()) self.assertTrue((ctuple.ub == numpy.inf).all()) self.assertTrue((ctuple.equality == False).all()) self.assertEqual(ctuple.parent, None) ctuple_up = pickle.loads( pickle.dumps(ctuple)) self.assertTrue((ctuple_up.lb == -numpy.inf).all()) self.assertTrue((ctuple_up.ub == numpy.inf).all()) self.assertTrue((ctuple_up.equality == False).all()) self.assertEqual(ctuple_up.parent, None) b = block() b.ctuple = ctuple self.assertIs(ctuple.parent, b) bup = pickle.loads( pickle.dumps(b)) ctuple_up = bup.ctuple self.assertTrue((ctuple_up.lb == -numpy.inf).all()) self.assertTrue((ctuple_up.ub == numpy.inf).all()) self.assertTrue((ctuple_up.equality == False).all()) self.assertIs(ctuple_up.parent, bup)
def test_call(self): vlist = create_variable_list(3) vlist[0].value = 1 vlist[1].value = 0 vlist[2].value = 3 A = numpy.ones((3,3)) ctuple = matrix_constraint(A, x=vlist) self.assertTrue((ctuple() == 4).all()) self.assertEqual(ctuple[0](), 4) self.assertEqual(ctuple[1](), 4) self.assertEqual(ctuple[2](), 4) A[:,0] = 0 A[:,2] = 2 ctuple = matrix_constraint(A, x=vlist) vlist[2].value = 4 self.assertTrue((ctuple() == 8).all()) self.assertEqual(ctuple[0](), 8) self.assertEqual(ctuple[1](), 8) self.assertEqual(ctuple[2](), 8) A = numpy.random.rand(4,3) ctuple = matrix_constraint(A, x=vlist) vlist[1].value = 2 cvals = numpy.array([ctuple[0](), ctuple[1](), ctuple[2](), ctuple[3]()]) self.assertTrue((ctuple() == cvals).all()) vlist[1].value = None with self.assertRaises(ValueError): ctuple() with self.assertRaises(ValueError): ctuple(exception=True) self.assertIs(ctuple(exception=False), None) for c in ctuple: with self.assertRaises(ValueError): c() with self.assertRaises(ValueError): c(exception=True) self.assertIs(c(exception=False), None) ctuple.x = None with self.assertRaises(ValueError): ctuple() with self.assertRaises(ValueError): ctuple(exception=True) with self.assertRaises(ValueError): ctuple(exception=False) for c in ctuple: with self.assertRaises(ValueError): c() with self.assertRaises(ValueError): c(exception=True) with self.assertRaises(ValueError): c(exception=False)
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. m, n = 3, 2 vlist = create_variable_list(2) A = numpy.random.rand(m, n) ctuple = matrix_constraint(A, lb=1, ub=2, x=vlist) pyomo.core.kernel.pprint(ctuple) b = block() b.c = ctuple pyomo.core.kernel.pprint(ctuple) pyomo.core.kernel.pprint(b) m = block() m.b = b pyomo.core.kernel.pprint(ctuple) pyomo.core.kernel.pprint(b) pyomo.core.kernel.pprint(m)