@@ -376,17 +376,21 @@ def extract_new_table(self, var_dict):
376376 domain = defaultdict (lambda : [])
377377 values = defaultdict (lambda : [])
378378 atr_vals = {'metas' : 'metas' , 'attributes' : 'X' , 'class_vars' : 'Y' }
379+ renamed = []
379380 for atr_type , vars_dict in var_dict .items ():
380381 for var_name , var_data in vars_dict .items ():
381382 if var_data [0 ]:
382383 #columns are different, copy all, rename them
383384 for var , table_key in var_data [1 ]:
384385 idx = list (self .data .keys ()).index (table_key ) + 1
385- domain [atr_type ].append (var .copy (name = '{} ({})' .format (var_name , idx )))
386+ domain [atr_type ].append (var .copy (name = '{} ({})' .format (var_name .name , idx )))
387+ renamed .append (var_name .name )
386388 values [atr_type ].append (getattr (self .data [table_key ].table [:, var_name ], atr_vals [atr_type ]).reshape (- 1 , 1 ))
387389 else :
388390 domain [atr_type ].append (deepcopy (var_data [1 ][0 ][0 ]))
389391 values [atr_type ].append (getattr (self .data [var_data [1 ][0 ][1 ]].table [:, var_name ], atr_vals [atr_type ]).reshape (- 1 , 1 ))
392+ if renamed :
393+ self .Warning .renamed_vars (', ' .join (renamed ))
390394 return self .merge_data (domain , values )
391395
392396 def curry_merge (self , table_key , atr_type , ids = None , selection = False ):
@@ -490,15 +494,21 @@ def extract_rowwise(self, var_dict, ids=None, selection=False):
490494 domain = defaultdict (lambda : [])
491495 values = defaultdict (lambda : [])
492496 atr_vals = {'metas' : 'metas' , 'attributes' : 'X' , 'class_vars' : 'Y' }
497+ renamed = []
493498 for atr_type , vars_dict in var_dict .items ():
494499 for var_name , var_data in vars_dict .items ():
495500 different = var_data [0 ]
496501 if different :
497- #columns are different, copy all, rename them
502+ """
503+ Columns are different, copy and rename them.
504+ Renaming is done here to mark appropriately the source table.
505+ Additional strange clashes are checked later in merge_data
506+ """
498507 for var , table_key in var_data [1 ]:
499508 temp = self .data [table_key ].table
500509 idx = list (self .data .keys ()).index (table_key ) + 1
501510 domain [atr_type ].append (var .copy (name = '{} ({})' .format (var_name , idx )))
511+ renamed .append (var_name .name )
502512 v = getattr (temp [list (ids [table_key ].values ()), var_name ],
503513 atr_vals [atr_type ])
504514 perm = permutations [table_key ]
@@ -522,6 +532,8 @@ def extract_rowwise(self, var_dict, ids=None, selection=False):
522532 value [perm ] = v
523533 values [atr_type ].append (value )
524534
535+ if renamed :
536+ self .Warning .renamed_vars (', ' .join (renamed ))
525537 table = self .merge_data (domain , values )
526538 mask = [idx in self .selected_items for idx in all_ids ]
527539 if selection :
@@ -533,9 +545,9 @@ def get_indices(self, table, selection):
533545 if self .selected_feature :
534546 if self .output_duplicates and selection :
535547 items , inverse = np .unique (getattr (table [:, self .selected_feature ], 'metas' ),
536- return_inverse = True )
537- ids = [np .nonzero (inverse == idx )[0 ] for idx in range (len (items ))]
538- else :
548+ return_inverse = True )
549+ ids = [np .nonzero (inverse == idx )[0 ] for idx in range (len (items ))]
550+ else :
539551 items , ids = np .unique (getattr (table [:, self .selected_feature ], 'metas' ),
540552 return_index = True )
541553
@@ -588,19 +600,15 @@ def expand_tables(self, table, atrs, metas, cv):
588600 array .fill (np .nan )
589601 b = getattr (table , self .atr_vals [atr_type ])
590602 array [:, perm ] = self .make_it_fit (array [:, perm ].shape , b )
591- #array[:, perm] = np.atleast_2d(getattr(table, self.atr_vals[atr_type]))
592603 exp .append (array )
593- #TODO: maybe this could be smarter
594604 return exp [0 ], exp [1 ], exp [2 ]
595605
596606 def extract_rowwise_duplicates (self , var_dict , ids , relevant_keys ):
597- #za vsak id v vsakemu stolpcu rabimo indekse
598- #extractamo celo podtabelo, vstavimo morebitne manjkajoče stolpce, na koncu vstack
599607 all_ids = sorted (list (reduce (set .union , [set (val .keys ()) for val in ids .values ()], set ())))
600608 sort_key = lambda var : var .name
601- all_atrs = sorted ([ var for var in var_dict ['attributes' ].keys ()] , key = sort_key )
602- all_metas = sorted ([ var for var in var_dict ['metas' ].keys ()] , key = sort_key )
603- all_cv = sorted ([ var for var in var_dict ['class_vars' ].keys ()] , key = sort_key )
609+ all_atrs = sorted (( var for var in var_dict ['attributes' ].keys ()) , key = sort_key )
610+ all_metas = sorted (( var for var in var_dict ['metas' ].keys ()) , key = sort_key )
611+ all_cv = sorted (( var for var in var_dict ['class_vars' ].keys ()) , key = sort_key )
604612
605613 all_x , all_y , all_m = [], [], []
606614 for idx in all_ids :
0 commit comments