code: def testReconstructArtifactMultimap(self):
      a1 = Artifact(id=1, name="a1")
      a2 = Artifact(id=2, name="a2")
      b = Artifact(id=3, name="b")
      c = Artifact(id=4, name="c")
  
      result = event_lib.reconstruct_artifact_multimap(
          artifacts=[a1, a2, b, c],
          events=[
              Event(artifact_id=a1.id, path=valid_path("a", 0)),
              Event(artifact_id=a2.id, path=valid_path("a", 1)),
              Event(artifact_id=b.id, path=valid_path("b", 0)),
              Event(artifact_id=c.id, path=valid_path("c", 0)),
          ],
      )
  
      self.assertEqual(
          result,
          {
              "a": [a1, a2],
              "b": [b],
              "c": [c],
          },
      )
  
imports: import itertools
  from absl.testing import parameterized
  import tensorflow
  from tfx.orchestration.portable.mlmd import event_lib
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 3 for calling the EventLibTest obj's underlying member method code with example usage: obj.testReconstructArtifactMultimap() without return types