|
5 | 5 | John Wiley & Sons, 2004.
|
6 | 6 | """
|
7 | 7 |
|
| 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 | + |
8 | 34 |
|
9 | 35 | def covering_edges(concept_list, context):
|
10 | 36 | """Yield mapping edge as ``((extent, intent), (lower_extent, lower_intent))``
|
11 | 37 | pairs (concept and it's lower neighbor) from ``context`` and ``concept_list``
|
12 |
| - |
| 38 | +
|
13 | 39 | Example:
|
14 | 40 | >>> from concepts import make_context, ConceptList
|
15 | 41 | >>> from concepts._common import Concept
|
@@ -40,7 +66,7 @@ def covering_edges(concept_list, context):
|
40 | 66 | ... concepts))
|
41 | 67 |
|
42 | 68 | >>> edges = covering_edges(concept_list, context)
|
43 |
| - |
| 69 | +
|
44 | 70 | >>> [(''.join(concept[0].members()), # doctest: +NORMALIZE_WHITESPACE
|
45 | 71 | ... ''.join(lower[0].members()))
|
46 | 72 | ... for concept, lower in edges]
|
|
0 commit comments