class_docstr: Allows previously-generated Artifacts to be used in a new pipeline run.
  
  By implementing this in a class (instead of a function), we reduce the
  number of MLMD reads when reusing the outputs of multiple nodes in the same
  pipeline run.
class_docstr_tok: ["Allows","previously-generated","Artifacts","to","be","used","in","a","new","pipeline","run",".","By","implementing","this","in","a","class","(","instead","of","a","function",")",",","we","reduce","the","number","of","MLMD","reads","when","reusing","the","outputs","of","multiple","nodes","in","the","same","pipeline","run","."]
docstr: Makes the outputs of `node_id` available to new_pipeline_run_id.
docstr_tok: ["Makes","the","outputs","of","`","node_id","`","available","to","new_pipeline_run_id","."]
code: def reuse_node_outputs(self, node: node_proto_view.NodeProtoView):
      """Makes the outputs of `node_id` available to new_pipeline_run_id."""
      previous_executions = self._get_successful_executions(node)
      self._cache_and_publish(previous_executions, node)
  
imports: import collections
  import concurrent.futures
  import enum
  from typing import Collection, Dict, Final, List, Mapping, Optional, OrderedDict, Sequence, Set, Tuple
  import uuid
  from absl import logging
  from tfx.dsl.compiler import compiler_utils
  from tfx.dsl.compiler import constants
  from tfx.orchestration import metadata
  from tfx.orchestration import node_proto_view
  from tfx.orchestration.portable import execution_publish_utils
  from tfx.orchestration.portable.mlmd import context_lib
  from tfx.orchestration.portable.mlmd import execution_lib
  from tfx.proto.orchestration import pipeline_pb2
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 7 for calling the _ArtifactRecycler obj's underlying member method code with example usage: obj.reuse_node_outputs(node) without return types