code: def euler_from_quaternion(
      w: Tensor, x: Tensor, y: Tensor, z: Tensor
  ) -> tuple[Tensor, Tensor, Tensor]:
      """Convert a quaternion coefficients to Euler angles.
  
      Returned angles are in radians in XYZ convention.
  
      Args:
          w: quaternion :math:`q_w` coefficient.
          x: quaternion :math:`q_x` coefficient.
          y: quaternion :math:`q_y` coefficient.
          z: quaternion :math:`q_z` coefficient.
  
      Return:
          A tuple with euler angles`roll`, `pitch`, `yaw`.
      """
      KORNIA_CHECK(w.shape == x.shape)
      KORNIA_CHECK(x.shape == y.shape)
      KORNIA_CHECK(y.shape == z.shape)
  
      yy = y * y
  
      sinr_cosp = 2.0 * (w * x + y * z)
      cosr_cosp = 1.0 - 2.0 * (x * x + yy)
      roll = sinr_cosp.atan2(cosr_cosp)
  
      sinp = 2.0 * (w * y - z * x)
      sinp = sinp.clamp(min=-1.0, max=1.0)
      pitch = sinp.asin()
  
      siny_cosp = 2.0 * (w * z + x * y)
      cosy_cosp = 1.0 - 2.0 * (yy + z * z)
      yaw = siny_cosp.atan2(cosy_cosp)
  
      return roll, pitch, yaw
  
imports: from __future__ import annotations
  from typing import Optional
  import torch
  import torch.nn.functional
  from kornia.constants import pi
  from kornia.core import Tensor, concatenate, cos, pad, sin, stack, tensor, where, zeros_like
  from kornia.core.check import KORNIA_CHECK, KORNIA_CHECK_SHAPE
  from kornia.utils import deprecated
  from kornia.utils.helpers import _torch_inverse_cast
label_desc: Use image node_id 23 for calling a global function with example usage: euler_from_quaternion(w, x, y, z) and returns: roll,  pitch,  yaw