def search(mass_in, tolerance, delta, restrict):
    global formulas
    formulas = []
    # read rt
    if restrict:
        b, rt_inverted_CHNOPS = parse_rt("rt_CHNOPS.txt")
    else:
        b, rt_inverted_CHNOPS = parse_rt("rt.txt")
    # initialize variables
    mass_int = int(math.floor(mass_in * b))
    k = len(rt_inverted_CHNOPS)
    c = [0 for i in range(0, k)]
    # setup the space of search, in terms of precision/tolerance
    precision_left = 5
    precision_right = 15
    if tolerance * b > precision_left:
        precision_left = int(math.ceil(tolerance * b))
    if tolerance * b > precision_right:
        precision_right = int(math.ceil(tolerance * b))
    for mass in range(mass_int - precision_left, mass_int + precision_right):
       find_all(mass_in, mass, k-1, c, sorted_masses_with_blowup_CHNOPS(b), rt_inverted_CHNOPS)

    return formulas
    n = [infinite for r in range(0, a1)]
    n[0] = 0

    file_handler.write(str(n) + '\n')

    for i in range(1, k):
        d = fractions.gcd(a1, a[i])
        for p in range(0, d):
            new_n = find_n(n, p, d)
            if new_n < infinite:
                for repeat in range(1, a1/d):
                    new_n = new_n + a[i]
                    r = new_n % a1
                    new_n = min(new_n, n[r])
                    n[r] = new_n
        file_handler.write(str(n) + '\n')

    file_handler.close()


if __name__ == '__main__':

    time_start = datetime.datetime.utcnow()

    round_robin([5, 8, 9, 12], "rt_testing.txt")
    round_robin(sorted_masses_with_blowup_CHNOPS(b), "rt_CHNOPS.txt")
    round_robin(sorted_masses_with_blowup_elements(b), "rt.txt")

    time_end = datetime.datetime.utcnow()

    print "All computations successul in " + str(time_end - time_start)