code: def truncate_graph_dist(G, source_node, max_distance=1000, weight='length', retain_all=False):
      
  
      # get the shortest distance between the node and every other node, then
      # remove every node further than max_distance away
      start_time = time.time()
      G = G.copy()
      distances = nx.shortest_path_length(G, source=source_node, weight=weight)
      distant_nodes = {key:value for key, value in dict(distances).items() if value > max_distance}
      G.remove_nodes_from(distant_nodes.keys())
      log('Truncated graph by weighted network distance in {:,.2f} seconds'.format(time.time()-start_time))
  
      # remove any isolated nodes and retain only the largest component (if
      # retain_all is True)
      if not retain_all:
          G = remove_isolated_nodes(G)
          G = get_largest_component(G)
  
      return G
docs: Remove everything further than some network distance from a specified node
      in graph.
  
      Parameters
      ----------
      G : networkx multidigraph
      source_node : int
          the node in the graph from which to measure network distances to other
          nodes
      max_distance : int
          remove every node in the graph greater than this distance from the
          source_node
      weight : string
          how to weight the graph when measuring distance (default 'length' is
          how many meters long the edge is)
      retain_all : bool
          if True, return the entire graph even if it is not connected
  
      Returns
      -------
      networkx multidigraph