docs: def select_with_index(
              self,
              selector=IndexedElement,
              transform=identity):
          '''Transforms each element of a sequence into a new form, incorporating
          the index of the element.
  
          Each element is transformed through a selector function which accepts
          the element value and its zero-based index in the source sequence. The
          generated sequence is lazily evaluated.
  
          Note: This method uses deferred execution.
  
          Args:
              selector: A binary function mapping the index of a value in
                  the source sequence and the element value itself to the
                  corresponding value in the generated sequence. The two
                  positional arguments of the selector function are the zero-
                  based index of the current element and the value of the current
                  element. The return value should be the corresponding value in
                  the result sequence. The default selector produces an IndexedElement
                  containing the index and the element giving this function
                  similar behaviour to the built-in enumerate().
  
          Returns:
              A Queryable whose elements are the result of invoking the selector
              function on each element of the source sequence
  
          Raises:
              ValueError: If this Queryable has been closed.
              TypeError: If selector is not callable.
          '''
          if self.closed():
              raise ValueError("Attempt to call select_with_index() on a "
                               "closed Queryable.")
  
          if not is_callable(selector):
              raise TypeError("select_with_index() parameter selector={0} is "
                              "not callable".format(repr(selector)))
  
          if not is_callable(transform):
              raise TypeError("select_with_index() parameter item_selector={0} is "
                              "not callable".format(repr(selector)))
  
          return self._create(itertools.starmap(selector, enumerate(imap(transform, iter(self)))))