1- from Orange .data import Table
1+ import numpy as np
2+
3+ from Orange .data import Table , Domain
24from Orange .preprocess .preprocess import Preprocess , Discretize
35from Orange .widgets import gui
6+ from Orange .widgets .settings import Setting
47from Orange .widgets .utils .sql import check_sql_input
58from Orange .widgets .utils .widgetpreview import WidgetPreview
69from Orange .widgets .widget import OWWidget , Input , Output , Msg
@@ -13,6 +16,8 @@ class OWTransform(OWWidget):
1316 priority = 2110
1417 keywords = []
1518
19+ retain_all_data = Setting (False )
20+
1621 class Inputs :
1722 data = Input ("Data" , Table , default = True )
1823 preprocessor = Input ("Preprocessor" , Preprocess )
@@ -39,6 +44,11 @@ def __init__(self):
3944 self .set_input_label_text ()
4045 self .set_preprocessor_label_text ()
4146
47+ self .retain_all_data_cb = gui .checkBox (
48+ self .controlArea , self , "retain_all_data" , label = "Retain all data" ,
49+ callback = self .apply
50+ )
51+
4252 def set_input_label_text (self ):
4353 text = "No data on input."
4454 if self .data is not None :
@@ -83,11 +93,30 @@ def apply(self):
8393 self .transformed_data = self .preprocessor (self .data )
8494 except Exception as ex : # pylint: disable=broad-except
8595 self .Error .pp_error (ex )
86- self .Outputs .transformed_data .send (self .transformed_data )
96+
97+ if self .retain_all_data :
98+ self .Outputs .transformed_data .send (self .merge_data ())
99+ else :
100+ self .Outputs .transformed_data .send (self .transformed_data )
87101
88102 self .set_preprocessor_label_text ()
89103 self .set_output_label_text ()
90104
105+ def merge_data (self ):
106+ attributes = getattr (self .data .domain , 'attributes' )
107+ cls_vars = getattr (self .data .domain , 'class_vars' )
108+ metas_v = getattr (self .data .domain , 'metas' )\
109+ + getattr (self .transformed_data .domain , 'attributes' )
110+ domain = Domain (attributes , cls_vars , metas_v )
111+ X = self .data .X
112+ Y = self .data .Y
113+ metas = np .hstack ((self .data .metas , self .transformed_data .X ))
114+ table = Table .from_numpy (domain , X , Y , metas )
115+ table .name = getattr (self .data , 'name' , '' )
116+ table .attributes = getattr (self .data , 'attributes' , {})
117+ table .ids = self .data .ids
118+ return table
119+
91120 def send_report (self ):
92121 if self .preprocessor is not None :
93122 self .report_items ("Settings" ,
0 commit comments