code: def testUpdateArtifactsWithoutNewState(self):
      artifact1 = _create_tfx_artifact("a/b/1")
      artifact2 = _create_tfx_artifact("a/b/2")
      created_artifact_ids = _write_tfx_artifacts(
          self._mlmd_handle, [artifact1, artifact2]
      )
  
      artifact1.set_string_custom_property("foo", "bar")
      artifact2.set_string_custom_property("foo", "bar")
  
      artifact_lib.update_artifacts(
          self._mlmd_handle,
          {
              "key1": [artifact1],
              "key2": [artifact2],
          },
      )
  
      updated_tfx_artifacts = artifact_lib.get_artifacts_by_ids(
          self._mlmd_handle, created_artifact_ids
      )
      self.assertLen(updated_tfx_artifacts, 2)
      for tfx_artifact in updated_tfx_artifacts:
          self.assertEqual(
              tfx_artifact.get_string_custom_property("foo"), "bar"
          )
  
file_path: tfx/tfx/orchestration/portable/mlmd/artifact_lib_test.py
imports: from typing import Optional, Sequence
  import tensorflow
  from tfx import types
  from tfx.orchestration import metadata
  from tfx.orchestration.portable.mlmd import artifact_lib
  from tfx.types import standard_artifacts
  from tfx.utils import test_case_utils
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 4 for calling the ArtifactLibTest obj's underlying member method code with example usage: obj.testUpdateArtifactsWithoutNewState() without return types