  
          # aligned_face cannot be deep copied, so remove and recreate
          to_copy = self._faces_at_frame_index(idx)
          for face in to_copy:
              face.aligned = None
          copied = deepcopy(to_copy)
  
          for old_face, new_face in zip(to_copy, copied):
              old_face.load_aligned(None)
              new_face.load_aligned(None)
 
</s> remove         retval = dict()
 </s> add         retval = {} </s> remove         self.aligned = None
 </s> add         self._aligned = None </s> remove             self.mask = dict()
 </s> add             self.mask = {} </s> remove     def load_aligned(self, image, size=256, dtype=None, centering="head", force=False):
 </s> add     def load_aligned(self,
                     image: Optional[np.ndarray],
                     size: int = 256,
                     dtype: Optional[str] = None,
                     centering: "CenteringType" = "head",
                     coverage_ratio: float = 1.0,
                     force: bool = False,
                     is_aligned: bool = False,
                     is_legacy: bool = False) -> None: </s> remove         self.x = x  # pylint:disable=invalid-name
        self.w = w  # pylint:disable=invalid-name
        self.y = y  # pylint:disable=invalid-name
        self.h = h  # pylint:disable=invalid-name
        self.landmarks_xy = landmarks_xy
        self.thumbnail = None
        self.mask = dict() if mask is None else mask
 </s> add         self.left = left
        self.width = width
        self.top = top
        self.height = height
        self._landmarks_xy = landmarks_xy
        self.thumbnail: Optional[np.ndarray] = None
        self.mask = {} if mask is None else mask
            face._aligned = None  # pylint:disable=protected-access
  
          # aligned_face cannot be deep copied, so remove and recreate
          to_copy = self._faces_at_frame_index(idx)
          for face in to_copy:
            face._aligned = None  # pylint:disable=protected-access
          copied = deepcopy(to_copy)
  
          for old_face, new_face in zip(to_copy, copied):
              old_face.load_aligned(None)
              new_face.load_aligned(None)
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 
tools/manual/detected_faces.py