Skip to content

Commit 4188f17

Browse files
committed
Cleaner and more optimized implementation (+4 squashed commits)
Squashed commits: [ce4b687] Cleaner implementation [fd64536] Cleaner implementation [a951435] Performance optimization [fae6416] Possibly cleaner code
1 parent 6d665d0 commit 4188f17

File tree

1 file changed

+11
-17
lines changed

1 file changed

+11
-17
lines changed

concepts/algorithms/covering_edges.py

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,23 @@
55
John Wiley & Sons, 2004.
66
"""
77

8+
from collections import Counter
9+
810
from .fcbo import fast_generate_from
911

1012

1113
def lattice(context):
12-
edges = covering_edges(fast_generate_from(context), context)
14+
concepts = tuple(fast_generate_from(context))
15+
edges = covering_edges(concepts, context)
1316

14-
mapping = {}
17+
mapping = dict([(extent, (extent, intent, [], [])) for extent, intent in concepts])
1518

1619
for concept, lower_neighbor in edges:
17-
extent, intent = concept
18-
lower_extent, lower_intent = lower_neighbor
19-
20-
if extent in mapping:
21-
_, _, _, lower = mapping[extent]
22-
lower.append(lower_extent)
23-
else:
24-
mapping[extent] = (extent, intent, [], [lower_extent])
20+
extent, _ = concept
21+
lower_extent, _ = lower_neighbor
2522

26-
if lower_extent in mapping:
27-
_, _, upper, _ = mapping[lower_extent]
28-
upper.append(extent)
29-
else:
30-
mapping[lower_extent] = (lower_extent, lower_intent, [extent], [])
23+
mapping[extent][3].append(lower_extent)
24+
mapping[lower_extent][2].append(extent)
3125

3226
return mapping.values()
3327

@@ -97,7 +91,7 @@ def covering_edges(concept_list, context):
9791
concept_index = dict(concept_list)
9892

9993
for extent, intent in concept_index.items():
100-
candidate_counter = dict.fromkeys(concept_index, 0)
94+
candidate_counter = Counter()
10195

10296
property_candidates = Properties.fromint(Properties.supremum & ~intent)
10397

@@ -107,4 +101,4 @@ def covering_edges(concept_list, context):
107101
candidate_counter[extent_candidate] += 1
108102

109103
if (intent_candidate.count() - intent.count()) == candidate_counter[extent_candidate]:
110-
yield (extent, intent), (extent_candidate, intent_candidate)
104+
yield (extent, intent), (extent_candidate, intent_candidate)

0 commit comments

Comments
 (0)