code: def intermediates(cls, q0, q1, n, include_endpoints=False):
          
          step_size = 1.0 / (n + 1)
          if include_endpoints:
              steps = [i * step_size for i in range(0, n + 2)]
          else:
              steps = [i * step_size for i in range(1, n + 1)]
          for step in steps:
              yield cls.slerp(q0, q1, step)
docs: Generator method to get an iterable sequence of `n` evenly spaced quaternion
          rotations between any two existing quaternion endpoints lying on the unit
          radius hypersphere.
  
          This is a convenience function that is based on `Quaternion.slerp()` as defined above.
  
          This is a class method and is called as a method of the class itself rather than on a particular instance.
  
          Params:
              q_start: initial endpoint rotation as a Quaternion object
              q_end:   final endpoint rotation as a Quaternion object
              n:       number of intermediate quaternion objects to include within the interval
              include_endpoints: [optional] if set to `True`, the sequence of intermediates
                  will be 'bookended' by `q_start` and `q_end`, resulting in a sequence length of `n + 2`.
                  If set to `False`, endpoints are not included. Defaults to `False`.
  
          Yields:
              A generator object iterating over a sequence of intermediate quaternion objects.
  
          Note:
              This feature only makes sense when interpolating between unit quaternions (those lying on the unit radius hypersphere).
              Calling this method will implicitly normalise the endpoints to unit quaternions if they are not already unit length.