code: def _dump(self) -> Any:
      nodes_dump = {}
      for node in self.hidden_nodes:
          if isinstance(node, OriginNode):
              nodes_dump[
                  f"{node.original_graph.model.model_id}_{node.name}"
              ] = node._dump()
          else:
              nodes_dump[
                  f"{node.graph.model.model_id}_{node.name}"
              ] = node._dump()
  
      edges_dump = []
      for edge in self.edges:
          if isinstance(edge.head, OriginNode):
              head_info = f"{edge.head.original_graph.model.model_id}_{edge.head.name}"
          else:
              head_info = edge.head.name
          if isinstance(edge.tail, OriginNode):
              tail_info = f"{edge.tail.original_graph.model.model_id}_{edge.tail.name}"
          else:
              tail_info = edge.tail.name
          edges_dump.append((head_info, tail_info))
      return {
          "inputs": self.input_node.operation.io_names,
          "outputs": self.output_node.operation.io_names,
          "nodes": nodes_dump,
          "edges": edges_dump,
      }
  
imports: import copy
  from typing import Dict, Tuple, Any, Type, cast
  from nni.common.device import Device, CPUDevice
  from nni.mutable.utils import uid
  from nni.nas.space import Edge, Graph, GraphModelSpace, Node
  from nni.nas.space.graph_op import Cell, Operation, _IOPseudoOperation
label_desc: Use image node_id 2 for calling the LogicalGraph obj's underlying member method code with example usage: obj._dump() and returns: dict