code: def testDoLegacySingleEvalSavedModelWFairness(self, exec_properties):
      source_data_dir = os.path.join(
          os.path.dirname(os.path.dirname(__file__)), "testdata"
      )
      output_data_dir = os.path.join(
          os.environ.get(
              "TEST_UNDECLARED_OUTPUTS_DIR", self.get_temp_dir()
          ),
          self._testMethodName,
      )
  
      # Create input dict.
      examples = standard_artifacts.Examples()
      examples.uri = os.path.join(source_data_dir, "csv_example_gen")
      examples.split_names = artifact_utils.encode_split_names(
          ["train", "eval"]
      )
      model = standard_artifacts.Model()
      model.uri = os.path.join(source_data_dir, "trainer/current")
      input_dict = {
          standard_component_specs.EXAMPLES_KEY: [examples],
          standard_component_specs.MODEL_KEY: [model],
      }
  
      # Create output dict.
      eval_output = standard_artifacts.ModelEvaluation()
      eval_output.uri = os.path.join(output_data_dir, "eval_output")
      blessing_output = standard_artifacts.ModelBlessing()
      blessing_output.uri = os.path.join(
          output_data_dir, "blessing_output"
      )
      output_dict = {
          standard_component_specs.EVALUATION_KEY: [eval_output],
          standard_component_specs.BLESSING_KEY: [blessing_output],
      }
  
      try:
          # Need to import the following module so that the fairness indicator
          # post-export metric is registered.  This may raise an ImportError if the
          # currently-installed version of TFMA does not support fairness
          # indicators.
          import tensorflow_model_analysis.addons.fairness.post_export_metrics.fairness_indicators  # pylint: disable=g-import-not-at-top, unused-import
  
          exec_properties[
              standard_component_specs.FAIRNESS_INDICATOR_THRESHOLDS_KEY
          ] = "[0.1, 0.3, 0.5, 0.7, 0.9]"
      except ImportError:
          logging.warning(
              "Not testing fairness indicators because a compatible TFMA version "
              "is not installed."
          )
  
      # List needs to be serialized before being passed into Do function.
      exec_properties[
          standard_component_specs.EXAMPLE_SPLITS_KEY
      ] = json_utils.dumps(None)
  
      # Run executor.
      evaluator = executor.Executor()
      evaluator.Do(input_dict, output_dict, exec_properties)
  
      # Check evaluator outputs.
      self.assertTrue(
          fileio.exists(
              os.path.join(eval_output.uri, "eval_config.json")
          )
      )
      self.assertNotEmpty(
          glob.glob(f"{eval_output.uri}/metrics-*.tfrecord")
      )
      self.assertNotEmpty(
          glob.glob(f"{eval_output.uri}/plots-*.tfrecord")
      )
      self.assertFalse(
          fileio.exists(os.path.join(blessing_output.uri, "BLESSED"))
      )
  
imports: import glob
  import os
  from absl import logging
  from absl.testing import parameterized
  import tensorflow
  import tensorflow_model_analysis
  from tfx.components.evaluator import executor
  from tfx.components.testdata.module_file import evaluator_module
  from tfx.dsl.io import fileio
  from tfx.proto import evaluator_pb2
  from tfx.types import artifact_utils
  from tfx.types import standard_artifacts
  from tfx.types import standard_component_specs
  from tfx.utils import json_utils
  from tfx.utils import proto_utils
label_desc: Use image node_id 2 for calling the ExecutorTest obj's underlying member method code with example usage: obj.testDoLegacySingleEvalSavedModelWFairness(exec_properties) without return types