              mask = mask.copy()
          if self._threshold != 0.0:
              mask[mask < self._threshold] = 0.0
              mask[mask > 255.0 - self._threshold] = 255.0
          if self._blur["kernel"] != 0:
              mask = BlurMask(self._blur["type"],
                              mask,
                              self._blur["kernel"],
                              passes=self._blur["passes"]).blurred
          if self._sub_crop_size:  # Crop the mask to the given centering
              out = np.zeros((self._sub_crop_size, self._sub_crop_size, 1), dtype=mask.dtype)
 
</s> remove                             self._blur["kernel"],
                            passes=self._blur["passes"]).blurred
 </s> add                             self._blur_kernel,
                            passes=self._blur_passes).blurred </s> remove         if self._threshold != 0.0 or self._blur["kernel"] != 0:
 </s> add         if self._threshold != 0.0 or self._blur_kernel != 0: </s> remove     def mask(self):
        """ numpy.ndarray: The mask at the size of :attr:`stored_size` with any requested blurring,
        threshold amount and centering applied."""
 </s> add     def mask(self) -> np.ndarray:
        """ :class:`numpy.ndarray`: The mask at the size of :attr:`stored_size` with any requested
        blurring, threshold amount and centering applied.""" </s> remove             self._blur["kernel"] = blur_kernel
            self._blur["type"] = blur_type
            self._blur["passes"] = blur_passes
 </s> add             self._blur_kernel = blur_kernel
            self._blur_type = blur_type
            self._blur_passes = blur_passes </s> remove         logger.trace("Initialized: %s", self.__class__.__name__)
 </s> add         logger.trace("Initialized: %s", self.__class__.__name__)  # type: ignore
        if self._blur_kernel != 0 and self._blur_type is not None:
            mask = BlurMask(self._blur_type,
              mask = mask.copy()
          if self._threshold != 0.0:
              mask[mask < self._threshold] = 0.0
              mask[mask > 255.0 - self._threshold] = 255.0
        if self._blur_kernel != 0 and self._blur_type is not None:
            mask = BlurMask(self._blur_type,
        if self._blur_kernel != 0 and self._blur_type is not None:
            mask = BlurMask(self._blur_type,
                              mask,
                              self._blur["kernel"],
                              passes=self._blur["passes"]).blurred
          if self._sub_crop_size:  # Crop the mask to the given centering
              out = np.zeros((self._sub_crop_size, self._sub_crop_size, 1), dtype=mask.dtype)
keep keep keep keep replace replace keep keep keep keep keep
 lib.align updates:
  - alignments.py
    - Add typed dicts for imported alignments
    - Explicitly check for presence of thumb value in alignments dict
    - linting
  - detected_face.py
    - Typing
    - Linting
    - Legacy support for pre-aligned face
    - Update dependencies to new property names 
lib/align/detected_face.py