code: def trace_graph(graph):
      
      result = {None: []}
      for vertex in graph:
          result[vertex] = []
          for root in graph.iter_children(None):
              paths = []
              _trace_visit_vertex(graph, root, vertex, {None}, [None], paths)
              result[vertex].extend(paths)
      return result
docs: Build a collection of "traces" for each package.
  
      A trace is a list of names that eventually leads to the package. For
      example, if A and B are root dependencies, A depends on C and D, B
      depends on C, and C depends on D, the return value would be like::
  
          {
              None: [],
              "A": [None],
              "B": [None],
              "C": [[None, "A"], [None, "B"]],
              "D": [[None, "B", "C"], [None, "A"]],
          }