code: def test_string_representation(self) -> None:
      gs1 = GenerationStrategy(
          steps=[
              GenerationStep(model=Models.SOBOL, num_trials=5),
              GenerationStep(model=Models.GPEI, num_trials=-1),
          ]
      )
      self.assertEqual(
          str(gs1),
          (
              "GenerationStrategy(name='Sobol+GPEI', steps=[Sobol for 5 trials,"
              " GPEI for subsequent trials])"
          ),
      )
      gs2 = GenerationStrategy(
          steps=[GenerationStep(model=Models.SOBOL, num_trials=-1)]
      )
      self.assertEqual(
          str(gs2),
          "GenerationStrategy(name='Sobol', steps=[Sobol for all trials])",
      )
  
      gs3 = GenerationStrategy(
          nodes=[
              GenerationNode(
                  node_name="test",
                  model_specs=[
                      ModelSpec(
                          model_enum=Models.SOBOL,
                          model_kwargs={},
                          model_gen_kwargs={},
                      ),
                  ],
              )
          ]
      )
      self.assertEqual(
          str(gs3),
          "GenerationStrategy(name='Sobol', nodes=[GenerationNode("
          "model_specs=[ModelSpec(model_enum=Sobol, "
          "model_kwargs={}, model_gen_kwargs={}, model_cv_kwargs={},"
          " )], node_name=test, gen_unlimited_trials=True, "
          "transition_criteria=[])])",
      )
  
imports: import logging
  from typing import cast, List
  from unittest import mock
  from unittest.mock import MagicMock, patch
  from ax.core.arm import Arm
  from ax.core.base_trial import TrialStatus
  from ax.core.experiment import Experiment
  from ax.core.generator_run import GeneratorRun
  from ax.core.observation import ObservationFeatures
  from ax.core.parameter import ChoiceParameter, FixedParameter, Parameter, ParameterType
  from ax.core.search_space import SearchSpace
  from ax.core.utils import get_pending_observation_features_based_on_trial_status
  from ax.exceptions.core import DataRequiredError, UnsupportedError, UserInputError
  from ax.exceptions.generation_strategy import GenerationStrategyCompleted, GenerationStrategyMisconfiguredException, GenerationStrategyRepeatedPoints, MaxParallelismReachedException
  from ax.modelbridge.discrete import DiscreteModelBridge
  from ax.modelbridge.factory import get_sobol
  from ax.modelbridge.generation_node import GenerationNode
  from ax.modelbridge.generation_strategy import GenerationStep, GenerationStrategy
  from ax.modelbridge.model_spec import ModelSpec
  from ax.modelbridge.random import RandomModelBridge
  from ax.modelbridge.registry import Cont_X_trans, MODEL_KEY_TO_MODEL_SETUP, Models
  from ax.modelbridge.torch import TorchModelBridge
  from ax.modelbridge.transition_criterion import MaxGenerationParallelism, MaxTrials, MinTrials
  from ax.models.random.sobol import SobolGenerator
  from ax.utils.common.equality import same_elements
  from ax.utils.common.mock import mock_patch_method_original
  from ax.utils.common.testutils import TestCase
  from ax.utils.common.typeutils import not_none
  from ax.utils.testing.core_stubs import get_branin_data, get_branin_experiment, get_choice_parameter, get_data, get_experiment_with_multi_objective, get_hierarchical_search_space_experiment
label_desc: Use image node_id 7 for calling the TestGenerationStrategy obj's underlying member method code with example usage: obj.test_string_representation() without return types