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