source: orange/Orange/OrangeWidgets/Prototypes/OWTranslateDomain.py @ 10800:6095326196af

Revision 10800:6095326196af, 2.0 KB checked in by Ales Erjavec <ales.erjavec@…>, 2 years ago (diff)

Added Translate Domain widget.

Line 
1"""
2<name>Translate Domain</name>
3
4"""
5
6from OWWidget import *
7
8import OWGUI
9
10import Orange
11
12class OWTranslateDomain(OWWidget):
13    def __init__(self, parent=None, signalManager=None, title="Translate Domain"):
14        OWWidget.__init__(self, parent, signalManager, title, wantMainArea=False)
15
16        self.inputs = [("Target Domain", Orange.data.Table, self.set_target),
17                       ("Input Data", Orange.data.Table, self.set_input)]
18
19        self.outputs = [("Translated Data", Orange.data.Table)]
20
21        box = OWGUI.widgetBox(self.controlArea, "Info")
22        self.info = OWGUI.widgetLabel(box, "No target domain\nNo input data")
23
24        OWGUI.rubber(self.controlArea)
25
26        self.target = None
27        self.input_data = None
28
29    def set_target(self, target=None):
30        self.target = target
31
32    def set_input(self, input_data=None):
33        self.input_data = input_data
34
35    def handleNewSignals(self):
36        self.update_info()
37        self.error(0)
38        self.commit()
39
40    def update_info(self):
41        target_lines = ["No target domain"]
42        input_lines = ["No input data"]
43        if self.target is not None:
44            class_var = self.target.domain.class_var
45            if class_var:
46                class_str = type(class_var).__name__.lower()
47            else:
48                class_str = "no"
49            num_features = len(self.target.domain.features)
50            target_lines = ["Target domain with %i features and %s class." % (num_features, class_str)]
51        if self.input_data is not None:
52            input_lines = ["Input data with %i instances" % len(self.input_data)]
53        self.info.setText("\n".join(target_lines + input_lines))
54
55    def commit(self):
56        self.error(0)
57        translated = None
58        if self.target is not None and self.input_data is not None:
59            try:
60                translated = self.input_data.translate(self.target.domain)
61            except Exception:
62                self.error("Failed to convert the domain (%r)." % ex)
63        self.send("Translated Data", translated)
Note: See TracBrowser for help on using the repository browser.