diff options
author | Kristóf Marussy <marussy@mit.bme.hu> | 2023-09-14 19:29:36 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-14 19:29:36 +0200 |
commit | 98ed3b6db5f4e51961a161050cc31c66015116e8 (patch) | |
tree | 8bfd6d9bc8d6ed23b9eb0f889dd40b6c24fe8f92 /subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyBuilder.java | |
parent | Merge pull request #38 from nagilooh/design-space-exploration (diff) | |
parent | Merge remote-tracking branch 'upstream/main' into partial-interpretation (diff) | |
download | refinery-98ed3b6db5f4e51961a161050cc31c66015116e8.tar.gz refinery-98ed3b6db5f4e51961a161050cc31c66015116e8.tar.zst refinery-98ed3b6db5f4e51961a161050cc31c66015116e8.zip |
Merge pull request #39 from kris7t/partial-interpretation
Implement partial interpretation based model generation
Diffstat (limited to 'subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyBuilder.java')
-rw-r--r-- | subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyBuilder.java | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyBuilder.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyBuilder.java new file mode 100644 index 00000000..ce8fda05 --- /dev/null +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyBuilder.java | |||
@@ -0,0 +1,66 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.store.reasoning.translator.typehierarchy; | ||
7 | |||
8 | import tools.refinery.store.reasoning.representation.PartialRelation; | ||
9 | import tools.refinery.store.reasoning.translator.TranslationException; | ||
10 | |||
11 | import java.util.*; | ||
12 | |||
13 | @SuppressWarnings("UnusedReturnValue") | ||
14 | public class TypeHierarchyBuilder { | ||
15 | protected final Map<PartialRelation, TypeInfo> typeInfoMap = new LinkedHashMap<>(); | ||
16 | |||
17 | protected TypeHierarchyBuilder() { | ||
18 | } | ||
19 | |||
20 | public TypeHierarchyBuilder type(PartialRelation partialRelation, TypeInfo typeInfo) { | ||
21 | if (partialRelation.arity() != 1) { | ||
22 | throw new TranslationException(partialRelation, | ||
23 | "Only types of arity 1 are supported, got %s with %d instead" | ||
24 | .formatted(partialRelation, partialRelation.arity())); | ||
25 | } | ||
26 | var putResult = typeInfoMap.put(partialRelation, typeInfo); | ||
27 | if (putResult != null && !putResult.equals(typeInfo)) { | ||
28 | throw new TranslationException(partialRelation, | ||
29 | "Duplicate type info for partial relation: " + partialRelation); | ||
30 | } | ||
31 | return this; | ||
32 | } | ||
33 | |||
34 | public TypeHierarchyBuilder type(PartialRelation partialRelation, boolean abstractType, | ||
35 | PartialRelation... supertypes) { | ||
36 | return type(partialRelation, abstractType, Set.of(supertypes)); | ||
37 | } | ||
38 | |||
39 | public TypeHierarchyBuilder type(PartialRelation partialRelation, boolean abstractType, | ||
40 | Collection<PartialRelation> supertypes) { | ||
41 | return type(partialRelation, new TypeInfo(supertypes, abstractType)); | ||
42 | } | ||
43 | |||
44 | public TypeHierarchyBuilder type(PartialRelation partialRelation, PartialRelation... supertypes) { | ||
45 | return type(partialRelation, List.of(supertypes)); | ||
46 | } | ||
47 | |||
48 | public TypeHierarchyBuilder type(PartialRelation partialRelation, Collection<PartialRelation> supertypes) { | ||
49 | return type(partialRelation, false, supertypes); | ||
50 | } | ||
51 | |||
52 | public TypeHierarchyBuilder types(Collection<Map.Entry<PartialRelation, TypeInfo>> entries) { | ||
53 | for (var entry : entries) { | ||
54 | type(entry.getKey(), entry.getValue()); | ||
55 | } | ||
56 | return this; | ||
57 | } | ||
58 | |||
59 | public TypeHierarchyBuilder types(Map<PartialRelation, TypeInfo> map) { | ||
60 | return types(map.entrySet()); | ||
61 | } | ||
62 | |||
63 | public TypeHierarchy build() { | ||
64 | return new TypeHierarchy(typeInfoMap); | ||
65 | } | ||
66 | } | ||