docstr: Tests MTGP instantiation.
code: def test_MTGP_LEGACY(self) -> None:
      """Tests MTGP instantiation."""
      # Test Multi-type MTGP
      exp = get_multi_type_experiment(add_trials=True)
      mtgp = get_MTGP_LEGACY(experiment=exp, data=exp.fetch_data())
      self.assertIsInstance(mtgp, TorchModelBridge)
  
      # Test Single-type MTGP
      exp = get_branin_experiment()
      # Check that factory generates a valid sobol modelbridge.
      sobol = get_sobol(search_space=exp.search_space)
      self.assertIsInstance(sobol, RandomModelBridge)
      for _ in range(5):
          sobol_run = sobol.gen(n=1)
          t = exp.new_batch_trial().add_generator_run(sobol_run)
          t.set_status_quo_with_weight(status_quo=t.arms[0], weight=0.5)
          t.run().mark_completed()
      mtgp = get_MTGP_LEGACY(
          experiment=exp, data=exp.fetch_data(), trial_index=0
      )
      self.assertIsInstance(mtgp, TorchModelBridge)
      # mtgp_run = mtgp.gen(
      #     n=1
      # )  # TODO[T110948251]: This is broken at the ChoiceEncode level
  
      with self.assertRaises(ValueError):
          get_MTGP_LEGACY(
              experiment=exp, data=exp.fetch_data(), trial_index=9
          )
  
      exp = get_branin_experiment()
      sobol = get_sobol(search_space=exp.search_space)
      self.assertIsInstance(sobol, RandomModelBridge)
      sobol_run = sobol.gen(n=1)
      t = exp.new_batch_trial().add_generator_run(sobol_run)
      t.run().mark_completed()
  
      with self.assertRaises(ValueError):
          get_MTGP_LEGACY(
              experiment=exp, data=exp.fetch_data(), trial_index=0
          )
  
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 2 for calling the ModelBridgeFactoryTestSingleObjective obj's underlying member method code with example usage: obj.test_MTGP_LEGACY() without return types