aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2023-08-17 21:12:45 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2023-08-17 21:12:45 +0200
commitc64e925d15cbc187623eb5ac28e5c769d8673321 (patch)
tree99c6d23a1eb787af6b77b5f3d53b01d497cbc918
parentfix: typo in language-web build script (diff)
downloadrefinery-c64e925d15cbc187623eb5ac28e5c769d8673321.tar.gz
refinery-c64e925d15cbc187623eb5ac28e5c769d8673321.tar.zst
refinery-c64e925d15cbc187623eb5ac28e5c769d8673321.zip
refactor: candidate interpreation only on demand
Avoid creating interpretations not needed for the graph analysis task.
-rw-r--r--subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsService.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java9
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningStoreAdapter.java4
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java19
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java21
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningStoreAdapterImpl.java13
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/PartialInterpretation.java8
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/QueryBasedRelationInterpretationFactory.java15
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialRelationTranslator.java7
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialSymbolTranslator.java3
10 files changed, 84 insertions, 20 deletions
diff --git a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsService.java b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsService.java
index c828b3d5..2495430e 100644
--- a/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsService.java
+++ b/subprojects/language-web/src/main/java/tools/refinery/language/web/semantics/SemanticsService.java
@@ -65,7 +65,8 @@ public class SemanticsService extends AbstractCachedService<SemanticsResult> {
65 var initializer = initializerProvider.get(); 65 var initializer = initializerProvider.get();
66 var builder = ModelStore.builder() 66 var builder = ModelStore.builder()
67 .with(ViatraModelQueryAdapter.builder()) 67 .with(ViatraModelQueryAdapter.builder())
68 .with(ReasoningAdapter.builder()); 68 .with(ReasoningAdapter.builder()
69 .requiredInterpretations(Concreteness.PARTIAL));
69 operationCanceledManager.checkCanceled(cancelIndicator); 70 operationCanceledManager.checkCanceled(cancelIndicator);
70 try { 71 try {
71 var modelSeed = initializer.createModel(problem, builder); 72 var modelSeed = initializer.createModel(problem, builder);
@@ -84,7 +85,7 @@ public class SemanticsService extends AbstractCachedService<SemanticsResult> {
84 } 85 }
85 return new SemanticsSuccessResult(nodeTrace, partialInterpretation); 86 return new SemanticsSuccessResult(nodeTrace, partialInterpretation);
86 } catch (RuntimeException e) { 87 } catch (RuntimeException e) {
87 LOG.error("Error while computing semantics", e); 88 LOG.debug("Error while computing semantics", e);
88 return new SemanticsErrorResult(e.getMessage()); 89 return new SemanticsErrorResult(e.getMessage());
89 } 90 }
90 } 91 }
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java
index f560c74c..3d4c672f 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java
@@ -18,8 +18,17 @@ import tools.refinery.store.reasoning.refinement.StorageRefiner;
18import tools.refinery.store.reasoning.translator.AnyPartialSymbolTranslator; 18import tools.refinery.store.reasoning.translator.AnyPartialSymbolTranslator;
19import tools.refinery.store.representation.Symbol; 19import tools.refinery.store.representation.Symbol;
20 20
21import java.util.Collection;
22import java.util.List;
23
21@SuppressWarnings("UnusedReturnValue") 24@SuppressWarnings("UnusedReturnValue")
22public interface ReasoningBuilder extends ModelAdapterBuilder { 25public interface ReasoningBuilder extends ModelAdapterBuilder {
26 ReasoningBuilder requiredInterpretations(Collection<Concreteness> requiredInterpretations);
27
28 default ReasoningBuilder requiredInterpretations(Concreteness... requiredInterpretations) {
29 return requiredInterpretations(List.of(requiredInterpretations));
30 }
31
23 ReasoningBuilder partialSymbol(AnyPartialSymbolTranslator translator); 32 ReasoningBuilder partialSymbol(AnyPartialSymbolTranslator translator);
24 33
25 <T> ReasoningBuilder storageRefiner(Symbol<T> symbol, StorageRefiner.Factory<T> refiner); 34 <T> ReasoningBuilder storageRefiner(Symbol<T> symbol, StorageRefiner.Factory<T> refiner);
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningStoreAdapter.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningStoreAdapter.java
index 6f9354eb..fe3cc3ea 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningStoreAdapter.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningStoreAdapter.java
@@ -7,16 +7,20 @@ package tools.refinery.store.reasoning;
7 7
8import tools.refinery.store.adapter.ModelStoreAdapter; 8import tools.refinery.store.adapter.ModelStoreAdapter;
9import tools.refinery.store.model.Model; 9import tools.refinery.store.model.Model;
10import tools.refinery.store.reasoning.literal.Concreteness;
10import tools.refinery.store.reasoning.representation.AnyPartialSymbol; 11import tools.refinery.store.reasoning.representation.AnyPartialSymbol;
11import tools.refinery.store.reasoning.seed.ModelSeed; 12import tools.refinery.store.reasoning.seed.ModelSeed;
12 13
13import java.util.Collection; 14import java.util.Collection;
15import java.util.Set;
14 16
15public interface ReasoningStoreAdapter extends ModelStoreAdapter { 17public interface ReasoningStoreAdapter extends ModelStoreAdapter {
16 Collection<AnyPartialSymbol> getPartialSymbols(); 18 Collection<AnyPartialSymbol> getPartialSymbols();
17 19
18 Collection<AnyPartialSymbol> getRefinablePartialSymbols(); 20 Collection<AnyPartialSymbol> getRefinablePartialSymbols();
19 21
22 Set<Concreteness> getSupportedInterpretations();
23
20 Model createInitialModel(ModelSeed modelSeed); 24 Model createInitialModel(ModelSeed modelSeed);
21 25
22 @Override 26 @Override
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java
index 579b08dd..2fa744de 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java
@@ -48,16 +48,20 @@ class ReasoningAdapterImpl implements ReasoningAdapter {
48 refiners = new HashMap<>(refinerFactories.size()); 48 refiners = new HashMap<>(refinerFactories.size());
49 createRefiners(); 49 createRefiners();
50 50
51 storageRefiners = storeAdapter.createStprageRefiner(model); 51 storageRefiners = storeAdapter.createStorageRefiner(model);
52 52
53 nodeCountInterpretation = model.getInterpretation(NODE_COUNT_SYMBOL); 53 nodeCountInterpretation = model.getInterpretation(NODE_COUNT_SYMBOL);
54 } 54 }
55 55
56 private void createPartialInterpretations() { 56 private void createPartialInterpretations() {
57 var supportedInterpretations = storeAdapter.getSupportedInterpretations();
57 int concretenessLength = Concreteness.values().length; 58 int concretenessLength = Concreteness.values().length;
58 var interpretationFactories = storeAdapter.getSymbolInterpreters(); 59 var interpretationFactories = storeAdapter.getSymbolInterpreters();
59 for (int i = 0; i < concretenessLength; i++) { 60 for (int i = 0; i < concretenessLength; i++) {
60 partialInterpretations[i] = new HashMap<>(interpretationFactories.size()); 61 var concreteness = Concreteness.values()[i];
62 if (supportedInterpretations.contains(concreteness)) {
63 partialInterpretations[i] = new HashMap<>(interpretationFactories.size());
64 }
61 } 65 }
62 // Create the partial interpretations in order so that factories may refer to interpretations of symbols 66 // Create the partial interpretations in order so that factories may refer to interpretations of symbols
63 // preceding them in the ordered {@code interpretationFactories} map, e.g., for opposite interpretations. 67 // preceding them in the ordered {@code interpretationFactories} map, e.g., for opposite interpretations.
@@ -65,9 +69,11 @@ class ReasoningAdapterImpl implements ReasoningAdapter {
65 var partialSymbol = entry.getKey(); 69 var partialSymbol = entry.getKey();
66 var factory = entry.getValue(); 70 var factory = entry.getValue();
67 for (int i = 0; i < concretenessLength; i++) { 71 for (int i = 0; i < concretenessLength; i++) {
68 var concreteness = Concreteness.values()[i]; 72 if (partialInterpretations[i] != null) {
69 var interpretation = createPartialInterpretation(concreteness, factory, partialSymbol); 73 var concreteness = Concreteness.values()[i];
70 partialInterpretations[i].put(partialSymbol, interpretation); 74 var interpretation = createPartialInterpretation(concreteness, factory, partialSymbol);
75 partialInterpretations[i].put(partialSymbol, interpretation);
76 }
71 } 77 }
72 } 78 }
73 } 79 }
@@ -114,6 +120,9 @@ class ReasoningAdapterImpl implements ReasoningAdapter {
114 public <A, C> PartialInterpretation<A, C> getPartialInterpretation(Concreteness concreteness, 120 public <A, C> PartialInterpretation<A, C> getPartialInterpretation(Concreteness concreteness,
115 PartialSymbol<A, C> partialSymbol) { 121 PartialSymbol<A, C> partialSymbol) {
116 var map = partialInterpretations[concreteness.ordinal()]; 122 var map = partialInterpretations[concreteness.ordinal()];
123 if (map == null) {
124 throw new IllegalArgumentException("No interpretation for concreteness: " + concreteness);
125 }
117 var interpretation = map.get(partialSymbol); 126 var interpretation = map.get(partialSymbol);
118 if (interpretation == null) { 127 if (interpretation == null) {
119 throw new IllegalArgumentException("No interpretation for partial symbol: " + partialSymbol); 128 throw new IllegalArgumentException("No interpretation for partial symbol: " + partialSymbol);
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java
index 2af84e2d..b4971d2c 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java
@@ -34,6 +34,7 @@ public class ReasoningBuilderImpl extends AbstractModelAdapterBuilder<ReasoningS
34 implements ReasoningBuilder { 34 implements ReasoningBuilder {
35 private final DnfLifter lifter = new DnfLifter(); 35 private final DnfLifter lifter = new DnfLifter();
36 private final PartialQueryRewriter queryRewriter = new PartialQueryRewriter(lifter); 36 private final PartialQueryRewriter queryRewriter = new PartialQueryRewriter(lifter);
37 private Set<Concreteness> requiredInterpretations = Set.of(Concreteness.values());
37 private final Map<AnyPartialSymbol, AnyPartialSymbolTranslator> translators = new LinkedHashMap<>(); 38 private final Map<AnyPartialSymbol, AnyPartialSymbolTranslator> translators = new LinkedHashMap<>();
38 private final Map<AnyPartialSymbol, PartialInterpretation.Factory<?, ?>> symbolInterpreters = new LinkedHashMap<>(); 39 private final Map<AnyPartialSymbol, PartialInterpretation.Factory<?, ?>> symbolInterpreters = new LinkedHashMap<>();
39 private final Map<AnyPartialSymbol, PartialInterpretationRefiner.Factory<?, ?>> symbolRefiners = 40 private final Map<AnyPartialSymbol, PartialInterpretationRefiner.Factory<?, ?>> symbolRefiners =
@@ -42,6 +43,12 @@ public class ReasoningBuilderImpl extends AbstractModelAdapterBuilder<ReasoningS
42 private final List<PartialModelInitializer> initializers = new ArrayList<>(); 43 private final List<PartialModelInitializer> initializers = new ArrayList<>();
43 44
44 @Override 45 @Override
46 public ReasoningBuilder requiredInterpretations(Collection<Concreteness> requiredInterpretations) {
47 this.requiredInterpretations = Set.copyOf(requiredInterpretations);
48 return this;
49 }
50
51 @Override
45 public ReasoningBuilder partialSymbol(AnyPartialSymbolTranslator translator) { 52 public ReasoningBuilder partialSymbol(AnyPartialSymbolTranslator translator) {
46 var partialSymbol = translator.getPartialSymbol(); 53 var partialSymbol = translator.getPartialSymbol();
47 var oldConfiguration = translators.put(partialSymbol, translator); 54 var oldConfiguration = translators.put(partialSymbol, translator);
@@ -93,7 +100,7 @@ public class ReasoningBuilderImpl extends AbstractModelAdapterBuilder<ReasoningS
93 for (var translator : translators.values()) { 100 for (var translator : translators.values()) {
94 translator.configure(storeBuilder); 101 translator.configure(storeBuilder);
95 if (translator instanceof PartialRelationTranslator relationConfiguration) { 102 if (translator instanceof PartialRelationTranslator relationConfiguration) {
96 doConfigure(relationConfiguration); 103 doConfigure(storeBuilder, relationConfiguration);
97 } else { 104 } else {
98 throw new IllegalArgumentException("Unknown partial symbol translator %s for partial symbol %s" 105 throw new IllegalArgumentException("Unknown partial symbol translator %s for partial symbol %s"
99 .formatted(translator, translator.getPartialSymbol())); 106 .formatted(translator, translator.getPartialSymbol()));
@@ -104,10 +111,12 @@ public class ReasoningBuilderImpl extends AbstractModelAdapterBuilder<ReasoningS
104 queryBuilder.rewriter(queryRewriter); 111 queryBuilder.rewriter(queryRewriter);
105 } 112 }
106 113
107 private void doConfigure(PartialRelationTranslator relationConfiguration) { 114 private void doConfigure(ModelStoreBuilder storeBuilder, PartialRelationTranslator relationConfiguration) {
108 var partialRelation = relationConfiguration.getPartialRelation(); 115 var partialRelation = relationConfiguration.getPartialRelation();
109 queryRewriter.addRelationRewriter(partialRelation, relationConfiguration.getRewriter()); 116 queryRewriter.addRelationRewriter(partialRelation, relationConfiguration.getRewriter());
110 symbolInterpreters.put(partialRelation, relationConfiguration.getInterpretationFactory()); 117 var interpretationFactory = relationConfiguration.getInterpretationFactory();
118 interpretationFactory.configure(storeBuilder, requiredInterpretations);
119 symbolInterpreters.put(partialRelation, interpretationFactory);
111 var refiner = relationConfiguration.getInterpretationRefiner(); 120 var refiner = relationConfiguration.getInterpretationRefiner();
112 if (refiner != null) { 121 if (refiner != null) {
113 symbolRefiners.put(partialRelation, refiner); 122 symbolRefiners.put(partialRelation, refiner);
@@ -116,9 +125,9 @@ public class ReasoningBuilderImpl extends AbstractModelAdapterBuilder<ReasoningS
116 125
117 @Override 126 @Override
118 public ReasoningStoreAdapterImpl doBuild(ModelStore store) { 127 public ReasoningStoreAdapterImpl doBuild(ModelStore store) {
119 return new ReasoningStoreAdapterImpl(store, Collections.unmodifiableMap(symbolInterpreters), 128 return new ReasoningStoreAdapterImpl(store, requiredInterpretations,
120 Collections.unmodifiableMap(symbolRefiners), getStorageRefiners(store), 129 Collections.unmodifiableMap(symbolInterpreters), Collections.unmodifiableMap(symbolRefiners),
121 Collections.unmodifiableList(initializers)); 130 getStorageRefiners(store), Collections.unmodifiableList(initializers));
122 } 131 }
123 132
124 private Map<AnySymbol, StorageRefiner.Factory<?>> getStorageRefiners(ModelStore store) { 133 private Map<AnySymbol, StorageRefiner.Factory<?>> getStorageRefiners(ModelStore store) {
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningStoreAdapterImpl.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningStoreAdapterImpl.java
index 3dac53ef..8eb5a034 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningStoreAdapterImpl.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningStoreAdapterImpl.java
@@ -10,6 +10,7 @@ import tools.refinery.store.model.ModelStore;
10import tools.refinery.store.query.ModelQueryAdapter; 10import tools.refinery.store.query.ModelQueryAdapter;
11import tools.refinery.store.reasoning.ReasoningStoreAdapter; 11import tools.refinery.store.reasoning.ReasoningStoreAdapter;
12import tools.refinery.store.reasoning.interpretation.PartialInterpretation; 12import tools.refinery.store.reasoning.interpretation.PartialInterpretation;
13import tools.refinery.store.reasoning.literal.Concreteness;
13import tools.refinery.store.reasoning.refinement.PartialInterpretationRefiner; 14import tools.refinery.store.reasoning.refinement.PartialInterpretationRefiner;
14import tools.refinery.store.reasoning.refinement.PartialModelInitializer; 15import tools.refinery.store.reasoning.refinement.PartialModelInitializer;
15import tools.refinery.store.reasoning.refinement.StorageRefiner; 16import tools.refinery.store.reasoning.refinement.StorageRefiner;
@@ -22,20 +23,23 @@ import tools.refinery.store.tuple.Tuple;
22import java.util.Collection; 23import java.util.Collection;
23import java.util.List; 24import java.util.List;
24import java.util.Map; 25import java.util.Map;
26import java.util.Set;
25 27
26class ReasoningStoreAdapterImpl implements ReasoningStoreAdapter { 28class ReasoningStoreAdapterImpl implements ReasoningStoreAdapter {
27 private final ModelStore store; 29 private final ModelStore store;
30 private final Set<Concreteness> supportedInterpretations;
28 private final Map<AnyPartialSymbol, PartialInterpretation.Factory<?, ?>> symbolInterpreters; 31 private final Map<AnyPartialSymbol, PartialInterpretation.Factory<?, ?>> symbolInterpreters;
29 private final Map<AnyPartialSymbol, PartialInterpretationRefiner.Factory<?, ?>> symbolRefiners; 32 private final Map<AnyPartialSymbol, PartialInterpretationRefiner.Factory<?, ?>> symbolRefiners;
30 private final Map<AnySymbol, StorageRefiner.Factory<?>> storageRefiners; 33 private final Map<AnySymbol, StorageRefiner.Factory<?>> storageRefiners;
31 private final List<PartialModelInitializer> initializers; 34 private final List<PartialModelInitializer> initializers;
32 35
33 ReasoningStoreAdapterImpl(ModelStore store, 36 ReasoningStoreAdapterImpl(ModelStore store, Set<Concreteness> supportedInterpretations,
34 Map<AnyPartialSymbol, PartialInterpretation.Factory<?, ?>> symbolInterpreters, 37 Map<AnyPartialSymbol, PartialInterpretation.Factory<?, ?>> symbolInterpreters,
35 Map<AnyPartialSymbol, PartialInterpretationRefiner.Factory<?, ?>> symbolRefiners, 38 Map<AnyPartialSymbol, PartialInterpretationRefiner.Factory<?, ?>> symbolRefiners,
36 Map<AnySymbol, StorageRefiner.Factory<?>> storageRefiners, 39 Map<AnySymbol, StorageRefiner.Factory<?>> storageRefiners,
37 List<PartialModelInitializer> initializers) { 40 List<PartialModelInitializer> initializers) {
38 this.store = store; 41 this.store = store;
42 this.supportedInterpretations = supportedInterpretations;
39 this.symbolInterpreters = symbolInterpreters; 43 this.symbolInterpreters = symbolInterpreters;
40 this.symbolRefiners = symbolRefiners; 44 this.symbolRefiners = symbolRefiners;
41 this.storageRefiners = storageRefiners; 45 this.storageRefiners = storageRefiners;
@@ -48,6 +52,11 @@ class ReasoningStoreAdapterImpl implements ReasoningStoreAdapter {
48 } 52 }
49 53
50 @Override 54 @Override
55 public Set<Concreteness> getSupportedInterpretations() {
56 return supportedInterpretations;
57 }
58
59 @Override
51 public Collection<AnyPartialSymbol> getPartialSymbols() { 60 public Collection<AnyPartialSymbol> getPartialSymbols() {
52 return symbolInterpreters.keySet(); 61 return symbolInterpreters.keySet();
53 } 62 }
@@ -69,7 +78,7 @@ class ReasoningStoreAdapterImpl implements ReasoningStoreAdapter {
69 return symbolRefiners; 78 return symbolRefiners;
70 } 79 }
71 80
72 StorageRefiner[] createStprageRefiner(Model model) { 81 StorageRefiner[] createStorageRefiner(Model model) {
73 var refiners = new StorageRefiner[storageRefiners.size()]; 82 var refiners = new StorageRefiner[storageRefiners.size()];
74 int i = 0; 83 int i = 0;
75 for (var entry : storageRefiners.entrySet()) { 84 for (var entry : storageRefiners.entrySet()) {
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/PartialInterpretation.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/PartialInterpretation.java
index 3d3d6056..86ffe751 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/PartialInterpretation.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/PartialInterpretation.java
@@ -6,11 +6,14 @@
6package tools.refinery.store.reasoning.interpretation; 6package tools.refinery.store.reasoning.interpretation;
7 7
8import tools.refinery.store.map.Cursor; 8import tools.refinery.store.map.Cursor;
9import tools.refinery.store.model.ModelStoreBuilder;
9import tools.refinery.store.reasoning.ReasoningAdapter; 10import tools.refinery.store.reasoning.ReasoningAdapter;
10import tools.refinery.store.reasoning.literal.Concreteness; 11import tools.refinery.store.reasoning.literal.Concreteness;
11import tools.refinery.store.reasoning.representation.PartialSymbol; 12import tools.refinery.store.reasoning.representation.PartialSymbol;
12import tools.refinery.store.tuple.Tuple; 13import tools.refinery.store.tuple.Tuple;
13 14
15import java.util.Set;
16
14public non-sealed interface PartialInterpretation<A, C> extends AnyPartialInterpretation { 17public non-sealed interface PartialInterpretation<A, C> extends AnyPartialInterpretation {
15 @Override 18 @Override
16 PartialSymbol<A, C> getPartialSymbol(); 19 PartialSymbol<A, C> getPartialSymbol();
@@ -19,8 +22,13 @@ public non-sealed interface PartialInterpretation<A, C> extends AnyPartialInterp
19 22
20 Cursor<Tuple, A> getAll(); 23 Cursor<Tuple, A> getAll();
21 24
25 @FunctionalInterface
22 interface Factory<A, C> { 26 interface Factory<A, C> {
23 PartialInterpretation<A, C> create(ReasoningAdapter adapter, Concreteness concreteness, 27 PartialInterpretation<A, C> create(ReasoningAdapter adapter, Concreteness concreteness,
24 PartialSymbol<A, C> partialSymbol); 28 PartialSymbol<A, C> partialSymbol);
29
30 default void configure(ModelStoreBuilder storeBuilder, Set<Concreteness> requiredInterpretations) {
31 // Nothing to configure by default.
32 }
25 } 33 }
26} 34}
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/QueryBasedRelationInterpretationFactory.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/QueryBasedRelationInterpretationFactory.java
index 2535714a..5cdaa185 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/QueryBasedRelationInterpretationFactory.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/QueryBasedRelationInterpretationFactory.java
@@ -6,7 +6,9 @@
6package tools.refinery.store.reasoning.interpretation; 6package tools.refinery.store.reasoning.interpretation;
7 7
8import tools.refinery.store.map.Cursor; 8import tools.refinery.store.map.Cursor;
9import tools.refinery.store.model.ModelStoreBuilder;
9import tools.refinery.store.query.ModelQueryAdapter; 10import tools.refinery.store.query.ModelQueryAdapter;
11import tools.refinery.store.query.ModelQueryBuilder;
10import tools.refinery.store.query.dnf.Query; 12import tools.refinery.store.query.dnf.Query;
11import tools.refinery.store.query.resultset.ResultSet; 13import tools.refinery.store.query.resultset.ResultSet;
12import tools.refinery.store.reasoning.ReasoningAdapter; 14import tools.refinery.store.reasoning.ReasoningAdapter;
@@ -15,6 +17,8 @@ import tools.refinery.store.reasoning.representation.PartialSymbol;
15import tools.refinery.store.representation.TruthValue; 17import tools.refinery.store.representation.TruthValue;
16import tools.refinery.store.tuple.Tuple; 18import tools.refinery.store.tuple.Tuple;
17 19
20import java.util.Set;
21
18public class QueryBasedRelationInterpretationFactory implements PartialInterpretation.Factory<TruthValue, Boolean> { 22public class QueryBasedRelationInterpretationFactory implements PartialInterpretation.Factory<TruthValue, Boolean> {
19 private final Query<Boolean> may; 23 private final Query<Boolean> may;
20 private final Query<Boolean> must; 24 private final Query<Boolean> must;
@@ -54,6 +58,17 @@ public class QueryBasedRelationInterpretationFactory implements PartialInterpret
54 } 58 }
55 } 59 }
56 60
61 @Override
62 public void configure(ModelStoreBuilder storeBuilder, Set<Concreteness> requiredInterpretations) {
63 var queryBuilder = storeBuilder.getAdapter(ModelQueryBuilder.class);
64 if (requiredInterpretations.contains(Concreteness.PARTIAL)) {
65 queryBuilder.queries(may, must);
66 }
67 if (requiredInterpretations.contains(Concreteness.CANDIDATE)) {
68 queryBuilder.queries(candidateMay, candidateMust);
69 }
70 }
71
57 private static class TwoValuedInterpretation extends AbstractPartialInterpretation<TruthValue, Boolean> { 72 private static class TwoValuedInterpretation extends AbstractPartialInterpretation<TruthValue, Boolean> {
58 private final ResultSet<Boolean> resultSet; 73 private final ResultSet<Boolean> resultSet;
59 74
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialRelationTranslator.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialRelationTranslator.java
index 6f9492a3..4600d5a4 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialRelationTranslator.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialRelationTranslator.java
@@ -7,7 +7,6 @@ package tools.refinery.store.reasoning.translator;
7 7
8import tools.refinery.store.model.ModelStoreBuilder; 8import tools.refinery.store.model.ModelStoreBuilder;
9import tools.refinery.store.query.Constraint; 9import tools.refinery.store.query.Constraint;
10import tools.refinery.store.query.ModelQueryBuilder;
11import tools.refinery.store.query.dnf.Query; 10import tools.refinery.store.query.dnf.Query;
12import tools.refinery.store.query.dnf.QueryBuilder; 11import tools.refinery.store.query.dnf.QueryBuilder;
13import tools.refinery.store.query.dnf.RelationalQuery; 12import tools.refinery.store.query.dnf.RelationalQuery;
@@ -169,7 +168,7 @@ public final class PartialRelationTranslator extends PartialSymbolTranslator<Tru
169 createFallbackQueriesFromSymbol(); 168 createFallbackQueriesFromSymbol();
170 setFallbackCandidateQueries(); 169 setFallbackCandidateQueries();
171 createFallbackRewriter(); 170 createFallbackRewriter();
172 createFallbackInterpretation(storeBuilder); 171 createFallbackInterpretation();
173 createFallbackRefiner(); 172 createFallbackRefiner();
174 super.doConfigure(storeBuilder); 173 super.doConfigure(storeBuilder);
175 } 174 }
@@ -279,11 +278,9 @@ public final class PartialRelationTranslator extends PartialSymbolTranslator<Tru
279 } 278 }
280 } 279 }
281 280
282 private void createFallbackInterpretation(ModelStoreBuilder storeBuilder) { 281 private void createFallbackInterpretation() {
283 if (interpretationFactory == null) { 282 if (interpretationFactory == null) {
284 var queryBuilder = storeBuilder.getAdapter(ModelQueryBuilder.class);
285 interpretationFactory = new QueryBasedRelationInterpretationFactory(may, must, candidateMay, candidateMust); 283 interpretationFactory = new QueryBasedRelationInterpretationFactory(may, must, candidateMay, candidateMust);
286 queryBuilder.queries(may, must, candidateMay, candidateMust);
287 } 284 }
288 } 285 }
289 286
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialSymbolTranslator.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialSymbolTranslator.java
index 542acdb3..e7e26cb2 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialSymbolTranslator.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialSymbolTranslator.java
@@ -8,6 +8,7 @@ package tools.refinery.store.reasoning.translator;
8import tools.refinery.store.model.ModelStoreBuilder; 8import tools.refinery.store.model.ModelStoreBuilder;
9import tools.refinery.store.reasoning.ReasoningBuilder; 9import tools.refinery.store.reasoning.ReasoningBuilder;
10import tools.refinery.store.reasoning.interpretation.PartialInterpretation; 10import tools.refinery.store.reasoning.interpretation.PartialInterpretation;
11import tools.refinery.store.reasoning.literal.Concreteness;
11import tools.refinery.store.reasoning.refinement.PartialInterpretationRefiner; 12import tools.refinery.store.reasoning.refinement.PartialInterpretationRefiner;
12import tools.refinery.store.reasoning.refinement.PartialModelInitializer; 13import tools.refinery.store.reasoning.refinement.PartialModelInitializer;
13import tools.refinery.store.reasoning.refinement.StorageRefiner; 14import tools.refinery.store.reasoning.refinement.StorageRefiner;
@@ -16,6 +17,8 @@ import tools.refinery.store.reasoning.seed.SeedInitializer;
16import tools.refinery.store.representation.AnySymbol; 17import tools.refinery.store.representation.AnySymbol;
17import tools.refinery.store.representation.Symbol; 18import tools.refinery.store.representation.Symbol;
18 19
20import java.util.Set;
21
19@SuppressWarnings("UnusedReturnValue") 22@SuppressWarnings("UnusedReturnValue")
20public abstract sealed class PartialSymbolTranslator<A, C> implements AnyPartialSymbolTranslator 23public abstract sealed class PartialSymbolTranslator<A, C> implements AnyPartialSymbolTranslator
21 permits PartialRelationTranslator { 24 permits PartialRelationTranslator {