source: orange/orange/OrangeWidgets/Unsupervised/OWModelFile.py @ 9546:2b6cc6f397fe

Revision 9546:2b6cc6f397fe, 4.8 KB checked in by ales_erjavec <ales.erjavec@…>, 2 years ago (diff)

Renamed widget channel names in line with the new naming rules/convention.
Added backwards compatibility in orngDoc loadDocument to enable loading of schemas saved before the change.

Line 
1"""
2<name>Model File</name>
3<description>Load prediction models</description>
4<contact>Miha Stajdohar (miha.stajdohar(@at@)gmail.com)</contact>
5<icon>icons/DistanceFile.png</icon>
6<priority>6510</priority>
7"""
8
9from OWWidget import *
10from OWDistanceFile import *
11
12import OWGUI
13import orange
14import exceptions
15import os.path
16import pickle
17
18class OWModelFile(OWDistanceFile):
19    settingsList = ["recentFiles", "origRecentFiles", "invertDistances", "normalizeMethod", "invertMethod"]
20
21    def __init__(self, parent=None, signalManager = None):
22        OWDistanceFile.__init__(self, parent, signalManager, name='Model File', inputItems=0)
23        #self.inputs = [("Examples", ExampleTable, self.getExamples, Default)]
24       
25       
26       
27        self.outputs = [("Distances", orange.SymMatrix)]
28       
29        self.dataFileBox.setTitle(" Model File ")
30        self.origRecentFiles=[]
31        self.origFileIndex = 0
32        self.originalData = None
33       
34        self.loadSettings()
35       
36        box = OWGUI.widgetBox(self.controlArea, "Original Data File", addSpace=True)
37        hbox = OWGUI.widgetBox(box, orientation = 0)
38        self.origFilecombo = OWGUI.comboBox(hbox, self, "origFileIndex", callback = self.loadOrigDataFile)
39        self.origFilecombo.setMinimumWidth(250)
40        button = OWGUI.button(hbox, self, '...', callback = self.browseOrigFile)
41        button.setIcon(self.style().standardIcon(QStyle.SP_DirOpenIcon))
42        button.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed)
43        self.loadOrigDataFile()
44       
45    def browseOrigFile(self):
46        if self.origRecentFiles:
47            lastPath = os.path.split(self.origRecentFiles[0])[0]
48        else:
49            lastPath = "."
50        fn = str(QFileDialog.getOpenFileName(self, "Open Original Data File", 
51                                             lastPath, "Data File (*.tab)"))
52        fn = os.path.abspath(fn)
53        if fn in self.origRecentFiles: # if already in list, remove it
54            self.origRecentFiles.remove(fn)
55        self.origRecentFiles.insert(0, fn)
56        self.origFileIndex = 0
57        self.loadOrigDataFile()
58       
59    def loadOrigDataFile(self):
60        if self.origFileIndex:
61            fnOrigData = self.origRecentFiles[self.origFileIndex]
62            self.origRecentFiles.remove(fnOrigData)
63            self.origRecentFiles.insert(0, fnOrigData)
64            self.origFileIndex = 0
65        else:
66            if len(self.origRecentFiles) > 0:
67                fnOrigData = self.origRecentFiles[0]
68            else:
69                fnOrigData = ''
70
71        self.origFilecombo.clear()
72        for file in self.origRecentFiles:
73            self.origFilecombo.addItem(os.path.split(file)[1])
74       
75        if os.path.isfile(fnOrigData):
76            self.originalData = orange.ExampleTable(fnOrigData)
77       
78        if self.matrix == None:
79            self.loadFile()
80        else:
81            self.matrix.originalData = self.originalData
82            self.send("Distances", self.matrix)
83       
84    def loadFile(self):
85        if not hasattr(self, "originalData"):
86            return
87       
88        if self.fileIndex:
89            fn = self.recentFiles[self.fileIndex]
90            self.recentFiles.remove(fn)
91            self.recentFiles.insert(0, fn)
92            self.fileIndex = 0
93        else:
94            if len(self.recentFiles) > 0:
95                fn = self.recentFiles[0]
96            else:
97                return
98
99        self.filecombo.clear()
100        for file in self.recentFiles:
101            self.filecombo.addItem(os.path.split(file)[1])
102        #self.filecombo.updateGeometry()
103
104        self.error()
105       
106        try:
107            self.matrix = None
108            self.labels = None
109            self.data = None
110            pb = OWGUI.ProgressBar(self, 100)
111            self.matrix, self.labels, self.data = readMatrix(fn, pb)
112           
113            dstFile, ext = os.path.splitext(fn)
114            warning = ""
115            self.warning()
116            if os.path.exists(dstFile + ".tab"):
117                self.data = orange.ExampleTable(dstFile + ".tab")
118                self.matrix.items = self.data
119            else:
120                warning += "ExampleTable %s not found!\n" % (dstFile + ".tab")
121            if os.path.exists(dstFile + ".res"):
122                self.matrix.results = pickle.load(open(dstFile + ".res", 'rb'))
123            else:
124                warning += "Results pickle %s not found!\n" % (dstFile + ".res")
125           
126            self.matrix.originalData = self.originalData
127           
128            if warning != "":
129                self.warning(warning.rstrip())
130   
131            self.relabel()
132        except Exception as e:
133            self.error("Error while reading the file\n\n%s" % e.message)
134       
135if __name__=="__main__":
136    a = QApplication(sys.argv)
137    ow = OWModelFile()
138    ow.show()
139    a.exec_()
140    ow.saveSettings()
Note: See TracBrowser for help on using the repository browser.