code: def testCompileInputGraph(self):
      with dummy_artifact_list.given_output_type(DummyArtifact):
          channel = dummy_artifact_list()
      node = DummyNode("MyNode", inputs={"x": channel})
      p = self._prepare_pipeline([node])
      ctx = compiler_context.PipelineContext(p)
      result = pipeline_pb2.NodeInputs()
  
      with self.subTest("First compilation"):
          input_graph_id = node_inputs_compiler._compile_input_graph(
              ctx, node, channel, result
          )
          self.assertLen(result.input_graphs, 1)
          self.assertProtoEquals(
              """
          nodes {
            key: "op_1"
            value: {
              output_data_type: ARTIFACT_LIST
              op_node {
                op_type: "testing.DummyArtifactList"
              }
            }
          }
          result_node: "op_1"
        """,
              result.input_graphs[input_graph_id],
          )
  
      with self.subTest("Second compilation"):
          second_input_graph_id = (
              node_inputs_compiler._compile_input_graph(
                  ctx, node, channel, result
              )
          )
          self.assertEqual(input_graph_id, second_input_graph_id)
  
imports: from typing import List, Type
  from absl.testing import parameterized
  import tensorflow
  from tfx import types
  from tfx.dsl.compiler import compiler_context
  from tfx.dsl.compiler import node_inputs_compiler
  from tfx.dsl.components.base import base_component
  from tfx.dsl.components.base import base_node
  from tfx.dsl.components.base import executor_spec
  from tfx.dsl.control_flow import for_each
  from tfx.dsl.experimental.conditionals import conditional
  from tfx.dsl.experimental.node_execution_options import utils
  from tfx.dsl.input_resolution import resolver_function
  from tfx.dsl.input_resolution import resolver_op
  from tfx.dsl.placeholder import placeholder
  from tfx.orchestration import pipeline
  from tfx.proto.orchestration import pipeline_pb2
  from tfx.types import channel
  from tfx.types import channel_utils
  from tfx.types import component_spec
  from tfx.types import standard_artifacts
  from google.protobuf import text_format
label_desc: Use image node_id 9 for calling the NodeInputsCompilerTest obj's underlying member method code with example usage: obj.testCompileInputGraph() without return types