          """
  
          logger.trace("Creating from alignment: (alignment: %s, has_image: %s)",
                       alignment, bool(image is not None))
          self.x = alignment["x"]
          self.w = alignment["w"]
          self.y = alignment["y"]
          self.h = alignment["h"]
          landmarks = alignment["landmarks_xy"]
          if not isinstance(landmarks, np.ndarray):
              landmarks = np.array(landmarks, dtype="float32")
          self.landmarks_xy = landmarks.copy()
  
 
</s> remove         logger.trace("Creating from alignment: (alignment: %s, has_image: %s)",
 </s> add         logger.trace("Creating from alignment: (alignment: %s, has_image: %s)",  # type: ignore </s> remove         self.landmarks_xy = landmarks.copy()
 </s> add         self._landmarks_xy = landmarks.copy() </s> remove         self.x = alignment["x"]
        self.w = alignment["w"]
        self.y = alignment["y"]
        self.h = alignment["h"]
        self.landmarks_xy = np.array(alignment["landmarks_xy"], dtype="float32")
        self.mask = dict()
 </s> add         self.left = alignment["x"]
        self.width = alignment["w"]
        self.top = alignment["y"]
        self.height = alignment["h"]
        self._landmarks_xy = np.array(alignment["landmarks_xy"], dtype="float32")
        self.mask = {} </s> remove             face.landmarks_xy = landmarks
 </s> add             face._landmarks_xy = landmarks </s> remove                      image.shape if image is not None and image.any() else image,
                     x, w, y, h, landmarks_xy,
                     {k: v.shape for k, v in mask} if mask is not None else mask,
                     filename)
 </s> add                      image.shape if image is not None and image.any() else image, left, width, top,
                     height, landmarks_xy, mask, filename)
        self.left = alignment["x"]
        self.width = alignment["w"]
        self.top = alignment["y"]
        self.height = alignment["h"]
          """
  
          logger.trace("Creating from alignment: (alignment: %s, has_image: %s)",
                       alignment, bool(image is not None))
        self.left = alignment["x"]
        self.width = alignment["w"]
        self.top = alignment["y"]
        self.height = alignment["h"]
        self.left = alignment["x"]
        self.width = alignment["w"]
        self.top = alignment["y"]
        self.height = alignment["h"]
        self.left = alignment["x"]
        self.width = alignment["w"]
        self.top = alignment["y"]
        self.height = alignment["h"]
        self.left = alignment["x"]
        self.width = alignment["w"]
        self.top = alignment["y"]
        self.height = alignment["h"]
          landmarks = alignment["landmarks_xy"]
          if not isinstance(landmarks, np.ndarray):
              landmarks = np.array(landmarks, dtype="float32")
          self.landmarks_xy = landmarks.copy()
  
keep keep keep keep replace 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 
lib/align/detected_face.py