def dist(self):
        """
        How should the values in range be sampled, uniformly or via some function.
        :return:
        """
        if self.func is None:
            return random.uniform(self.min, self.max)
        if self._dist is None:
            x = numpy.arange(self.min, self.max, (self.max-self.min)/1000.0)
            p = self.func(x).cumsum()
            p -= p.min()
            p /= p.max()
            self._dist = interpolate.interp1d(p, x)
        return self._dist(random.random())
How should the values in range be sampled, uniformly or via some function.
        :return: