          else:
              self._add_latest_live(session_id, loss, timestamps)
  
      def _to_numpy(self,
                    data: Dict[int, EventData],
                    is_live: bool) -> Tuple[np.ndarray, np.ndarray]:
          """ Extract each individual step data into separate numpy arrays for loss and timestamps.
  
          Timestamps are stored float64 as the extra accuracy is needed for correct timings. Arrays
          are returned at the length of the shortest available data (i.e. truncated records are
          dropped)
 
</s> remove                       data: Dict[int, EventData],
                      is_live: bool) -> Tuple[List[float], List[List[float]]]:
 </s> add                       data: dict[int, EventData],
                      is_live: bool) -> tuple[list[float], list[list[float]]]: </s> remove                    data: Dict[int, EventData],
                   labels: List[str],
 </s> add                    data: dict[int, EventData],
                   labels: list[str], </s> remove     def get_timestamps(self, session_id: Optional[int] = None) -> Dict[int, np.ndarray]:
 </s> add     def get_timestamps(self, session_id: int | None = None) -> dict[int, np.ndarray]: </s> remove     def _collect_carry_over(self, data: Dict[int, EventData]) -> None:
 </s> add     def _collect_carry_over(self, data: dict[int, EventData]) -> None: </s> remove     def _reload(self, detected_faces: Dict[str, ExtractMedia]) -> None:
 </s> add     def _reload(self, detected_faces: dict[str, ExtractMedia]) -> None:
                  data: dict[int, EventData],
                  is_live: bool) -> tuple[np.ndarray, np.ndarray]:
          else:
              self._add_latest_live(session_id, loss, timestamps)
  
      def _to_numpy(self,
                  data: dict[int, EventData],
                  is_live: bool) -> tuple[np.ndarray, np.ndarray]:
                  data: dict[int, EventData],
                  is_live: bool) -> tuple[np.ndarray, np.ndarray]:
          """ Extract each individual step data into separate numpy arrays for loss and timestamps.
  
          Timestamps are stored float64 as the extra accuracy is needed for correct timings. Arrays
          are returned at the length of the shortest available data (i.e. truncated records are
          dropped)
keep keep keep keep replace replace keep keep keep keep keep
 Rebase code (#1326)

* Remove tensorflow_probability requirement

* setup.py - fix progress bars

* requirements.txt: Remove pre python 3.9 packages

* update apple requirements.txt

* update INSTALL.md

* Remove python<3.9 code

* setup.py - fix Windows Installer

* typing: python3.9 compliant

* Update pytest and readthedocs python versions

* typing fixes

* Python Version updates
  - Reduce max version to 3.10
  - Default to 3.10 in installers
  - Remove incompatible 3.11 tests

* Update dependencies

* Downgrade imageio dep for Windows

* typing: merge optional unions and fixes

* Updates
  - min python version 3.10
  - typing to python 3.10 spec
  - remove pre-tf2.10 code
  - Add conda tests

* train: re-enable optimizer saving

* Update dockerfiles

* Update setup.py
  - Apple Conda deps to setup.py
  - Better Cuda + dependency handling

* bugfix: Patch logging to prevent Autograph errors

* Update dockerfiles

* Setup.py - Setup.py - stdout to utf-8

* Add more OSes to github Actions

* suppress mac-os end to end test 
lib/gui/analysis/event_reader.py