docs: def read(self, symbol, as_of=None, raw=False, **kwargs):
          # TODO: shall we block from_version from getting into super.read?
          """Read data for the named symbol. Returns a BitemporalItem object with
          a data and metdata element (as passed into write).
  
          Parameters
          ----------
          symbol : `str`
              symbol name for the item
          as_of : `datetime.datetime`
              Return the data as it was as_of the point in time.
          raw : `bool`
              If True, will return the full bitemporal dataframe (i.e. all versions of the data). This also means as_of is
              ignored.
  
          Returns
          -------
          BitemporalItem namedtuple which contains a .data and .metadata element
          """
          item = self._store.read(symbol, **kwargs)
          last_updated = max(item.data.index.get_level_values(self.observe_column))
          if raw:
              return BitemporalItem(symbol=symbol, library=self._store._arctic_lib.get_name(), data=item.data,
                                    metadata=item.metadata,
                                    last_updated=last_updated)
          else:
              index_names = list(item.data.index.names)
              index_names.remove(self.observe_column)
              return BitemporalItem(symbol=symbol, library=self._store._arctic_lib.get_name(),
                                    data=groupby_asof(item.data, as_of=as_of, dt_col=index_names,
                                                      asof_col=self.observe_column),
                                    metadata=item.metadata, last_updated=last_updated)