def test_init(self): e = PyEnvironment([PyVar('x0'), PyVar('y')], [PyVar('z')]) x = PyLinexpr1(e) x.set_coeff(PyVar('x0'), PyDoubleScalarCoeff(3)) x.set_coeff(PyVar('z'), PyDoubleScalarCoeff(-9)) x.set_cst(PyDoubleScalarCoeff(8)) c = PyLincons1(ConsTyp.AP_CONS_SUPEQ, x) self.assertEqual(str(c), '3.0·x0 - 9.0·z + 8.0 >= 0') self.assertEqual(str(PyLincons1.unsat(e)), '-1.0 >= 0') self.assertEqual(str(PyLincons1(ConsTyp.AP_CONS_DISEQ, PyLinexpr1(e))), '0.0 != 0')
def test_init(self): e = PyEnvironment([PyVar('x0'), PyVar('y')], [PyVar('z')]) x = PyLinexpr1(e) x0 = PyLinexpr1(e, 0) self.assertEqual(str(PyTexpr1(x)), '0.0') self.assertEqual(str(PyTexpr1(x0)), '0.0 + 0.0 · x0 + 0.0 · y + 0.0 · z') x.set_coeff(PyVar('x0'), PyDoubleScalarCoeff(-1)) x.set_coeff(PyVar('z'), PyDoubleScalarCoeff(-9)) x.set_cst(PyDoubleScalarCoeff(8)) self.assertEqual(str(PyTexpr1(x)), '8.0 - 1.0 · x0 - 9.0 · z')
def test_is_unsat(self): e = PyEnvironment([PyVar('x0'), PyVar('y')], [PyVar('z')]) x = PyLinexpr1(e) x.set_coeff(PyVar('x0'), PyDoubleScalarCoeff(3)) x.set_coeff(PyVar('z'), PyDoubleScalarCoeff(-9)) x.set_cst(PyDoubleScalarCoeff(8)) c = PyLincons1(ConsTyp.AP_CONS_SUPEQ, x) self.assertFalse(c.is_unsat()) self.assertTrue(PyLincons1.unsat(e).is_unsat()) self.assertTrue(PyLincons1(ConsTyp.AP_CONS_DISEQ, PyLinexpr1(e)).is_unsat())
def test_init(self): e = PyEnvironment([PyVar('x'), PyVar('y')], [PyVar('z')]) x1 = PyLinexpr1(e) x1.set_coeff(PyVar('x'), PyDoubleScalarCoeff(3)) x1.set_coeff(PyVar('z'), PyDoubleScalarCoeff(-9)) x1.set_cst(PyDoubleScalarCoeff(8)) c1 = PyLincons1(ConsTyp.AP_CONS_SUPEQ, x1) x2 = PyLinexpr1(e) x2.set_coeff(PyVar('x'), PyDoubleScalarCoeff(1)) c2 = PyLincons1(ConsTyp.AP_CONS_SUP, x2) a = PyLincons1Array([c1, c2]) self.assertEqual(str(a), '3.0·x - 9.0·z + 8.0 >= 0 ∧ 1.0·x + 0.0 > 0')
def test_is_real(self): e = PyEnvironment([PyVar('x0'), PyVar('y')], [PyVar('z')]) x0 = PyLinexpr1(e) x0.set_coeff(PyVar('x0'), PyDoubleScalarCoeff(3)) self.assertFalse(x0.is_real()) x1 = PyLinexpr1(e) x1.set_coeff(PyVar('x0'), PyDoubleScalarCoeff(3)) x1.set_coeff(PyVar('z'), PyDoubleScalarCoeff(-9)) self.assertFalse(x1.is_real()) x2 = PyLinexpr1(e) x2.set_coeff(PyVar('z'), PyDoubleScalarCoeff(-9)) self.assertTrue(x2.is_real())
def test_get(self): e = PyEnvironment([PyVar('x'), PyVar('y')], [PyVar('z')]) x1 = PyLinexpr1(e) x1.set_coeff(PyVar('x'), PyDoubleScalarCoeff(3)) x1.set_coeff(PyVar('z'), PyDoubleScalarCoeff(-9)) x1.set_cst(PyDoubleScalarCoeff(8)) c1 = PyLincons1(ConsTyp.AP_CONS_SUPEQ, x1) x2 = PyLinexpr1(e) x2.set_coeff(PyVar('x'), PyDoubleScalarCoeff(1)) c2 = PyLincons1(ConsTyp.AP_CONS_SUP, x2) a = PyLincons1Array([c1, c2]) c = a.get(1) self.assertNotEqual(str(c), str(c1)) self.assertEqual(str(c), str(c2))
def test_is_quasilinear(self): e = PyEnvironment([PyVar('x0'), PyVar('y')], [PyVar('z')]) x0 = PyLinexpr1(e) x0.set_coeff(PyVar('x0'), PyDoubleScalarCoeff(3)) x0.set_cst(PyDoubleScalarCoeff(-9)) self.assertTrue(x0.is_quasilinear()) x1 = PyLinexpr1(e) x1.set_coeff(PyVar('x0'), PyDoubleIntervalCoeff(3, 3)) x1.set_cst(PyDoubleIntervalCoeff(-9, 9)) self.assertFalse(x1.is_quasilinear()) x2 = PyLinexpr1(e) x2.set_coeff(PyVar('x0'), PyDoubleScalarCoeff(3)) x2.set_cst(PyDoubleIntervalCoeff(-9, 9)) self.assertTrue(x2.is_quasilinear())
def test_substitute(self): e = PyEnvironment([PyVar('x0'), PyVar('y')], [PyVar('z')]) x0 = PyLinexpr1(e) x0.set_coeff(PyVar('x0'), PyMPQScalarCoeff(1)) x0.set_cst(PyMPQScalarCoeff(3)) t0 = PyTexpr1(x0) c0 = PyTcons1.make(t0, ConsTyp.AP_CONS_SUPEQ) self.assertEqual(str(c0), '3 + 1 · x0 >= 0') x1 = PyLinexpr1(e) x1.set_coeff(PyVar('x0'), PyMPQScalarCoeff(1)) x1.set_cst(PyMPQScalarCoeff(-1)) t1 = PyTexpr1(x1) c1 = PyTcons1.make(t1, ConsTyp.AP_CONS_SUPEQ) self.assertEqual(str(c1), '-1 + 1 · x0 >= 0') self.assertEqual(str(c0.substitute(PyVar('x0'), t1)), '3 + 1 · (-1 + 1 · x0) >= 0')
def test_deepcopy(self): e = PyEnvironment([PyVar('x0'), PyVar('y')], [PyVar('z')]) x0 = PyLinexpr1(e) x1 = deepcopy(x0) x2 = x0 self.assertNotEqual(id(x0), id(x1)) self.assertEqual(id(x0), id(x2))
def test_make(self): e = PyEnvironment([PyVar('x0'), PyVar('y')], [PyVar('z')]) x = PyLinexpr1(e) x.set_coeff(PyVar('x0'), PyDoubleScalarCoeff(3)) x.set_coeff(PyVar('z'), PyDoubleScalarCoeff(-9)) x.set_cst(PyDoubleScalarCoeff(8)) c = PyTcons1.make(PyTexpr1(x), ConsTyp.AP_CONS_SUPEQ) self.assertEqual(str(c), '8.0 + 3.0 · x0 - 9.0 · z >= 0')
def test_substitute(self): e = PyEnvironment([PyVar('x0'), PyVar('y')], [PyVar('z')]) x0 = PyLinexpr1(e) x0.set_coeff(PyVar('x0'), PyMPQScalarCoeff(1)) x0.set_cst(PyMPQScalarCoeff(3)) t0 = PyTexpr1(x0) self.assertEqual(str(t0), '3 + 1 · x0') x1 = PyLinexpr1(e) x1.set_coeff(PyVar('x0'), PyMPQScalarCoeff(1)) x1.set_cst(PyMPQScalarCoeff(-1)) t1 = PyTexpr1(x1) self.assertEqual(str(t1), '-1 + 1 · x0') self.assertEqual(str(t0.substitute(PyVar('x0'), t1)), '3 + 1 · (-1 + 1 · x0)') x2 = PyLinexpr1(e) x2.set_coeff(PyVar('x0'), PyMPQScalarCoeff(1)) x2.set_cst(PyMPQScalarCoeff(2)) t2 = PyTexpr1(x2) self.assertEqual(str(t2), '2 + 1 · x0')
def test_deepcopy(self): e = PyEnvironment([PyVar('x0'), PyVar('y')], [PyVar('z')]) x = PyLinexpr1(e) x.set_coeff(PyVar('x0'), PyDoubleScalarCoeff(3)) x.set_coeff(PyVar('z'), PyDoubleScalarCoeff(-9)) x.set_cst(PyDoubleScalarCoeff(8)) c0 = PyTcons1.make(PyTexpr1(x), ConsTyp.AP_CONS_SUPEQ) c1 = deepcopy(c0) c2 = c0 self.assertNotEqual(id(c0), id(c1)) self.assertEqual(id(c0), id(c2))
def unsat(cls, environment: PyEnvironment): x = PyLinexpr1(environment) x.set_cst(PyDoubleScalarCoeff(-1.0)) lincons = cls(ConsTyp.AP_CONS_SUPEQ, x) return lincons
def test_set_cst(self): e = PyEnvironment([PyVar('x0'), PyVar('y')], [PyVar('z')]) x = PyLinexpr1(e) x.set_cst(PyDoubleScalarCoeff(9)) self.assertEqual(str(x), '9.0')
def test_get_coeff(self): e = PyEnvironment([PyVar('x0'), PyVar('y')], [PyVar('z')]) self.assertEqual( PyLinexpr1(e).get_coeff(PyVar('x0')), PyDoubleScalarCoeff(0.0)) self.assertNotEqual( PyLinexpr1(e).get_coeff(PyVar('x0')), PyDoubleScalarCoeff(-3))
def test_set_coeff(self): e = PyEnvironment([PyVar('x0'), PyVar('y')], [PyVar('z')]) x = PyLinexpr1(e) c = PyLincons1(ConsTyp.AP_CONS_SUPEQ, x) c.set_coeff(PyVar('z'), PyDoubleScalarCoeff(-9)) self.assertEqual(str(c), '-9.0·z + 0.0 >= 0')
def test_get_coeff(self): e = PyEnvironment([PyVar('x0'), PyVar('y')], [PyVar('z')]) x = PyLinexpr1(e) c = PyLincons1(ConsTyp.AP_CONS_SUPEQ, x) self.assertEqual(c.get_coeff(PyVar('x0')), PyDoubleScalarCoeff(0.0)) self.assertNotEqual(c.get_coeff(PyVar('x0')), PyDoubleScalarCoeff(-3))
def test_set_typ(self): e = PyEnvironment([PyVar('x0'), PyVar('y')], [PyVar('z')]) x = PyLinexpr1(e) c = PyLincons1(ConsTyp.AP_CONS_SUPEQ, x) c.set_typ(ConsTyp.AP_CONS_DISEQ) self.assertEqual(str(c), '0.0 != 0')
def test_get_typ(self): e = PyEnvironment([PyVar('x0'), PyVar('y')], [PyVar('z')]) x = PyLinexpr1(e) c = PyLincons1(ConsTyp.AP_CONS_SUPEQ, x) self.assertEqual(repr(c.get_typ()), '>=') self.assertNotEqual(repr(c.get_typ()), '<')
def test_init(self): e = PyEnvironment([PyVar('x0'), PyVar('y')], [PyVar('z')]) self.assertEqual(str(PyLinexpr1(e)), '0.0') self.assertEqual(str(PyLinexpr1(e, 0)), '0.0·x0 + 0.0·y + 0.0·z + 0.0')