code: def quaternion_matrix(quaternion):
      """Return homogeneous rotation matrix from quaternion.
  
      >>> M = quaternion_matrix([0.99810947, 0.06146124, 0, 0])
      >>> numpy.allclose(M, rotation_matrix(0.123, [1, 0, 0]))
      True
      >>> M = quaternion_matrix([1, 0, 0, 0])
      >>> numpy.allclose(M, numpy.identity(4))
      True
      >>> M = quaternion_matrix([0, 1, 0, 0])
      >>> numpy.allclose(M, numpy.diag([1, -1, -1, 1]))
      True
  
      """
      q = numpy.array(quaternion, dtype=numpy.float64, copy=True)
      n = numpy.dot(q, q)
      if n < _EPS:
          return numpy.identity(4)
      q *= math.sqrt(2.0 / n)
      q = numpy.outer(q, q)
      return numpy.array(
          [
              [
                  1.0 - q[2, 2] - q[3, 3],
                  q[1, 2] - q[3, 0],
                  q[1, 3] + q[2, 0],
                  0.0,
              ],
              [
                  q[1, 2] + q[3, 0],
                  1.0 - q[1, 1] - q[3, 3],
                  q[2, 3] - q[1, 0],
                  0.0,
              ],
              [
                  q[1, 3] - q[2, 0],
                  q[2, 3] + q[1, 0],
                  1.0 - q[1, 1] - q[2, 2],
                  0.0,
              ],
              [0.0, 0.0, 0.0, 1.0],
          ]
      )
  
imports: import math
  import numpy
label_desc: Use image node_id 25 for calling a global function with example usage: quaternion_matrix(quaternion) and returns: numpy, numpy