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