Ignore:
Timestamp:
09/02/13 16:40:18 (8 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Explicitly track if widget output should be updated.

(fixes #1323).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeWidgets/Evaluate/OWTestLearners.py

    r11679 r11680  
    122122        self.preprocessor = None 
    123123 
     124        # should the output evaluation results be recomputed 
     125        self._resultsInvalid = False 
     126 
    124127        self.controlArea.layout().setSpacing(8) 
    125128        # GUI 
     
    321324    def score(self, ids): 
    322325        """compute scores for the list of learners""" 
    323         if (not self.data): 
    324             for id in ids: 
    325                 self.learners[id].results = None 
    326                 self.learners[id].scores = [] 
     326        if not self.data: 
    327327            return 
     328 
    328329        # test which learners can accept the given data set 
    329330        # e.g., regressions can't deal with classification data 
     
    360361                             for l, ex in learner_exceptions) 
    361362            self.warning(0, text) 
    362              
     363 
    363364        if not learners: 
    364365            return 
     
    466467            self.learners[id].results = None 
    467468 
     469        self._resultsInvalid = bool(ids) 
     470 
    468471    # handle input signals 
    469472    def setData(self, data): 
     
    502505            self.stat = stat 
    503506 
     507            self.openContext("", self.data) 
     508 
    504509    def setTestData(self, data): 
    505510        """ 
     
    548553            else: 
    549554                self.learners[id] = Learner(learner, id) 
     555                self._resultsInvalid = True 
    550556        else: 
    551557            # remove a learner and corresponding results 
     
    560566                del self.learners[id] 
    561567 
     568                self._resultsInvalid = True 
     569 
    562570    def setPreprocessor(self, pp): 
    563571        self.preprocessor = pp 
     
    574582        if self.applyOnAnyChange: 
    575583            self.score(filter(needsupdate, self.learners)) 
     584            if self._resultsInvalid: 
     585                self.sendResults() 
     586 
    576587            self.applyBtn.setEnabled(False) 
    577588        else: 
     
    580591        self.paintscores() 
    581592 
    582         if self.data is not None: 
    583             self.openContext("", self.data) 
    584         else: 
     593        if self.data is None and self._resultsInvalid: 
    585594            self.send("Evaluation Results", None) 
     595            self._resultsInvalid = False 
     596 
    586597 
    587598    # handle output signals 
     
    595606                    if learner.results and learner.scores] 
    596607 
    597         if not (self.data and len(learners)): 
     608        if self.data is None or len(learners) == 0: 
    598609            self.send("Evaluation Results", None) 
     610            self._resultsInvalid = False 
    599611            return 
    600612 
     
    615627            return rhs 
    616628 
     629        # Reconstruct the results in the same order as displayed. 
    617630        results = [results_by_learner[learner] for learner in learners] 
    618  
    619631        results = reduce(add_results, results) 
    620632 
    621633        self.results = results 
    622634        self.send("Evaluation Results", results) 
     635        self._resultsInvalid = False 
    623636        return 
    624637 
     
    627640    def newsampling(self): 
    628641        """handle change of evaluation method""" 
     642        self.clearScores() 
    629643        if not self.applyOnAnyChange: 
    630644            self.applyBtn.setDisabled(self.applyOnAnyChange) 
    631         else: 
    632             self.clearScores() 
    633             if self.learners: 
    634                 self.recompute() 
     645        elif self.learners: 
     646            self.recompute() 
    635647 
    636648    def newscoreselection(self): 
Note: See TracChangeset for help on using the changeset viewer.