Changeset 4989:4018b8a0300a in orange


Ignore:
Timestamp:
07/17/08 16:44:03 (6 years ago)
Author:
janezd <janez.demsar@…>
Branch:
default
Convert:
5ec9ed151f894393ae0782a751e4a62f4842f188
Message:
  • finished porting to Qt4
  • simplified a lot of code, made it faster (list comprehensions, sums, etc)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Associate/OWAssociationRulesViewer.py

    r4954 r4989  
    2323        if self.rect: 
    2424            self.rect.hide() 
    25 ##            self.rect = None 
    2625 
    2726 
     
    6059                cell.show() 
    6160 
    62 ##        if self.rect: 
    63 ##            self.rect.hide() 
    64 ##        if scmin > -1: 
    6561        self.rect = QGraphicsRectItem(scmin*cw, srmin*ch, (scmax-scmin+1)*cw, (srmax-srmin+1)*ch, None, self) 
    6662        self.rect.setPen(QPen(QColor(128, 128, 255), 2)) 
    6763        self.rect.setZValue(1) 
    6864        self.rect.hide() 
    69 ##        else: 
    70 ##            self.rect = None 
    7165 
    7266        self.update() 
     
    8074                          master.sel_rowmin*master.cellheight, 
    8175                          (master.sel_colmax-master.sel_colmin+1)*master.cellwidth, 
    82                           (master.sel_rowmax-master.sel_rowmin)*master.cellheight) 
     76                          (master.sel_rowmax-master.sel_rowmin+1)*master.cellheight) 
    8377        self.update() 
    8478 
     
    8983        master.sel_colmin = master.sel_colmax = self.sel_startX / master.cellwidth 
    9084        master.sel_rowmin = master.sel_rowmax = self.sel_startY / master.cellheight 
    91 ##        self.draw() 
    9285        self.rect.show() 
    9386        self.updateSelectionRect() 
    94         master.updateRuleList() 
    9587        self.mousePressed = True 
    9688 
     
    109101            self.master.sel_rowmax = min(self.master.sel_rowmax, self.master.numrows-1) 
    110102 
    111 ##            self.draw() 
    112103            self.updateSelectionRect() 
    113             self.master.updateRuleList() 
    114104 
    115105    def mouseReleaseEvent(self, ev): 
     106        self.master.updateRuleList() 
    116107        self.master.sendIfAuto() 
    117108        self.mousePressed = False 
     
    174165        self.supp_min, self.supp_max = self.conf_min, self.conf_max = 0., 1. 
    175166        self.numcols = self.numrows = 20 
     167        self.showBars = True 
     168 
    176169        self.cellwidth = self.cellheight = 18 
    177170 
     
    193186        mainRight = OWGUI.widgetBox(self.mainArea, "Rules") 
    194187        mainRight.setSizePolicy(QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.MinimumExpanding)) 
     188        mainLeft.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum)) 
    195189 
    196190        infoGrid = QGridLayout() 
     
    233227            cb = OWGUI.checkBox(rightUpRight, self, m[2], m[0], callback = self.showHideColumns, addToLayout = 0) 
    234228            self.grid.addWidget(cb, i % 2, i / 2) 
    235 ##            self.grid.addWidget(cb.parentWidget(), i % 2, i / 2) 
    236  
    237 #        rightUpRight = OWGUI.widgetBox(mainRight, orientation=0) 
    238 #        for i, m in enumerate(self.measures): 
    239 #            cb = OWGUI.checkBox(rightUpRight, self, m[2], m[0], callback = self.showHideColumns) 
    240229 
    241230        OWGUI.separator(mainRight, 0, 4) 
     
    243232        trules = self.trules = QTableWidget(0, 0, mainRight) 
    244233        mainRight.layout().addWidget(trules) 
    245 ##        trules.setLeftMargin(0) 
    246234        trules.verticalHeader().hide() 
    247235        trules.setSelectionMode(QTableWidget.NoSelection) 
     
    249237 
    250238        header = trules.horizontalHeader() 
    251 ##        for i, m in enumerate(self.measures): 
    252 ##            trules.setColumnStretchable(i, 0) 
    253239        trules.setHorizontalHeaderLabels([m[1] for m in self.measures]+["Rule"]) 
    254 ##        trules.setColumnStretchable(len(self.measures), 1) 
    255 ##        header.setLabel(len(self.measures), "Rule") 
    256         self.connect(header, SIGNAL("clicked(int)"), self.sort) 
     240        trules.setItemDelegate(OWGUI.TableBarItem(self, trules)) 
     241        trules.setSortingEnabled(True) 
     242        trules.normalizers = [] 
    257243 
    258244        bottomGrid = QGridLayout() 
     
    283269    def unselect(self): 
    284270        self.sel_colmin = self.sel_colmax = self.sel_rowmin = self.sel_rowmax = -1 
    285  
    286         self.selectedRules = [] 
    287         for row in self.ingrid: 
    288             for cell in row: 
    289                 for rule in cell: 
    290                     self.selectedRules.append(rule) 
     271        self.selectedRules = sum(sum(self.ingrid, []), []) 
    291272 
    292273        self.displayRules() 
     
    313294        self.selRules.setText("%3i" % len(self.selectedRules)) 
    314295 
    315     # This function doesn't send anything to output! (Shouldn't because it's called by the mouse move event) 
     296 
    316297    def updateRuleList(self): 
    317         self.selectedRules = [] 
    318         for row in self.ingrid[self.sel_rowmin : self.sel_rowmax+1]: 
    319             for cell in row[self.sel_colmin : self.sel_colmax+1]: 
    320                 for rule in cell: 
    321                     self.selectedRules.append(rule) 
    322  
     298        self.selectedRules = sum(sum((row[self.sel_colmin : self.sel_colmax+1] for row in self.ingrid[self.sel_rowmin : self.sel_rowmax+1]), []), [])  
    323299        self.displayRules() 
    324300        self.updateConfSupp() 
    325301        self.saveButton.setEnabled(len(self.selectedRules) > 0) 
     302 
    326303 
    327304    def displayRules(self): 
     
    331308 
    332309            rulecol = len(self.measures) 
    333             for row, rule in enumerate(self.selectedRules): 
     310            trules.normalizers = [] 
     311            try: 
     312                self.progressBarInit() 
     313                progressStep = 100./(rulecol+1) 
    334314                for col, m in enumerate(self.measures): 
    335 ##                    trules.setText(row, col, "  %.3f  " % getattr(rule, m[2])) 
    336                     trules.setItem(row, col, QTableWidgetItem("  %.3f  " % getattr(rule, m[2]))) 
    337 ##                trules.setText(row, rulecol, `rule`.replace(" ", "  ")) 
    338                 trules.setItem(row, rulecol, QTableWidgetItem(`rule`.replace(" ", "  "))) 
    339  
    340 ##            for i in range(len(self.measures)+1): 
    341 ##                self.trules.adjustColumn(i) 
    342                  
     315                    mname = m[2] 
     316                    values = [getattr(rule, mname) for rule in self.selectedRules] 
     317                    if m[1] in ["Supp", "Conf", "Cov"]: 
     318                        trules.normalizers.append((1, 1)) 
     319                    else: 
     320                        mi, ma = min(values), max(values) 
     321                        div = ma - mi 
     322                        trules.normalizers.append((ma, div or 1)) 
     323                    for row, meas in enumerate(values): 
     324                        trules.setItem(row, col, QTableWidgetItem("  %.3f  " % meas)) 
     325                    self.progressBarAdvance(progressStep) 
     326     
     327                for row, rule in enumerate(self.selectedRules): 
     328                    trules.setItem(row, rulecol, QTableWidgetItem(str(rule).replace(" ", "  "))) 
     329            finally: 
     330                self.progressBarFinished() 
     331 
     332            self.trules.resizeColumnsToContents() 
     333            self.trules.resizeRowsToContents() 
     334             
    343335            self.showHideColumns() 
    344             self.sort() 
    345336 
    346337 
    347338    def showHideColumns(self): 
    348339        for i, m in enumerate(self.measures): 
    349             show = getattr(self, m[2]) 
    350             if bool(self.trules.horizontalHeader().sectionSize(i)) != bool(show): 
    351                 if show: 
    352                     self.trules.horizontalHeader().setSectionHidden(i, show) 
    353 ##                    self.trules.adjustColumn(i) 
    354                 else: 
    355                     self.trules.horizontalHeader().setSectionHidden(i, show) 
    356  
    357     def sort(self, i = None): 
    358         if i is None: 
    359             i = self.sortedBy 
    360         else: 
    361             self.sortedBy = i 
    362         self.trules.sortItems(i, Qt.AscendingOrder if i == len(self.measures) else Qt.DescendingOrder) 
    363         self.trules.horizontalHeader().setSortIndicator(i, Qt.AscendingOrder if i == len(self.measures) else Qt.DescendingOrder) 
    364              
     340            (getattr(self, m[2]) and self.trules.showColumn or self.trules.hideColumn)(i) 
     341 
     342 
    365343    def saveRules(self): 
    366344        fileName = QFileDialog.getSaveFileName(self, "Save Rules", "myRules.txt", "Textfiles (*.txt)" ); 
     
    385363    def coordToSuppConf(self, col, row): 
    386364        return self.supp_min + col * self.suppInCell, self.conf_min + row * self.confInCell 
     365 
    387366 
    388367    def zoomButton(self): 
     
    434413        self.rules = rules 
    435414        if self.rules: 
    436             self.supp_min = self.conf_min = 1 
    437             self.supp_max = self.conf_max = 0 
    438             for rule in self.rules: 
    439                 self.conf_min = min(self.conf_min, rule.confidence) 
    440                 self.conf_max = max(self.conf_max, rule.confidence) 
    441                 self.supp_min = min(self.supp_min, rule.support) 
    442                 self.supp_max = max(self.supp_max, rule.support) 
     415            supps = [rule.support for rule in self.rules] 
     416            self.supp_min = min(supps) 
     417            self.supp_max = max(supps) 
     418            del supps 
     419 
     420            confs = [rule.confidence for rule in self.rules] 
     421            self.conf_min = min(confs) 
     422            self.conf_max = max(confs) 
     423            del confs 
     424 
    443425            self.checkScale() 
    444426        else: 
Note: See TracChangeset for help on using the changeset viewer.