aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-reasoning
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2023-09-11 19:22:26 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2023-09-11 19:22:26 +0200
commit4d365b54dad8d066bba2a2b1a05092b4802b9970 (patch)
tree12e5ae36b0041463ded54e7a69dcdc9f3662794f /subprojects/store-reasoning
parentfix: build failures after integrating generation (diff)
downloadrefinery-4d365b54dad8d066bba2a2b1a05092b4802b9970.tar.gz
refinery-4d365b54dad8d066bba2a2b1a05092b4802b9970.tar.zst
refinery-4d365b54dad8d066bba2a2b1a05092b4802b9970.zip
feat: cancellation token for ModelStore
Diffstat (limited to 'subprojects/store-reasoning')
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectInitializer.java16
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyInitializer.java7
2 files changed, 15 insertions, 8 deletions
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectInitializer.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectInitializer.java
index f11ab46b..89918155 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectInitializer.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectInitializer.java
@@ -30,9 +30,9 @@ class MultiObjectInitializer implements PartialModelInitializer {
30 30
31 @Override 31 @Override
32 public void initialize(Model model, ModelSeed modelSeed) { 32 public void initialize(Model model, ModelSeed modelSeed) {
33 var intervals = initializeIntervals(modelSeed); 33 var intervals = initializeIntervals(model, modelSeed);
34 initializeExists(intervals, modelSeed); 34 initializeExists(intervals, model, modelSeed);
35 initializeEquals(intervals, modelSeed); 35 initializeEquals(intervals, model, modelSeed);
36 var countInterpretation = model.getInterpretation(countSymbol); 36 var countInterpretation = model.getInterpretation(countSymbol);
37 var uniqueTable = new HashMap<CardinalityInterval, CardinalityInterval>(); 37 var uniqueTable = new HashMap<CardinalityInterval, CardinalityInterval>();
38 for (int i = 0; i < intervals.length; i++) { 38 for (int i = 0; i < intervals.length; i++) {
@@ -47,12 +47,13 @@ class MultiObjectInitializer implements PartialModelInitializer {
47 } 47 }
48 48
49 @NotNull 49 @NotNull
50 private CardinalityInterval[] initializeIntervals(ModelSeed modelSeed) { 50 private CardinalityInterval[] initializeIntervals(Model model, ModelSeed modelSeed) {
51 var intervals = new CardinalityInterval[modelSeed.getNodeCount()]; 51 var intervals = new CardinalityInterval[modelSeed.getNodeCount()];
52 if (modelSeed.containsSeed(MultiObjectTranslator.COUNT_SYMBOL)) { 52 if (modelSeed.containsSeed(MultiObjectTranslator.COUNT_SYMBOL)) {
53 Arrays.fill(intervals, CardinalityIntervals.ONE); 53 Arrays.fill(intervals, CardinalityIntervals.ONE);
54 var cursor = modelSeed.getCursor(MultiObjectTranslator.COUNT_SYMBOL, CardinalityIntervals.ONE); 54 var cursor = modelSeed.getCursor(MultiObjectTranslator.COUNT_SYMBOL, CardinalityIntervals.ONE);
55 while (cursor.move()) { 55 while (cursor.move()) {
56 model.checkCancelled();
56 int i = cursor.getKey().get(0); 57 int i = cursor.getKey().get(0);
57 checkNodeId(intervals, i); 58 checkNodeId(intervals, i);
58 intervals[i] = cursor.getValue(); 59 intervals[i] = cursor.getValue();
@@ -70,12 +71,13 @@ class MultiObjectInitializer implements PartialModelInitializer {
70 return intervals; 71 return intervals;
71 } 72 }
72 73
73 private void initializeExists(CardinalityInterval[] intervals, ModelSeed modelSeed) { 74 private void initializeExists(CardinalityInterval[] intervals, Model model, ModelSeed modelSeed) {
74 if (!modelSeed.containsSeed(ReasoningAdapter.EXISTS_SYMBOL)) { 75 if (!modelSeed.containsSeed(ReasoningAdapter.EXISTS_SYMBOL)) {
75 return; 76 return;
76 } 77 }
77 var cursor = modelSeed.getCursor(ReasoningAdapter.EXISTS_SYMBOL, TruthValue.UNKNOWN); 78 var cursor = modelSeed.getCursor(ReasoningAdapter.EXISTS_SYMBOL, TruthValue.UNKNOWN);
78 while (cursor.move()) { 79 while (cursor.move()) {
80 model.checkCancelled();
79 int i = cursor.getKey().get(0); 81 int i = cursor.getKey().get(0);
80 checkNodeId(intervals, i); 82 checkNodeId(intervals, i);
81 switch (cursor.getValue()) { 83 switch (cursor.getValue()) {
@@ -89,13 +91,14 @@ class MultiObjectInitializer implements PartialModelInitializer {
89 } 91 }
90 } 92 }
91 93
92 private void initializeEquals(CardinalityInterval[] intervals, ModelSeed modelSeed) { 94 private void initializeEquals(CardinalityInterval[] intervals, Model model, ModelSeed modelSeed) {
93 if (!modelSeed.containsSeed(ReasoningAdapter.EQUALS_SYMBOL)) { 95 if (!modelSeed.containsSeed(ReasoningAdapter.EQUALS_SYMBOL)) {
94 return; 96 return;
95 } 97 }
96 var seed = modelSeed.getSeed(ReasoningAdapter.EQUALS_SYMBOL); 98 var seed = modelSeed.getSeed(ReasoningAdapter.EQUALS_SYMBOL);
97 var cursor = seed.getCursor(TruthValue.FALSE, modelSeed.getNodeCount()); 99 var cursor = seed.getCursor(TruthValue.FALSE, modelSeed.getNodeCount());
98 while (cursor.move()) { 100 while (cursor.move()) {
101 model.checkCancelled();
99 var key = cursor.getKey(); 102 var key = cursor.getKey();
100 int i = key.get(0); 103 int i = key.get(0);
101 int otherIndex = key.get(1); 104 int otherIndex = key.get(1);
@@ -116,6 +119,7 @@ class MultiObjectInitializer implements PartialModelInitializer {
116 } 119 }
117 } 120 }
118 for (int i = 0; i < intervals.length; i++) { 121 for (int i = 0; i < intervals.length; i++) {
122 model.checkCancelled();
119 if (seed.get(Tuple.of(i, i)) == TruthValue.FALSE) { 123 if (seed.get(Tuple.of(i, i)) == TruthValue.FALSE) {
120 throw new TranslationException(ReasoningAdapter.EQUALS_SYMBOL, "Inconsistent equality for node " + i); 124 throw new TranslationException(ReasoningAdapter.EQUALS_SYMBOL, "Inconsistent equality for node " + i);
121 } 125 }
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyInitializer.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyInitializer.java
index c74f1e78..233e43f0 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyInitializer.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyInitializer.java
@@ -31,20 +31,23 @@ public class TypeHierarchyInitializer implements PartialModelInitializer {
31 var inferredTypes = new InferredType[modelSeed.getNodeCount()]; 31 var inferredTypes = new InferredType[modelSeed.getNodeCount()];
32 Arrays.fill(inferredTypes, typeHierarchy.getUnknownType()); 32 Arrays.fill(inferredTypes, typeHierarchy.getUnknownType());
33 for (var type : typeHierarchy.getAllTypes()) { 33 for (var type : typeHierarchy.getAllTypes()) {
34 initializeType(type, inferredTypes, modelSeed); 34 model.checkCancelled();
35 initializeType(type, inferredTypes, model, modelSeed);
35 } 36 }
36 var typeInterpretation = model.getInterpretation(typeSymbol); 37 var typeInterpretation = model.getInterpretation(typeSymbol);
37 var uniqueTable = new HashMap<InferredType, InferredType>(); 38 var uniqueTable = new HashMap<InferredType, InferredType>();
38 for (int i = 0; i < inferredTypes.length; i++) { 39 for (int i = 0; i < inferredTypes.length; i++) {
40 model.checkCancelled();
39 var uniqueType = uniqueTable.computeIfAbsent(inferredTypes[i], Function.identity()); 41 var uniqueType = uniqueTable.computeIfAbsent(inferredTypes[i], Function.identity());
40 typeInterpretation.put(Tuple.of(i), uniqueType); 42 typeInterpretation.put(Tuple.of(i), uniqueType);
41 } 43 }
42 } 44 }
43 45
44 private void initializeType(PartialRelation type, InferredType[] inferredTypes, ModelSeed modelSeed) { 46 private void initializeType(PartialRelation type, InferredType[] inferredTypes, Model model, ModelSeed modelSeed) {
45 var cursor = modelSeed.getCursor(type, TruthValue.UNKNOWN); 47 var cursor = modelSeed.getCursor(type, TruthValue.UNKNOWN);
46 var analysisResult = typeHierarchy.getAnalysisResult(type); 48 var analysisResult = typeHierarchy.getAnalysisResult(type);
47 while (cursor.move()) { 49 while (cursor.move()) {
50 model.checkCancelled();
48 var i = cursor.getKey().get(0); 51 var i = cursor.getKey().get(0);
49 checkNodeId(inferredTypes, i); 52 checkNodeId(inferredTypes, i);
50 var value = cursor.getValue(); 53 var value = cursor.getValue();