code: def dump_graphviz(tree, output_format='dot'):
      
      try:
          from graphviz import backend, Digraph
      except ImportError:
          print('graphviz is not available, but necessary for the output '
                'option. Please install it.', file=sys.stderr)
          sys.exit(1)
  
      if output_format not in backend.FORMATS:
          print('{0} is not a supported output format.'.format(output_format),
                file=sys.stderr)
          print('Supported formats are: {0}'.format(
              ', '.join(sorted(backend.FORMATS))), file=sys.stderr)
          sys.exit(1)
  
      graph = Digraph(format=output_format)
      for package, deps in tree.items():
          project_name = package.project_name
          label = '{0}\n{1}'.format(project_name, package.version)
          graph.node(project_name, label=label)
          for dep in deps:
              label = dep.version_spec
              if not label:
                  label = 'any'
              graph.edge(project_name, dep.project_name, label=label)
  
      # Allow output of dot format, even if GraphViz isn't installed.
      if output_format == 'dot':
          return graph.source
  
      # As it's unknown if the selected output format is binary or not, try to
      # decode it as UTF8 and only print it out in binary if that's not possible.
      try:
          return graph.pipe().decode('utf-8')
      except UnicodeDecodeError:
          return graph.pipe()
docs: Output dependency graph as one of the supported GraphViz output formats.
  
      :param dict tree: dependency graph
      :param string output_format: output format
      :returns: representation of tree in the specified output format
      :rtype: str or binary representation depending on the output format