  
      @property
      def yaw(self) -> float:
          """ float: The yaw of the aligned face in eular angles """
          if not any(self._pitch_yaw):
              self._get_pitch_yaw()
          return self._pitch_yaw[1]
  
      def _get_pitch_yaw(self) -> None:
          """ Obtain the yaw and pitch from the :attr:`_rotation` in eular angles. """
          proj_matrix = np.zeros((3, 4), dtype="float32")
          proj_matrix[:3, :3] = cv2.Rodrigues(self._rotation)[0]
 
</s> remove     def _get_pitch_yaw(self) -> None:
        """ Obtain the yaw and pitch from the :attr:`_rotation` in eular angles. """
 </s> add     @property
    def roll(self) -> float:
        """ float: The roll of the aligned face in eular angles """
        if not any(self._pitch_yaw_roll):
            self._get_pitch_yaw_roll()
        return self._pitch_yaw_roll[2]

    def _get_pitch_yaw_roll(self) -> None:
        """ Obtain the yaw, roll and pitch from the :attr:`_rotation` in eular angles. """ </s> remove         if not any(self._pitch_yaw):
            self._get_pitch_yaw()
        return self._pitch_yaw[0]
 </s> add         if not any(self._pitch_yaw_roll):
            self._get_pitch_yaw_roll()
        return self._pitch_yaw_roll[0] </s> remove         self._pitch_yaw = (euler[0][0], euler[1][0])
        logger.trace("yaw_pitch: %s", self._pitch_yaw)  # type: ignore
 </s> add         self._pitch_yaw_roll = cast(Tuple[float, float, float], tuple(euler.squeeze()))
        logger.trace("yaw_pitch: %s", self._pitch_yaw_roll)  # type: ignore </s> remove     """ Sorting mechansim for sorting a face by yaw (left to right). Same logic as sort yaw, but
 </s> add     """ Sorting mechansim for sorting a face by yaw (left to right). Same logic as sort pitch, but </s> remove         self._pitch_yaw: Tuple[int, int] = (0, 0)
 </s> add         self._pitch_yaw_roll: Tuple[float, float, float] = (0, 0, 0)
        if not any(self._pitch_yaw_roll):
            self._get_pitch_yaw_roll()
        return self._pitch_yaw_roll[1]
  
      @property
      def yaw(self) -> float:
          """ float: The yaw of the aligned face in eular angles """
        if not any(self._pitch_yaw_roll):
            self._get_pitch_yaw_roll()
        return self._pitch_yaw_roll[1]
        if not any(self._pitch_yaw_roll):
            self._get_pitch_yaw_roll()
        return self._pitch_yaw_roll[1]
        if not any(self._pitch_yaw_roll):
            self._get_pitch_yaw_roll()
        return self._pitch_yaw_roll[1]
  
      def _get_pitch_yaw(self) -> None:
          """ Obtain the yaw and pitch from the :attr:`_rotation` in eular angles. """
          proj_matrix = np.zeros((3, 4), dtype="float32")
          proj_matrix[:3, :3] = cv2.Rodrigues(self._rotation)[0]
keep keep keep keep replace replace replace keep keep keep keep keep
 sort tool: Add sort by roll 
lib/align/aligned_face.py