code: def get_batch_initial_conditions(
      acq_function: AcquisitionFunction,
      raw_samples: int,
      X_pareto: Tensor,
      target_point: Tensor,
      num_restarts: int = 20,
      **tkwargs: Any,
  ) -> Tensor:
      """Generate starting points for the SEBO acquisition function optimization."""
      dim = X_pareto.shape[-1]  # dimension
      # (1) Global Sobol points
      X_cand1 = (
          SobolEngine(dimension=dim, scramble=True)
          .draw(raw_samples)
          .to(**tkwargs)
      )
      X_cand1 = X_cand1[
          acq_function(X_cand1.unsqueeze(1))
          .topk(num_restarts // 5)
          .indices
      ]
      # (2) Global Sobol points with a Bernoulli mask
      X_cand2 = (
          SobolEngine(dimension=dim, scramble=True)
          .draw(raw_samples)
          .to(**tkwargs)
      )
      mask = torch.rand(X_cand2.shape, **tkwargs) < 0.5
      X_cand2[mask] = target_point.repeat(len(X_cand2), 1).to(
          **tkwargs
      )[mask]
      X_cand2 = X_cand2[
          acq_function(X_cand2.unsqueeze(1))
          .topk(num_restarts // 5)
          .indices
      ]
      # (3) Perturbations of points on the Pareto frontier (done by TuRBO and Spearmint)
      X_cand3 = X_pareto.clone()[
          torch.randint(high=len(X_pareto), size=(raw_samples,))
      ]
      mask = X_cand3 != target_point
      X_cand3[mask] += (
          0.2 * torch.randn(*X_cand3.shape, **tkwargs)[mask]
      )
      X_cand3 = torch.clamp(X_cand3, min=0.0, max=1.0)
      X_cand3 = X_cand3[
          acq_function(X_cand3.unsqueeze(1))
          .topk(num_restarts // 5)
          .indices
      ]
      # (4) Apply a Bernoulli mask to points on the Pareto frontier
      X_cand4 = X_pareto.clone()[
          torch.randint(high=len(X_pareto), size=(raw_samples,))
      ]
      mask = torch.rand(X_cand4.shape, **tkwargs) < 0.5
      X_cand4[mask] = (
          target_point.repeat(len(X_cand4), 1)
          .to(**tkwargs)[mask]
          .clone()
      )
      X_cand4 = X_cand4[
          acq_function(X_cand4.unsqueeze(1))
          .topk(num_restarts // 5)
          .indices
      ]
      return torch.cat(
          (X_cand1, X_cand2, X_cand3, X_cand4), dim=0
      ).unsqueeze(1)
  
imports: import functools
  from copy import deepcopy
  from functools import partial
  from typing import Any, Callable, Dict, List, Optional, Tuple, Type
  import torch
  from ax.core.search_space import SearchSpaceDigest
  from ax.models.torch.botorch_modular.acquisition import Acquisition
  from ax.models.torch.botorch_modular.optimizer_argparse import optimizer_argparse
  from ax.models.torch.botorch_modular.surrogate import Surrogate
  from ax.models.torch_base import TorchOptConfig
  from ax.utils.common.constants import Keys
  from ax.utils.common.typeutils import not_none
  from botorch.acquisition.acquisition import AcquisitionFunction
  from botorch.acquisition.multi_objective.monte_carlo import qExpectedHypervolumeImprovement
  from botorch.acquisition.penalized import L0Approximation
  from botorch.models.deterministic import GenericDeterministicModel
  from botorch.models.model import ModelList
  from botorch.optim import Homotopy, HomotopyParameter, LogLinearHomotopySchedule, optimize_acqf_homotopy
  from botorch.utils.datasets import SupervisedDataset
  from botorch.utils.multi_objective.pareto import is_non_dominated
  from torch import Tensor
  from torch.quasirandom import SobolEngine
label_desc: Use image node_id 3 for calling a global function with example usage: get_batch_initial_conditions(acq_function, raw_samples, X_pareto, target_point, num_restarts) and returns: torch