docs: def load(fp, catalog=None, single_value=True, encoding='utf-8', cls=None, object_hook=None, parse_float=None,
           parse_int=None, parse_constant=None, object_pairs_hook=None, use_decimal=None, **kw):
      """Deserialize ``fp`` (a file-like object), which contains a text or binary Ion stream, to a Python object using the
      following conversion table::
          +-------------------+-------------------+
          |  Ion              |     Python        |
          |-------------------+-------------------|
          | null.<type>       | IonPyNull(<type>) |
          |-------------------+-------------------|
          | bool              |    IonPyBool      |
          |-------------------+-------------------|
          | int               |    IonPyInt       |
          |-------------------+-------------------|
          | float             |    IonPyFloat     |
          |-------------------+-------------------|
          | decimal           |   IonPyDecimal    |
          |-------------------+-------------------|
          | timestamp         |  IonPyTimestamp   |
          |-------------------+-------------------|
          | symbol            |   IonPySymbol     |
          |-------------------+-------------------|
          | string            | IonPyText(STRING) |
          |-------------------+-------------------|
          | clob              |  IonPyBytes(CLOB) |
          |-------------------+-------------------|
          | blob              |  IonPyBytes(BLOB) |
          |-------------------+-------------------|
          | list              |   IonPyList(LIST) |
          |-------------------+-------------------|
          | sexp              |   IonPyList(SEXP) |
          |-------------------+-------------------|
          | struct            |     IonPyDict     |
          +-------------------+-------------------+
  
      Args:
          fp (BaseIO): A file-like object containing Ion data.
          catalog (Optional[SymbolTableCatalog]): The catalog to use for resolving symbol table imports.
          single_value (Optional[True|False]): When True, the data in ``obj`` is interpreted as a single Ion value, and
              will be returned without an enclosing container. If True and there are multiple top-level values in the Ion
              stream, IonException will be raised. NOTE: this means that when data is dumped using
              ``sequence_as_stream=True``, it must be loaded using ``single_value=False``. Default: True.
          encoding: NOT IMPLEMENTED
          cls: NOT IMPLEMENTED
          object_hook: NOT IMPLEMENTED
          parse_float: NOT IMPLEMENTED
          parse_int: NOT IMPLEMENTED
          parse_constant: NOT IMPLEMENTED
          object_pairs_hook: NOT IMPLEMENTED
          use_decimal: NOT IMPLEMENTED
          **kw: NOT IMPLEMENTED
  
      Returns (Any):
          if single_value is True:
              A Python object representing a single Ion value.
          else:
              A sequence of Python objects representing a stream of Ion values.
      """
      if isinstance(fp, _TEXT_TYPES):
          raw_reader = text_reader(is_unicode=True)
      else:
          maybe_ivm = fp.read(4)
          fp.seek(0)
          if maybe_ivm == _IVM:
              raw_reader = binary_reader()
          else:
              raw_reader = text_reader()
      reader = blocking_reader(managed_reader(raw_reader, catalog), fp)
      out = []  # top-level
      _load(out, reader)
      if single_value:
          if len(out) != 1:
              raise IonException('Stream contained %d values; expected a single value.' % (len(out),))
          return out[0]
      return out