code: def test_get_field_mask_paths(self):
      execution = _create_test_execution(
          metadata_store_pb2.Execution.UNKNOWN,
          {
              "removed": 123.45,
              "unchanged": "test_string",
          },
          {
              "node_states_updated": '{"importer": {}}',
              "removed": False,
              "value_type_updated": 456,
          },
      )
      execution_copy = _create_test_execution(
          metadata_store_pb2.Execution.RUNNING,
          {
              "unchanged": "test_string",
          },
          {
              "node_states_updated": '{"importer": {"state": "running"}}',
              "added": 123,
              "value_type_updated": "test_string",
          },
      )
      want_top_level_fields = [
          f.name
          for f in metadata_store_pb2.Execution.DESCRIPTOR.fields
          if f.name not in ["properties", "custom_properties"]
      ]
      self.assertCountEqual(
          mlmd_state.get_field_mask_paths(execution, execution_copy),
          want_top_level_fields
          + [
              "properties.removed",
              "custom_properties.added",
              "custom_properties.node_states_updated",
              "custom_properties.removed",
              "custom_properties.value_type_updated",
          ],
      )
  
imports: from concurrent import futures
  import os
  import threading
  import tensorflow
  from tfx.orchestration import metadata
  from tfx.orchestration.experimental.core import mlmd_state
  from tfx.orchestration.experimental.core import test_utils
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 5 for calling the MlmdStateTest obj's underlying member method code with example usage: obj.test_get_field_mask_paths() without return types