docs: def adc(self, other : 'BitVector', carry : Bit) -> tp.Tuple['BitVector', Bit]:
          """
          add with carry
  
          returns a two element tuple of the form (result, carry)
  
          """
          T = type(self)
          other = _coerce(T, other)
          carry = _coerce(T.unsized_t[1], carry)
  
          a = self.zext(1)
          b = other.zext(1)
          c = carry.zext(T.size)
  
          res = a + b + c
          return res[0:-1], res[-1]