Changeset 3599:0f83fef52784 in orange


Ignore:
Timestamp:
04/27/07 00:04:01 (7 years ago)
Author:
janezd <janez.demsar@…>
Branch:
default
Convert:
b9d0f08e0096990f602516e6abdf1a2e94e51b58
Message:
  • allows not having the primary table; the domain is then the union or the intersection of additional example tables
File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Prototypes/OWConcatenate.py

    r3594 r3599  
    1111 
    1212class OWConcatenate(OWWidget): 
     13    settingsList = ["mergeAttributes"] 
     14     
    1315    def __init__(self,parent=None, signalManager = None): 
    1416        OWWidget.__init__(self, parent, signalManager, "FeatureConstructor") 
    15  
    1617        self.inputs = [("Primary Table", orange.ExampleTable, self.setData), ("Additional Tables", orange.ExampleTable, self.setMoreData, Multiple)] 
    1718        self.outputs = [("Examples", ExampleTable)] 
    1819 
     20        self.mergeAttributes = 0 
     21 
    1922        self.primary = None 
    2023        self.additional = {} 
     24         
     25        bg = self.bgMerge = OWGUI.radioButtonsInBox(self.controlArea, self, "mergeAttributes", [], "Domains merging", callback = self.apply) 
     26        OWGUI.widgetLabel(bg, "When there is no primary table, the domain should be") 
     27        OWGUI.appendRadioButton(bg, self, "mergeAttributes", "Union of attributes appearing in all tables") 
     28        OWGUI.appendRadioButton(bg, self, "mergeAttributes", "Intersection of attributes in all tables") 
     29        OWGUI.widgetLabel(bg, "The resulting table will have class only if there is no conflict betwen input classes.") 
    2130 
    22         OWGUI.widgetLabel(self.controlArea, "This widget has no parameters.") 
    2331        self.adjustSize() 
     32 
    2433 
    2534    def setData(self, data): 
    2635        self.primary = data 
     36        self.bgMerge.setEnabled(not data) 
    2737        self.apply() 
    2838         
     39 
    2940    def setMoreData(self, data, id): 
    3041        if not data: 
     
    3546        self.apply() 
    3647         
     48     
    3749    def apply(self): 
    38         self.warning(1) 
    39         if not self.primary: 
    40             if self.additional: 
    41                 self.warning(1, "Primary data table is missing") 
    42             self.send("Examples", None) 
    43             return 
    44              
    45         if not self.additional: 
    46             self.send("Examples", self.primary) 
    47              
    48         newTable = orange.ExampleTable(self.primary) 
    49         for additional in self.additional.values(): 
    50             newTable.extend(additional) 
     50        if self.primary: 
     51            if not self.additional: 
     52                newTable = self.primary 
     53 
     54            else: 
     55                newTable = orange.ExampleTable(self.primary) 
     56                for additional in self.additional.values(): 
     57                    newTable.extend(additional) 
     58 
     59        else: 
     60            if not self.additional: 
     61                newTable = None 
     62                 
     63            else: 
     64                classVar = False 
     65                for additional in self.additional.values(): 
     66                    if additional.domain.classVar: 
     67                        if classVar == False: # can also be None 
     68                            classVar = additional.domain.classVar 
     69                        elif classVar != additional.domain.classVar: 
     70                            classVar = None 
     71                             
     72                if self.mergeAttributes: # intersection 
     73                    attributes = None 
     74                    for additional in self.additional.values(): 
     75                        if attributes == None: 
     76                            if classVar: 
     77                                attributes = additional.domain.attributes 
     78                            else: 
     79                                attributes = additional.domain 
     80                        else: 
     81                            attributes = [attr for attr in attributes if attr in additional.domain and not attr == classVar] 
     82                    if attributes == None: 
     83                        attributes = [] 
     84                else: # union 
     85                    attributes = [] 
     86                    for additional in self.additional.values(): 
     87                        for attr in additional.domain: 
     88                            if attr not in attributes and attr != classVar: 
     89                                attributes.append(attr) 
     90                     
     91                if not attributes and not classVar: 
     92                    self.error(1, "The output domain is empty.") 
     93                    newTable = None 
     94                else: 
     95                    self.error(1) 
     96                    newTable = orange.ExampleTable(orange.Domain(attributes, classVar)) 
     97                    for additional in self.additional.values(): 
     98                        newTable.extend(additional) 
     99 
    51100        self.send("Examples", newTable) 
Note: See TracChangeset for help on using the changeset viewer.