          This method must be executed to get access to the following an :class:`AlignedFace` object
          """
          if self.aligned and not force:
              # Don't reload an already aligned face
              logger.trace("Skipping alignment calculation for already aligned face")
          else:
              logger.trace("Loading aligned face: (size: %s, dtype: %s)", size, dtype)
              self.aligned = AlignedFace(self.landmarks_xy,
                                         image=image,
                                         centering=centering,
 
</s> remove         if self.aligned and not force:
 </s> add         if self._aligned and not force: </s> remove             logger.trace("Loading aligned face: (size: %s, dtype: %s)", size, dtype)
            self.aligned = AlignedFace(self.landmarks_xy,
                                       image=image,
                                       centering=centering,
                                       size=size,
                                       coverage_ratio=1.0,
                                       dtype=dtype,
                                       is_aligned=False)
 </s> add             logger.trace("Loading aligned face: (size: %s, dtype: %s)",  # type: ignore
                         size, dtype)
            self._aligned = AlignedFace(self.landmarks_xy,
                                        image=image,
                                        centering=centering,
                                        size=size,
                                        coverage_ratio=coverage_ratio,
                                        dtype=dtype,
                                        is_aligned=is_aligned,
                                        is_legacy=is_aligned and is_legacy) </s> remove 
 </s> add         is_aligned: bool, optional
            Indicates that the :attr:`image` is an aligned face rather than a frame.
            Default: ``False``
        is_legacy: bool, optional
            Only used if `is_aligned` is ``True``. ``True`` indicates that the aligned image being
            loaded is a legacy extracted face rather than a current head extracted face </s> remove         face.x += shift_x
        face.y += shift_y
        face.landmarks_xy += (shift_x, shift_y)
 </s> add         face.left += shift_x
        face.top += shift_y
        face._landmarks_xy += (shift_x, shift_y)
            logger.trace("Skipping alignment calculation for already aligned face")  # type: ignore
          This method must be executed to get access to the following an :class:`AlignedFace` object
          """
          if self.aligned and not force:
              # Don't reload an already aligned face
            logger.trace("Skipping alignment calculation for already aligned face")  # type: ignore
          else:
              logger.trace("Loading aligned face: (size: %s, dtype: %s)", size, dtype)
              self.aligned = AlignedFace(self.landmarks_xy,
                                         image=image,
                                         centering=centering,
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