docs: def bfs_multi_edges(G, source, reverse=False, keys=True, data=False):
      """Produce edges in a breadth-first-search starting at source.
      -----
      Based on http://www.ics.uci.edu/~eppstein/PADS/BFS.py
      by D. Eppstein, July 2004.
      """
      from collections import deque
      from functools import partial
      if reverse:
          G = G.reverse()
      edges_iter = partial(G.edges_iter, keys=keys, data=data)
  
      list(G.edges_iter('multitest', keys=True, data=True))
  
      visited_nodes = set([source])
      # visited_edges = set([])
      queue = deque([(source, edges_iter(source))])
      while queue:
          parent, edges = queue[0]
          try:
              edge = next(edges)
              edge_nodata = edge[0:3]
              # if edge_nodata not in visited_edges:
              yield edge
              # visited_edges.add(edge_nodata)
              child = edge_nodata[1]
              if child not in visited_nodes:
                  visited_nodes.add(child)
                  queue.append((child, edges_iter(child)))
          except StopIteration:
              queue.popleft()