          Whilst the bounding box does not need to be shifted, it is anyway, to ensure that it is
          aligned with the newly adjusted landmarks.
          """
          face = self._faces_at_frame_index(frame_index)[face_index]
          face.x += shift_x
          face.y += shift_y
          face.landmarks_xy += (shift_x, shift_y)
          self._globals.tk_update.set(True)
  
      def landmarks_rotate(self, frame_index, face_index, angle, center):
          """ Rotate the landmarks on an Extract Box rotate for the
          :class:`~lib.align.DetectedFace` object at the given frame and face indices for the
 
</s> remove         face.landmarks_xy = cv2.transform(np.expand_dims(face.landmarks_xy, axis=0),
                                          rot_mat).squeeze()
 </s> add         face._landmarks_xy = cv2.transform(np.expand_dims(face.landmarks_xy, axis=0),
                                           rot_mat).squeeze() </s> remove         face.landmarks_xy = ((face.landmarks_xy - center) * scale) + center
 </s> add         face._landmarks_xy = ((face.landmarks_xy - center) * scale) + center </s> remove         face.x = pnt_x
        face.w = width
        face.y = pnt_y
        face.h = height
        face.landmarks_xy = self._extractor.get_landmarks(frame_index, face_index, aligner)
 </s> add         face.left = pnt_x
        face.width = width
        face.top = pnt_y
        face.height = height
        face._landmarks_xy = self._extractor.get_landmarks(frame_index, face_index, aligner) </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
        face.left += shift_x
        face.top += shift_y
        face._landmarks_xy += (shift_x, shift_y)
          Whilst the bounding box does not need to be shifted, it is anyway, to ensure that it is
          aligned with the newly adjusted landmarks.
          """
          face = self._faces_at_frame_index(frame_index)[face_index]
        face.left += shift_x
        face.top += shift_y
        face._landmarks_xy += (shift_x, shift_y)
        face.left += shift_x
        face.top += shift_y
        face._landmarks_xy += (shift_x, shift_y)
        face.left += shift_x
        face.top += shift_y
        face._landmarks_xy += (shift_x, shift_y)
          self._globals.tk_update.set(True)
  
      def landmarks_rotate(self, frame_index, face_index, angle, center):
          """ Rotate the landmarks on an Extract Box rotate for the
          :class:`~lib.align.DetectedFace` object at the given frame and face indices for the
keep keep keep keep replace 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 
tools/manual/detected_faces.py