2413 def cast(self, val):
2414 """Try to cast `val` as an Integer or Real.
2415
2416 >>> IntSort().cast(10)
2417 10
2418 >>> is_int(IntSort().cast(10))
2419 True
2420 >>> is_int(10)
2421 False
2422 >>> RealSort().cast(10)
2423 10
2424 >>> is_real(RealSort().cast(10))
2425 True
2426 """
2427 if is_expr(val):
2428 if z3_debug():
2429 _z3_assert(self.ctx == val.ctx, "Context mismatch")
2430 val_s = val.sort()
2431 if self.eq(val_s):
2432 return val
2433 if val_s.is_int() and self.is_real():
2434 return ToReal(val)
2435 if val_s.is_bool() and self.is_int():
2436 return If(val, 1, 0)
2437 if val_s.is_bool() and self.is_real():
2438 return ToReal(If(val, 1, 0))
2439 if z3_debug():
2440 _z3_assert(False, "Z3 Integer/Real expression expected")
2441 else:
2442 if self.is_int():
2443 return IntVal(val, self.ctx)
2444 if self.is_real():
2445 return RealVal(val, self.ctx)
2446 if z3_debug():
2447 msg = "int, long, float, string (numeral), or Z3 Integer/Real expression expected. Got %s"
2448 _z3_assert(False, msg % self)
2449
2450