          ``<plugin_type>._base`` """
  
          # << Objects for splitting frame's detected faces and rejoining them >>
          # << for post-detector pliugins                                      >>
          self._faces_per_filename: Dict[str, int] = {}  # Tracking for recompiling batches
          self._rollover: Optional[ExtractMedia] = None  # batch rollover items
          self._output_faces: List["DetectedFace"] = []  # Recompiled output faces from plugin
  
          logger.debug("Initialized _base %s", self.__class__.__name__)
  
      # <<< OVERIDABLE METHODS >>> #
      def init_model(self) -> None:
 
</s> remove         self._plugin_type: Optional[Literal["align", "detect", "recognition", "mask"]] = None
 </s> add         self._plugin_type: T.Literal["align", "detect", "recognition", "mask"] | None = None </s> remove     def get_batch(self, queue: "Queue") -> Tuple[bool, DetectorBatch]:
 </s> add     def get_batch(self, queue: Queue) -> tuple[bool, DetectorBatch]: </s> remove         self.color_format: Literal["BGR", "RGB", "GRAY"] = "BGR"
 </s> add         self.color_format: T.Literal["BGR", "RGB", "GRAY"] = "BGR" </s> remove         self.source: List[ConvertItem] = []  # Source images, filenames + detected faces
 </s> add         self.source: list[ConvertItem] = []  # Source images, filenames + detected faces </s> remove         self._extract_media: Dict[str, ExtractMedia] = {}
 </s> add         self._extract_media: dict[str, ExtractMedia] = {}
        self._faces_per_filename: dict[str, int] = {}  # Tracking for recompiling batches
        self._rollover: ExtractMedia | None = None  # batch rollover items
        self._output_faces: list[DetectedFace] = []  # Recompiled output faces from plugin
          ``<plugin_type>._base`` """
  
          # << Objects for splitting frame's detected faces and rejoining them >>
          # << for post-detector pliugins                                      >>
        self._faces_per_filename: dict[str, int] = {}  # Tracking for recompiling batches
        self._rollover: ExtractMedia | None = None  # batch rollover items
        self._output_faces: list[DetectedFace] = []  # Recompiled output faces from plugin
        self._faces_per_filename: dict[str, int] = {}  # Tracking for recompiling batches
        self._rollover: ExtractMedia | None = None  # batch rollover items
        self._output_faces: list[DetectedFace] = []  # Recompiled output faces from plugin
        self._faces_per_filename: dict[str, int] = {}  # Tracking for recompiling batches
        self._rollover: ExtractMedia | None = None  # batch rollover items
        self._output_faces: list[DetectedFace] = []  # Recompiled output faces from plugin
  
          logger.debug("Initialized _base %s", self.__class__.__name__)
  
      # <<< OVERIDABLE METHODS >>> #
      def init_model(self) -> None:
keep keep keep keep replace 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 
plugins/extract/_base.py