code: def euler2angle_axis(z=0, y=0, x=0):
      """Return angle, axis corresponding to these Euler angles
  
      Uses the z, then y, then x convention above
  
      Parameters
      ----------
      z : scalar
         Rotation angle in radians around z-axis (performed first)
      y : scalar
         Rotation angle in radians around y-axis
      x : scalar
         Rotation angle in radians around x-axis (performed last)
  
      Returns
      -------
      theta : scalar
         angle of rotation
      vector : array shape (3,)
         axis around which rotation occurs
  
      Examples
      --------
      >>> theta, vec = euler2angle_axis(0, 1.5, 0)
      >>> print(theta)
      1.5
      >>> np.allclose(vec, [0, 1, 0])
      True
      """
      # delayed import to avoid cyclic dependencies
      from . import quaternions as nq
  
      return nq.quat2angle_axis(euler2quat(z, y, x))
  
file_path: nibabel/nibabel/eulerangles.py
imports: import math
  from functools import reduce
  import numpy
label_desc: Use image node_id 5 for calling a global function with example usage: euler2angle_axis(z, y, x) and returns: nq