code: def quat_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 = np.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
docs: Return spherical linear interpolation between two quaternions.
      >>> q0 = random_quat()
      >>> q1 = random_quat()
      >>> q = quat_slerp(q0, q1, 0.0)
      >>> np.allclose(q, q0)
      True
      >>> q = quat_slerp(q0, q1, 1.0, 1)
      >>> np.allclose(q, q1)
      True
      >>> q = quat_slerp(q0, q1, 0.5)
      >>> angle = math.acos(np.dot(q0, q))
      >>> np.allclose(2.0, math.acos(np.dot(q0, q1)) / angle) or \
          np.allclose(2.0, math.acos(-np.dot(q0, q1)) / angle)
      True