Skip to content

Commit 55ae682

Browse files
Lint
1 parent 97a4856 commit 55ae682

File tree

2 files changed

+44
-13
lines changed

2 files changed

+44
-13
lines changed

Orange/widgets/visualize/owvenndiagram.py

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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:

Orange/widgets/visualize/tests/test_owvenndiagram.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import unittest
55
from unittest.mock import patch
66
from collections import defaultdict
7+
from copy import deepcopy
78

89
import numpy as np
910
import scipy.sparse as sp
@@ -35,7 +36,29 @@ def _select_data(self):
3536
self.widget.vennwidget.vennareas()[1].setSelected(True)
3637
return list(range(len(self.signal_data)))
3738

38-
def test_multiple_input(self):
39+
def test_rows_id(self):
40+
data = Table('zoo')
41+
data1 = deepcopy(data)
42+
data1[:, 1] = 1
43+
self.widget.rowwise = True
44+
self.send_signal(self.signal_name, data1[:10], 1)
45+
self.widget.selected_feature = 'name'
46+
self.send_signal(self.signal_name, data[5:10], 2)
47+
48+
self.assertIsNone(self.get_output(self.widget.Outputs.selected_data))
49+
self.assertTrue(self.widget.Warning.renamed_vars.is_shown())
50+
51+
self.widget.vennwidget.vennareas()[3].setSelected(True)
52+
selected = self.get_output(self.widget.Outputs.selected_data)
53+
sel_atrs = [atr.name for atr in selected.domain.attributes]
54+
true_atrs = ['hair', 'feathers (1)', 'feathers (2)', 'eggs', 'milk', 'airborne', 'aquatic',
55+
'predator', 'toothed', 'backbone', 'breathes', 'venomous', 'fins', 'legs',
56+
'tail', 'domestic', 'catsize']
57+
self.assertEqual(sel_atrs, true_atrs)
58+
self.assertEqual(selected.domain.metas, data.domain.metas)
59+
self.assertEqual(selected.domain.class_vars, data.domain.class_vars)
60+
61+
def test_multiple_input_rows_id(self):
3962
"""Over rows"""
4063
self.widget.rowwise = True
4164
self.send_signal(self.signal_name, self.data[:100], 1)

0 commit comments

Comments
 (0)