2479 def cast(self, val):
2480 """Try to cast `val` as an Integer or Real.
2481
2482 >>> IntSort().cast(10)
2483 10
2484 >>> is_int(IntSort().cast(10))
2485 True
2486 >>> is_int(10)
2487 False
2488 >>> RealSort().cast(10)
2489 10
2490 >>> is_real(RealSort().cast(10))
2491 True
2492 """
2493 if is_expr(val):
2494 if z3_debug():
2495 _z3_assert(self.ctx == val.ctx, "Context mismatch")
2496 val_s = val.sort()
2497 if self.eq(val_s):
2498 return val
2499 if val_s.is_int() and self.is_real():
2500 return ToReal(val)
2501 if val_s.is_bool() and self.is_int():
2502 return If(val, 1, 0)
2503 if val_s.is_bool() and self.is_real():
2504 return ToReal(If(val, 1, 0))
2505 if z3_debug():
2506 _z3_assert(False, "Z3 Integer/Real expression expected")
2507 else:
2508 if self.is_int():
2509 return IntVal(val, self.ctx)
2510 if self.is_real():
2511 return RealVal(val, self.ctx)
2512 if z3_debug():
2513 msg = "int, long, float, string (numeral), or Z3 Integer/Real expression expected. Got %s"
2514 _z3_assert(False, msg % self)
2515
2516