class_docstr: Metadata resolver for reasoning about metadata information.
  
  Metadata resolver composes and sends queries to get a lineage graph from
  metadata store. The lineage graph is a snapshot view of the ML pipeline's
  metadata, containing all information needed to answer quetions about the
  lineage of nodes of interest.
  Based on the lineage graph, metadata resolver provides a set of util functions
  that help users reason about metadata information by post-processing the
  graph.
  It can be considered as a wrapper layer built on top of metadata store's graph
  tracing APIs.
  
  Example:
  
  # `store` is a metadata store that has been initialized.
  resolver = MetadataResolver(store)
  # Call functions defined in MetadataResolver. For example:
  artifact_ids = [model.id]
  downstream_artifacts_dict = get_downstream_artifacts_by_artifact_ids(
      artifact_ids, max_num_hops = 2
  )
code: def __init__(self, store: metadata_store.MetadataStore):
      self._store = store
  
file_path: ml-metadata/ml_metadata/tools/mlmd_resolver/metadata_resolver.py
imports: from typing import Callable, Dict, List, Optional
  from ml_metadata import metadata_store
  from ml_metadata.proto import metadata_store_pb2
  from ml_metadata.tools.mlmd_resolver import metadata_resolver_utils
label_desc: Use image node_id 1 to create a new MetadataResolver object  with example: obj = MetadataResolver(store)