Skip to content

Commit 6d665d0

Browse files
committed
Prototype of lattice function using covering_edges
1 parent 7c42833 commit 6d665d0

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

concepts/algorithms/covering_edges.py

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

8+
from .fcbo import fast_generate_from
9+
10+
11+
def lattice(context):
12+
edges = covering_edges(fast_generate_from(context), context)
13+
14+
mapping = {}
15+
16+
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])
25+
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], [])
31+
32+
return mapping.values()
33+
834

935
def covering_edges(concept_list, context):
1036
"""Yield mapping edge as ``((extent, intent), (lower_extent, lower_intent))``
1137
pairs (concept and it's lower neighbor) from ``context`` and ``concept_list``
12-
38+
1339
Example:
1440
>>> from concepts import make_context, ConceptList
1541
>>> from concepts._common import Concept
@@ -40,7 +66,7 @@ def covering_edges(concept_list, context):
4066
... concepts))
4167
4268
>>> edges = covering_edges(concept_list, context)
43-
69+
4470
>>> [(''.join(concept[0].members()), # doctest: +NORMALIZE_WHITESPACE
4571
... ''.join(lower[0].members()))
4672
... for concept, lower in edges]

0 commit comments

Comments
 (0)