                                    centering=self._centering,
                                    size=self.face_size)
              landmarks = dict(polygon=[], line=[])
              for area, val in self._landmark_mapping.items():
                  # pylint:disable=unsubscriptable-object
                  points = aligned.landmarks[val[0]:val[1]] + top_left
                  shape = "polygon" if area.endswith("eye") or area.startswith("mouth") else "line"
                  landmarks[shape].append(points)
              self._landmarks[key] = landmarks
          return landmarks
 
</s> remove             face.landmarks_xy = landmarks
 </s> add             face._landmarks_xy = landmarks </s> remove         key = "{}_{}".format(frame_index, face_index)
 </s> add         key = f"{frame_index}_{face_index}" </s> remove         self.landmarks_xy = landmarks.copy()
 </s> add         self._landmarks_xy = landmarks.copy() </s> remove             top_left = face.aligned.original_roi[0]  # pylint:disable=unsubscriptable-object
 </s> add             top_left = face.aligned.original_roi[0] </s> remove         self.x = alignment["x"]
        self.w = alignment["w"]
        self.y = alignment["y"]
        self.h = alignment["h"]
 </s> add         self.left = alignment["x"]
        self.width = alignment["w"]
        self.top = alignment["y"]
        self.height = alignment["h"]
                                    centering=self._centering,
                                    size=self.face_size)
              landmarks = dict(polygon=[], line=[])
              for area, val in self._landmark_mapping.items():

                  points = aligned.landmarks[val[0]:val[1]] + top_left
                  shape = "polygon" if area.endswith("eye") or area.startswith("mouth") else "line"
                  landmarks[shape].append(points)
              self._landmarks[key] = landmarks
          return landmarks
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/faceviewer/viewport.py