code: def get_subgraphs(graph=None):
      
      graph = graph or DEPENDENCIES
      keys = set(graph)
      frontier = set()
      seen = set()
      while keys:
          frontier.add(keys.pop())
          while frontier:
              component = frontier.pop()
              seen.add(component)
              frontier |= set([d for d in get_dependencies(component) if d in graph])
              frontier |= set([d for d in get_dependents(component) if d in graph])
              frontier -= seen
          yield dict((s, get_dependencies(s)) for s in seen)
          keys -= seen
          seen.clear()
docs: Given a graph of possibly disconnected components, generate all graphs of
      connected components. graph is a dictionary of dependencies. Keys are
      components, and values are sets of components on which they depend.