Z3
Public Member Functions | Data Fields
UserPropagateBase Class Reference

Public Member Functions

def __init__
 
def __del__ (self)
 
def ctx (self)
 
def ctx_ref (self)
 
def add_fixed (self, fixed)
 
def add_final (self, final)
 
def add_eq (self, eq)
 
def add_diseq (self, diseq)
 
def push (self)
 
def pop (self, num_scopes)
 
def fresh (self)
 
def add (self, e)
 
def propagate
 
def conflict (self, ids)
 

Data Fields

 solver
 
 cb
 
 id
 
 fixed
 
 final
 
 eq
 
 diseq
 

Detailed Description

Definition at line 11198 of file z3py.py.

Constructor & Destructor Documentation

def __init__ (   self,
  s,
  ctx = None 
)

Definition at line 11207 of file z3py.py.

11207  def __init__(self, s, ctx=None):
11208  assert s is None or ctx is None
11210  self.solver = s
11211  self._ctx = None
11212  self.cb = None
11213  self.id = _prop_closures.insert(self)
11214  self.fixed = None
11215  self.final = None
11216  self.eq = None
11217  self.diseq = None
11218  if ctx:
11219  # TBD fresh is broken: ctx is not of the right type when we reach here.
11220  self._ctx = Context()
11221  #Z3_del_context(self._ctx.ctx)
11222  #self._ctx.ctx = ctx
11223  #self._ctx.eh = Z3_set_error_handler(ctx, z3_error_handler)
11224  #Z3_set_ast_print_mode(ctx, Z3_PRINT_SMTLIB2_COMPLIANT)
11225  if s:
11227  s.solver,
11228  ctypes.c_void_p(self.id),
11229  _user_prop_push,
11230  _user_prop_pop,
11231  _user_prop_fresh)
11232 
def ensure_prop_closures()
Definition: z3py.py:11139
def ctx_ref(self)
Definition: z3py.py:11243
void Z3_API Z3_solver_propagate_init(Z3_context c, Z3_solver s, void *user_context, Z3_push_eh push_eh, Z3_pop_eh pop_eh, Z3_fresh_eh fresh_eh)
register a user-properator with the solver.
def __del__ (   self)

Definition at line 11233 of file z3py.py.

11233  def __del__(self):
11234  if self._ctx:
11235  self._ctx.ctx = None
11236 
def __del__(self)
Definition: z3py.py:11233

Member Function Documentation

def add (   self,
  e 
)

Definition at line 11279 of file z3py.py.

11279  def add(self, e):
11280  assert self.solver
11281  assert not self._ctx
11282  return Z3_solver_propagate_register(self.ctx_ref(), self.solver.solver, e.ast)
11283 
unsigned Z3_API Z3_solver_propagate_register(Z3_context c, Z3_solver s, Z3_ast e)
register an expression to propagate on with the solver. Only expressions of type Bool and type Bit-Ve...
def ctx_ref(self)
Definition: z3py.py:11243
def add(self, e)
Definition: z3py.py:11279
def add_diseq (   self,
  diseq 
)

Definition at line 11264 of file z3py.py.

11264  def add_diseq(self, diseq):
11265  assert not self.diseq
11266  assert not self._ctx
11267  Z3_solver_propagate_diseq(self.ctx_ref(), self.solver.solver, _user_prop_diseq)
11268  self.diseq = diseq
11269 
def add_diseq(self, diseq)
Definition: z3py.py:11264
void Z3_API Z3_solver_propagate_diseq(Z3_context c, Z3_solver s, Z3_eq_eh eq_eh)
register a callback on expression dis-equalities.
def ctx_ref(self)
Definition: z3py.py:11243
def add_eq (   self,
  eq 
)

Definition at line 11258 of file z3py.py.

11258  def add_eq(self, eq):
11259  assert not self.eq
11260  assert not self._ctx
11261  Z3_solver_propagate_eq(self.ctx_ref(), self.solver.solver, _user_prop_eq)
11262  self.eq = eq
11263 
def add_eq(self, eq)
Definition: z3py.py:11258
def ctx_ref(self)
Definition: z3py.py:11243
void Z3_API Z3_solver_propagate_eq(Z3_context c, Z3_solver s, Z3_eq_eh eq_eh)
register a callback on expression equalities.
def add_final (   self,
  final 
)

Definition at line 11252 of file z3py.py.

11252  def add_final(self, final):
11253  assert not self.final
11254  assert not self._ctx
11255  Z3_solver_propagate_final(self.ctx_ref(), self.solver.solver, _user_prop_final)
11256  self.final = final
11257 
def add_final(self, final)
Definition: z3py.py:11252
void Z3_API Z3_solver_propagate_final(Z3_context c, Z3_solver s, Z3_final_eh final_eh)
register a callback on final check. This provides freedom to the propagator to delay actions or imple...
def ctx_ref(self)
Definition: z3py.py:11243
def add_fixed (   self,
  fixed 
)

Definition at line 11246 of file z3py.py.

11246  def add_fixed(self, fixed):
11247  assert not self.fixed
11248  assert not self._ctx
11249  Z3_solver_propagate_fixed(self.ctx_ref(), self.solver.solver, _user_prop_fixed)
11250  self.fixed = fixed
11251 
void Z3_API Z3_solver_propagate_fixed(Z3_context c, Z3_solver s, Z3_fixed_eh fixed_eh)
register a callback for when an expression is bound to a fixed value. The supported expression types ...
def add_fixed(self, fixed)
Definition: z3py.py:11246
def ctx_ref(self)
Definition: z3py.py:11243
def conflict (   self,
  ids 
)

Definition at line 11301 of file z3py.py.

11301  def conflict(self, ids):
11302  self.propagate(BoolVal(False, self.ctx()), ids, eqs=[])
11303 
def BoolVal
Definition: z3py.py:1675
def conflict(self, ids)
Definition: z3py.py:11301
def ctx (   self)

Definition at line 11237 of file z3py.py.

Referenced by UserPropagateBase.conflict().

11237  def ctx(self):
11238  if self._ctx:
11239  return self._ctx
11240  else:
11241  return self.solver.ctx
11242 
def ctx_ref (   self)

Definition at line 11243 of file z3py.py.

Referenced by UserPropagateBase.add(), UserPropagateBase.add_diseq(), UserPropagateBase.add_eq(), UserPropagateBase.add_final(), and UserPropagateBase.add_fixed().

11243  def ctx_ref(self):
11244  return self.ctx().ref()
11245 
def ctx_ref(self)
Definition: z3py.py:11243
def fresh (   self)

Definition at line 11276 of file z3py.py.

11276  def fresh(self):
11277  raise Z3Exception("fresh needs to be overwritten")
11278 
def pop (   self,
  num_scopes 
)

Definition at line 11273 of file z3py.py.

11273  def pop(self, num_scopes):
11274  raise Z3Exception("pop needs to be overwritten")
11275 
def pop(self, num_scopes)
Definition: z3py.py:11273
def propagate (   self,
  e,
  ids,
  eqs = [] 
)

Definition at line 11287 of file z3py.py.

Referenced by UserPropagateBase.conflict().

11287  def propagate(self, e, ids, eqs=[]):
11288  num_fixed = len(ids)
11289  _ids = (ctypes.c_uint * num_fixed)()
11290  for i in range(num_fixed):
11291  _ids[i] = ids[i]
11292  num_eqs = len(eqs)
11293  _lhs = (ctypes.c_uint * num_eqs)()
11294  _rhs = (ctypes.c_uint * num_eqs)()
11295  for i in range(num_eqs):
11296  _lhs[i] = eqs[i][0]
11297  _rhs[i] = eqs[i][1]
11298  Z3_solver_propagate_consequence(e.ctx.ref(), ctypes.c_void_p(
11299  self.cb), num_fixed, _ids, num_eqs, _lhs, _rhs, e.ast)
11300 
expr range(expr const &lo, expr const &hi)
Definition: z3++.h:3794
void Z3_API Z3_solver_propagate_consequence(Z3_context c, Z3_solver_callback, unsigned num_fixed, unsigned const *fixed_ids, unsigned num_eqs, unsigned const *eq_lhs, unsigned const *eq_rhs, Z3_ast conseq)
propagate a consequence based on fixed values. This is a callback a client may invoke during the fixe...
def push (   self)

Definition at line 11270 of file z3py.py.

11270  def push(self):
11271  raise Z3Exception("push needs to be overwritten")
11272 

Field Documentation

cb

Definition at line 11212 of file z3py.py.

Referenced by UserPropagateBase.propagate().

diseq

Definition at line 11217 of file z3py.py.

Referenced by UserPropagateBase.add_diseq().

eq

Definition at line 11216 of file z3py.py.

Referenced by AstRef.__eq__(), UserPropagateBase.add_eq(), SortRef.cast(), and BoolSortRef.cast().

final

Definition at line 11215 of file z3py.py.

Referenced by UserPropagateBase.add_final().

fixed

Definition at line 11214 of file z3py.py.

Referenced by UserPropagateBase.add_fixed().

id

Definition at line 11213 of file z3py.py.

solver

Definition at line 11210 of file z3py.py.

Referenced by UserPropagateBase.add().