class_docstr: Graph.
  
  Args:
      nodes(`Dict[str, NodeRepr]`): The pipeline nodes from DAGRepr.nodes.
      edges(`Dict[str, Any]`): The pipeline edges from DAGRepr.edges.
      operator_pool(`OperatorPool`): The operator pool.
      thread_pool(`OperatorPool`): The ThreadPoolExecutor.
class_docstr_tok: ["Graph",".","Args",":","nodes","(","`","Dict","[","str",",","NodeRepr","]","`",")",":","The","pipeline","nodes","from","DAGRepr.nodes",".","edges","(","`","Dict","[","str",",","Any","]","`",")",":","The","pipeline","edges","from","DAGRepr.edges",".","operator_pool","(","`","OperatorPool","`",")",":","The","operator","pool",".","thread_pool","(","`","OperatorPool","`",")",":","The","ThreadPoolExecutor","."]
code: def result(self) -> any:
      for f in self.features:
          f.result()
      errs = ""
      for node in self._node_runners:
          if node.status != NodeStatus.FINISHED:
              if node.status == NodeStatus.FAILED:
                  errs += node.err_msg + "\n"
      if errs:
          raise RuntimeError(errs)
      end_edge_num = self._nodes["_output"].out_edges[0]
      res = self._data_queues[end_edge_num]
      self.time_profiler.record(Event.pipe_name, Event.pipe_out)
      return res
  
imports: import re
  from typing import Dict, Any, Union, Tuple, List
  from concurrent.futures import ThreadPoolExecutor
  from towhee.tools import visualizers
  from towhee.utils.log import engine_log
  from .operator_manager import OperatorPool
  from .data_queue import DataQueue
  from .dag_repr import DAGRepr
  from .nodes import create_node, NodeStatus
  from .node_repr import NodeRepr
  from .time_profiler import TimeProfiler, Event
label_desc: Use image node_id 3 for calling the _Graph obj's underlying member method code with example usage: obj.result() and returns: res