docstr: Informs the acquisition function about pending design points.
  
  Args:
      X_pending: `n x d` Tensor with `n` `d`-dim design points that have
          been submitted for evaluation but have not yet been evaluated.
docstr_tok: ["Informs","the","acquisition","function","about","pending","design","points",".","Args",":","X_pending",":","`","n","x","d","`","Tensor","with","`","n","`","`","d","`","-dim","design","points","that","have","been","submitted","for","evaluation","but","have","not","yet","been","evaluated","."]
code: def set_X_pending(self, X_pending: Optional[Tensor] = None) -> None:
      r"""Informs the acquisition function about pending design points.
  
      Args:
          X_pending: `n x d` Tensor with `n` `d`-dim design points that have
              been submitted for evaluation but have not yet been evaluated.
      """
      if X_pending is None:
          self.X_pending = None
      else:
          if X_pending.requires_grad:
              warnings.warn(
                  "Pending points require a gradient but the acquisition function"
                  " will not provide a gradient to these points.",
                  BotorchWarning,
              )
          X_pending = X_pending.detach().clone()
          if self.cache_pending:
              X_baseline = torch.cat(
                  [self._X_baseline, X_pending], dim=-2
              )
              # Number of new points is the total number of points minus
              # (the number of previously cached pending points plus the
              # of number of baseline points).
              num_new_points = (
                  X_baseline.shape[0] - self.X_baseline.shape[0]
              )
              if num_new_points > 0:
                  if num_new_points > self._max_iep:
                      # Set the new baseline points to include pending points.
                      self.register_buffer(
                          "_X_baseline_and_pending", X_baseline
                      )
                      # Recompute box decompositions.
                      self._set_cell_bounds(
                          num_new_points=num_new_points
                      )
                      if not self.incremental_nehvi:
                          self._prev_nehvi = (
                              (self._hypervolumes - self._initial_hvs)
                              .clamp_min(0.0)
                              .mean()
                          )
                      # Set to None so that pending points are not concatenated in
                      # forward.
                      self.X_pending = None
                      # Set q_in=-1 to so that self.sampler is updated at the next
                      # forward call.
                      self.q_in = -1
                  else:
                      self.X_pending = X_pending[-num_new_points:]
          else:
              self.X_pending = X_pending
  
imports: from __future__ import annotations
  import warnings
  from copy import deepcopy
  from itertools import combinations
  from typing import Callable, List, Optional, Union
  import torch
  from botorch.acquisition.cached_cholesky import CachedCholeskyMCSamplerMixin
  from botorch.acquisition.multi_objective.objective import MCMultiOutputObjective
  from botorch.acquisition.multi_objective.utils import prune_inferior_points_multi_objective
  from botorch.exceptions.errors import BotorchError, BotorchTensorDimensionError, UnsupportedError
  from botorch.exceptions.warnings import BotorchWarning
  from botorch.models.model import Model
  from botorch.sampling.base import MCSampler
  from botorch.utils.multi_objective.box_decompositions.box_decomposition_list import BoxDecompositionList
  from botorch.utils.multi_objective.box_decompositions.dominated import DominatedPartitioning
  from botorch.utils.multi_objective.box_decompositions.non_dominated import FastNondominatedPartitioning, NondominatedPartitioning
  from botorch.utils.multi_objective.box_decompositions.utils import _pad_batch_pareto_frontier
  from botorch.utils.objective import compute_feasibility_indicator
  from botorch.utils.torch import BufferDict
  from torch import Tensor
label_desc: Use image node_id 5 for calling the NoisyExpectedHypervolumeMixin obj's underlying member method code with example usage: obj.set_X_pending(X_pending) without return types