code: def bfs_successors(G, source, depth_limit=None, sort_neighbors=None):
      """Returns an iterator of successors in breadth-first-search from source.
  
      Parameters
      ----------
      G : NetworkX graph
  
      source : node
         Specify starting node for breadth-first search
  
      depth_limit : int, optional(default=len(G))
          Specify the maximum search depth
  
      sort_neighbors : function
          A function that takes the list of neighbors of given node as input, and
          returns an *iterator* over these neighbors but with custom ordering.
  
      Returns
      -------
      succ: iterator
         (node, successors) iterator where `successors` is the non-empty list of
         successors of `node` in a breadth first search from `source`.
         To appear in the iterator, `node` must have successors.
  
      Examples
      --------
      >>> G = nx.path_graph(3)
      >>> dict(nx.bfs_successors(G, 0))
      {0: [1], 1: [2]}
      >>> H = nx.Graph()
      >>> H.add_edges_from([(0, 1), (0, 2), (1, 3), (1, 4), (2, 5), (2, 6)])
      >>> dict(nx.bfs_successors(H, 0))
      {0: [1, 2], 1: [3, 4], 2: [5, 6]}
      >>> G = nx.Graph()
      >>> nx.add_path(G, [0, 1, 2, 3, 4, 5, 6])
      >>> nx.add_path(G, [2, 7, 8, 9, 10])
      >>> dict(nx.bfs_successors(G, source=1, depth_limit=3))
      {1: [0, 2], 2: [3, 7], 3: [4], 7: [8]}
      >>> G = nx.DiGraph()
      >>> nx.add_path(G, [0, 1, 2, 3, 4, 5])
      >>> dict(nx.bfs_successors(G, source=3))
      {3: [4], 4: [5]}
  
      Notes
      -----
      Based on http://www.ics.uci.edu/~eppstein/PADS/BFS.py
      by D. Eppstein, July 2004.The modifications
      to allow depth limits based on the Wikipedia article
      "`Depth-limited-search`_".
  
      .. _Depth-limited-search: https://en.wikipedia.org/wiki/Depth-limited_search
  
      See Also
      --------
      bfs_tree
      bfs_edges
      edge_bfs
      """
      parent = source
      children = []
      for p, c in bfs_edges(
          G,
          source,
          depth_limit=depth_limit,
          sort_neighbors=sort_neighbors,
      ):
          if p == parent:
              children.append(c)
              continue
          yield (parent, children)
          children = [c]
          parent = p
      yield (parent, children)
  
file_path: networkx/networkx/algorithms/traversal/breadth_first_search.py
imports: import math
  from collections import deque
  import networkx
label_desc: Use image node_id 5 for calling a global function with example usage: bfs_successors(G, source, depth_limit, sort_neighbors) without return types