code: def _zyz_get_rotation_angles(U):
      r"""Computes the rotation angles :math:`\phi`, :math:`\theta`, :math:`\omega`
      for a unitary :math:`U` that is :math:`SU(2)`
  
      Args:
          U (array[complex]): A matrix that is :math:`SU(2)`
  
      Returns:
          tuple[array[float]]: A tuple containing the rotation angles
              :math:`\phi`, :math:`\theta`, :math:`\omega`
  
      """
  
      # For batched U or single U with non-zero off-diagonal, compute the
      # normal decomposition instead
      off_diagonal_elements = math.clip(math.abs(U[:, 0, 1]), 0, 1)
      thetas = 2 * math.arcsin(off_diagonal_elements)
  
      # Compute phi and omega from the angles of the top row; use atan2 to keep
      # the angle within -np.pi and np.pi, and add very small value to the real
      # part to avoid division by zero.
      epsilon = 1e-64
      angles_U00 = math.arctan2(
          math.imag(U[:, 0, 0]),
          math.real(U[:, 0, 0]) + epsilon,
      )
      angles_U10 = math.arctan2(
          math.imag(U[:, 1, 0]),
          math.real(U[:, 1, 0]) + epsilon,
      )
  
      phis = -angles_U10 - angles_U00
      omegas = angles_U10 - angles_U00
  
      phis, thetas, omegas = map(math.squeeze, [phis, thetas, omegas])
  
      # Normalize the angles
      phis = phis % (4 * np.pi)
      thetas = thetas % (4 * np.pi)
      omegas = omegas % (4 * np.pi)
  
      return phis, thetas, omegas
  
file_path: pennylane/pennylane/ops/op_math/decompositions/single_qubit_unitary.py
imports: import numpy
  import pennylane
  from pennylane import math
label_desc: Use image node_id 2 for calling a global function with example usage: _zyz_get_rotation_angles(U) and returns: phis,  thetas,  omegas