code: def If(a: Union[Bool, bool], b: Union[BitVec, int], c: Union[BitVec, int]) -> BitVec:
      
      # TODO: Handle BitVecFunc
  
      if not isinstance(a, Bool):
          a = Bool(z3.BoolVal(a))
      if not isinstance(b, BitVec):
          b = BitVec(z3.BitVecVal(b, 256))
      if not isinstance(c, BitVec):
          c = BitVec(z3.BitVecVal(c, 256))
      union = a.annotations + b.annotations + c.annotations
      return BitVec(z3.If(a.raw, b.raw, c.raw), union)
docs: Create an if-then-else expression.
  
      :param a:
      :param b:
      :param c:
      :return: