parameters: (quat0, quat1, fraction, spin=0, shortestpath=True)
return_statement: return q0
docstring: Return spherical linear interpolation between two quaternions.
  
      >>> q0 = random_quaternion()
      >>> q1 = random_quaternion()
      >>> q = quaternion_slerp(q0, q1, 0.0)
      >>> numpy.allclose(q, q0)
      True
      >>> q = quaternion_slerp(q0, q1, 1.0, 1)
      >>> numpy.allclose(q, q1)
      True
      >>> q = quaternion_slerp(q0, q1, 0.5)
      >>> angle = math.acos(numpy.dot(q0, q))
      >>> numpy.allclose(2.0, math.acos(numpy.dot(q0, q1)) / angle) or \
          numpy.allclose(2.0, math.acos(-numpy.dot(q0, q1)) / angle)
      True
docstring_summary: Return spherical linear interpolation between two quaternions.
docstring_tokens: Return spherical linear interpolation between two quaternions .
function: def quaternion_slerp(quat0, quat1, fraction, spin=0, shortestpath=True):
      """Return spherical linear interpolation between two quaternions.
  
      >>> q0 = random_quaternion()
      >>> q1 = random_quaternion()
      >>> q = quaternion_slerp(q0, q1, 0.0)
      >>> numpy.allclose(q, q0)
      True
      >>> q = quaternion_slerp(q0, q1, 1.0, 1)
      >>> numpy.allclose(q, q1)
      True
      >>> q = quaternion_slerp(q0, q1, 0.5)
      >>> angle = math.acos(numpy.dot(q0, q))
      >>> numpy.allclose(2.0, math.acos(numpy.dot(q0, q1)) / angle) or \
          numpy.allclose(2.0, math.acos(-numpy.dot(q0, q1)) / angle)
      True
  
      """
      q0 = unit_vector(quat0[:4])
      q1 = unit_vector(quat1[:4])
      if fraction == 0.0:
          return q0
      elif fraction == 1.0:
          return q1
      d = numpy.dot(q0, q1)
      if abs(abs(d) - 1.0) < _EPS:
          return q0
      if shortestpath and d < 0.0:
          # invert rotation
          d = -d
          q1 *= -1.0
      angle = math.acos(d) + spin * math.pi
      if abs(angle) < _EPS:
          return q0
      isin = 1.0 / math.sin(angle)
      q0 *= math.sin((1.0 - fraction) * angle) * isin
      q1 *= math.sin(fraction * angle) * isin
      q0 += q1
      return q0
function_tokens: def quaternion_slerp ( quat0 , quat1 , fraction , spin = 0 , shortestpath = True ) : q0 = unit_vector ( quat0 [ : 4 ] ) q1 = unit_vector ( quat1 [ : 4 ] ) if fraction == 0.0 : return q0 elif fraction == 1.0 : return q1 d = numpy . dot ( q0 , q1 ) if abs ( abs ( d ) - 1.0 ) < _EPS : return q0 if shortestpath and d < 0.0 : # invert rotation d = - d q1 *= - 1.0 angle = math . acos ( d ) + spin * math . pi if abs ( angle ) < _EPS : return q0 isin = 1.0 / math . sin ( angle ) q0 *= math . sin ( ( 1.0 - fraction ) * angle ) * isin q1 *= math . sin ( fraction * angle ) * isin q0 += q1 return q0