@@ -870,7 +870,7 @@ def params(self):
870870 elif k == Z3_PARAMETER_ZSTRING :
871871 result [i ] = "internal string"
872872 else :
873- assert ( False )
873+ raise Z3Exception ( "Unexpected parameter kind" )
874874 return result
875875
876876 def __call__ (self , * args ):
@@ -3374,6 +3374,8 @@ def RatVal(a, b, ctx=None):
33743374 if z3_debug ():
33753375 _z3_assert (_is_int (a ) or isinstance (a , str ), "First argument cannot be converted into an integer" )
33763376 _z3_assert (_is_int (b ) or isinstance (b , str ), "Second argument cannot be converted into an integer" )
3377+ if b == 0 :
3378+ pass # division by 0 is legal in z3 expressions.
33773379 return simplify (RealVal (a , ctx ) / RealVal (b , ctx ))
33783380
33793381
@@ -5896,7 +5898,9 @@ def __getitem__(self, arg):
58965898 >>> g[1]
58975899 y > x
58985900 """
5899- if arg >= len (self ):
5901+ if arg < 0 :
5902+ arg += len (self )
5903+ if arg < 0 or arg >= len (self ):
59005904 raise IndexError
59015905 return self .get (arg )
59025906
@@ -12014,50 +12018,64 @@ def ctx_ref(self):
1201412018 return self .ctx ().ref ()
1201512019
1201612020 def add_fixed (self , fixed ):
12017- assert not self .fixed
12018- assert not self ._ctx
12021+ if self .fixed :
12022+ raise Z3Exception ("fixed callback already registered" )
12023+ if self ._ctx :
12024+ raise Z3Exception ("context already initialized" )
1201912025 if self .solver :
1202012026 Z3_solver_propagate_fixed (self .ctx_ref (), self .solver .solver , _user_prop_fixed )
1202112027 self .fixed = fixed
1202212028
1202312029 def add_created (self , created ):
12024- assert not self .created
12025- assert not self ._ctx
12030+ if self .created :
12031+ raise Z3Exception ("created callback already registered" )
12032+ if self ._ctx :
12033+ raise Z3Exception ("context already initialized" )
1202612034 if self .solver :
1202712035 Z3_solver_propagate_created (self .ctx_ref (), self .solver .solver , _user_prop_created )
1202812036 self .created = created
1202912037
1203012038 def add_final (self , final ):
12031- assert not self .final
12032- assert not self ._ctx
12039+ if self .final :
12040+ raise Z3Exception ("final callback already registered" )
12041+ if self ._ctx :
12042+ raise Z3Exception ("context already initialized" )
1203312043 if self .solver :
1203412044 Z3_solver_propagate_final (self .ctx_ref (), self .solver .solver , _user_prop_final )
1203512045 self .final = final
1203612046
1203712047 def add_eq (self , eq ):
12038- assert not self .eq
12039- assert not self ._ctx
12048+ if self .eq :
12049+ raise Z3Exception ("eq callback already registered" )
12050+ if self ._ctx :
12051+ raise Z3Exception ("context already initialized" )
1204012052 if self .solver :
1204112053 Z3_solver_propagate_eq (self .ctx_ref (), self .solver .solver , _user_prop_eq )
1204212054 self .eq = eq
1204312055
1204412056 def add_diseq (self , diseq ):
12045- assert not self .diseq
12046- assert not self ._ctx
12057+ if self .diseq :
12058+ raise Z3Exception ("diseq callback already registered" )
12059+ if self ._ctx :
12060+ raise Z3Exception ("context already initialized" )
1204712061 if self .solver :
1204812062 Z3_solver_propagate_diseq (self .ctx_ref (), self .solver .solver , _user_prop_diseq )
1204912063 self .diseq = diseq
1205012064
1205112065 def add_decide (self , decide ):
12052- assert not self .decide
12053- assert not self ._ctx
12066+ if self .decide :
12067+ raise Z3Exception ("decide callback already registered" )
12068+ if self ._ctx :
12069+ raise Z3Exception ("context already initialized" )
1205412070 if self .solver :
1205512071 Z3_solver_propagate_decide (self .ctx_ref (), self .solver .solver , _user_prop_decide )
1205612072 self .decide = decide
1205712073
1205812074 def add_on_binding (self , binding ):
12059- assert not self .binding
12060- assert not self ._ctx
12075+ if self .binding :
12076+ raise Z3Exception ("binding callback already registered" )
12077+ if self ._ctx :
12078+ raise Z3Exception ("context already initialized" )
1206112079 if self .solver :
1206212080 Z3_solver_propagate_on_binding (self .ctx_ref (), self .solver .solver , _user_prop_binding )
1206312081 self .binding = binding
@@ -12072,7 +12090,8 @@ def fresh(self, new_ctx):
1207212090 raise Z3Exception ("fresh needs to be overwritten" )
1207312091
1207412092 def add (self , e ):
12075- assert not self ._ctx
12093+ if self ._ctx :
12094+ raise Z3Exception ("context already initialized" )
1207612095 if self .solver :
1207712096 Z3_solver_propagate_register (self .ctx_ref (), self .solver .solver , e .ast )
1207812097 else :
0 commit comments