From ba167247757d76df603a6527d9ad51c3d9f150b9 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Thu, 9 May 2019 20:24:56 -0400 Subject: Interval aggregation operators --- .../interval/IntervalAggregationOperator.xtend | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/IntervalAggregationOperator.xtend (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/IntervalAggregationOperator.xtend') diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/IntervalAggregationOperator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/IntervalAggregationOperator.xtend new file mode 100644 index 00000000..940c71bb --- /dev/null +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/IntervalAggregationOperator.xtend @@ -0,0 +1,48 @@ +package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval + +import java.util.stream.Stream +import org.eclipse.viatra.query.runtime.matchers.psystem.aggregations.IMultisetAggregationOperator +import org.eclipse.xtend.lib.annotations.Accessors +import org.eclipse.xtend.lib.annotations.FinalFieldsConstructor + +@FinalFieldsConstructor +class IntervalAggregationOperator implements IMultisetAggregationOperator { + @Accessors val IntervalAggregationMode mode + + override getName() { + mode.modeName + } + + override getShortDescription() { + mode.description + } + + override createNeutral() { + mode.empty + } + + override isNeutral(IntervalRedBlackNode result) { + result.leaf + } + + override update(IntervalRedBlackNode oldResult, Interval updateValue, boolean isInsertion) { + if (isInsertion) { + val newNode = mode.createNode(updateValue) + oldResult.add(newNode) + } else { + oldResult.remove(updateValue) + } + } + + override getAggregate(IntervalRedBlackNode result) { + if (result.leaf) { + null + } else { + result.result + } + } + + override aggregateStream(Stream stream) { + stream.reduce(mode).orElse(null) + } +} -- cgit v1.2.3-70-g09d2 From 5a55d0d306e85a697aa86bdf3f9caf243d384faa Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Fri, 10 May 2019 00:01:57 -0400 Subject: Neutral element for sum is [0, 0] --- .../logic2viatra/interval/IntervalAggregationMode.java | 9 +++++++++ .../logic2viatra/interval/IntervalAggregationOperator.xtend | 4 ++-- .../viatrasolver/logic2viatra/tests/interval/SumTest.xtend | 8 ++++---- 3 files changed, 15 insertions(+), 6 deletions(-) (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/IntervalAggregationOperator.xtend') diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/IntervalAggregationMode.java b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/IntervalAggregationMode.java index f5bd2efc..66dcb00f 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/IntervalAggregationMode.java +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/IntervalAggregationMode.java @@ -21,6 +21,11 @@ public enum IntervalAggregationMode implements BinaryOperator { } }; } + + @Override + public Interval getNeutral() { + return Interval.ZERO; + } }, JOIN("intervalJoin", "Calculate the smallest interval containing all the intervals in a set") { @@ -63,4 +68,8 @@ public enum IntervalAggregationMode implements BinaryOperator { } public abstract IntervalRedBlackNode createNode(Interval interval); + + public Interval getNeutral() { + return Interval.EMPTY; + } } diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/IntervalAggregationOperator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/IntervalAggregationOperator.xtend index 940c71bb..21d3d73b 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/IntervalAggregationOperator.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/interval/IntervalAggregationOperator.xtend @@ -36,13 +36,13 @@ class IntervalAggregationOperator implements IMultisetAggregationOperator stream) { - stream.reduce(mode).orElse(null) + stream.reduce(mode).orElse(mode.neutral) } } diff --git a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/SumTest.xtend b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/SumTest.xtend index cbd7e71f..530c081c 100644 --- a/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/SumTest.xtend +++ b/Tests/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.tests/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/tests/interval/SumTest.xtend @@ -24,7 +24,7 @@ class SumTest { @Test def void emptyTest() { - assertEquals(null) + assertEquals(ZERO) } @Test @@ -37,7 +37,7 @@ class SumTest { def void addRemoveTest() { add(between(-1, 1)) remove(between(-1, 1)) - assertEquals(null) + assertEquals(ZERO) } @Test @@ -79,7 +79,7 @@ class SumTest { remove(between(-1, 1)) remove(between(-1, 1)) remove(between(-1, 1)) - assertEquals(null) + assertEquals(ZERO) } @Test @@ -108,7 +108,7 @@ class SumTest { } else { current.remove(interval) } - val expected = current.stream.reduce(aggregator.mode).orElse(null) + val expected = current.stream.reduce(aggregator.mode).orElse(ZERO) update(interval, isInsert) assertEquals(expected) } -- cgit v1.2.3-70-g09d2