Changeset 11406:fab0b2bbca67 in orange


Ignore:
Timestamp:
03/19/13 12:05:07 (13 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added checks for existance of matrix.items attribute.

The widget should not fail if 'items' is not present (references #1264).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeWidgets/Unsupervised/OWDistanceMap.py

    r11217 r11406  
    1515import OWColorPalette 
    1616import OWToolbars 
    17 #from OWHierarchicalClustering import recursion_limit 
    1817 
    1918##################################################################### 
     
    306305 
    307306    def sendOutput(self): 
    308         if len(self.matrix.items)<1: 
     307        items = getattr(self.matrix, "items", None) 
     308        if items is None or (not isinstance(items, orange.ExampleTable) and 
     309                             not all(isinstance(item, orange.Variable) 
     310                                     for item in items)): 
    309311            return 
    310312 
     
    337339 
    338340            items = self.matrix.items 
    339             if issubclass(orange.EnumVariable, type(items[0])): 
     341            if all(isinstance(item, orange.Variable) for item in items): 
    340342                selected = orange.VarList() 
    341343                for i in selectedIndices: 
     
    343345                self.send("Features", selected) 
    344346 
    345  
    346             if isinstance(items[0], orange.Example): 
     347            if all(isinstance(item, orange.Example) for item in items): 
    347348                ex = [items[x] for x in selectedIndices] 
    348349                selected = orange.ExampleTable(items[0].domain, ex) 
     
    533534        if self.ShowLabels==1 and self.Merge<=1: 
    534535            # show labels, no merging (one item per line) 
    535             items = self.matrix.items 
     536            items = getattr(self.matrix, "items", range(self.matrix.dim)) 
     537            if isinstance(items, orange.ExampleTable): 
     538                if any(ex.name for ex in items): 
     539                    # Use instance names if present 
     540                    items = [ex.name for ex in items] 
     541                else: 
     542                    items = map(str, items) 
     543            elif isinstance(items, orange.VarList) or \ 
     544                    all(isinstance(item, orange.Variable) for item in items): 
     545                items = [var.name for var in items] 
     546            else: 
     547                items = map(str, items) 
     548 
    536549            if len(self.distanceMap.elementIndices)==0: 
    537550                tmp = [i for i in range(0, len(items))] 
     
    546559            maxHeight = 0 
    547560            maxWidth = 0 
    548             exampleTableHasNames = type(items) == orange.ExampleTable and any(ex.name for ex in items) 
     561 
    549562            for i in range(0, len(indices)): 
    550563                text = items[indices[i]] 
    551                  
    552                 if type(text) not in [str, unicode]: 
    553                     if exampleTableHasNames or isinstance(text, orange.Variable):  
    554                         text = text.name 
    555                     else: 
    556                         text = repr(text) 
    557                          
    558564                if text != "": 
    559565                    tmpText = QCustomGraphicsText(text, self.scene, -90.0, font=fontcols) 
     
    716722            if self.ShowBalloon == 1: 
    717723 
     724                items = getattr(self.matrix, "items", range(self.matrix.dim)) 
     725 
    718726                i = self.getItemFromPos(col) 
    719727                j = self.getItemFromPos(row) 
    720                  
     728 
    721729                head = str(self.matrix[i, j]) 
    722730 
    723                 if (self.ShowItemsInBalloon == 1): 
    724                     namei, namej = self.matrix.items[i], self.matrix.items[j] 
    725                     if type(namei) not in [str, unicode]: 
     731                if self.ShowItemsInBalloon == 1: 
     732                    namei, namej = items[i], items[j] 
     733                    if isinstance(namei, (orange.Example, orange.Variable)): 
    726734                        namei = namei.name 
    727                     if type(namej) not in [str, unicode]: 
     735                    else: 
     736                        namei = str(namei) 
     737                    if isinstance(namej, (orange.Example, orange.Variable)): 
    728738                        namej = namej.name 
     739                    else: 
     740                        namej = str(namej) 
    729741                    if namei or namej: 
    730742                        body = namei + "\n" + namej 
     
    794806    def sortRandom(self): 
    795807        import random 
    796         self.order = range(len(self.matrix.items)) 
     808        self.order = range(self.matrix.dim) 
    797809        random.shuffle(self.order) 
    798810        self.rootCluster = None 
Note: See TracChangeset for help on using the changeset viewer.