class_docstr: Driver for Resolver.
  
  Constructs an instance of the resolver_class specified by user with configs
  passed in by user and marks the resolved artifacts as the output of the
  Resolver.
code: def _build_input_dict(
      self,
      pipeline_info: data_types.PipelineInfo,
      input_channels: Mapping[str, types.BaseChannel],
  ) -> Dict[str, List[types.Artifact]]:
      pipeline_context = self._metadata_handle.get_pipeline_context(
          pipeline_info
      )
      if pipeline_context is None:
          raise RuntimeError(
              f"Pipeline context absent for {pipeline_info}."
          )
  
      result = {}
      for key, c in input_channels.items():
          artifacts_by_id = {}  # Deduplicate by ID.
          # TODO(b/248145891): Stop using get_individual_channels which does not
          # support all BaseChannel types. Use a common input resolution stack
          # instead.
          for channel in channel_utils.get_individual_channels(c):
              artifacts = self._metadata_handle.get_qualified_artifacts(
                  contexts=[pipeline_context],
                  type_name=channel.type_name,
                  producer_component_id=channel.producer_component_id,
                  output_key=channel.output_key,
              )
              artifacts_by_id.update({a.id: a for a in artifacts})
          result[key] = list(artifacts_by_id.values())
      return result
  
imports: import abc
  from typing import Any, Dict, List, Optional, Type, Mapping
  from tfx import types
  from tfx.dsl.components.base import base_driver
  from tfx.dsl.components.base import base_node
  from tfx.dsl.input_resolution import resolver_op
  from tfx.orchestration import data_types
  from tfx.orchestration import metadata
  from tfx.types import channel
  from tfx.types import channel_utils
  from tfx.types import resolved_channel
  from tfx.utils import doc_controls
  from tfx.utils import json_utils
  from tfx.utils import typing_utils
  import ml_metadata
label_desc: Use image node_id 2 for calling the _ResolverDriver obj's underlying member method code with example usage: obj._build_input_dict(pipeline_info, input_channels) and returns: result