class_docstr: Core class to calculate the hypervolme value of a set of points.
  As introduced in the original paper, "the indicator is a measure of
  the region which is simultaneously dominated by a set of points P,
  and bounded by a reference point r = `self.reference_bounds`. It is
  a union of axis-aligned hyper-rectangles with one common vertex, r."
  
  To calculate the hypervolume indicator, initialize an instance of the
  HypervolumeIndicator; the hypervolume of a set of points P is calculated
  by HypervolumeIndicator.compute(points = P) method.
  
  For the algorithm, refer to the section III and Algorithms 2, 3 of the
  paper `An Improved Dimension-Sweep Algorithm for the Hypervolume Indicator`
  by C.M. Fonseca et all, IEEE Congress on Evolutionary Computation, 2006.
class_docstr_tok: ["Core","class","to","calculate","the","hypervolme","value","of","a","set","of","points",".","As","introduced","in","the","original","paper",",","``","the","indicator","is","a","measure","of","the","region","which","is","simultaneously","dominated","by","a","set","of","points","P",",","and","bounded","by","a","reference","point","r","=","`","self.reference_bounds","`",".","It","is","a","union","of","axis-aligned","hyper-rectangles","with","one","common","vertex",",","r.","''","To","calculate","the","hypervolume","indicator",",","initialize","an","instance","of","the","HypervolumeIndicator",";","the","hypervolume","of","a","set","of","points","P","is","calculated","by","HypervolumeIndicator.compute","(","points","=","P",")","method",".","For","the","algorithm",",","refer","to","the","section","III","and","Algorithms","2",",","3","of","the","paper","`","An","Improved","Dimension-Sweep","Algorithm","for","the","Hypervolume","Indicator","`","by","C.M",".","Fonseca","et","all",",","IEEE","Congress","on","Evolutionary","Computation",",","2006","."]
code: def compute(
      self, points: tp.Union[tp.List[np.ndarray], np.ndarray]
  ) -> float:
      points = points - self.reference_point  # type: ignore
      # TODO: not sure why it would work with lists tough, investigate the ignored typing
      self.reference_bounds = np.full(self.dimension, -np.inf)
      self._multilist = VectorLinkedList.create_sorted(
          self.dimension, points
      )
      hypervolume = self.recursive_hypervolume(self.dimension - 1)
      return hypervolume
  
imports: import typing
  import numpy
label_desc: Use image node_id 3 for calling the HypervolumeIndicator obj's underlying member method code with example usage: obj.compute(points) and returns: hypervolume