source: orange/orange/OrangeWidgets/Unsupervised/OWSymMatrixTransform.py @ 8042:ffcb93bc9028

Revision 8042:ffcb93bc9028, 3.9 KB checked in by markotoplak, 3 years ago (diff)

Hierarchical clustering: also catch RuntimeError when importing matplotlib (or the documentation could not be built on server).

Line 
1"""
2<name>Matrix Transformation</name>
3<description>Tranforms matrix according to selected criteria</description>
4<contact>Miha Stajdohar</contact>
5<icon>icons/DistanceFile.png</icon>
6<priority>1110</priority>
7"""
8
9from OWWidget import *
10import OWGUI
11import orange
12import exceptions
13import os.path
14import pickle
15import copy
16           
17class OWSymMatrixTransform(OWWidget):
18    settingsList = ["normalizeMethod", "invertMethod"]
19
20    normalizeMethods = ["No normalization", "To interval [0, 1]", "Sigmoid function, 1/(1+exp(-x))"]
21    inversionMethods = ["No inversion", "-X", "1 - X", "Max - X", "1/X"]
22    def __init__(self, parent=None, signalManager = None):
23        self.callbackDeposit = [] # deposit for OWGUI callback functions
24        OWWidget.__init__(self, parent, signalManager, "Matrix Transformation", wantMainArea = 0, resizingEnabled = 0)
25        self.inputs = [("Matrix", orange.SymMatrix, self.setMatrix, Default)]
26        self.outputs = [("Matrix", orange.SymMatrix)]
27        self.matrix = None
28        self.normalizeMethod = self.invertMethod = 0
29        self.loadSettings()
30        ribg = OWGUI.radioButtonsInBox(self.controlArea, self, "normalizeMethod", self.normalizeMethods, "Normalization", callback = self.setNormalizeMode, addSpace=True)
31        ribg = OWGUI.radioButtonsInBox(self.controlArea, self, "invertMethod", self.inversionMethods, "Inversion", callback = self.setInvertMode)
32       
33        OWGUI.rubber(self.controlArea)
34       
35        self.adjustSize()
36
37    def sendReport(self):
38        self.reportSettings("Settings",
39                            [("Normalization", self.normalizeMethods[self.normalizeMethod]),
40                             ("Inversion", self.inversionMethods[self.invertMethod])])
41        if self.matrix:
42            self.reportSettings("Data", [("Matrix dimension", self.matrix.dim)])
43            items = getattr(self.matrix, "items", None)
44            if items:
45                if isinstance(items, orange.ExampleTable):
46                    self.reportData(items, "Corresponding example table")
47                else:
48                    self.reportSettings("Items",
49                                        [("Labels", ", ".join(items[:5]) + (" ..." if len(items)>5 else ""))])
50       
51    def setNormalizeMode(self):
52        self.transform()
53   
54    def setInvertMode(self):
55        self.transform()
56       
57    def setMatrix(self, matrix):
58        self.matrix = matrix
59        self.transform()
60           
61    def transform(self):
62        #print "transform"
63        #print "self.invertMethod:", self.invertMethod
64        #print "self.normalizeMethod:", self.normalizeMethod
65        self.error()
66        if self.matrix == None:
67            return
68       
69        matrix = None 
70        if self.invertMethod > 0 or self.normalizeMethod > 0:
71            matrix = copy.deepcopy(self.matrix)
72           
73            # To interval [0,1]
74            if self.normalizeMethod == 1:
75                matrix.normalize(0)
76            # Sigmoid function: 1 / (1 + e^x)
77            elif self.normalizeMethod == 2:
78                matrix.normalize(1)
79           
80            # -X
81            if self.invertMethod == 1:
82                matrix.invert(0)
83            # 1 - X
84            elif self.invertMethod == 2:
85                matrix.invert(1)
86            # Max - X
87            elif self.invertMethod == 3:
88                matrix.invert(2)
89            # 1 / X
90            elif self.invertMethod == 4:
91                try:               
92                    matrix.invert(3)
93                except:
94                    self.error("Division by zero")
95                    matrix = None
96       
97        if matrix != None:
98            if hasattr(self.matrix, "items"):
99                matrix.items = self.matrix.items
100               
101            self.send("Matrix", matrix)
102        else:
103            self.send("Matrix", self.matrix)
104
105if __name__=="__main__":
106    a = QApplication(sys.argv)
107    ow = OWSymMatrixTransform()
108    ow.show()
109    a.exec_()
110    ow.saveSettings()
Note: See TracBrowser for help on using the repository browser.