code: def testUnpackExecutorOutput(self):
      artifact0 = _create_artifact("uri0").mlmd_artifact
      artifact1 = _create_artifact("uri1").mlmd_artifact
      artifact2 = _create_artifact("uri2").mlmd_artifact
      executor_output_artifacts = {
          "artifact_key0": execution_result_pb2.ExecutorOutput.ArtifactList(
              artifacts=[]
          ),
          "artifact_key1": execution_result_pb2.ExecutorOutput.ArtifactList(
              artifacts=[
                  artifact0,
              ]
          ),
          "artifact_key2": execution_result_pb2.ExecutorOutput.ArtifactList(
              artifacts=[
                  artifact1,
                  artifact2,
              ]
          ),
      }
      expected_output = {
          "artifact_key0": [],
          "artifact_key1": [artifact0],
          "artifact_key2": [artifact1, artifact2],
      }
      actual_output = data_types_utils.unpack_executor_output_artifacts(
          executor_output_artifacts
      )
      self.assertEqual(expected_output, actual_output)
  
imports: from absl.testing import parameterized
  import tensorflow
  from tfx import types
  from tfx.orchestration import data_types_utils
  from tfx.proto.orchestration import execution_result_pb2
  from tfx.proto.orchestration import pipeline_pb2
  from tfx.types import artifact_utils
  from tfx.utils import proto_utils
  from tfx.utils import test_case_utils
  from google.protobuf import struct_pb2
  from google.protobuf import text_format
  from ml_metadata.proto import metadata_store_pb2
  from ml_metadata.proto import metadata_store_service_pb2
label_desc: Use image node_id 3 for calling the DataTypesUtilsTest obj's underlying member method code with example usage: obj.testUnpackExecutorOutput() without return types