2428 def cast(self, val):
2429 """Try to cast `val` as an Integer or Real.
2430
2431 >>> IntSort().cast(10)
2432 10
2433 >>> is_int(IntSort().cast(10))
2434 True
2435 >>> is_int(10)
2436 False
2437 >>> RealSort().cast(10)
2438 10
2439 >>> is_real(RealSort().cast(10))
2440 True
2441 """
2442 if is_expr(val):
2443 if z3_debug():
2444 _z3_assert(self.ctx == val.ctx, "Context mismatch")
2445 val_s = val.sort()
2446 if self.eq(val_s):
2447 return val
2448 if val_s.is_int() and self.is_real():
2449 return ToReal(val)
2450 if val_s.is_bool() and self.is_int():
2451 return If(val, 1, 0)
2452 if val_s.is_bool() and self.is_real():
2453 return ToReal(If(val, 1, 0))
2454 if z3_debug():
2455 _z3_assert(False, "Z3 Integer/Real expression expected")
2456 else:
2457 if self.is_int():
2458 return IntVal(val, self.ctx)
2459 if self.is_real():
2460 return RealVal(val, self.ctx)
2461 if z3_debug():
2462 msg = "int, long, float, string (numeral), or Z3 Integer/Real expression expected. Got %s"
2463 _z3_assert(False, msg % self)
2464
2465