def visit_LengthIdentifier(self, expr: 'LengthIdentifier', environment=None, usub=False): assert not usub return PyTexpr1.cst(environment, PyMPQIntervalCoeff(PyMPQInterval.top()))
def get_cst(self): cst = self.lincons1.lincons0.linexpr0.contents.cst if cst.discr == CoeffDiscr.AP_COEFF_INTERVAL: if cst.val.interval.contents.inf.contents.discr == ScalarDiscr.AP_SCALAR_MPQ: result = PyMPQIntervalCoeff() elif cst.val.interval.contents.inf.contents.discr == ScalarDiscr.AP_SCALAR_MPFR: result = PyMPFRIntervalCoeff(0, 0) else: # cst.val.interval.contents.inf.contents.discr == ScalarDiscr.AP_SCALAR_DOUBLE result = PyDoubleIntervalCoeff() else: # CoeffDiscr.AP_COEFF_SCALAR if cst.val.scalar.contents.discr == ScalarDiscr.AP_SCALAR_MPQ: result = PyMPQScalarCoeff() elif cst.val.scalar.contents.discr == ScalarDiscr.AP_SCALAR_MPFR: result = PyMPFRScalarCoeff(0) else: # cst.val.scalar.contents.discr == ScalarDiscr.AP_SCALAR_DOUBLE result = PyDoubleScalarCoeff() libapron.ap_coeff_set(result.coeff, self.lincons1.lincons0.linexpr0.contents.cst) return result
def get_coeff(self, var: PyVar): coeff = libapron.ap_linexpr1_coeffref(self, var._as_parameter_) if coeff.contents.discr == CoeffDiscr.AP_COEFF_INTERVAL: discr = coeff.contents.val.interval.contents.inf.contents.discr if discr == ScalarDiscr.AP_SCALAR_MPQ: result = PyMPQIntervalCoeff() elif discr == ScalarDiscr.AP_SCALAR_MPFR: result = PyMPFRIntervalCoeff(0, 0) else: # discr == ScalarDiscr.AP_SCALAR_DOUBLE result = PyDoubleIntervalCoeff() else: # CoeffDiscr.AP_COEFF_SCALAR if coeff.contents.val.scalar.contents.discr == ScalarDiscr.AP_SCALAR_MPQ: result = PyMPQScalarCoeff() elif coeff.contents.val.scalar.contents.discr == ScalarDiscr.AP_SCALAR_MPFR: result = PyMPFRScalarCoeff(0) else: # coeff.contents.val.scalar.contents.discr == ScalarDiscr.AP_SCALAR_DOUBLE result = PyDoubleScalarCoeff() libapron.ap_linexpr1_get_coeff(result, self, var._as_parameter_) return result
def get_cst(self): cst = deepcopy(self.linexpr1.linexpr0.contents.cst) if cst.discr == CoeffDiscr.AP_COEFF_INTERVAL: if cst.val.interval.contents.inf.contents.discr == ScalarDiscr.AP_SCALAR_MPQ: result = PyMPQIntervalCoeff(cst) elif cst.val.interval.contents.inf.contents.discr == ScalarDiscr.AP_SCALAR_MPFR: result = PyMPFRIntervalCoeff(cst) else: assert cst.val.interval.contents.inf.contents.discr == ScalarDiscr.AP_SCALAR_DOUBLE result = PyDoubleIntervalCoeff(cst) else: assert cst.discr == CoeffDiscr.AP_COEFF_SCALAR if cst.val.scalar.contents.discr == ScalarDiscr.AP_SCALAR_MPQ: result = PyMPQScalarCoeff(cst) elif cst.val.scalar.contents.discr == ScalarDiscr.AP_SCALAR_MPFR: result = PyMPFRScalarCoeff(cst) else: assert cst.val.scalar.contents.discr == ScalarDiscr.AP_SCALAR_DOUBLE result = PyDoubleScalarCoeff(cst) return result
def visit_Input(self, expr, environment=None, usub=False) -> PyTexpr1: assert not usub return PyTexpr1.cst(environment, PyMPQIntervalCoeff(PyMPQInterval.top()))
def test_neg(self): self.assertEqual(-PyMPQIntervalCoeff(-1, 2), PyMPQIntervalCoeff(-2, 1)) self.assertEqual(-PyMPQIntervalCoeff(), PyMPQIntervalCoeff(0, 0)) self.assertEqual(-PyMPQIntervalCoeff(1, 2), PyMPQIntervalCoeff(-2, -1))
def test_cmp(self): self.assertTrue(PyMPQIntervalCoeff() < PyMPQIntervalCoeff(-1, 1, 2, 2)) self.assertFalse( PyMPQIntervalCoeff(-1, 1, 2, 2) < PyMPQIntervalCoeff()) self.assertTrue(PyMPQIntervalCoeff() == PyMPQIntervalCoeff(0, 0)) self.assertFalse( PyMPQIntervalCoeff() == PyMPQIntervalCoeff(-1, 1, 2, 2)) self.assertTrue(PyMPQIntervalCoeff(-1, 1, 2, 2) > PyMPQIntervalCoeff()) self.assertFalse( PyMPQIntervalCoeff() > PyMPQIntervalCoeff(-1, 1, 2, 2))
def test_deepcopy(self): c0 = PyMPQIntervalCoeff() c1 = deepcopy(c0) c2 = c0 self.assertNotEqual(id(c0), id(c1)) self.assertEqual(id(c0), id(c2))
def test_init(self): self.assertEqual(str(PyMPQIntervalCoeff()), '[0,0]')