Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
    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))
Ejemplo n.º 4
0
    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))