code: def testStaticInputs(self):
      e1 = self.put_artifact("Examples")
      e2 = self.put_artifact("Examples")
      e3 = self.put_artifact(
          "Examples"
      )  # pylint: disable=unused-variable
      e4 = self.put_artifact("Examples")
  
      node_inputs = NodeInputs(
          inputs={
              "x": InputSpec(
                  static_inputs=Static(
                      artifact_ids=[e1.id, e2.id, e1.id, e4.id]
                  )
              ),
          }
      )
      result = node_inputs_resolver.resolve(self.mlmd_cm, node_inputs)
      self.assertLen(result, 1)
      self.assertEqual(list(result[0]), ["x"])
      self.assertLen(result[0]["x"], 4)
      # Ordering & duplications are preserved.
      for actual, expected in zip(result[0]["x"], [e1, e2, e1, e4]):
          self.assertIsInstance(actual, tfx.types.Artifact)
          self.assertEqual(actual.mlmd_artifact, expected)
  
imports: from typing import Set
  from unittest import mock
  import tensorflow
  from tfx.orchestration.portable.input_resolution import exceptions
  from tfx.orchestration.portable.input_resolution import input_graph_resolver
  from tfx.orchestration.portable.input_resolution import node_inputs_resolver
  from tfx.orchestration.portable.input_resolution import partition_utils
  from tfx.orchestration.portable.input_resolution import channel_resolver
  from tfx.proto.orchestration import pipeline_pb2
  import tfx.types
  from tfx.types import channel_utils
  from tfx.utils import test_case_utils
  from google.protobuf import text_format
label_desc: Use image node_id 2 for calling the LiveTest obj's underlying member method code with example usage: obj.testStaticInputs() without return types