class_docstr: A class for partitioning the non-dominated space into hyper-cells.
  
  Note: this assumes maximization. Internally, it multiplies by -1 and performs
  the decomposition under minimization.
  
  This class is far more efficient than NondominatedPartitioning for exact box
  partitionings
  
  This class uses the two-step approach similar to that in [Yang2019]_, where:
      a) first, Alg 1 from [Lacour17]_ is used to find the local lower bounds
          for the maximization problem
      b) second, the local lower bounds are used as the Pareto frontier for the
          minimization problem, and [Lacour17]_ is applied again to partition
          the space dominated by that Pareto frontier.
docstr: Partition the non-dominated space into disjoint hypercells.
  
  This direct method works for `m=2` outcomes.
docstr_tok: ["Partition","the","non-dominated","space","into","disjoint","hypercells",".","This","direct","method","works","for","`","m=2","`","outcomes","."]
code: def _partition_space_2d(self) -> None:
      r"""Partition the non-dominated space into disjoint hypercells.
  
      This direct method works for `m=2` outcomes.
      """
      cell_bounds = compute_non_dominated_hypercell_bounds_2d(
          pareto_Y_sorted=self.pareto_Y.flip(-2),
          ref_point=self.ref_point,
      )
      self.hypercell_bounds = cell_bounds
  
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 4 for calling the FastNondominatedPartitioning obj's underlying member method code with example usage: obj._partition_space_2d() without return types