code: def _make_sobol_step(
      num_trials: int = -1,
      min_trials_observed: Optional[int] = None,
      enforce_num_trials: bool = True,
      max_parallelism: Optional[int] = None,
      seed: Optional[int] = None,
      should_deduplicate: bool = False,
  ) -> GenerationStep:
      """Shortcut for creating a Sobol generation step."""
      return GenerationStep(
          model=Models.SOBOL,
          num_trials=num_trials,
          # NOTE: ceil(-1 / 2) = 0, so this is safe to do when num trials is -1.
          min_trials_observed=min_trials_observed
          or ceil(num_trials / 2),
          enforce_num_trials=enforce_num_trials,
          max_parallelism=max_parallelism,
          model_kwargs={"deduplicate": True, "seed": seed},
          should_deduplicate=should_deduplicate,
      )
  
imports: import logging
  import warnings
  from math import ceil
  from typing import Any, cast, Dict, Optional, Type, Union
  import torch
  from ax.core.experiment import Experiment
  from ax.core.optimization_config import OptimizationConfig
  from ax.core.parameter import ChoiceParameter, ParameterType, RangeParameter
  from ax.core.search_space import SearchSpace
  from ax.modelbridge.generation_strategy import GenerationStep, GenerationStrategy
  from ax.modelbridge.registry import MODEL_KEY_TO_MODEL_SETUP, ModelRegistryBase, Models
  from ax.modelbridge.transforms.base import Transform
  from ax.modelbridge.transforms.winsorize import Winsorize
  from ax.models.torch.botorch_modular.model import BoTorchModel
  from ax.models.types import TConfig
  from ax.models.winsorization_config import WinsorizationConfig
  from ax.utils.common.logger import get_logger
  from ax.utils.common.typeutils import not_none
label_desc: Use image node_id 1 for calling a global function with example usage: _make_sobol_step(num_trials, min_trials_observed, enforce_num_trials, max_parallelism, seed, should_deduplicate) and returns: GenerationStep