code: def yaw_pitch_roll(self):
          
  
          self._normalise()
          yaw = np.arctan2(2*(self.q[0]*self.q[3] - self.q[1]*self.q[2]),
              1 - 2*(self.q[2]**2 + self.q[3]**2))
          pitch = np.arcsin(2*(self.q[0]*self.q[2] + self.q[3]*self.q[1]))
          roll = np.arctan2(2*(self.q[0]*self.q[1] - self.q[2]*self.q[3]),
              1 - 2*(self.q[1]**2 + self.q[2]**2))
  
          return yaw, pitch, roll
docs: Get the equivalent yaw-pitch-roll angles aka. intrinsic Tait-Bryan angles following the z-y'-x'' convention
  
          Returns:
              yaw:    rotation angle around the z-axis in radians, in the range `[-pi, pi]`
              pitch:  rotation angle around the y'-axis in radians, in the range `[-pi/2, -pi/2]`
              roll:   rotation angle around the x''-axis in radians, in the range `[-pi, pi]`
  
          The resulting rotation_matrix would be R = R_x(roll) R_y(pitch) R_z(yaw)
  
          Note:
              This feature only makes sense when referring to a unit quaternion. Calling this method will implicitly normalise the Quaternion object to a unit quaternion if it is not already one.