A generator that searches over *path_elements* (starting from the
        index *start_at*), yielding for each match.

        Each value yielded is the index into *path_elements* to the first element
        *after* each match. In other words, the returned index has already
        consumed the matching path elements of this :class:`Section`.

        Matches work by finding a contiguous group of path elements that
        match the list of :class:`Matcher` objects in this :class:`Section`
        as they are naturally paired.

        This method includes an implementation optimization that simplifies
        the search for :class:`Section` instances containing a single path
        element. This produces significant performance improvements.

def match_iter(self, path_elements, start_at):
        """A generator that searches over *path_elements* (starting from the
        index *start_at*), yielding for each match.

        Each value yielded is the index into *path_elements* to the first element
        *after* each match. In other words, the returned index has already
        consumed the matching path elements of this :class:`Section`.

        Matches work by finding a contiguous group of path elements that
        match the list of :class:`Matcher` objects in this :class:`Section`
        as they are naturally paired.

        This method includes an implementation optimization that simplifies
        the search for :class:`Section` instances containing a single path
        element. This produces significant performance improvements.
        """
        if self.length == 1:
            return self._match_iter_single(path_elements, start_at)
        else:
            return self._match_iter_generic(path_elements, start_at)