aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-reasoning
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2023-07-25 16:29:16 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2023-07-25 16:29:16 +0200
commitee3bfbd09a832ead923d6d4bff8e1ad91c003265 (patch)
tree06a8f68f670e75c26e3a7f74e3f106c7aa754ec5 /subprojects/store-reasoning
parentfeat: concrete count in partial models (diff)
downloadrefinery-ee3bfbd09a832ead923d6d4bff8e1ad91c003265.tar.gz
refinery-ee3bfbd09a832ead923d6d4bff8e1ad91c003265.tar.zst
refinery-ee3bfbd09a832ead923d6d4bff8e1ad91c003265.zip
refactor: partial model initialzer unique table
Reduce memory use of initial partial models by consolidating value objects.
Diffstat (limited to 'subprojects/store-reasoning')
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectInitializer.java6
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyInitializer.java6
2 files changed, 10 insertions, 2 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 084bf6f9..fb84631d 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
@@ -17,6 +17,8 @@ import tools.refinery.store.representation.cardinality.CardinalityIntervals;
17import tools.refinery.store.tuple.Tuple; 17import tools.refinery.store.tuple.Tuple;
18 18
19import java.util.Arrays; 19import java.util.Arrays;
20import java.util.HashMap;
21import java.util.function.Function;
20 22
21class MultiObjectInitializer implements PartialModelInitializer { 23class MultiObjectInitializer implements PartialModelInitializer {
22 private final Symbol<CardinalityInterval> countSymbol; 24 private final Symbol<CardinalityInterval> countSymbol;
@@ -31,12 +33,14 @@ class MultiObjectInitializer implements PartialModelInitializer {
31 initializeExists(intervals, modelSeed); 33 initializeExists(intervals, modelSeed);
32 initializeEquals(intervals, modelSeed); 34 initializeEquals(intervals, modelSeed);
33 var countInterpretation = model.getInterpretation(countSymbol); 35 var countInterpretation = model.getInterpretation(countSymbol);
36 var uniqueTable = new HashMap<CardinalityInterval, CardinalityInterval>();
34 for (int i = 0; i < intervals.length; i++) { 37 for (int i = 0; i < intervals.length; i++) {
35 var interval = intervals[i]; 38 var interval = intervals[i];
36 if (interval.isEmpty()) { 39 if (interval.isEmpty()) {
37 throw new IllegalArgumentException("Inconsistent existence or equality for node " + i); 40 throw new IllegalArgumentException("Inconsistent existence or equality for node " + i);
38 } 41 }
39 countInterpretation.put(Tuple.of(i), intervals[i]); 42 var uniqueInterval = uniqueTable.computeIfAbsent(intervals[i], Function.identity());
43 countInterpretation.put(Tuple.of(i), uniqueInterval);
40 } 44 }
41 } 45 }
42 46
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 6648a454..c74f1e78 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
@@ -14,6 +14,8 @@ import tools.refinery.store.representation.TruthValue;
14import tools.refinery.store.tuple.Tuple; 14import tools.refinery.store.tuple.Tuple;
15 15
16import java.util.Arrays; 16import java.util.Arrays;
17import java.util.HashMap;
18import java.util.function.Function;
17 19
18public class TypeHierarchyInitializer implements PartialModelInitializer { 20public class TypeHierarchyInitializer implements PartialModelInitializer {
19 private final TypeHierarchy typeHierarchy; 21 private final TypeHierarchy typeHierarchy;
@@ -32,8 +34,10 @@ public class TypeHierarchyInitializer implements PartialModelInitializer {
32 initializeType(type, inferredTypes, modelSeed); 34 initializeType(type, inferredTypes, modelSeed);
33 } 35 }
34 var typeInterpretation = model.getInterpretation(typeSymbol); 36 var typeInterpretation = model.getInterpretation(typeSymbol);
37 var uniqueTable = new HashMap<InferredType, InferredType>();
35 for (int i = 0; i < inferredTypes.length; i++) { 38 for (int i = 0; i < inferredTypes.length; i++) {
36 typeInterpretation.put(Tuple.of(i), inferredTypes[i]); 39 var uniqueType = uniqueTable.computeIfAbsent(inferredTypes[i], Function.identity());
40 typeInterpretation.put(Tuple.of(i), uniqueType);
37 } 41 }
38 } 42 }
39 43