code: def get_missing_metrics_by_name(
      data: Data, metric_names: Iterable[str]
  ) -> Dict[str, Set[TArmTrial]]:
      """Return all arm_name, trial_index pairs missing some observations of
      specified metrics.
  
      Args:
          data: Data to search.
          metric_names: list of metrics to search for.
  
      Returns:
          A Dict[str, missing_metrics], one entry for each metric_name.
      """
      missing_metrics = {
          metric_name: _get_missing_arm_trial_pairs(
              data=data, metric_name=metric_name
          )
          for metric_name in metric_names
      }
      return missing_metrics
  
imports: from collections import defaultdict
  from typing import Dict, Iterable, List, NamedTuple, Optional, Set, Tuple
  import numpy
  from ax.core.arm import Arm
  from ax.core.base_trial import BaseTrial, TrialStatus
  from ax.core.batch_trial import BatchTrial
  from ax.core.data import Data
  from ax.core.experiment import Experiment
  from ax.core.generator_run import GeneratorRun
  from ax.core.objective import MultiObjective
  from ax.core.observation import ObservationFeatures
  from ax.core.optimization_config import OptimizationConfig
  from ax.core.trial import Trial
  from ax.core.types import ComparisonOp
  from ax.utils.common.typeutils import not_none
  from pyre_extensions import none_throws
label_desc: Use image node_id 2 for calling a global function with example usage: get_missing_metrics_by_name(data, metric_names) and returns: missing_metrics