          Parameters
          ----------
          session_id: int
              The session id to add the data for
          data: dict
              The extracted event data dictionary generated from :class:`_EventParser`
          labels: list
              List of `str` for the labels of each loss value output
          is_live: bool, optional
              ``True`` if the data to be cached is from a live training session otherwise ``False``.
 
</s> remove         labels: list
 </s> add         labels: list[str] </s> remove         timestamps: tuple
            The raw timestamps for for the latest live query, including any partial reads
        loss: tuple
            The raw loss for for the latest live query, including any partial reads
 </s> add  </s> remove     def is_cached(self, session_id):
        """ bool: ``True`` if the data already exists in the cache otherwise ``False``. """
 </s> add     def is_cached(self, session_id: int) -> bool:
        """ Check if the given session_id's data is already cached

        Parameters
        ----------
        session_id: int
            The session ID to check

        Returns
        -------
        bool
            ``True`` if the data already exists in the cache otherwise ``False``.
        """ </s> remove     def cache_data(self, session_id, data, labels, is_live=False):
 </s> add     def cache_data(self,
                   session_id: int,
                   data: Dict[int, EventData],
                   labels: List[str],
                   is_live: bool = False) -> None: </s> remove     session_ids: list
        List of `ints` pertaining to the session ids that exist in the Tensorflow events folder
 </s> add     labels: list[str]
        The labels for the loss values
    timestamps: :class:`np.ndarray`
        The timestamp of the event step (iteration)
    loss: :class:`np.ndarray`
        The loss values collected for A and B sides for the session
        data[int, :class:`EventData`]
          Parameters
          ----------
          session_id: int
              The session id to add the data for
        data[int, :class:`EventData`]
              The extracted event data dictionary generated from :class:`_EventParser`
          labels: list
              List of `str` for the labels of each loss value output
          is_live: bool, optional
              ``True`` if the data to be cached is from a live training session otherwise ``False``.
keep keep keep keep replace keep keep keep keep keep
 Bugfixes
  - plugin.train.unbalanced - decoder b
  - gui.stats - crash when log folder deleted
  - setup.py - install gcc=12.1.0 on linux (scipy dep)
  - setup.py - don't test ROCm unless valid
  - typofix - cli_args extract singleprocess help
typing
  - lib.gui.analysis.event_reader
  - lib.gpu_stats.directml - make platform specific
unit tests
  - lib.gui.analysis.event_reader 
lib/gui/analysis/event_reader.py