docstr: Compute hypervolume dominated by f(X_baseline) under each sample.
  
  Args:
      obj: A `sample_shape x batch_shape x n x m`-dim tensor of samples
          of objectives.
      feas: `sample_shape x batch_shape x n`-dim tensor of samples
          of feasibility indicators.
docstr_tok: ["Compute","hypervolume","dominated","by","f","(","X_baseline",")","under","each","sample",".","Args",":","obj",":","A","`","sample_shape","x","batch_shape","x","n","x","m","`","-dim","tensor","of","samples","of","objectives",".","feas",":","`","sample_shape","x","batch_shape","x","n","`","-dim","tensor","of","samples","of","feasibility","indicators","."]
code: def _compute_initial_hvs(
      self, obj: Tensor, feas: Optional[Tensor] = None
  ) -> None:
      r"""Compute hypervolume dominated by f(X_baseline) under each sample.
  
      Args:
          obj: A `sample_shape x batch_shape x n x m`-dim tensor of samples
              of objectives.
          feas: `sample_shape x batch_shape x n`-dim tensor of samples
              of feasibility indicators.
      """
      initial_hvs = []
      for i, sample in enumerate(obj):
          if self.constraints is not None:
              sample = sample[feas[i]]
          dominated_partitioning = DominatedPartitioning(
              ref_point=self.ref_point,
              Y=sample,
          )
          hv = dominated_partitioning.compute_hypervolume()
          initial_hvs.append(hv)
      self.register_buffer(
          "_initial_hvs",
          torch.tensor(
              initial_hvs, dtype=obj.dtype, device=obj.device
          ).view(self._batch_sample_shape, *obj.shape[-2:]),
      )
  
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 3 for calling the NoisyExpectedHypervolumeMixin obj's underlying member method code with example usage: obj._compute_initial_hvs(obj, feas) without return types