code: def test_MOO_with_more_outcomes_than_thresholds(self) -> None:
      experiment = get_branin_experiment_with_multi_objective(
          has_optimization_config=False
      )
      metric_c = Metric(name="c", lower_is_better=False)
      metric_a = Metric(name="a", lower_is_better=False)
      objective_thresholds = [
          ObjectiveThreshold(
              metric=metric_c,
              bound=2.0,
              relative=False,
          ),
          ObjectiveThreshold(
              metric=metric_a,
              bound=1.0,
              relative=False,
          ),
      ]
      experiment.optimization_config = MultiObjectiveOptimizationConfig(
          objective=MultiObjective(
              objectives=[
                  Objective(metric=metric_a),
                  Objective(metric=metric_c),
              ]
          ),
          objective_thresholds=objective_thresholds,
      )
      experiment.add_tracking_metric(
          Metric(name="b", lower_is_better=False)
      )
      sobol = get_sobol(
          search_space=experiment.search_space,
      )
      sobol_run = sobol.gen(1)
      experiment.new_batch_trial().add_generator_run(
          sobol_run
      ).run().mark_completed()
      data = Data(
          pd.DataFrame(
              data={
                  "arm_name": ["0_0", "0_0", "0_0"],
                  "metric_name": ["a", "b", "c"],
                  "mean": [1.0, 2.0, 3.0],
                  "trial_index": [0, 0, 0],
                  "sem": [0, 0, 0],
              }
          )
      )
      test_names_to_fns = {
          "MOO_NEHVI": get_MOO_NEHVI,
          "MOO_EHVI": get_MOO_NEHVI,
          "MOO_PAREGO": get_MOO_PAREGO,
          "MOO_RS": get_MOO_RS,
      }
      for test_name, factory_fn in test_names_to_fns.items():
          with self.subTest(test_name):
              moo_model = factory_fn(
                  experiment=experiment,
                  data=data,
              )
              moo_gr = moo_model.gen(n=1)
              # pyre-fixme[16]: Optional type has no attribute `__getitem__`.
              obj_t = moo_gr.gen_metadata["objective_thresholds"]
              self.assertEqual(obj_t[0], objective_thresholds[1])
              self.assertEqual(obj_t[1], objective_thresholds[0])
              self.assertEqual(len(obj_t), 2)
  
imports: from unittest import mock
  import pandas
  import torch
  from ax.core.data import Data
  from ax.core.metric import Metric
  from ax.core.objective import MultiObjective, Objective
  from ax.core.observation import ObservationFeatures
  from ax.core.optimization_config import MultiObjectiveOptimizationConfig
  from ax.core.outcome_constraint import ComparisonOp, ObjectiveThreshold
  from ax.core.parameter import RangeParameter
  from ax.modelbridge.discrete import DiscreteModelBridge
  from ax.modelbridge.factory import get_botorch, get_empirical_bayes_thompson, get_factorial, get_GPEI, get_GPKG, get_GPMES, get_MOO_EHVI, get_MOO_NEHVI, get_MOO_PAREGO, get_MOO_RS, get_MTGP_LEGACY, get_MTGP_NEHVI, get_MTGP_PAREGO, get_sobol, get_thompson, get_uniform
  from ax.modelbridge.random import RandomModelBridge
  from ax.modelbridge.torch import TorchModelBridge
  from ax.models.discrete.eb_thompson import EmpiricalBayesThompsonSampler
  from ax.models.discrete.thompson import ThompsonSampler
  from ax.models.winsorization_config import WinsorizationConfig
  from ax.utils.common.testutils import TestCase
  from ax.utils.testing.core_stubs import get_branin_experiment, get_branin_experiment_with_multi_objective, get_branin_optimization_config, get_factorial_experiment, get_multi_type_experiment, get_multi_type_experiment_with_multi_objective
  from ax.utils.testing.mock import fast_botorch_optimize
  from botorch.models.multitask import MultiTaskGP
label_desc: Use image node_id 8 for calling the ModelBridgeFactoryTestMultiObjective obj's underlying member method code with example usage: obj.test_MOO_with_more_outcomes_than_thresholds() without return types