Esempio n. 1
0
 def setUp(self):
     self.ftk = fityk.Fityk()
     self.ftk.set_option_as_number("verbosity", -1)
     xx = [(n-5)/2. for n in range(25)]
     yy = [-7+3*x for x in xx]
     self.ftk = fityk.Fityk()
     self.ftk.set_option_as_number("verbosity", -1)
     self.ftk.load_data(0, xx, yy, [1]*len(xx), "line")
     self.ftk.execute("F = Linear(~0, ~0[:2.5])")
     self.methods = ["mpfit"]
     if self.ftk.get_info("compiler"):
         self.methods += ["nlopt_lbfgs", "nlopt_nm", "nlopt_bobyqa",
                          "nlopt_sbplx"]
Esempio n. 2
0
 def setUp(self):
     self.ftk = fityk.Fityk()
     self.ftk.set_option_as_number("verbosity", -1)
     f = tempfile.NamedTemporaryFile(delete=False)
     f.write("M=1\n X[0]=1.1, Y[0]=-5, S[0]=0.8")
     f.close()
     self.filename = f.name
Esempio n. 3
0
 def setUp(self):
     self.x = [(n - 5) / 2. for n in range(20)]
     self.y = [x * (x - 3.1) for x in self.x]
     self.sigma = [1 for n in self.y]
     self.ftk = fityk.Fityk()
     self.ftk.set_option_as_number("verbosity", -1)
     self.ftk.load_data(0, self.x, self.y, self.sigma, "test-data")
Esempio n. 4
0
 def setUp(self):
     self.ftk = fityk.Fityk()
     self.ftk.set_option_as_number("verbosity", -1)
     self.voigt = "Voigt(926, 43.2, 0.144, 0.1)"
     self.splitvoigt = "SplitVoigt(926, 43.2, 0.144, 0.143, 0.1, 0.13)"
     self.splitvoigt_formula = ('x < 43.2 ? Voigt(926, 43.2, 0.144, 0.1) '
                                         ': Voigt(926, 43.2, 0.143, 0.13)')
Esempio n. 5
0
def add_guessability_tests():
    all_types = fityk.Fityk().get_info('types')
    for func_type in all_types.split():
        if func_type not in ['FCJAsymm']:
            test = create_guessability_test(func_type)
            test.__name__ = 'test_' + func_type
            setattr(TestGuessability, test.__name__, test)
Esempio n. 6
0
 def setUp(self):
     self.ftk = fityk.Fityk()
     self.ftk.set_option_as_number("verbosity", -1)
     f = tempfile.NamedTemporaryFile(suffix='.gz', delete=False)
     self.filename = f.name
     gf = gzip.GzipFile(fileobj=f)
     gf.write("M=1\n X[0]=1.1, Y[0]=-5, S[0]=0.8")
     gf.close()
Esempio n. 7
0
 def setUp(self):
     xx = [(n - 5) / 2. for n in range(25)]
     yy = [
         11.2 / (1 + (x - 3.3)**2) + math.sin(40 * x) / 40 - x / 10.
         for x in xx
     ]
     self.ftk = fityk.Fityk()
     self.ftk.set_option_as_number("verbosity", -1)
     self.ftk.load_data(0, xx, yy, [1] * len(xx), "loren")
Esempio n. 8
0
 def setUp(self):
     self.ftk = fityk.Fityk()
     self.ftk.set_option_as_number("verbosity", -1)
     f = tempfile.NamedTemporaryFile(delete=False)
     self.data = [(random.uniform(-100, 100), random.gauss(10, 20))
                  for _ in range(30)]
     for d in self.data:
         f.write(self.line_format(d))
     f.close()
     self.data.sort()
     self.filename = f.name
Esempio n. 9
0
 def setUp(self):
     self.ftk = fityk.Fityk()
     self.ftk.set_option_as_number("verbosity", -1)
     prefix = getattr(self, 'file_prefix', 'tmp')
     f = tempfile.NamedTemporaryFile(prefix=prefix, delete=False)
     self.data = self.generate_data()
     for d in self.data:
         f.write(self.line_format(d))
     f.close()
     self.data.sort()
     self.filename = f.name
Esempio n. 10
0
 def setUp(self):
     self.ftk = fityk.Fityk()
     self.ftk.set_option_as_number("verbosity", -1)
     self.ftk.execute("$a = ~3.14 [-1:4.5]")
Esempio n. 11
0
 def setUp(self):
     self.ftk = fityk.Fityk()
     self.ftk.set_option_as_number("verbosity", -1)
Esempio n. 12
0
def main():
    config_dir = os.path.join(os.path.expanduser("~"), fityk.config_dirname())

    if readline:
        histfile = os.path.join(config_dir, "history")
        if hasattr(readline, "read_history_file"):
            try:
                readline.read_history_file(histfile)
            except IOError:
                pass
            atexit.register(readline.write_history_file, histfile)

    fityk.interrupt_computations_on_sigint()

    parser = OptionParser("Usage: %prog [-h] [-V] [-c <str>]"
                          " [script or data file...]")
    parser.add_option("-V",
                      "--version",
                      action="store_true",
                      help="output version information and exit")
    parser.add_option("-c",
                      "--cmd",
                      action="append",
                      default=[],
                      help="script passed in as string")
    parser.add_option("-I",
                      "--no-init",
                      action="store_true",
                      help="don't process $HOME/.fityk/init file")
    parser.add_option("-q",
                      "--quit",
                      action="store_true",
                      help="don't enter interactive shell")
    (options, args) = parser.parse_args()

    f = fityk.Fityk()
    ui = f.get_ui_api()

    ui.connect_draw_plot_py(functools.partial(plot_in_gnuplot, f))

    if options.version:
        print("cfityk.py %s" % f.get_info("version").split()[-1])
        return

    if not options.no_init:
        init_file = os.path.join(config_dir, fityk.startup_commands_filename())
        if os.path.exists(init_file):
            sys.stderr.write(" -- init file: %s --\n" % init_file)
            ui.exec_fityk_script(init_file)
            sys.stderr.write(" -- end of init file --\n")

    if readline:
        readline.parse_and_bind("tab: complete")
        readline.set_completer_delims(" \t\n\"\\'`@$><=;|&{(:")  # default+":"
        completer = Completer(f)
        readline.set_completer(completer.complete)

    try:
        for s in options.cmd:
            ui.exec_and_log(s)
        for arg in args:
            f.process_cmd_line_arg(arg)

        if not options.quit:
            while True:
                line = read_line()
                ui.exec_and_log(line)
                print("")
    except fityk.ExitRequestedException:
        sys.stderr.write("\nbye...\n")
Esempio n. 13
0
def run(data_name, fit_method, easy=True):
    uses_gradient = (fit_method in ("mpfit", "levenberg_marquardt"))
    if uses_gradient:
        tolerance = {"wssr": 1e-10, "param": 4e-7, "err": 5e-3}
    else:
        tolerance = {"wssr": 1e-7, "param": 1e-4}
        if fit_method == "nelder_mead_simplex":
            tolerance["err"] = 5e-5
    #if fit_method in ("mpfit", "levenberg_marquardt"):
    if VERBOSE > 0:
        print "Testing %s (start%s) on %-10s" % (fit_method, easy + 1,
                                                 data_name),
    if VERBOSE > 1:
        print
    ref = read_reference_data(data_name)
    if VERBOSE > 2:
        print ref.model
    ftk = fityk.Fityk()
    if VERBOSE < 3:
        ftk.execute("set verbosity=-1")
    y, x = zip(*ref.data)
    ftk.load_data(0, x, y, [1] * len(x), data_name)
    par_names = [p.name for p in ref.parameters]
    par_inits = [
        "~%g" % (p.start2 if easy else p.start1) for p in ref.parameters
    ]
    ftk.execute("define OurFunc(%s) = %s" % (", ".join(par_names), ref.model))
    ftk.execute("F = OurFunc(%s)" % ", ".join(par_inits))
    ftk.execute("set fitting_method=" + fit_method)
    ftk.execute("set pseudo_random_seed=1234567")
    #ftk.execute("set numeric_format='%.10E'")
    ftk.execute("set lm_stop_rel_change=1e-16")
    #ftk.execute("set lm_max_lambda=1e+50")
    ftk.execute("set nm_convergence=1e-10")
    if fit_method == "mpfit":
        ftk.execute("set ftol_rel=1e-18")
        ftk.execute("set xtol_rel=1e-18")
    if fit_method == "genetic_algorithms":
        ftk.execute("set max_wssr_evaluations=5e5")
    elif not uses_gradient:
        ftk.execute("set max_wssr_evaluations=2e4")
    try:
        ftk.execute("fit")
        #ftk.execute("set fitting_method=levenberg_marquardt")
        #ftk.execute("fit")
    except fityk.ExecuteError as e:
        print "fityk.ExecuteError: %s" % e
        return False
    ssr = ftk.get_ssr()
    ssr_diff = (ssr - ref.ssr) / ref.ssr

    # Lanczos1 and Lanczos2 have near-zero SSR, we need to be more tolerant
    if ssr < 1e-20:
        tolerance["wssr"] *= 1e8
    elif ssr < 1e-10:
        tolerance["wssr"] *= 1e2

    ok = (abs(ssr_diff) < tolerance["wssr"])
    if ref.ssr > 1e-10 and ssr_diff < -1e-10:
        print "Eureka! %.10E < %.10E" % (ssr, ref.ssr)
    fmt = " %8s  %13E %13E  %+.1E"
    if VERBOSE > 2 or (VERBOSE == 2 and not ok):
        print fmt % ("SSR", ssr, ref.ssr, ssr_diff)
    our_func = ftk.all_functions()[0]
    for par in ref.parameters:
        calc_value = our_func.get_param_value(par.name)
        val_diff = (calc_value - par.value) / par.value
        param_ok = (abs(val_diff) < tolerance["param"])
        err_ok = True
        if "err" in tolerance:
            vname = our_func.var_name(par.name)
            calc_err = ftk.calculate_expr("$%s.error" % vname)
            err_diff = (calc_err - par.stddev) / par.stddev
            err_ok = (abs(err_diff) < tolerance["err"])
        if VERBOSE > 2 or (VERBOSE == 2 and (not param_ok or not err_ok)):
            print fmt % (par.name, calc_value, par.value, val_diff)
            if "err" in tolerance:
                print fmt % ("+/-", calc_err, par.stddev, err_diff)
        ok = (ok and param_ok and err_ok)
    if VERBOSE == 1:
        print("OK" if ok else "FAILED")
    return ok
Esempio n. 14
0
def has_nlopt():
    ftk = fityk.Fityk()
    return "NLopt" in ftk.get_info("compiler")
Esempio n. 15
0
 def setUp(self):
     self.ftk = fityk.Fityk()
     self.ftk.set_option_as_number("verbosity", -1)
     self.ftk.execute("%f = Quadratic(~1, 2, ~3)")
     self.ftk.execute("%g = Constant(7.5)")
     self.ftk.execute("F = %f + %g")