code: def euler_matrix(ai, aj, ak, axes="sxyz"):
      """Return homogeneous rotation matrix from Euler angles and axis sequence.
  
      Code modified from the work of Christoph Gohlke, link provided here
      https://github.com/cgohlke/transformations/blob/master/transformations/transformations.py
  
      Parameters
      ----------
      ai, aj, ak : Euler's roll, pitch and yaw angles
      axes : One of 24 axis sequences as string or encoded tuple
  
      Returns
      -------
      matrix : ndarray (4, 4)
  
      Code modified from the work of Christoph Gohlke, link provided here
      https://github.com/cgohlke/transformations/blob/master/transformations/transformations.py
  
      Examples
      --------
      >>> import numpy
      >>> R = euler_matrix(1, 2, 3, 'syxz')
      >>> numpy.allclose(numpy.sum(R[0]), -1.34786452)
      True
      >>> R = euler_matrix(1, 2, 3, (0, 1, 0, 1))
      >>> numpy.allclose(numpy.sum(R[0]), -0.383436184)
      True
      >>> ai, aj, ak = (4.0*math.pi) * (numpy.random.random(3) - 0.5)
      >>> for axes in _AXES2TUPLE.keys():
      ...    _ = euler_matrix(ai, aj, ak, axes)
      >>> for axes in _TUPLE2AXES.keys():
      ...    _ = euler_matrix(ai, aj, ak, axes)
  
      """
      try:
          firstaxis, parity, repetition, frame = _AXES2TUPLE[axes]
      except (AttributeError, KeyError):
          firstaxis, parity, repetition, frame = axes
  
      i = firstaxis
      j = _NEXT_AXIS[i + parity]
      k = _NEXT_AXIS[i - parity + 1]
  
      if frame:
          ai, ak = ak, ai
      if parity:
          ai, aj, ak = -ai, -aj, -ak
  
      si, sj, sk = math.sin(ai), math.sin(aj), math.sin(ak)
      ci, cj, ck = math.cos(ai), math.cos(aj), math.cos(ak)
      cc, cs = ci * ck, ci * sk
      sc, ss = si * ck, si * sk
  
      M = np.identity(4)
      if repetition:
          M[i, i] = cj
          M[i, j] = sj * si
          M[i, k] = sj * ci
          M[j, i] = sj * sk
          M[j, j] = -cj * ss + cc
          M[j, k] = -cj * cs - sc
          M[k, i] = -sj * ck
          M[k, j] = cj * sc + cs
          M[k, k] = cj * cc - ss
      else:
          M[i, i] = cj * ck
          M[i, j] = sj * sc - cs
          M[i, k] = sj * cc + ss
          M[j, i] = cj * sk
          M[j, j] = sj * ss + cc
          M[j, k] = sj * cs - sc
          M[k, i] = -sj
          M[k, j] = cj * si
          M[k, k] = cj * ci
      return M
  
imports: import itertools
  import math
  import numpy
  import numpy.linalg
label_desc: Use image node_id 13 for calling a global function with example usage: euler_matrix(ai, aj, ak, axes) and returns: M