def _updateMode(self): self.ui.tabWidget.setTabEnabled(self.ui.tabWidget.indexOf(self.ui.editorTab), not self.no_alg) self.ui.tabWidget.setTabEnabled(self.ui.tabWidget.indexOf(self.ui.modelTab), bool(self.model)) self.ui.tabWidget.setTabEnabled(self.ui.tabWidget.indexOf(self.ui.analysisTab), bool(self.model)) self.ui.tabWidget.setTabEnabled(self.ui.tabWidget.indexOf(self.ui.machineTab), bool(self.machine)) self.ui.tabWidget.setTabEnabled(self.ui.tabWidget.indexOf(self.ui.tableTab), bool(self.tr_table)) self.ui.tabWidget.setTabEnabled(self.ui.tabWidget.indexOf(self.ui.vhdlTab), bool(self.machine)) #use full ABSOLUTE path to the image, not relative ren = None self._update_graph() if self.machine: ren = graph.renumerate(self.machine[0]) graph.draw_machine(*self.machine) self._fill_signals() if self.model: txt = self.ui.info.toPlainText() self.ui.info.setPlainText("%s\nInput signals: %d\nOutput signals: %d" % (txt, len(self.model.in_signals), len(self.model.out_signals))) graph.draw_graph(self.model.barenodes, self.model.connections, self.model.matrix, loop=self.model.loop, renumerated=ren, added=self.machine[3]) if os.path.exists(IMG_PATH): self.canvas.setPixmap(QtGui.QPixmap(IMG_PATH)) self.canvas.adjustSize() if os.path.exists(IMG_MACHINE_PATH): self.m_canvas.setPixmap(QtGui.QPixmap(IMG_MACHINE_PATH)) self.m_canvas.adjustSize() if os.path.exists(IMG_FORMULAS_PATH): self.f_canvas.setPixmap(QtGui.QPixmap(IMG_FORMULAS_PATH)) self.f_canvas.adjustSize()
def _updateMode(self): self.ui.tabWidget.setTabEnabled( self.ui.tabWidget.indexOf(self.ui.editorTab), not self.no_alg) self.ui.tabWidget.setTabEnabled( self.ui.tabWidget.indexOf(self.ui.modelTab), bool(self.model)) self.ui.tabWidget.setTabEnabled( self.ui.tabWidget.indexOf(self.ui.analysisTab), bool(self.model)) self.ui.tabWidget.setTabEnabled( self.ui.tabWidget.indexOf(self.ui.machineTab), bool(self.machine)) self.ui.tabWidget.setTabEnabled( self.ui.tabWidget.indexOf(self.ui.tableTab), bool(self.tr_table)) self.ui.tabWidget.setTabEnabled( self.ui.tabWidget.indexOf(self.ui.vhdlTab), bool(self.machine)) #use full ABSOLUTE path to the image, not relative ren = None self._update_graph() if self.machine: ren = graph.renumerate(self.machine[0]) graph.draw_machine(*self.machine) self._fill_signals() if self.model: txt = self.ui.info.toPlainText() self.ui.info.setPlainText( "%s\nInput signals: %d\nOutput signals: %d" % (txt, len(self.model.in_signals), len(self.model.out_signals))) graph.draw_graph(self.model.barenodes, self.model.connections, self.model.matrix, loop=self.model.loop, renumerated=ren, added=self.machine[3]) if os.path.exists(IMG_PATH): self.canvas.setPixmap(QtGui.QPixmap(IMG_PATH)) self.canvas.adjustSize() if os.path.exists(IMG_MACHINE_PATH): self.m_canvas.setPixmap(QtGui.QPixmap(IMG_MACHINE_PATH)) self.m_canvas.adjustSize() if os.path.exists(IMG_FORMULAS_PATH): self.f_canvas.setPixmap(QtGui.QPixmap(IMG_FORMULAS_PATH)) self.f_canvas.adjustSize()
def _fill_signals(self): if self.model: self.ui.listSignals.clear() signals = sorted([ conditionname([x]) for x in self.model.in_signals + self.model.out_signals ]) self.ui.listSignals.insertItems(0, QtCore.QStringList(signals)) self.ui.listNodes.clear() nodes = sorted("%d: %d" % (k, x) for k, x in self.model.signals.iteritems()) self.ui.listNodes.insertItems(0, QtCore.QStringList(nodes)) machine = None if self.machine: machine = self.machine if machine: self.ui.listTransitions.clear() num = graph.renumerate(machine[0]) trans = [ "%d -> %d : %s" % (num.get_id(x[0] + 1), num.get_id(x[1] + 1), conditionname(x[2])) for x in machine[0] ] self.ui.listTransitions.insertItems(0, QtCore.QStringList(trans)) self.ui.listSignalsMachine.clear() nodes = sorted("%4d: %s" % (num.get_id(k + 1), conditionname(x)) for k, x in machine[1].iteritems()) self.ui.listSignalsMachine.insertItems(0, QtCore.QStringList(nodes)) if self.model: if len(self.model.barenodes) < 10: matrix = "" for i in self.model.matrix: matrix += ','.join(["%6s" % (x) for x in i]) + "\n" self.log(matrix) # model = QtCode.QStandartItemModel(2,3,self) model = MatrixModel(self.ui.matrix, self.model) self.ui.matrix.setModel(model) self.ui.matrix.resizeColumnsToContents() self.ui.listLoops.clear() node_names = { k: nodename(k, {k: x}) for k, x in self.model.barenodes.iteritems() } lines = [ '->'.join([node_names[i + 1] for i in l]) for l in self.model.find_loops() ] self.ui.listLoops.insertItems(0, QtCore.QStringList(lines)) self.ui.listPaths.clear() lines = [ '->'.join([node_names[i + 1] for i in l]) for l in self.model.find_paths() ] self.ui.listPaths.insertItems(0, QtCore.QStringList(lines)) if self.tr_table and self.model: jks = mtable.jk(self.tr_table) q_count = len(self.tr_table[0].q) x_count = len(self.model.in_signals) y_count = len(self.model.out_signals) funcs = [mtable.generate_formula("J_{%d}" % (i+1), jk) for i, jk in enumerate(jks[0])] + \ [mtable.generate_formula("J_{%dm}" % (i+1), mtable.minimize(jk, q_count, x_count)) for i, jk in enumerate(jks[0])] + \ [mtable.generate_formula("K_{%d}" % (i+1), jk) for i, jk in enumerate(jks[1])] + \ [mtable.generate_formula("K_{%dm}" % (i+1), mtable.minimize(jk, q_count, x_count)) for i, jk in enumerate(jks[1])] + \ [mtable.generate_formula("Y_{%d}" % (i+1), jk) for i, jk in enumerate(jks[2])] + \ [mtable.generate_formula("Y_{%dm}" % (i+1), mtable.minimize(jk, q_count, x_count)) for i, jk in enumerate(jks[2])] # mtable.latexmath2png.math2png(funcs, os.getcwd(), prefix = "adcs_") mtable.latexmath2png.math2png(funcs, os.getcwd(), prefix="adcs_") tr_model = TransitionModel(self.ui.tr_table, self.tr_table, self.model, jks) self.ui.tr_table.setModel(tr_model) self.ui.tr_table.resizeColumnsToContents() self.ui.vhdl_text.setPlainText(vhdl.vhdl(jks, x_count, y_count))
def _fill_signals(self): if self.model: self.ui.listSignals.clear() signals = sorted([conditionname([x]) for x in self.model.in_signals + self.model.out_signals]) self.ui.listSignals.insertItems(0, QtCore.QStringList(signals)) self.ui.listNodes.clear() nodes = sorted("%d: %d" % (k,x) for k,x in self.model.signals.iteritems()) self.ui.listNodes.insertItems(0, QtCore.QStringList(nodes)) machine = None if self.machine: machine = self.machine if machine: self.ui.listTransitions.clear() num = graph.renumerate(machine[0]) trans = ["%d -> %d : %s" % (num.get_id(x[0]+1), num.get_id(x[1]+1), conditionname(x[2])) for x in machine[0]] self.ui.listTransitions.insertItems(0, QtCore.QStringList(trans)) self.ui.listSignalsMachine.clear() nodes = sorted("%4d: %s" % (num.get_id(k+1),conditionname(x)) for k,x in machine[1].iteritems()) self.ui.listSignalsMachine.insertItems(0, QtCore.QStringList(nodes)) if self.model: if len(self.model.barenodes) < 10: matrix = "" for i in self.model.matrix: matrix += ','.join(["%6s" % (x) for x in i]) + "\n" self.log(matrix) # model = QtCode.QStandartItemModel(2,3,self) model = MatrixModel(self.ui.matrix, self.model) self.ui.matrix.setModel(model) self.ui.matrix.resizeColumnsToContents() self.ui.listLoops.clear() node_names = {k:nodename(k, {k: x}) for k,x in self.model.barenodes.iteritems()} lines = ['->'.join([node_names[i+1] for i in l]) for l in self.model.find_loops()] self.ui.listLoops.insertItems(0, QtCore.QStringList(lines)) self.ui.listPaths.clear() lines = ['->'.join([node_names[i+1] for i in l]) for l in self.model.find_paths()] self.ui.listPaths.insertItems(0, QtCore.QStringList(lines)) if self.tr_table and self.model: jks = mtable.jk(self.tr_table) q_count = len(self.tr_table[0].q) x_count = len(self.model.in_signals) y_count = len(self.model.out_signals) funcs = [mtable.generate_formula("J_{%d}" % (i+1), jk) for i, jk in enumerate(jks[0])] + \ [mtable.generate_formula("J_{%dm}" % (i+1), mtable.minimize(jk, q_count, x_count)) for i, jk in enumerate(jks[0])] + \ [mtable.generate_formula("K_{%d}" % (i+1), jk) for i, jk in enumerate(jks[1])] + \ [mtable.generate_formula("K_{%dm}" % (i+1), mtable.minimize(jk, q_count, x_count)) for i, jk in enumerate(jks[1])] + \ [mtable.generate_formula("Y_{%d}" % (i+1), jk) for i, jk in enumerate(jks[2])] + \ [mtable.generate_formula("Y_{%dm}" % (i+1), mtable.minimize(jk, q_count, x_count)) for i, jk in enumerate(jks[2])] # mtable.latexmath2png.math2png(funcs, os.getcwd(), prefix = "adcs_") mtable.latexmath2png.math2png(funcs, os.getcwd(), prefix = "adcs_") tr_model = TransitionModel(self.ui.tr_table, self.tr_table, self.model, jks) self.ui.tr_table.setModel(tr_model) self.ui.tr_table.resizeColumnsToContents() self.ui.vhdl_text.setPlainText(vhdl.vhdl(jks, x_count, y_count))