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)
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)
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 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)
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)
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)
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()