def set_outputfilename(self): if not hasattr(self, "output_filename") or not hasattr(self, "db_filename") or not hasattr(self, "mln_filename"): return mln = self.mln_container.selected_file.get() db = self.db_container.selected_file.get() if "" in (mln, db): return if self.selected_method.get(): method = LearningMethods.clazz(self.selected_method.get()) methodid = LearningMethods.id(method) filename = config.learnwts_output_filename(mln, methodid.lower(), db) self.output_filename.set(filename)
def update_config(self): out('update_config') self.config = PRACMLNConfig() self.config['mln'] = self.mln_container.selected_file.get().strip().lstrip('*') self.config["db"] = self.db_container.selected_file.get().strip().lstrip('*') self.config["output_filename"] = self.output_filename.get() self.config["params"] = self.params.get().strip() self.config["method"] = LearningMethods.id(self.selected_method.get().strip()) self.config["pattern"] = self.pattern.get() self.config["use_prior"] = int(self.use_prior.get()) self.config["prior_mean"] = self.priorMean.get() self.config["prior_stdev"] = self.priorStdDev.get() self.config["incremental"] = int(self.incremental.get()) self.config["shuffle"] = int(self.shuffle.get()) self.config["use_initial_weights"] = int(self.use_initial_weights.get()) self.config["qpreds"] = self.queryPreds.get().strip() self.config["epreds"] = self.evidencePreds.get().strip() self.config["discr_preds"] = self.discrPredicates.get() self.config['logic'] = self.selected_logic.get() self.config['grammar'] = self.selected_grammar.get() self.config['multicore'] = self.multicore.get() self.config['profile'] = self.profile.get() self.config['verbose'] = self.verbose.get() self.config['ignore_unknown_preds'] = self.ignore_unknown_preds.get() self.config['ignore_zero_weight_formulas'] = self.ignore_zero_weight_formulas.get() self.config['save'] = self.save.get() self.config["output_filename"] = self.output_filename.get().strip() self.project.learnconf = PRACMLNConfig() self.project.learnconf.update(self.config.config.copy())
def set_config(self, newconf): self.config = newconf self.selected_grammar.set(ifNone(newconf.get('grammar'), 'PRACGrammar')) self.selected_logic.set(ifNone(newconf.get('logic'), 'FirstOrderLogic')) self.mln_container.selected_file.set(ifNone(newconf.get('mln'), '')) self.db_container.selected_file.set(ifNone(newconf.get('db'), "")) self.selected_method.set(ifNone(newconf.get("method"), LearningMethods.name('BPLL'), transform=LearningMethods.name)) self.pattern.set(ifNone(newconf.get('pattern'), '')) self.multicore.set(ifNone(newconf.get('multicore'), 0)) self.use_prior.set(ifNone(newconf.get('use_prior'), 0)) self.priorMean.set(ifNone(newconf.get('prior_mean'), 0)) self.priorStdDev.set(ifNone(newconf.get('prior_stdev'), 5)) self.incremental.set(ifNone(newconf.get('incremental'), 0)) self.shuffle.set(ifNone(newconf.get('shuffle'), 0)) self.use_initial_weights.set(ifNone(newconf.get('use_initial_weights'), 0)) self.profile.set(ifNone(newconf.get('profile'), 0)) self.params.set(ifNone(newconf.get('params'), '')) self.verbose.set(ifNone(newconf.get('verbose'), 1)) self.ignore_unknown_preds.set(ifNone(newconf.get('ignore_unknown_preds'), 0)) self.output_filename.set(ifNone(newconf.get('output_filename'), '')) self.queryPreds.set(ifNone(newconf.get('qpreds'), '')) self.evidencePreds.set(ifNone(newconf.get('epreds'), '')) self.discrPredicates.set(ifNone(newconf.get('discr_preds'), 0)) self.ignore_zero_weight_formulas.set(ifNone(newconf.get('ignore_zero_weight_formulas'), 0)) self.save.set(ifNone(newconf.get('save'), 0))
def change_discr_preds(self, *args): methodname = self.selected_method.get() if methodname: method = LearningMethods.clazz(methodname) state = NORMAL if issubclass(method, DiscriminativeLearner) else DISABLED self.entry_nePreds.configure(state=state if self.discrPredicates.get() == 0 else DISABLED) self.entryEvidencePreds.configure(state=state if self.discrPredicates.get() == 1 else DISABLED) self.rbEvidencePreds.configure(state=state) self.rbQueryPreds.configure(state=state)
def __init__(self, master, gconf, directory=None): self.master = master # icon = Tkinter.Image("photo", file=os.path.join(PRACMLN_HOME, # 'doc', # '_static', # 'favicon.ico')) # self.master.tk.call('wm', 'iconphoto', self.master._w, icon) self.initialized = False self.master.bind('<Return>', self.learn) self.master.bind('<Escape>', lambda a: self.master.quit()) self.master.protocol('WM_DELETE_WINDOW', self.quit) # logo = Label(self.master, image=img) # logo.pack(side = "right", anchor='ne') self.dir = os.path.abspath(ifNone(directory, ifNone(gconf['prev_learnwts_path'], os.getcwd()))) self.frame = Frame(master) self.frame.pack(fill=BOTH, expand=1) self.frame.columnconfigure(1, weight=1) row = 0 # pracmln project options Label(self.frame, text='PRACMLN Project: ').grid(row=row, column=0, sticky='ES') project_container = Frame(self.frame) project_container.grid(row=row, column=1, sticky="NEWS") # new proj file self.btn_newproj = Button(project_container, text='New Project...', command=self.new_project) self.btn_newproj.grid(row=0, column=1, sticky="WS") # open proj file self.btn_openproj = Button(project_container, text='Open Project...', command=self.ask_load_project) self.btn_openproj.grid(row=0, column=2, sticky="WS") # save proj file self.btn_saveproj = Button(project_container, text='Save Project', command=self.noask_save_project) self.btn_saveproj.grid(row=0, column=3, sticky="WS") # save proj file as... self.btn_saveproj = Button(project_container, text='Save Project as...', command=self.ask_save_project) self.btn_saveproj.grid(row=0, column=4, sticky="WS") # grammar selection row += 1 Label(self.frame, text='Grammar: ').grid(row=row, column=0, sticky='E') grammars = ['StandardGrammar', 'PRACGrammar'] self.selected_grammar = StringVar(master) self.selected_grammar.trace('w', self.settings_setdirty) l = apply(OptionMenu, (self.frame, self.selected_grammar) + tuple(grammars)) l.grid(row=row, column=1, sticky='NWE') # logic selection row += 1 Label(self.frame, text='Logic: ').grid(row=row, column=0, sticky='E') logics = ['FirstOrderLogic', 'FuzzyLogic'] self.selected_logic = StringVar(master) self.selected_logic.trace('w', self.settings_setdirty) l = apply(OptionMenu, (self.frame, self.selected_logic) + tuple(logics)) l.grid(row=row, column=1, sticky='NWE') # mln section row += 1 Label(self.frame, text="MLN: ").grid(row=row, column=0, sticky='NE') self.mln_container = FileEditBar(self.frame, dir=self.dir, filesettings={'extension': '.mln', 'ftypes': [('MLN files', '.mln')]}, defaultname='*unknown{}', importhook=self.import_mln, deletehook=self.delete_mln, projecthook=self.save_proj, filecontenthook=self.mlnfilecontent, fileslisthook=self.mlnfiles, updatehook=self.update_mln, onchangehook=self.project_setdirty) self.mln_container.grid(row=row, column=1, sticky="NEWS") self.mln_container.columnconfigure(1, weight=2) self.frame.rowconfigure(row, weight=1) # method selection row += 1 Label(self.frame, text="Method: ").grid(row=row, column=0, sticky=E) self.selected_method = StringVar(master) methodnames = sorted(LearningMethods.names()) self.list_methods = apply(OptionMenu, (self.frame, self.selected_method) + tuple(methodnames)) self.list_methods.grid(row=row, column=1, sticky="NWE") self.selected_method.trace("w", self.select_method) # additional parametrization row += 1 frame = Frame(self.frame) frame.grid(row=row, column=1, sticky="NEW") # use prior self.use_prior = IntVar() self.cb_use_prior = Checkbutton(frame, text="use prior with mean of ", variable=self.use_prior, command=self.onchange_useprior) self.cb_use_prior.pack(side=LEFT) # set prior self.priorMean = StringVar(master) self.en_prior_mean = Entry(frame, textvariable=self.priorMean, width=5) self.en_prior_mean.pack(side=LEFT) self.priorMean.trace('w', self.settings_setdirty) Label(frame, text="and std dev of").pack(side=LEFT) # std. dev. self.priorStdDev = StringVar(master) self.en_stdev = Entry(frame, textvariable=self.priorStdDev, width=5) self.priorStdDev.trace('w', self.settings_setdirty) self.en_stdev.pack(side=LEFT) # use initial weights in MLN self.use_initial_weights = IntVar() self.cb_use_initial_weights = Checkbutton(frame, text="use initial weights", variable=self.use_initial_weights, command=self.settings_setdirty) self.cb_use_initial_weights.pack(side=LEFT) # use incremental learning self.incremental = IntVar() self.cb_incremental = Checkbutton(frame, text="learn incrementally", variable=self.incremental, command=self.onchange_incremental) self.cb_incremental.pack(side=LEFT) # shuffle databases self.shuffle = IntVar() self.cb_shuffle = Checkbutton(frame, text="shuffle databases", variable=self.shuffle, state='disabled') self.cb_shuffle.pack(side=LEFT) # discriminative learning settings row += 1 self.discrPredicates = IntVar() self.discrPredicates.trace('w', self.change_discr_preds) self.discrPredicates.set(1) frame = Frame(self.frame) frame.grid(row=row, column=1, sticky="NEWS") self.rbQueryPreds = Radiobutton(frame, text="Query preds:", variable=self.discrPredicates, value=QUERY_PREDS) self.rbQueryPreds.grid(row=0, column=0, sticky="NE") self.queryPreds = StringVar(master) frame.columnconfigure(1, weight=1) self.entry_nePreds = Entry(frame, textvariable=self.queryPreds) self.entry_nePreds.grid(row=0, column=1, sticky="NEW") self.rbEvidencePreds = Radiobutton(frame, text='Evidence preds', variable=self.discrPredicates, value=EVIDENCE_PREDS) self.rbEvidencePreds.grid(row=0, column=2, sticky='NEWS') self.evidencePreds = StringVar(master) self.entryEvidencePreds = Entry(frame, textvariable=self.evidencePreds) self.entryEvidencePreds.grid(row=0, column=3, sticky='NEWS') # db section row += 1 Label(self.frame, text="Evidence: ").grid(row=row, column=0, sticky='NE') self.db_container = FileEditBar(self.frame, dir=self.dir, filesettings={'extension': '.db', 'ftypes': [('Database files', '.db')]}, defaultname='*unknown{}', importhook=self.import_db, deletehook=self.delete_db, projecthook=self.save_proj, filecontenthook=self.dbfilecontent, fileslisthook=self.dbfiles, updatehook=self.update_db, onchangehook=self.project_setdirty) self.db_container.grid(row=row, column=1, sticky="NEWS") self.db_container.columnconfigure(1, weight=2) self.frame.rowconfigure(row, weight=1) # file patterns row += 1 frame = Frame(self.frame) frame.grid(row=row, column=1, sticky="NEW") col = 0 Label(frame, text="OR file pattern:").grid(row=0, column=col, sticky="W") # - pattern entry col += 1 frame.columnconfigure(col, weight=1) self.pattern = StringVar(master) self.pattern.trace('w', self.onchange_pattern) self.entry_pattern = Entry(frame, textvariable=self.pattern) self.entry_pattern.grid(row=0, column=col, sticky="NEW") # add. parameters row += 1 Label(self.frame, text="Add. Params: ").grid(row=row, column=0, sticky="E") self.params = StringVar(master) Entry(self.frame, textvariable=self.params).grid(row=row, column=1, sticky="NEW") # options row += 1 Label(self.frame, text="Options: ").grid(row=row, column=0, sticky="E") option_container = Frame(self.frame) option_container.grid(row=row, column=1, sticky="NEWS") # multicore self.multicore = IntVar() self.cb_multicore = Checkbutton(option_container, text="Use all CPUs", variable=self.multicore, command=self.settings_setdirty) self.cb_multicore.grid(row=0, column=1, sticky=E) # profiling self.profile = IntVar() self.cb_profile = Checkbutton(option_container, text='Use Profiler', variable=self.profile, command=self.settings_setdirty) self.cb_profile.grid(row=0, column=3, sticky=W) # verbose self.verbose = IntVar() self.cb_verbose = Checkbutton(option_container, text='verbose', variable=self.verbose, command=self.settings_setdirty) self.cb_verbose.grid(row=0, column=4, sticky=W) self.ignore_zero_weight_formulas = IntVar() self.cb_ignore_zero_weight_formulas = Checkbutton(option_container, text='remove 0-weight formulas', variable=self.ignore_zero_weight_formulas, command=self.settings_setdirty) self.cb_ignore_zero_weight_formulas.grid(row=0, column=5, sticky=W) # ignore unknown preds self.ignore_unknown_preds = IntVar(master) self.ignore_unknown_preds.trace('w', self.settings_setdirty) self.cb_ignore_unknown_preds = \ Checkbutton(option_container, text='ignore unkown predicates', variable=self.ignore_unknown_preds) self.cb_ignore_unknown_preds.grid(row=0, column=6, sticky="W") row += 1 output_cont = Frame(self.frame) output_cont.grid(row=row, column=1, sticky='NEWS') output_cont.columnconfigure(0, weight=1) Label(self.frame, text="Output: ").grid(row=row, column=0, sticky="E") self.output_filename = StringVar(master) self.entry_output_filename = Entry(output_cont, textvariable=self.output_filename) self.entry_output_filename.grid(row=0, column=0, sticky="EW") self.save = IntVar(self.master) self.cb_save = Checkbutton(output_cont, text='save', variable=self.save) self.cb_save.grid(row=0, column=1, sticky='W') row += 1 learn_button = Button(self.frame, text=" >> Start Learning << ", command=self.learn) learn_button.grid(row=row, column=1, sticky="EW") self.settings_dirty = IntVar() self.project_dirty = IntVar() self.gconf = gconf self.project = None self.project_dir = os.path.abspath(ifNone(directory, ifNone(gconf['prev_learnwts_path'], os.getcwd()))) if gconf['prev_learnwts_project': self.project_dir] is not None: self.load_project(os.path.join(self.project_dir, gconf['prev_learnwts_project':self.project_dir])) else: self.new_project() self.config = self.project.learnconf self.project.addlistener(self.project_setdirty) self.mln_container.dirty = False self.db_container.dirty = False self.project_setdirty(dirty=False) self.master.geometry(gconf['window_loc_learn']) self.initialized = True
def method(self): ''' The string identifier of the learning method to use. Defaults to ``'BPLL'``. ''' return LearningMethods.clazz(self._config.get('method', 'BPLL'))