'Return an array containing approximatively `n` numbers.'

def values(self, n):

    n1 = max(2, int((0.3 * n)))
    n2 = max(2, int((0.2 * n)))
    n3 = max(8, ((n - n1) - n2))
    v1 = np.linspace((-1), 1, n1)
    v2 = np.r_[(np.linspace((-10), 10, max(0, (n2 - 4))), (-9), (-5.5), 5.5, 9)]
    if ((self.a >= 0) and (self.b > 0)):
        v3 = np.r_[(np.logspace((-30), (-1), (2 + (n3 // 4))), np.logspace(5, np.log10(self.b), (1 + (n3 // 4))))]
        v4 = np.logspace(1, 5, (1 + (n3 // 2)))
    elif (self.a < 0 < self.b):
        v3 = np.r_[(np.logspace((-30), (-1), (2 + (n3 // 8))), np.logspace(5, np.log10(self.b), (1 + (n3 // 8))), (- np.logspace((-30), (-1), (2 + (n3 // 8)))), (- np.logspace(5, np.log10((- self.a)), (1 + (n3 // 8)))))]
        v4 = np.r_[(np.logspace(1, 5, (1 + (n3 // 4))), (- np.logspace(1, 5, (1 + (n3 // 4)))))]
    elif (self.b < 0):
        v3 = np.r_[((- np.logspace((-30), (-1), (2 + (n3 // 4)))), (- np.logspace(5, np.log10((- self.b)), (1 + (n3 // 4)))))]
        v4 = (- np.logspace(1, 5, (1 + (n3 // 2))))
    else:
        v3 = []
        v4 = []
    v = np.r_[(v1, v2, v3, v4, 0)]
    if self.inclusive_a:
        v = v[(v >= self.a)]
    else:
        v = v[(v > self.a)]
    if self.inclusive_b:
        v = v[(v <= self.b)]
    else:
        v = v[(v < self.b)]
    return np.unique(v)
