          int
              The size (in pixels) of the blur kernel
          """
          if not is_ratio:
              return kernel
  
          mask_diameter = np.sqrt(np.sum(self._mask))
          radius = round(max(1., mask_diameter * kernel / 100.))
          kernel_size = int(radius * 2 + 1)
          logger.trace("kernel_size: %s", kernel_size)
 
</s> remove         logger.trace("kernel_size: %s", kernel_size)
 </s> add         logger.trace("kernel_size: %s", kernel_size)  # type: ignore </s> remove         logger.trace(retval)
 </s> add         logger.trace(retval)  # type: ignore </s> remove                                blur_kernel=0, blur_type="gaussian", blur_passes=1, threshold=0):
 </s> add                                blur_kernel: int = 0,
                               blur_type: Optional[Literal["gaussian", "normalized"]] = "gaussian",
                               blur_passes: int = 1,
                               threshold: int = 0) -> None: </s> remove         self._mask = compress(mask)
 </s> add         self._mask = compress(mask.tobytes()) </s> remove     def _get_kernel_size(self, kernel, is_ratio):
 </s> add     def _get_kernel_size(self, kernel: Union[int, float], is_ratio: bool) -> int:
            return int(kernel)
          int
              The size (in pixels) of the blur kernel
          """
          if not is_ratio:
            return int(kernel)
  
          mask_diameter = np.sqrt(np.sum(self._mask))
          radius = round(max(1., mask_diameter * kernel / 100.))
          kernel_size = int(radius * 2 + 1)
          logger.trace("kernel_size: %s", kernel_size)
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