code: def _get_channel_pb(
      self,
      artifact_type: Type[types.Artifact] = DummyArtifact,
      pipeline_name: str = "",
      node_id: str = "",
      output_key: str = "",
  ) -> pipeline_pb2.InputSpec.Channel:
      result = pipeline_pb2.InputSpec.Channel()
      node_inputs_compiler._compile_channel_pb(
          artifact_type=artifact_type,
          pipeline_name=pipeline_name or self.pipeline_name,
          node_id=node_id,
          output_key=output_key,
          result=result,
      )
      return result
  
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 3 for calling the NodeInputsCompilerTest obj's underlying member method code with example usage: obj._get_channel_pb(artifact_type, pipeline_name, node_id, output_key) and returns: result