class_docstr: A class for partitioning the non-dominated space into hyper-cells.
  
  Note: this assumes maximization. Internally, it multiplies outcomes by -1 and
  performs the decomposition under minimization. TODO: use maximization
  internally as well.
  
  Note: it is only feasible to use this algorithm to compute an exact
  decomposition of the non-dominated space for `m<5` objectives (alpha=0.0).
  
  The alpha parameter can be increased to obtain an approximate partitioning
  faster. The `alpha` is a fraction of the total hypervolume encapsuling the
  entire Pareto set. When a hypercell's volume divided by the total hypervolume
  is less than `alpha`, we discard the hypercell. See Figure 2 in
  [Couckuyt2012]_ for a visual representation.
  
  This PyTorch implementation of the binary partitioning algorithm ([Couckuyt2012]_)
  is adapted from numpy/tensorflow implementation at:
  https://github.com/GPflow/GPflowOpt/blob/master/gpflowopt/pareto.py.
  
  TODO: replace this with a more efficient decomposition. E.g.
  https://link.springer.com/content/pdf/10.1007/s10898-019-00798-7.pdf
docstr: Initialize NondominatedPartitioning.
  
  Args:
      ref_point: A `m`-dim tensor containing the reference point.
      Y: A `(batch_shape) x n x m`-dim tensor.
      alpha: A thresold fraction of total volume used in an approximate
          decomposition.
  
  Example:
      >>> bd = NondominatedPartitioning(ref_point, Y=Y1)
docstr_tok: ["Initialize","NondominatedPartitioning",".","Args",":","ref_point",":","A","`","m","`","-dim","tensor","containing","the","reference","point",".","Y",":","A","`","(","batch_shape",")","x","n","x","m","`","-dim","tensor",".","alpha",":","A","thresold","fraction","of","total","volume","used","in","an","approximate","decomposition",".","Example",":",">",">",">","bd","=","NondominatedPartitioning","(","ref_point",",","Y=Y1",")"]
code: def __init__(
      self,
      ref_point: Tensor,
      Y: Optional[Tensor] = None,
      alpha: float = 0.0,
  ) -> None:
      """Initialize NondominatedPartitioning.
  
      Args:
          ref_point: A `m`-dim tensor containing the reference point.
          Y: A `(batch_shape) x n x m`-dim tensor.
          alpha: A thresold fraction of total volume used in an approximate
              decomposition.
  
      Example:
          >>> bd = NondominatedPartitioning(ref_point, Y=Y1)
      """
      self.alpha = alpha
      super().__init__(ref_point=ref_point, sort=True, Y=Y)
  
imports: from __future__ import annotations
  from typing import Optional
  import torch
  from botorch.utils.multi_objective.box_decompositions.box_decomposition import BoxDecomposition, FastPartitioning
  from botorch.utils.multi_objective.box_decompositions.utils import _expand_ref_point, compute_non_dominated_hypercell_bounds_2d, get_partition_bounds, update_local_upper_bounds_incremental
  from torch import Tensor
label_desc: Use image node_id 1 to create a new NondominatedPartitioning object from inherited base classes: BoxDecomposition with example: obj = NondominatedPartitioning(ref_point, Y, alpha)