Ejemplo n.º 1
0
    def showResults(self):
        self.table.setRowCount(len(self.optimizationRun))
        bestScore = self.bestRun[1].score
        worstScore = (max if getattr(
            self.scoringMethods[self.scoring][1], "minimize", False) else min)(
                [km.score for k, km in self.optimizationRun])
        for i, (k, run) in enumerate(self.optimizationRun):
            item = OWGUI.tableItem(self.table, i, 0, k)
            item.setData(Qt.TextAlignmentRole, QVariant(Qt.AlignCenter))

            item = OWGUI.tableItem(
                self.table, i, 1,
                None)  #" " if (k, run) == self.bestRun else "")
            item.setData(OWGUI.IndicatorItemDelegate.IndicatorRole,
                         QVariant((k, run) == self.bestRun))
            #            item.setData(Qt.DecorationRole, QVariant(QIcon(os.path.join(os.path.dirname(OWGUI.__file__), "icons", "circle.png"))))
            item.setData(Qt.TextAlignmentRole, QVariant(Qt.AlignCenter))

            fmt = lambda score, max_decimals=10: "%%.%if" % min(
                int(abs(math.log(max(score, 1e-10)))) + 2, max_decimals
            ) if score > 0 and score < 1 else "%.1f"
            item = OWGUI.tableItem(self.table, i, 2,
                                   fmt(run.score) % run.score)
            item.setData(
                OWGUI.TableBarItem.BarRole,
                QVariant((bestScore - run.score) /
                         ((bestScore - worstScore) or 1) * 0.95))
            if (k, run) == self.bestRun:
                self.table.selectRow(i)

        for i in range(2):
            self.table.resizeColumnToContents(i)
        self.table.show()
        qApp.processEvents()
        self.adjustSize()
    def setTable(self):
        self.table.setColumnCount(0)
        self.table.setColumnCount(len(self.learners))
        self.table.setRowCount(self.steps)

        # set the headers
        self.table.setHorizontalHeaderLabels([l.name for i,l in self.learners])
        self.table.setVerticalHeaderLabels(["%4.2f" % p for p in self.curvePoints])

        # set the table contents
        for l in range(len(self.learners)):
            for p in range(self.steps):
                OWGUI.tableItem(self.table, p, l, "%7.5f" % self.scores[l][p])

        for i in range(len(self.learners)):
            self.table.setColumnWidth(i, 80)
Ejemplo n.º 3
0
    def setTable(self):
        self.table.setColumnCount(0)
        self.table.setColumnCount(len(self.learners))
        self.table.setRowCount(self.steps)

        # set the headers
        self.table.setHorizontalHeaderLabels([l.name for i,l in self.learners])
        self.table.setVerticalHeaderLabels(["%4.2f" % p for p in self.curvePoints])

        # set the table contents
        for l in range(len(self.learners)):
            for p in range(self.steps):
                OWGUI.tableItem(self.table, p, l, "%7.5f" % self.scores[l][p])

        for i in range(len(self.learners)):
            self.table.setColumnWidth(i, 80)
Ejemplo n.º 4
0
    def showResults(self):
        self.table.setRowCount(len(self.optimizationRun))
        scoring = self.scoringMethods[self.scoring][1]
        minimize = getattr(scoring, "minimize", False)

        bestScore = self.bestRun[1].score
        worstScore = self.optimizationRunSorted[0][1].score

        if minimize:
            bestScore, worstScore = worstScore, bestScore

        scoreSpan = (bestScore - worstScore) or 1

        for i, (k, run) in enumerate(self.optimizationRun):
            item = OWGUI.tableItem(self.table, i, 0, k)
            item.setData(Qt.TextAlignmentRole, QVariant(Qt.AlignCenter))

            item = OWGUI.tableItem(self.table, i, 1, None)
            item.setData(OWGUI.IndicatorItemDelegate.IndicatorRole,
                         QVariant((k, run) == self.bestRun))

            item.setData(Qt.TextAlignmentRole, QVariant(Qt.AlignCenter))

            fmt = self.scoreFmt(run.score)
            item = OWGUI.tableItem(self.table, i, 2, fmt % run.score)
            barRatio = 0.95 * (run.score - worstScore) / scoreSpan

            item.setData(OWGUI.TableBarItem.BarRole, QVariant(barRatio))
            if (k, run) == self.bestRun:
                self.table.selectRow(i)

        for i in range(2):
            self.table.resizeColumnToContents(i)

        self.table.show()

        if minimize:
            self.tableBox.setTitle("Optimization Report (smaller is better)")
        else:
            self.tableBox.setTitle("Optimization Report (bigger is better)")

        QTimer.singleShot(0, self.adjustSize)
Ejemplo n.º 5
0
    def showResults(self):
        self.table.setRowCount(len(self.optimizationRun))
        scoring = self.scoringMethods[self.scoring][1]
        minimize = getattr(scoring, "minimize", False)

        bestScore = self.bestRun[1].score
        worstScore = self.optimizationRunSorted[0][1].score

        if minimize:
            bestScore, worstScore = worstScore, bestScore

        scoreSpan = (bestScore - worstScore) or 1

        for i, (k, run) in enumerate(self.optimizationRun):
            item = OWGUI.tableItem(self.table, i, 0, k)
            item.setData(Qt.TextAlignmentRole, QVariant(Qt.AlignCenter))

            item = OWGUI.tableItem(self.table, i, 1, None)
            item.setData(OWGUI.IndicatorItemDelegate.IndicatorRole,
                         QVariant((k, run) == self.bestRun))

            item.setData(Qt.TextAlignmentRole, QVariant(Qt.AlignCenter))

            fmt = self.scoreFmt(run.score)
            item = OWGUI.tableItem(self.table, i, 2, fmt % run.score)
            barRatio = 0.95 * (run.score - worstScore) / scoreSpan

            item.setData(OWGUI.TableBarItem.BarRole, QVariant(barRatio))
            if (k, run) == self.bestRun:
                self.table.selectRow(i)

        for i in range(2):
            self.table.resizeColumnToContents(i)

        self.table.show()

        if minimize:
            self.tableBox.setTitle("Optimization Report (smaller is better)")
        else:
            self.tableBox.setTitle("Optimization Report (bigger is better)")

        QTimer.singleShot(0, self.adjustSize)
Ejemplo n.º 6
0
    def showResults(self):
        self.table.setRowCount(len(self.optimizationRun))
        bestScore = self.bestRun[1].score
        worstScore = (max if getattr(self.scoringMethods[self.scoring][1], "minimize", False) else min)([km.score for k, km in self.optimizationRun])
        for i, (k, run) in enumerate(self.optimizationRun):
            item = OWGUI.tableItem(self.table, i, 0, k)
            item.setData(Qt.TextAlignmentRole, QVariant(Qt.AlignCenter))
            
            item = OWGUI.tableItem(self.table, i, 1, None)#" " if (k, run) == self.bestRun else "")
            item.setData(OWGUI.IndicatorItemDelegate.IndicatorRole, QVariant((k, run) == self.bestRun))
#            item.setData(Qt.DecorationRole, QVariant(QIcon(os.path.join(os.path.dirname(OWGUI.__file__), "icons", "circle.png"))))
            item.setData(Qt.TextAlignmentRole, QVariant(Qt.AlignCenter))
            
            fmt = lambda score, max_decimals=10: "%%.%if" % min(int(abs(math.log(max(score, 1e-10)))) + 2, max_decimals) if score > 0 and score < 1 else "%.1f"
            item = OWGUI.tableItem(self.table, i, 2, fmt(run.score) % run.score)
            item.setData(OWGUI.TableBarItem.BarRole, QVariant((bestScore - run.score) / ((bestScore - worstScore) or 1) * 0.95))
            if (k, run) == self.bestRun:
                self.table.selectRow(i)
            
        for i in range(2):
            self.table.resizeColumnToContents(i)
        self.table.show()
        qApp.processEvents()
        self.adjustSize()
Ejemplo n.º 7
0
    def add_tables(self, networks):
        self.networks = networks
        self.tables = []
        
        if networks is None:
            return
        
        networks.sort(key=lambda net: net.repository)
        for k,g in itertools.groupby(networks, key=lambda net: net.repository):
            network_group = list(g)
        
            if len(network_group) > 0:
                self.network_list.layout().addWidget(QLabel("<h3>" + network_group[0].repository + "</h3>"))
                table = OWGUI.table(self.network_list, rows=len(network_group), columns=5, selectionMode = -1, addToLayout = 1)
                table.setHorizontalHeaderLabels(['Name', 'Type', 'Nodes', 'Edges', 'Description'])
                f = table.font()
                f.setPointSize(9)
                table.setFont(f)
                table.verticalHeader().hide()
                table.setSelectionMode(QAbstractItemView.SingleSelection)
                table.setSelectionBehavior(QAbstractItemView.SelectRows)
                self.connect(table, SIGNAL('itemSelectionChanged()'), lambda table=table: self.select_network(table))
            
                for i, net in enumerate(network_group):
                    lbl = QLabel("<a href='"+ net.link +"'>" + net.name + "</a>")
                    lbl.setOpenExternalLinks(True)
                    table.setCellWidget(i, 0, lbl)
                    OWGUI.tableItem(table, i, 1, net.type)
                    OWGUI.tableItem(table, i, 2, net.nodes)
                    OWGUI.tableItem(table, i, 3, net.edges)
                    OWGUI.tableItem(table, i, 4, net.description)
 
                table.setFixedSize(712, 100)
                table.setColumnWidth(0, 120)
                table.setColumnWidth(1, 80)
                table.setColumnWidth(2, 80)
                table.setColumnWidth(3, 80)
                table.setColumnWidth(4, 350)
                table.resizeRowsToContents()                   
                table.setFixedSize(712, sum(table.rowHeight(i) for i in range(len(networks))) + 27)
                self.tables.append(table)
                
                OWGUI.separator(self.network_list, 10, 10)
Ejemplo n.º 8
0
    def reprint(self, noSort=False):
        if not self.data:
            return

        prec = " %%.%df" % self.nDecimals

        if not noSort:
            self.resort()

        for row, attr in enumerate(self.attributeOrder):
            OWGUI.tableItem(self.table, row, 0, attr.name)
            OWGUI.tableItem(
                self.table, row, 1,
                attr.varType == orange.VarTypes.Continuous and "C"
                or str(len(attr.values)))

        self.minmax = {}

        for col, meas_idx in enumerate(self.selectedMeasures):
            mdict = self.getMeasure(meas_idx)
            values = filter(lambda val: val != None, mdict.values())
            if values != []:
                self.minmax[col] = (min(values), max(values))
            else:
                self.minmax[col] = (0, 1)
            for row, attr in enumerate(self.attributeOrder):
                if mdict[attr] is None:
                    mattr = "NA"
                elif isinstance(mdict[attr], (int, float)):
                    mattr = prec % mdict[attr]
                else:
                    mattr = mdict[attr]
                OWGUI.tableItem(self.table, row, col + 2, mattr)

        self.reselect()

        if self.sortBy < 3:
            self.topheader.setSortIndicator(self.sortBy - 1,
                                            Qt.DescendingOrder)
        elif self.sortBy - 3 in self.selectedMeasures:
            self.topheader.setSortIndicator(
                2 + self.selectedMeasures.index(self.sortBy - 3),
                Qt.DescendingOrder)
        else:
            self.topheader.setSortIndicator(-1, Qt.DescendingOrder)

        #self.table.resizeColumnsToContents()
        self.table.resizeRowsToContents()
        self.table.setColumnWidth(0, 100)
        self.table.setColumnWidth(1, 20)
        for col in range(len(self.selectedMeasures)):
            self.table.setColumnWidth(col + 2, 80)
Ejemplo n.º 9
0
    def reprint(self, noSort=False):
        if not self.data:
            return

        prec = " %%.%df" % self.nDecimals

        if not noSort:
            self.resort()

        for row, attr in enumerate(self.attributeOrder):
            OWGUI.tableItem(self.table, row, 0, attr.name)
            OWGUI.tableItem(
                self.table, row, 1, attr.varType == orange.VarTypes.Continuous and "C" or str(len(attr.values))
            )

        self.minmax = {}

        for col, meas_idx in enumerate(self.selectedMeasures):
            mdict = self.getMeasure(meas_idx)
            values = filter(lambda val: val != None, mdict.values())
            if values != []:
                self.minmax[col] = (min(values), max(values))
            else:
                self.minmax[col] = (0, 1)
            for row, attr in enumerate(self.attributeOrder):
                if mdict[attr] is None:
                    mattr = "NA"
                elif isinstance(mdict[attr], (int, float)):
                    mattr = prec % mdict[attr]
                else:
                    mattr = mdict[attr]
                OWGUI.tableItem(self.table, row, col + 2, mattr)
        self.reselect()

        if self.sortBy < 3:
            self.topheader.setSortIndicator(self.sortBy - 1, Qt.DescendingOrder)
        elif self.sortBy - 3 in self.selectedMeasures:
            self.topheader.setSortIndicator(2 + self.selectedMeasures.index(self.sortBy - 3), Qt.DescendingOrder)
        else:
            self.topheader.setSortIndicator(-1, Qt.DescendingOrder)

        # self.table.resizeColumnsToContents()
        self.table.resizeRowsToContents()
        self.table.setColumnWidth(0, 100)
        self.table.setColumnWidth(1, 20)
        for col in range(len(self.selectedMeasures)):
            self.table.setColumnWidth(col + 2, 80)
Ejemplo n.º 10
0
    def paintscores(self):
        """paints the table with evaluation scores"""

        self.tab.setColumnCount(len(self.stat) + 1)
        self.tab.setHorizontalHeaderLabels(["Method"] +
                                           [s.label for s in self.stat])

        prec = "%%.%df" % self.precision

        learners = [(l.time, l) for l in self.learners.values()]
        learners.sort()
        learners = [lt[1] for lt in learners]

        self.tab.setRowCount(len(self.learners))
        for (i, l) in enumerate(learners):
            OWGUI.tableItem(self.tab, i, 0, l.name)

        for (i, l) in enumerate(learners):
            if l.scores:
                for j in range(len(self.stat)):
                    if l.scores[j] is not None:
                        OWGUI.tableItem(self.tab, i, j + 1, prec % l.scores[j])
                    else:
                        OWGUI.tableItem(self.tab, i, j + 1, "N/A")
            else:
                for j in range(len(self.stat)):
                    OWGUI.tableItem(self.tab, i, j + 1, "")

        # adjust the width of the score table cloumns
        self.tab.resizeColumnsToContents()
        self.tab.resizeRowsToContents()
        usestat = [self.selectedRScores,
                   self.selectedCScores][self.isclassification()]
        for i in range(len(self.stat)):
            if i not in usestat:
                self.tab.hideColumn(i + 1)
    def synchronizeTable(self):
#        for row in range(len(self.Conditions), self.criteriaTable.rowCount()):
#            self.criteriaTable.clearCellWidget(row,0)
#            self.criteriaTable.clearCell(row,1)

        currentRow = self.criteriaTable.currentRow()
        self.criteriaTable.clearContents()
        self.criteriaTable.setRowCount(len(self.Conditions))

        for row, cond in enumerate(self.Conditions):
            if cond.type == "OR":
                cw = QLabel("", self)
            else:
                cw = QCheckBox(str(len(cond.operator.getFilter(self.data.domain, cond.varName, cond.val1, cond.val2, cond.negated, cond.caseSensitive)(self.data))), self)
#                cw.setChecked(cond.enabled)
                self.connect(cw, SIGNAL("toggled(bool)"), lambda val, cond=cond: self.criteriaActiveChange(cond, val))

            self.criteriaTable.setCellWidget(row, 0, cw)
# This is a fix for Qt bug (4.3). When Qt is fixed, the setChecked above should suffice
# but now it unchecks the checkbox as it is inserted 
            if cond.type != "OR":
                cw.setChecked(cond.enabled)

            # column 1
            if cond.type == "OR":
                txt = "OR"
            else:
                soper = str(cond.operator)
                if cond.negated and soper in Operator.negations:
                    txt = "'%s' %s " % (cond.varName, Operator.negations[soper])
                else:
                    txt = (cond.negated and "NOT " or "") + "'%s' %s " % (cond.varName, soper)
                if cond.operator != Operator.operatorDef:
                    if cond.operator.varType == orange.VarTypes.Discrete:
                        if cond.operator.isInterval:
                            if len(cond.val1) > 0:
                                txt += "["
                                for name in cond.val1:
                                    txt += "%s, " % name
                                txt = txt[0:-2] + "]"
                            else:
                                txt += "[]"
                        else:
                            txt += cond.val1[0]
                    elif cond.operator.varType == orange.VarTypes.String:
                        if cond.caseSensitive:
                            cs = " (C)"
                        else:
                            cs = ""
                        if cond.operator.isInterval:
                            txt += "'%s'%s and '%s'%s" % (cond.val1, cs, cond.val2, cs)
                        else:
                            txt += "'%s'%s" % (cond.val1, cs)
                    elif cond.operator.varType == orange.VarTypes.Continuous:
                        if cond.operator.isInterval:
                            txt += str(cond.val1) + " and " + str(cond.val2)
                        else:
                            txt += str(cond.val1)

            OWGUI.tableItem(self.criteriaTable, row, 1, txt)

        self.criteriaTable.setCurrentCell(max(currentRow, len(self.Conditions) - 1), 0)
        self.criteriaTable.resizeRowsToContents()
        self.updateFilteredDataLens()

        en = len(self.Conditions)
        self.btnUpdate.setEnabled(en)
        self.btnRemove.setEnabled(en)
        self.updateMoveButtons()
    def synchronizeTable(self):
        #        for row in range(len(self.Conditions), self.criteriaTable.rowCount()):
        #            self.criteriaTable.clearCellWidget(row,0)
        #            self.criteriaTable.clearCell(row,1)

        currentRow = self.criteriaTable.currentRow()
        self.criteriaTable.clearContents()
        self.criteriaTable.setRowCount(len(self.Conditions))

        for row, cond in enumerate(self.Conditions):
            if cond.type == "OR":
                cw = QLabel("", self)
            else:
                cw = QCheckBox(
                    str(
                        len(
                            cond.operator.getFilter(
                                self.data.domain, cond.varName, cond.val1,
                                cond.val2, cond.negated,
                                cond.caseSensitive)(self.data))), self)
                #                cw.setChecked(cond.enabled)
                self.connect(cw,
                             SIGNAL("toggled(bool)"),
                             lambda val, cond=cond: self.criteriaActiveChange(
                                 cond, val))

            self.criteriaTable.setCellWidget(row, 0, cw)
            # This is a fix for Qt bug (4.3). When Qt is fixed, the setChecked above should suffice
            # but now it unchecks the checkbox as it is inserted
            if cond.type != "OR":
                cw.setChecked(cond.enabled)

            # column 1
            if cond.type == "OR":
                txt = "OR"
            else:
                soper = str(cond.operator)
                if cond.negated and soper in Operator.negations:
                    txt = "'%s' %s " % (cond.varName,
                                        Operator.negations[soper])
                else:
                    txt = (cond.negated and "NOT "
                           or "") + "'%s' %s " % (cond.varName, soper)
                if cond.operator != Operator.operatorDef:
                    if cond.operator.varType == orange.VarTypes.Discrete:
                        if cond.operator.isInterval:
                            if len(cond.val1) > 0:
                                txt += "["
                                for name in cond.val1:
                                    txt += "%s, " % name
                                txt = txt[0:-2] + "]"
                            else:
                                txt += "[]"
                        else:
                            txt += cond.val1[0]
                    elif cond.operator.varType == orange.VarTypes.String:
                        if cond.caseSensitive:
                            cs = " (C)"
                        else:
                            cs = ""
                        if cond.operator.isInterval:
                            txt += "'%s'%s and '%s'%s" % (cond.val1, cs,
                                                          cond.val2, cs)
                        else:
                            txt += "'%s'%s" % (cond.val1, cs)
                    elif cond.operator.varType == orange.VarTypes.Continuous:
                        if cond.operator.isInterval:
                            txt += str(cond.val1) + " and " + str(cond.val2)
                        else:
                            txt += str(cond.val1)

            OWGUI.tableItem(self.criteriaTable, row, 1, txt)

        self.criteriaTable.setCurrentCell(
            max(currentRow,
                len(self.Conditions) - 1), 0)
        self.criteriaTable.resizeRowsToContents()
        self.updateFilteredDataLens()

        en = len(self.Conditions)
        self.btnUpdate.setEnabled(en)
        self.btnRemove.setEnabled(en)
        self.updateMoveButtons()