          logger.trace("Setting lines style")  # type:ignore[attr-defined]
          groups = int(len(lines) / groupsize)
          colours = self._lines_create_colors(groupsize, groups)
          widths = list(range(1, groups + 1))
          retval = cast(List[List[Union[str, int, Tuple[float]]]], lines)
          for idx, item in enumerate(retval):
              linewidth = widths[idx // groupsize]
              item.extend((linewidth, colours[idx]))
          return retval
  
 
</s> remove     def _lines_create_colors(self, groupsize: int, groups: int) -> List[Tuple[float]]:
 </s> add     def _lines_create_colors(self, groupsize: int, groups: int) -> list[tuple[float]]: </s> remove     def _lines_groupsize(raw_lines: List[List[str]], sorted_lines: List[List[str]]) -> int:
 </s> add     def _lines_groupsize(raw_lines: list[list[str]], sorted_lines: list[list[str]]) -> int: </s> remove         retval = self._to_float32(np.array([AlignedFace(face.landmarks_xy,
                                                        image=images[idx],
                                                        centering=cast(CenteringType,
                                                                       self._config["centering"]),
                                                        size=full_size,
                                                        dtype="uint8",
                                                        is_aligned=True).face
                                            for idx, face in enumerate(detected_faces)]))
 </s> add         retval = self._to_float32(np.array([
            AlignedFace(face.landmarks_xy,
                        image=images[idx],
                        centering=T.cast(CenteringType,
                                         self._config["centering"]),
                        size=full_size,
                        dtype="uint8",
                        is_aligned=True).face
            for idx, face in enumerate(detected_faces)])) </s> remove             x_center = (cast(int, face.left) + face.right) / 2.0
            y_center = (cast(int, face.top) + face.bottom) / 2.0 - cast(int, face.height) * 0.12
            scale = (cast(int, face.width) + cast(int, face.height)) * self.reference_scale
            center_scale[index, :, 0] = np.full(68, x_center, dtype='float32')
            center_scale[index, :, 1] = np.full(68, y_center, dtype='float32')
 </s> add             x_ctr = (T.cast(int, face.left) + face.right) / 2.0
            y_ctr = (T.cast(int, face.top) + face.bottom) / 2.0 - T.cast(int, face.height) * 0.12
            scale = (T.cast(int, face.width) + T.cast(int, face.height)) * self.reference_scale
            center_scale[index, :, 0] = np.full(68, x_ctr, dtype='float32')
            center_scale[index, :, 1] = np.full(68, y_ctr, dtype='float32') </s> remove         assert self._config["centering"] in get_args(CenteringType)
 </s> add         assert self._config["centering"] in T.get_args(CenteringType)
        retval = T.cast(list[list[str | int | tuple[float]]], lines)
          logger.trace("Setting lines style")  # type:ignore[attr-defined]
          groups = int(len(lines) / groupsize)
          colours = self._lines_create_colors(groupsize, groups)
          widths = list(range(1, groups + 1))
        retval = T.cast(list[list[str | int | tuple[float]]], lines)
          for idx, item in enumerate(retval):
              linewidth = widths[idx // groupsize]
              item.extend((linewidth, colours[idx]))
          return retval
  
keep keep keep keep 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/display_graph.py