@@ -202,7 +202,8 @@ def decode_pair(widget, pair):
202202 def _encode_domain (self , domain ):
203203 if domain is None :
204204 return {}
205- return dict (self .encode_variables (chain (domain .variables , domain .metas )))
205+ all_vars = chain (domain .variables , domain .metas )
206+ return dict (self .encode_variables (all_vars ))
206207
207208 def settings_from_widget (self , widget , * _args ):
208209 context = widget .current_context
@@ -315,10 +316,9 @@ def __init__(self):
315316 self .extra_model = DomainModelWithTooltips (content )
316317
317318 box = gui .hBox (self .controlArea , box = None )
318- self .infoBoxData = gui .label (
319- box , self , self .dataInfoText (None ), box = "Data" )
320- self .infoBoxExtraData = gui .label (
321- box , self , self .dataInfoText (None ), box = "Extra Data" )
319+ no_info = self .data_info (None )
320+ self .info_box_data = gui .label (box , self , no_info , box = "Data" )
321+ self .info_box_extra_data = gui .label (box , self , no_info , box = "Extra Data" )
322322
323323 grp = gui .radioButtons (
324324 self .controlArea , self , "merging" , box = "Merging" ,
@@ -341,49 +341,19 @@ def __init__(self):
341341 def change_merging (self ):
342342 self .commit ()
343343
344- @staticmethod
345- def _try_set_combo (combo , var ):
346- if var in combo .model ():
347- combo .setCurrentIndex (combo .model ().indexOf (var ))
348- else :
349- combo .setCurrentIndex (0 )
350-
351- def _find_best_match (self ):
352- def get_unique_str_metas_names (model_ ):
353- return [m for m in model_ if isinstance (m , StringVariable )]
354-
355- attr , extra_attr , n_max_intersect = INDEX , INDEX , 0
356- str_metas = get_unique_str_metas_names (self .model )
357- extra_str_metas = get_unique_str_metas_names (self .extra_model )
358- for m_a , m_b in product (str_metas , extra_str_metas ):
359- col = self .data [:, m_a ].metas
360- extra_col = self .extra_data [:, m_b ].metas
361- if col .size and extra_col .size \
362- and isinstance (col [0 ][0 ], str ) \
363- and isinstance (extra_col [0 ][0 ], str ):
364- n_inter = len (np .intersect1d (col , extra_col ))
365- if n_inter > n_max_intersect :
366- n_max_intersect , attr , extra_attr = n_inter , m_a , m_b
367- return attr , extra_attr
368-
369344 @Inputs .data
370345 @check_sql_input
371- def setData (self , data ):
346+ def set_data (self , data ):
372347 self .data = data
373348 self .model .set_domain (data and data .domain )
374- self .infoBoxData .setText (self .dataInfoText (data ))
349+ self .info_box_data .setText (self .data_info (data ))
375350
376351 @Inputs .extra_data
377352 @check_sql_input
378- def setExtraData (self , data ):
353+ def set_extra_data (self , data ):
379354 self .extra_data = data
380355 self .extra_model .set_domain (data and data .domain )
381- self .infoBoxExtraData .setText (self .dataInfoText (data ))
382-
383- def _restore_combo_current_items (self , side , prev_settings ):
384- for row , pair in zip (self .attr_boxes .rows , prev_settings ):
385- self ._try_set_combo (
386- [row .left_combo , row .right_combo ][side ], pair [side ])
356+ self .info_box_extra_data .setText (self .data_info (data ))
387357
388358 def store_combo_state (self ):
389359 self .attr_pairs = self .attr_boxes .current_state ()
@@ -396,8 +366,26 @@ def handleNewSignals(self):
396366 self .attr_boxes .set_state (self .attr_pairs )
397367 self .unconditional_commit ()
398368
369+ def _find_best_match (self ):
370+ def get_unique_str_metas_names (model_ ):
371+ return [m for m in model_ if isinstance (m , StringVariable )]
372+
373+ attr , extra_attr , n_max_intersect = INDEX , INDEX , 0
374+ str_metas = get_unique_str_metas_names (self .model )
375+ extra_str_metas = get_unique_str_metas_names (self .extra_model )
376+ for m_a , m_b in product (str_metas , extra_str_metas ):
377+ col = self .data [:, m_a ].metas
378+ extra_col = self .extra_data [:, m_b ].metas
379+ if col .size and extra_col .size \
380+ and isinstance (col [0 ][0 ], str ) \
381+ and isinstance (extra_col [0 ][0 ], str ):
382+ n_inter = len (np .intersect1d (col , extra_col ))
383+ if n_inter > n_max_intersect :
384+ n_max_intersect , attr , extra_attr = n_inter , m_a , m_b
385+ return attr , extra_attr
386+
399387 @staticmethod
400- def dataInfoText (data ):
388+ def data_info (data ):
401389 if data is None :
402390 return "No data."
403391 else :
@@ -408,7 +396,7 @@ def dataInfoText(data):
408396
409397 def commit (self ):
410398 self .clear_messages ()
411- merged = None if not self .data or not self .extra_data else self . merge ()
399+ merged = self . merge () if self .data and self .extra_data else None
412400 self .Outputs .data .send (merged )
413401
414402 def send_report (self ):
@@ -692,6 +680,7 @@ def mig_value(x):
692680 if hasattr (settings , "attr_pairs" ):
693681 del settings ["attr_pairs" ]
694682
683+
695684if __name__ == "__main__" : # pragma: no cover
696685 WidgetPreview (OWMergeData ).run (
697686 setData = Orange .data .Table ("tests/data-gender-region" ),
0 commit comments