code: def _render(g, out, format_, include_asset_exists=False):
      """
      Draw `g` as a graph to `out`, in format `format`.
  
      Parameters
      ----------
      g : catalyst.pipeline.graph.TermGraph
          Graph to render.
      out : file-like object
      format_ : str {'png', 'svg'}
          Output format.
      include_asset_exists : bool
          Whether to filter out `AssetExists()` nodes.
      """
      graph_attrs = {"rankdir": "TB", "splines": "ortho"}
      cluster_attrs = {"style": "filled", "color": "lightgoldenrod1"}
  
      in_nodes = g.loadable_terms
      out_nodes = list(g.outputs.values())
  
      f = BytesIO()
      with graph(f, "G", **graph_attrs):
          # Write outputs cluster.
          with cluster(f, "Output", labelloc="b", **cluster_attrs):
              for term in filter_nodes(include_asset_exists, out_nodes):
                  add_term_node(f, term)
  
          # Write inputs cluster.
          with cluster(f, "Input", **cluster_attrs):
              for term in filter_nodes(include_asset_exists, in_nodes):
                  add_term_node(f, term)
  
          # Write intermediate results.
          for term in filter_nodes(
              include_asset_exists, topological_sort(g.graph)
          ):
              if term in in_nodes or term in out_nodes:
                  continue
              add_term_node(f, term)
  
          # Write edges
          for source, dest in g.graph.edges():
              if source is AssetExists() and not include_asset_exists:
                  continue
              add_edge(f, id(source), id(dest))
  
      cmd = ["dot", "-T", format_]
      try:
          proc = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
      except OSError as e:
          if e.errno == errno.ENOENT:
              raise RuntimeError(
                  "Couldn't find `dot` graph layout program. "
                  "Make sure Graphviz is installed and `dot` is on your path."
              )
          else:
              raise
  
      f.seek(0)
      proc_stdout, proc_stderr = proc.communicate(f.read())
      if proc_stderr:
          raise RuntimeError(
              "Error(s) while rendering graph: %s"
              % proc_stderr.decode("utf-8")
          )
  
      out.write(proc_stdout)
  
imports: from __future__ import unicode_literals
  from contextlib import contextmanager
  import errno
  from functools import partial
  from io import BytesIO
  from subprocess import Popen, PIPE
  from networkx import topological_sort
  from six import iteritems
  from catalyst.pipeline.data import BoundColumn
  from catalyst.pipeline import Filter, Factor, Classifier, Term
  from catalyst.pipeline.term import AssetExists
label_desc: Use image node_id 9 for calling a global function with example usage: _render(g, out, format_, include_asset_exists) without return types