          batch["landmarks"] = np.average(landmarks, axis=0)
          return batch
  
      # <<< FACE NORMALIZATION METHODS >>> #
      def _normalize_faces(self, faces):
          """ Normalizes the face for feeding into model
  
          The normalization method is dictated by the normalization command line argument
          """
          if self._normalize_method is None:
 
</s> remove             landmarks.append(subbatch["landmarks"])
        batch["landmarks"] = np.average(landmarks, axis=0)
 </s> add             landmarks.append(subbatch.landmarks)
        batch.landmarks = np.average(landmarks, axis=0) </s> remove         logger.trace("Normalizing faces")
 </s> add         logger.trace("Normalizing faces")  # type:ignore </s> remove         self._normalize_method = method
 </s> add         self._normalize_method = cast(Optional[Literal["clahe", "hist", "mean"]], method) </s> remove     def _process_input(self, batch):
 </s> add     def _process_input(self, batch: AlignerBatch) -> AlignerBatch:
    def _normalize_faces(self, faces: List[np.ndarray]) -> List[np.ndarray]:
          batch["landmarks"] = np.average(landmarks, axis=0)
          return batch
  
      # <<< FACE NORMALIZATION METHODS >>> #
    def _normalize_faces(self, faces: List[np.ndarray]) -> List[np.ndarray]:
          """ Normalizes the face for feeding into model
  
          The normalization method is dictated by the normalization command line argument
          """
          if self._normalize_method is None:
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