mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 00:55:31 +00:00
Extending public API with internal objects
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
parent
9cb29777e2
commit
2a4e6d03f3
21 changed files with 1621 additions and 1042 deletions
|
@ -904,6 +904,15 @@ def init(PATH):
|
|||
_lib.Z3_statistics_to_string.argtypes = [ContextObj]
|
||||
_lib.Z3_get_context_assignment.restype = Ast
|
||||
_lib.Z3_get_context_assignment.argtypes = [ContextObj]
|
||||
_lib.Z3_mk_polynomial_manager.restype = PolynomialManagerObj
|
||||
_lib.Z3_mk_polynomial_manager.argtypes = [ContextObj]
|
||||
_lib.Z3_del_polynomial_manager.argtypes = [ContextObj, PolynomialManagerObj]
|
||||
_lib.Z3_mk_zero_polynomial.restype = PolynomialObj
|
||||
_lib.Z3_mk_zero_polynomial.argtypes = [ContextObj, PolynomialManagerObj]
|
||||
_lib.Z3_polynomial_inc_ref.argtypes = [ContextObj, PolynomialManagerObj, PolynomialObj]
|
||||
_lib.Z3_polynomial_dec_ref.argtypes = [ContextObj, PolynomialManagerObj, PolynomialObj]
|
||||
_lib.Z3_polynomial_to_string.restype = ctypes.c_char_p
|
||||
_lib.Z3_polynomial_to_string.argtypes = [ContextObj, PolynomialManagerObj, PolynomialObj]
|
||||
|
||||
def Z3_mk_config():
|
||||
r = lib().Z3_mk_config()
|
||||
|
@ -4142,3 +4151,42 @@ def Z3_get_context_assignment(a0):
|
|||
raise Z3Exception(lib().Z3_get_error_msg_ex(a0, err))
|
||||
return r
|
||||
|
||||
def Z3_mk_polynomial_manager(a0):
|
||||
r = lib().Z3_mk_polynomial_manager(a0)
|
||||
err = lib().Z3_get_error_code(a0)
|
||||
if err != Z3_OK:
|
||||
raise Z3Exception(lib().Z3_get_error_msg_ex(a0, err))
|
||||
return r
|
||||
|
||||
def Z3_del_polynomial_manager(a0, a1):
|
||||
lib().Z3_del_polynomial_manager(a0, a1)
|
||||
err = lib().Z3_get_error_code(a0)
|
||||
if err != Z3_OK:
|
||||
raise Z3Exception(lib().Z3_get_error_msg_ex(a0, err))
|
||||
|
||||
def Z3_mk_zero_polynomial(a0, a1):
|
||||
r = lib().Z3_mk_zero_polynomial(a0, a1)
|
||||
err = lib().Z3_get_error_code(a0)
|
||||
if err != Z3_OK:
|
||||
raise Z3Exception(lib().Z3_get_error_msg_ex(a0, err))
|
||||
return r
|
||||
|
||||
def Z3_polynomial_inc_ref(a0, a1, a2):
|
||||
lib().Z3_polynomial_inc_ref(a0, a1, a2)
|
||||
err = lib().Z3_get_error_code(a0)
|
||||
if err != Z3_OK:
|
||||
raise Z3Exception(lib().Z3_get_error_msg_ex(a0, err))
|
||||
|
||||
def Z3_polynomial_dec_ref(a0, a1, a2):
|
||||
lib().Z3_polynomial_dec_ref(a0, a1, a2)
|
||||
err = lib().Z3_get_error_code(a0)
|
||||
if err != Z3_OK:
|
||||
raise Z3Exception(lib().Z3_get_error_msg_ex(a0, err))
|
||||
|
||||
def Z3_polynomial_to_string(a0, a1, a2):
|
||||
r = lib().Z3_polynomial_to_string(a0, a1, a2)
|
||||
err = lib().Z3_get_error_code(a0)
|
||||
if err != Z3_OK:
|
||||
raise Z3Exception(lib().Z3_get_error_msg_ex(a0, err))
|
||||
return r
|
||||
|
||||
|
|
67
python/z3poly.py
Normal file
67
python/z3poly.py
Normal file
|
@ -0,0 +1,67 @@
|
|||
############################################
|
||||
# Copyright (c) 2012 Microsoft Corporation
|
||||
#
|
||||
# Z3 Polynomial interface
|
||||
#
|
||||
# Author: Leonardo de Moura (leonardo)
|
||||
############################################
|
||||
from z3 import *
|
||||
|
||||
class PolynomialManager:
|
||||
"""Polynomial Manager.
|
||||
"""
|
||||
def __init__(self, ctx=None):
|
||||
self.ctx = z3._get_ctx(ctx)
|
||||
self.manager = Z3_mk_polynomial_manager(self.ctx_ref())
|
||||
|
||||
def __del__(self):
|
||||
Z3_del_polynomial_manager(self.ctx_ref(), self.manager)
|
||||
|
||||
def ctx_ref(self):
|
||||
return self.ctx.ref()
|
||||
|
||||
def m(self):
|
||||
return self.manager
|
||||
|
||||
_main_pmanager = None
|
||||
def main_pmanager():
|
||||
"""Return a reference to the global Polynomial manager.
|
||||
"""
|
||||
global _main_pmanager
|
||||
if _main_pmanager == None:
|
||||
_main_pmanager = PolynomialManager()
|
||||
return _main_pmanager
|
||||
|
||||
def _get_pmanager(ctx):
|
||||
if ctx == None:
|
||||
return main_pmanager()
|
||||
else:
|
||||
return ctx
|
||||
|
||||
class Polynomial:
|
||||
"""Multivariate polynomials.
|
||||
"""
|
||||
def __init__(self, poly=None, m=None):
|
||||
self.pmanager = _get_pmanager(m)
|
||||
if poly == None:
|
||||
self.poly = Z3_mk_zero_polynomial(self.ctx_ref(), self.m())
|
||||
else:
|
||||
self.poly = poly
|
||||
Z3_polynomial_inc_ref(self.ctx_ref(), self.m(), self.poly)
|
||||
|
||||
def __del__(self):
|
||||
Z3_polynomial_dec_ref(self.ctx_ref(), self.m(), self.poly)
|
||||
|
||||
def m(self):
|
||||
return self.pmanager.m()
|
||||
|
||||
def ctx_ref(self):
|
||||
return self.pmanager.ctx_ref()
|
||||
|
||||
def __repr__(self):
|
||||
return Z3_polynomial_to_string(self.ctx_ref(), self.m(), self.poly)
|
||||
|
||||
# test
|
||||
p = Polynomial()
|
||||
print p
|
||||
|
|
@ -105,3 +105,15 @@ class FuncInterpObj(ctypes.c_void_p):
|
|||
class FuncEntryObj(ctypes.c_void_p):
|
||||
def __init__(self, e): self._as_parameter_ = e
|
||||
def from_param(obj): return obj
|
||||
|
||||
class PolynomialManagerObj(ctypes.c_void_p):
|
||||
def __init__(self, e): self._as_parameter_ = e
|
||||
def from_param(obj): return obj
|
||||
|
||||
class PolynomialObj(ctypes.c_void_p):
|
||||
def __init__(self, e): self._as_parameter_ = e
|
||||
def from_param(obj): return obj
|
||||
|
||||
class MonomialObj(ctypes.c_void_p):
|
||||
def __init__(self, e): self._as_parameter_ = e
|
||||
def from_param(obj): return obj
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue