def test_is_methods(self): from fractions import Fraction as pyFraction self.assertFalse(is_pysmt_fraction(4)) self.assertTrue(is_pysmt_fraction(Fraction(4))) self.assertFalse(is_pysmt_integer(4.0)) self.assertTrue(is_pysmt_integer(Integer(4))) self.assertTrue(is_python_integer(int(2))) if PY2: self.assertTrue(is_python_integer(long(2))) if HAS_GMPY: from gmpy2 import mpz self.assertTrue(is_python_integer(mpz(1))) if HAS_GMPY: from gmpy2 import mpz, mpq self.assertTrue(is_python_rational(mpz(1))) self.assertTrue(is_python_rational(mpq(1))) if PY2: self.assertTrue(is_python_rational(long(1))) self.assertTrue(is_python_rational(pyFraction(5))) self.assertTrue(is_python_rational(3)) self.assertTrue(is_python_boolean(True)) self.assertTrue(is_python_boolean(False))
def test_is_methods(self): self.assertFalse(is_pysmt_fraction(4)) self.assertTrue(is_pysmt_fraction(Fraction(4))) self.assertFalse(is_pysmt_integer(4.0)) self.assertTrue(is_pysmt_integer(Integer(4))) self.assertTrue(is_python_integer(int(2))) if PY2: self.assertTrue(is_python_integer(long(2))) if HAS_GMPY: from gmpy2 import mpz self.assertTrue(is_python_integer(mpz(1))) if HAS_GMPY: from gmpy2 import mpz, mpq self.assertTrue(is_python_rational(mpz(1))) self.assertTrue(is_python_rational(mpq(1))) if PY2: self.assertTrue(is_python_rational(long(1))) self.assertTrue(is_python_rational(pyFraction(5))) self.assertTrue(is_python_rational(3)) self.assertTrue(is_python_boolean(True)) self.assertTrue(is_python_boolean(False))
def walk_int_constant(self, formula, **kwargs): assert is_pysmt_integer(formula.constant_value()) const = str(formula.constant_value()) z3term = z3.Z3_mk_numeral(self.ctx.ref(), const, self.z3IntSort.ast) z3.Z3_inc_ref(self.ctx.ref(), z3term) return z3term
def BV(self, value, width=None): """Return a constant of type BitVector. value can be either: - a string of 0s and 1s - a string starting with "#b" followed by a sequence of 0s and 1s - an integer number s.t. 0 <= value < 2**width In order to create the BV representation of a signed integer, the SBV() method shall be used. """ if type(value) is str: if value.startswith("#b"): str_width = len(value)-2 value = int(value[2:],2) elif all(v in ["0", "1"] for v in value): str_width = len(value) value = int(value, 2) else: raise PysmtValueError("Expecting binary value as string, got " \ "%s instead." % value) if width is not None and width != str_width: raise PysmtValueError("Specified width does not match string " \ "width (%d != %d)" % (width, str_width)) width = str_width if width is None: raise PysmtValueError("Need to specify a width for the constant") if is_pysmt_integer(value): _value = value elif is_python_integer(value): _value = pysmt_integer_from_integer(value) else: raise PysmtTypeError("Invalid type in constant. The type was: %s" \ % str(type(value))) if _value < 0: raise PysmtValueError("Cannot specify a negative value: %d" \ % _value) if _value >= 2**width: raise PysmtValueError("Cannot express %d in %d bits" \ % (_value, width)) return self.create_node(node_type=op.BV_CONSTANT, args=tuple(), payload=(_value, width))
def Int(self, value): """Return a constant of type INT.""" if value in self.int_constants: return self.int_constants[value] if is_pysmt_integer(value): val = value elif is_python_integer(value): val = pysmt_integer_from_integer(value) else: raise PysmtTypeError("Invalid type in constant. The type was:" + \ str(type(value))) n = self.create_node(node_type=op.INT_CONSTANT, args=tuple(), payload=val) self.int_constants[value] = n return n
def walk_int_constant(self, formula, **kwargs): assert is_pysmt_integer(formula.constant_value()) rep = str(formula.constant_value()) return self.mkConst(CVC4.Rational(rep))
def walk_int_constant(self, formula, **kwargs): assert is_pysmt_integer(formula.constant_value()) rep = str(formula.constant_value()) res = yicespy.yices_parse_rational(rep) self._check_term_result(res) return res
def walk_int_constant(self, formula): assert is_pysmt_integer(formula.constant_value()), \ "The type was " + str(type(formula.constant_value())) self.write(str(formula.constant_value()))