docs: def infer_sedes(obj):
      """Try to find a sedes objects suitable for a given Python object.
  
      The sedes objects considered are `obj`'s class, `big_endian_int` and
      `binary`. If `obj` is a sequence, a :class:`rlp.sedes.List` will be
      constructed recursively.
  
      :param obj: the python object for which to find a sedes object
      :raises: :exc:`TypeError` if no appropriate sedes could be found
      """
      if is_sedes(obj.__class__):
          return obj.__class__
      elif not isinstance(obj, bool) and isinstance(obj, int) and obj >= 0:
          return big_endian_int
      elif BinaryClass.is_valid_type(obj):
          return binary
      elif not isinstance(obj, str) and isinstance(obj, collections.Sequence):
          return List(map(infer_sedes, obj))
      elif isinstance(obj, bool):
          return boolean
      elif isinstance(obj, str):
          return text
      msg = 'Did not find sedes handling type {}'.format(type(obj).__name__)
      raise TypeError(msg)