source: orange/Orange/OrangeWidgets/Unsupervised/OWDistanceFilter.py @ 11765:1546cd04481b

Revision 11765:1546cd04481b, 3.0 KB checked in by Ales Erjavec <ales.erjavec@…>, 5 months ago (diff)

Fixed widget layouts.

Line 
1"""
2<name>Distance Matrix Filter</name>
3<description>Filters distance matrix</description>
4<contact>Miha Stajdohar</contact>
5<icon>icons/DistanceFilter.png</icon>
6<priority>1160</priority>
7"""
8
9import orange
10import OWGUI
11import exceptions
12from OWWidget import *
13import os.path
14import pickle
15
16class OWDistanceFilter(OWWidget):
17   
18    def __init__(self, parent=None, signalManager = None, name='Distance Matrix Filter'):
19        OWWidget.__init__(self, parent, signalManager, name, wantMainArea=0)
20       
21        self.inputs = [("Distances", orange.SymMatrix, self.setSymMatrix, Default), ("Data Subset", ExampleTable, self.setExampleSubset)]
22        self.outputs = [("Distances", orange.SymMatrix)]
23       
24        self.matrix = None
25        self.subset = None
26        self.subsetAttr = 0
27        self.icons = self.createAttributeIconDict()
28       
29        subsetBox = OWGUI.widgetBox(self.controlArea, box='Filter by Subset', orientation='vertical')
30       
31        self.subsetAttrCombo = OWGUI.comboBox(subsetBox, self, "subsetAttr", callback=self.filter)
32        self.subsetAttrCombo.addItem("(none)")
33       
34        OWGUI.rubber(self.controlArea)
35       
36        self.resize(200, 50)
37       
38    def setSymMatrix(self, sm):
39        self.matrix = sm
40        self.newInput()
41   
42    def setExampleSubset(self, et):
43        self.subset = et
44        self.newInput()
45   
46    def newInput(self):
47        self.warning()
48        self.error()
49       
50        if self.matrix == None or self.subset == None:
51            return
52       
53        if not (hasattr(self.matrix, 'items') and self.matrix.items != None and type(self.matrix.items) == type(self.subset)):
54            self.error('Distance Matrix has no attribute items of type ExampleTable')
55            return
56       
57        self.subsetAttrCombo.clear()
58        self.subsetAttrCombo.addItem("(none)")
59       
60        intemsVar = [var.name for var in self.matrix.items.domain]
61        for var in self.subset.domain:
62            if var.name in intemsVar:
63                print var.name
64                self.subsetAttrCombo.addItem(self.icons[var.varType], unicode(var.name))
65       
66        self.send("Distances", self.matrix)
67       
68    def filter(self):
69        if self.subsetAttr > 0:
70            col = str(self.subsetAttrCombo.currentText())
71           
72            filter = [str(x[col]) for x in self.subset]
73            filter = set(filter)
74           
75            nodes = [x for x in range(len(self.matrix.items)) if str(self.matrix.items[x][col]) in filter]
76           
77            nNodes = len(nodes)
78            matrix = orange.SymMatrix(nNodes)
79           
80            for i in range(nNodes):
81                for j in range(i):
82                    matrix[i,j] = self.matrix[nodes[i], nodes[j]]
83                   
84            matrix.items = self.matrix.items.getitems(nodes)
85                   
86            self.send("Distances", matrix)
87
88if __name__=="__main__":
89    import orange
90    a = QApplication(sys.argv)
91    ow = OWDistanceFilter()
92    ow.show()
93    a.exec_()
94    ow.saveSettings()
Note: See TracBrowser for help on using the repository browser.