mirror of
https://github.com/Z3Prover/z3
synced 2025-04-09 02:41:52 +00:00
68 lines
1.6 KiB
Python
68 lines
1.6 KiB
Python
############################################
|
|
# 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
|
|
|