From ee3bfbd09a832ead923d6d4bff8e1ad91c003265 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Tue, 25 Jul 2023 16:29:16 +0200 Subject: refactor: partial model initialzer unique table Reduce memory use of initial partial models by consolidating value objects. --- .../reasoning/translator/multiobject/MultiObjectInitializer.java | 6 +++++- .../translator/typehierarchy/TypeHierarchyInitializer.java | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'subprojects/store-reasoning') 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; import tools.refinery.store.tuple.Tuple; import java.util.Arrays; +import java.util.HashMap; +import java.util.function.Function; class MultiObjectInitializer implements PartialModelInitializer { private final Symbol countSymbol; @@ -31,12 +33,14 @@ class MultiObjectInitializer implements PartialModelInitializer { initializeExists(intervals, modelSeed); initializeEquals(intervals, modelSeed); var countInterpretation = model.getInterpretation(countSymbol); + var uniqueTable = new HashMap(); for (int i = 0; i < intervals.length; i++) { var interval = intervals[i]; if (interval.isEmpty()) { throw new IllegalArgumentException("Inconsistent existence or equality for node " + i); } - countInterpretation.put(Tuple.of(i), intervals[i]); + var uniqueInterval = uniqueTable.computeIfAbsent(intervals[i], Function.identity()); + countInterpretation.put(Tuple.of(i), uniqueInterval); } } 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; import tools.refinery.store.tuple.Tuple; import java.util.Arrays; +import java.util.HashMap; +import java.util.function.Function; public class TypeHierarchyInitializer implements PartialModelInitializer { private final TypeHierarchy typeHierarchy; @@ -32,8 +34,10 @@ public class TypeHierarchyInitializer implements PartialModelInitializer { initializeType(type, inferredTypes, modelSeed); } var typeInterpretation = model.getInterpretation(typeSymbol); + var uniqueTable = new HashMap(); for (int i = 0; i < inferredTypes.length; i++) { - typeInterpretation.put(Tuple.of(i), inferredTypes[i]); + var uniqueType = uniqueTable.computeIfAbsent(inferredTypes[i], Function.identity()); + typeInterpretation.put(Tuple.of(i), uniqueType); } } -- cgit v1.2.3-70-g09d2