          if not self._pitch_yaw:
              self._get_pitch_yaw()
          return self._pitch_yaw[1]
  
      def _get_pitch_yaw(self):
          """ 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]
          euler = cv2.decomposeProjectionMatrix(proj_matrix)[-1]
          self._pitch_yaw = (euler[0][0], euler[1][0])
 
</s> remove         logger.trace("yaw_pitch: %s", self._pitch_yaw)
 </s> add         logger.trace("yaw_pitch: %s", self._pitch_yaw)  # type: ignore </s> remove         if not self._pitch_yaw:
 </s> add         if not any(self._pitch_yaw): </s> remove     def yaw(self):
 </s> add     def yaw(self) -> float: </s> remove         if not self._pitch_yaw:
 </s> add         if not any(self._pitch_yaw): </s> remove     def pitch(self):
 </s> add     def pitch(self) -> float:
    def _get_pitch_yaw(self) -> None:
          if not 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]
          euler = cv2.decomposeProjectionMatrix(proj_matrix)[-1]
          self._pitch_yaw = (euler[0][0], euler[1][0])
keep keep keep keep replace keep keep keep keep keep
 lib.align.aligned_face updates
  - Typing
  - Legacy support for pre-aligned faces
  - Coverage support for pre-aligned faces
  - Standardized retrieval of sub-crops 
lib/align/aligned_face.py