docs: def _indexed_ifilter(self, recursive=True, matches=None, flags=FLAGS,
                           forcetype=None):
          """Iterate over nodes and their corresponding indices in the node list.
  
          The arguments are interpreted as for :meth:`ifilter`. For each tuple
          ``(i, node)`` yielded by this method, ``self.index(node) == i``. Note
          that if *recursive* is ``True``, ``self.nodes[i]`` might not be the
          node itself, but will still contain it.
          """
          match = self._build_matcher(matches, flags)
          if recursive:
              restrict = forcetype if recursive == self.RECURSE_OTHERS else None
              def getter(i, node):
                  for ch in self._get_children(node, restrict=restrict):
                      yield (i, ch)
              inodes = chain(*(getter(i, n) for i, n in enumerate(self.nodes)))
          else:
              inodes = enumerate(self.nodes)
          for i, node in inodes:
              if (not forcetype or isinstance(node, forcetype)) and match(node):
                  yield (i, node)