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"]
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
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")
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)')
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)
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()
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")
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
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
def setUp(self): self.ftk = fityk.Fityk() self.ftk.set_option_as_number("verbosity", -1) self.ftk.execute("$a = ~3.14 [-1:4.5]")
def setUp(self): self.ftk = fityk.Fityk() self.ftk.set_option_as_number("verbosity", -1)
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")
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
def has_nlopt(): ftk = fityk.Fityk() return "NLopt" in ftk.get_info("compiler")
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")