              otherwise ``False``
          """
          retval = any([(face.get("mask", None) is not None and
                         face["mask"].get(mask_type, None) is not None)
                        for faces in self.data.values()
                        for face in faces])
          logger.debug(retval)
          return retval
  
      @property
      def mask_summary(self):
 
</s> remove     @property
    def mask_summary(self):
        """ Dict: The mask types and the number of faces which have each type that exist with in
        the loaded alignments """
        masks = dict()
        for faces in self.data.values():
            for face in faces:
                if face.get("mask", None) is None:
                    masks["none"] = masks.get("none", 0) + 1
                for key in face.get("mask", dict()):
                    masks[key] = masks.get(key, 0) + 1
        return masks

 </s> add  </s> remove         hashset = set(hashlist)
        for filename, frame in self.data.items():
            for idx, face in reversed(list(enumerate(frame))):
 </s> add         hashset = set(hash_list)
        for filename, val in self._data.items():
            for idx, face in reversed(list(enumerate(val["faces"]))): </s> remove             filter_out=True: Remove faces that match in the hash list
            filter_out=False: Remove faces that are not in the hash list
 </s> add         Parameters
        ----------
        hash_list: list
            List of SHA1 hashes in `str` format to use as a filter against :attr:`data`
        filter_out: bool, optional
            ``True`` if faces should be removed from :attr:`data` when there is a corresponding
            match in the given hash_list. ``False`` if faces should be kept in :attr:`data` when
            there is a corresponding match in the given hash_list, but removed if there is no
            match. Default: ``False`` </s> remove     def has_legacy_landmarks_list(self):
        """ check for legacy landmarks stored as list """
 </s> add     def _has_legacy_landmarks_list(self):
        """ check for legacy landmarks stored as `list` rather than :class:`numpy.ndarray`.

        Returns
        -------
        bool
            ``True`` if not all landmarks are :class:`numpy.ndarray` otherwise ``False``
        """
                      for val in self._data.values()
                      for face in val["faces"]])
              otherwise ``False``
          """
          retval = any([(face.get("mask", None) is not None and
                         face["mask"].get(mask_type, None) is not None)
                      for val in self._data.values()
                      for face in val["faces"]])
                      for val in self._data.values()
                      for face in val["faces"]])
          logger.debug(retval)
          return retval
  
      @property
      def mask_summary(self):
keep keep keep keep replace replace keep keep keep keep keep
 lib.alignments - Slight update (#978)

* lib.alignments update:
  - Minor structure change (faces to nested dictionary)
  - Refactor internal and external methods
  - Documentation 
lib/alignments.py