              blurred = func(blurred, **kwargs)
              ksize = int(round(ksize * self._multipass_factor))
              kwargs["ksize"] = self._get_kernel_tuple(ksize)
          blurred = blurred[..., None]
          logger.trace("Returning blurred mask. Shape: %s", blurred.shape)
          return blurred
  
      @property
      def _multipass_factor(self):
          """ For multiple passes the kernel must be scaled down. This value is
 
</s> remove     def _multipass_factor(self):
 </s> add     def _multipass_factor(self) -> float: </s> remove             logger.trace("Pass: %s, kernel_size: %s", i + 1, (ksize, ksize))
 </s> add             logger.trace("Pass: %s, kernel_size: %s", i + 1, (ksize, ksize))  # type: ignore </s> remove     def blurred(self):
 </s> add     def blurred(self) -> np.ndarray: </s> remove             return kernel
 </s> add             return int(kernel)
        logger.trace("Returning blurred mask. Shape: %s", blurred.shape)  # type: ignore
              blurred = func(blurred, **kwargs)
              ksize = int(round(ksize * self._multipass_factor))
              kwargs["ksize"] = self._get_kernel_tuple(ksize)
          blurred = blurred[..., None]
        logger.trace("Returning blurred mask. Shape: %s", blurred.shape)  # type: ignore
          return blurred
  
      @property
      def _multipass_factor(self):
          """ For multiple passes the kernel must be scaled down. This value is
keep keep keep keep 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