示例#1
0
    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
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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())
示例#5
0
 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)
示例#7
0
 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)
示例#8
0
    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)
示例#9
0
 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)