code: def _get_execution_info(
      self, input_dict, output_dict, exec_properties
  ):
      pipeline_node = pipeline_pb2.PipelineNode(
          node_info={"id": "MyPythonNode"}
      )
      pipeline_info = pipeline_pb2.PipelineInfo(id="MyPipeline")
      stateful_working_dir = os.path.join(
          self.tmp_dir, "stateful_working_dir"
      )
      executor_output_uri = os.path.join(
          self.tmp_dir, "executor_output"
      )
      return data_types.ExecutionInfo(
          execution_id=1,
          input_dict=input_dict,
          output_dict=output_dict,
          exec_properties=exec_properties,
          stateful_working_dir=stateful_working_dir,
          execution_output_uri=executor_output_uri,
          pipeline_node=pipeline_node,
          pipeline_info=pipeline_info,
          pipeline_run_id=99,
      )
  
imports: import os
  from typing import Any, Dict, List
  import tensorflow
  from tfx import types
  from tfx.dsl.components.base import base_executor
  from tfx.dsl.io import fileio
  from tfx.orchestration.portable import data_types
  from tfx.orchestration.portable import outputs_utils
  from tfx.orchestration.portable import python_executor_operator
  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 standard_artifacts
  from tfx.utils import test_case_utils
  from google.protobuf import text_format
label_desc: Use image node_id 1 for calling the PythonExecutorOperatorTest obj's underlying member method code with example usage: obj._get_execution_info(input_dict, output_dict, exec_properties) and returns: data_types