class_docstr: Helper methods for inputs_utils_test.
code: def assertArtifactMapEqual(self, expected, actual):
      self.assertIsInstance(expected, collections.abc.Mapping)
      self.assertIsInstance(actual, collections.abc.Mapping)
      self.assertEqual(set(expected.keys()), set(actual.keys()))
      for input_key in expected:
          self.assertIsInstance(
              expected[input_key], collections.abc.Sequence
          )
          self.assertIsInstance(
              actual[input_key], collections.abc.Sequence
          )
          self.assertEqual(
              len(expected[input_key]), len(actual[input_key])
          )
          for expected_item, actual_item in zip(
              expected[input_key], actual[input_key]
          ):
              self.assertIsInstance(expected_item, types.Artifact)
              self.assertIsInstance(actual_item, types.Artifact)
              self.assertArtifactEqual(expected_item, actual_item)
  
imports: import collections
  import os
  import tensorflow
  from tfx import types
  from tfx.dsl.compiler import placeholder_utils
  from tfx.orchestration import metadata
  from tfx.orchestration.portable import data_types
  from tfx.orchestration.portable import execution_publish_utils
  from tfx.orchestration.portable import inputs_utils
  from tfx.orchestration.portable.input_resolution import exceptions
  from tfx.orchestration.portable.mlmd import context_lib
  from tfx.proto.orchestration import pipeline_pb2
  from tfx.utils import test_case_utils
  from google.protobuf import text_format
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 9 for calling the _TestMixin obj's underlying member method code with example usage: obj.assertArtifactMapEqual(expected, actual) without return types