code: def testExecutionInfoSerialization(self):
      my_artifact = _MyArtifact()
      my_artifact.int1 = 111
  
      execution_output_uri = "output/uri"
      stateful_working_dir = "workding/dir"
      exec_properties = {
          "property1": "value1",
          "property2": "value2",
      }
      pipeline_info = pipeline_pb2.PipelineInfo(id="my_pipeline")
      pipeline_node = text_format.Parse(
          """
          node_info {
            id: 'my_node'
          }
          """,
          pipeline_pb2.PipelineNode(),
      )
  
      original = data_types.ExecutionInfo(
          input_dict={"input": [my_artifact]},
          output_dict={"output": [my_artifact]},
          exec_properties=exec_properties,
          execution_output_uri=execution_output_uri,
          stateful_working_dir=stateful_working_dir,
          pipeline_info=pipeline_info,
          pipeline_node=pipeline_node,
      )
  
      serialized = (
          python_execution_binary_utils.serialize_execution_info(
              original
          )
      )
      rehydrated = (
          python_execution_binary_utils.deserialize_execution_info(
              serialized
          )
      )
  
      self._assert_artifact_map_equals(
          rehydrated.input_dict, {"input": [my_artifact]}
      )
      self._assert_artifact_map_equals(
          rehydrated.output_dict, {"output": [my_artifact]}
      )
      self.assertEqual(rehydrated.exec_properties, exec_properties)
      self.assertEqual(
          rehydrated.execution_output_uri, execution_output_uri
      )
      self.assertEqual(
          rehydrated.stateful_working_dir, stateful_working_dir
      )
      self.assertProtoEquals(
          rehydrated.pipeline_info, original.pipeline_info
      )
      self.assertProtoEquals(
          rehydrated.pipeline_node, original.pipeline_node
      )
  
imports: from typing import Dict, List, Union
  import tensorflow
  from tfx.orchestration.portable import data_types
  from tfx.orchestration.python_execution_binary import python_execution_binary_utils
  from tfx.proto.orchestration import executable_spec_pb2
  from tfx.proto.orchestration import execution_result_pb2
  from tfx.proto.orchestration import pipeline_pb2
  from tfx.types import artifact
  from tfx.types import channel
  from google.protobuf import text_format
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 3 for calling the PythonExecutorBinaryUtilsTest obj's underlying member method code with example usage: obj.testExecutionInfoSerialization() without return types