code: def _estimate_objective_lower_bound(
      model: Model,
      objective: Optional[MCAcquisitionObjective],
      posterior_transform: Optional[PosteriorTransform],
      X: Tensor,
  ) -> Tensor:
      """Estimates a lower bound on the objective values by evaluating the model at convex
      combinations of `X`, returning the 6-sigma lower bound of the computed statistics.
  
      Args:
          model: A fitted model.
          objective: An MCAcquisitionObjective with `m` outputs.
          posterior_transform: A PosteriorTransform.
          X: A `n x d`-dim Tensor of design points from which to draw convex combinations.
  
      Returns:
          A `m`-dimensional Tensor of lower bounds of the objectives.
      """
      convex_weights = torch.rand(
          32,
          X.shape[-2],
          dtype=X.dtype,
          device=X.device,
      )
      weights_sum = convex_weights.sum(dim=0, keepdim=True)
      convex_weights = convex_weights / weights_sum
      # infeasible cost M is such that -M < min_x f(x), thus
      # 0 < min_x f(x) - (-M), so we should take -M as a lower
      # bound on the best feasible objective
      return -get_infeasible_cost(
          X=convex_weights @ X,
          model=model,
          objective=objective,
          posterior_transform=posterior_transform,
      )
  
imports: from __future__ import annotations
  import math
  from typing import Callable, Dict, List, Optional, Tuple
  import torch
  from botorch.acquisition.objective import IdentityMCObjective, MCAcquisitionObjective, PosteriorTransform
  from botorch.exceptions.errors import BotorchTensorDimensionError, DeprecationError, UnsupportedError
  from botorch.models.fully_bayesian import MCMC_DIM
  from botorch.models.model import Model
  from botorch.sampling.base import MCSampler
  from botorch.sampling.get_sampler import get_sampler
  from botorch.sampling.pathwise import draw_matheron_paths
  from botorch.utils.objective import compute_feasibility_indicator
  from botorch.utils.sampling import optimize_posterior_samples
  from botorch.utils.transforms import is_ensemble, normalize_indices
  from torch import Tensor
label_desc: Use image node_id 4 for calling a global function with example usage: _estimate_objective_lower_bound(model, objective, posterior_transform, X) and returns: unknown