          The normalization method is dictated by the normalization command line argument
          """
          if self._normalize_method is None:
              return faces
          logger.trace("Normalizing faces")
          meth = getattr(self, f"_normalize_{self._normalize_method.lower()}")
          faces = [meth(face) for face in faces]
          logger.trace("Normalized faces")
          return faces
  
 
</s> remove         logger.trace("Normalized faces")
 </s> add         logger.trace("Normalized faces")  # type:ignore </s> remove     def _normalize_faces(self, faces):
 </s> add     def _normalize_faces(self, faces: List[np.ndarray]) -> List[np.ndarray]: </s> remove     @staticmethod
    def _normalize_mean(face):
        """ Normalize Face to the Mean """
 </s> add     @classmethod
    def _normalize_mean(cls, face: np.ndarray) -> np.ndarray:
        """ Normalize Face to the Mean

        Parameters
        ----------
        faces: :class:`numpy.ndarray`
            The faces to normalize

        Returns
        -------
        :class:`numpy.ndarray`
            The normalized faces
        """ </s> remove         self._normalize_method = method
 </s> add         self._normalize_method = cast(Optional[Literal["clahe", "hist", "mean"]], method)
        logger.trace("Normalizing faces")  # type:ignore
          The normalization method is dictated by the normalization command line argument
          """
          if self._normalize_method is None:
              return faces
        logger.trace("Normalizing faces")  # type:ignore
          meth = getattr(self, f"_normalize_{self._normalize_method.lower()}")
          faces = [meth(face) for face in faces]
          logger.trace("Normalized faces")
          return faces
  
keep keep keep keep replace keep keep keep keep keep
 Extract updates:
  - Default CPU detector to MTCNN
  - add basic Aligner false positive filters
  - Typing: align + plugins
  - Use specific AlignerBatch class for alignment
  - 
plugins/extract/align/_base.py