code: def decode_abi(self, types: Iterable[TypeStr], data: Decodable) -> Tuple[Any, ...]:
          
          if not is_bytes(data):
              raise TypeError("The `data` value must be of bytes type.  Got {0}".format(type(data)))
  
          decoders = [
              self._registry.get_decoder(type_str)
              for type_str in types
          ]
  
          decoder = TupleDecoder(decoders=decoders)
          stream = ContextFramesBytesIO(data)
  
          return decoder(stream)
docs: Decodes the binary value ``data`` as a sequence of values of the ABI types
          in ``types`` via the head-tail mechanism into a tuple of equivalent python
          values.
  
          :param types: An iterable of string representations of the ABI types that
              will be used for decoding e.g. ``('uint256', 'bytes[]', '(int,int)')``
          :param data: The binary value to be decoded.
  
          :returns: A tuple of equivalent python values for the ABI values
              represented in ``data``.