class_docstr: An abstract class for box decompositions.
  
  Note: Internally, we store the negative reference point (minimization).
  
  :meta private:
docstr: Compute hypervolume that is dominated by the Pareto Froniter.
  
  Returns:
      A `(batch_shape)`-dim tensor containing the hypervolume dominated by
          each Pareto frontier.
code: def compute_hypervolume(self) -> Tensor:
      r"""Compute hypervolume that is dominated by the Pareto Froniter.
  
      Returns:
          A `(batch_shape)`-dim tensor containing the hypervolume dominated by
              each Pareto frontier.
      """
      if self._neg_pareto_Y is None:
          return torch.tensor(0.0)
  
      if self._neg_pareto_Y.shape[-2] == 0:
          return torch.zeros(
              self._neg_pareto_Y.shape[:-2],
              dtype=self._neg_pareto_Y.dtype,
              device=self._neg_pareto_Y.device,
          )
      return self._compute_hypervolume_if_y_has_data()
  
imports: from __future__ import annotations
  from abc import ABC, abstractmethod
  from typing import Optional
  import torch
  from botorch.exceptions.errors import BotorchError
  from botorch.utils.multi_objective.box_decompositions.utils import _expand_ref_point, _pad_batch_pareto_frontier, update_local_upper_bounds_incremental
  from botorch.utils.multi_objective.pareto import is_non_dominated
  from torch import Tensor
  from torch.nn import Module
label_desc: Use image node_id 16 for calling the BoxDecomposition obj's underlying member method code with example usage: obj.compute_hypervolume() and returns: self, torch, torch