parameters: (ai: float, aj: float, ak: float, axes: str = "sxyz")
return_statement: return M
docstring: Return homogeneous rotation matrix from Euler angles and axis sequence.
  
      ai, aj, ak : Euler's roll, pitch and yaw angles
      axes : One of 24 axis sequences as string or encoded tuple
  
      >>> 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*math.pi) * (numpy.random.random(3) - 0.5)
      >>> for axes in _AXES2TUPLE.keys():
      ...    R = euler_matrix(ai, aj, ak, axes)
      >>> for axes in _TUPLE2AXES.keys():
      ...    R = euler_matrix(ai, aj, ak, axes)
docstring_summary: Return homogeneous rotation matrix from Euler angles and axis sequence.
docstring_tokens: Return homogeneous rotation matrix from Euler angles and axis sequence .
function: def euler_matrix(ai: float, aj: float, ak: float, axes: str = "sxyz") -> numpy.ndarray:
      """Return homogeneous rotation matrix from Euler angles and axis sequence.
  
      ai, aj, ak : Euler's roll, pitch and yaw angles
      axes : One of 24 axis sequences as string or encoded tuple
  
      >>> 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*math.pi) * (numpy.random.random(3) - 0.5)
      >>> for axes in _AXES2TUPLE.keys():
      ...    R = euler_matrix(ai, aj, ak, axes)
      >>> for axes in _TUPLE2AXES.keys():
      ...    R = euler_matrix(ai, aj, ak, axes)
  
      """
      try:
          firstaxis, parity, repetition, frame = _AXES2TUPLE[axes]
      except (AttributeError, KeyError):
          _TUPLE2AXES[axes]  # validation
          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 = numpy.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
function_tokens: def euler_matrix ( ai : float , aj : float , ak : float , axes : str = "sxyz" ) -> numpy . ndarray : try : firstaxis , parity , repetition , frame = _AXES2TUPLE [ axes ] except ( AttributeError , KeyError ) : _TUPLE2AXES [ axes ] # validation 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 = numpy . 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