'Returns the hypervolume that is dominated by a non-dominated front.
Before the HV computation, front and reference point are translated, so
that the reference point is [0, ..., 0].'

def compute(self, front):

    def weaklyDominates(point, other):
        for i in xrange(len(point)):
            if (point[i] > other[i]):
                return False
        return True
    relevantPoints = []
    referencePoint = self.referencePoint
    dimensions = len(referencePoint)
    relevantPoints = front
    if any(referencePoint):
        relevantPoints -= referencePoint
    self.preProcess(relevantPoints)
    bounds = ([(-1e+308)] * dimensions)
    hyperVolume = self.hvRecursive((dimensions - 1), len(relevantPoints), bounds)
    return hyperVolume
