aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects')
-rw-r--r--subprojects/logic/src/main/java/tools/refinery/logic/term/Aggregator.java4
-rw-r--r--subprojects/logic/src/main/java/tools/refinery/logic/term/ExtremeValueAggregator.java10
-rw-r--r--subprojects/logic/src/main/java/tools/refinery/logic/term/StatefulAggregate.java3
-rw-r--r--subprojects/logic/src/main/java/tools/refinery/logic/term/StatefulAggregator.java4
-rw-r--r--subprojects/logic/src/main/java/tools/refinery/logic/term/StatelessAggregator.java3
-rw-r--r--subprojects/logic/src/main/java/tools/refinery/logic/term/int_/IntSumAggregator.java4
-rw-r--r--subprojects/logic/src/main/java/tools/refinery/logic/term/real/RealSumAggregator.java5
-rw-r--r--subprojects/logic/src/main/java/tools/refinery/logic/term/uppercardinality/UpperCardinalitySumAggregator.java12
-rw-r--r--subprojects/store-query-interpreter/src/test/java/tools/refinery/store/query/interpreter/AggregatorBatchingTest.java2
9 files changed, 39 insertions, 8 deletions
diff --git a/subprojects/logic/src/main/java/tools/refinery/logic/term/Aggregator.java b/subprojects/logic/src/main/java/tools/refinery/logic/term/Aggregator.java
index 40189ebc..d99904fd 100644
--- a/subprojects/logic/src/main/java/tools/refinery/logic/term/Aggregator.java
+++ b/subprojects/logic/src/main/java/tools/refinery/logic/term/Aggregator.java
@@ -5,6 +5,8 @@
5 */ 5 */
6package tools.refinery.logic.term; 6package tools.refinery.logic.term;
7 7
8import org.jetbrains.annotations.NotNull;
9
8import java.util.stream.Stream; 10import java.util.stream.Stream;
9 11
10public interface Aggregator<R, T> { 12public interface Aggregator<R, T> {
@@ -12,7 +14,9 @@ public interface Aggregator<R, T> {
12 14
13 Class<T> getInputType(); 15 Class<T> getInputType();
14 16
17 @NotNull
15 R aggregateStream(Stream<T> stream); 18 R aggregateStream(Stream<T> stream);
16 19
20 @NotNull
17 R getEmptyResult(); 21 R getEmptyResult();
18} 22}
diff --git a/subprojects/logic/src/main/java/tools/refinery/logic/term/ExtremeValueAggregator.java b/subprojects/logic/src/main/java/tools/refinery/logic/term/ExtremeValueAggregator.java
index 31c61b6a..e163bfea 100644
--- a/subprojects/logic/src/main/java/tools/refinery/logic/term/ExtremeValueAggregator.java
+++ b/subprojects/logic/src/main/java/tools/refinery/logic/term/ExtremeValueAggregator.java
@@ -5,6 +5,8 @@
5 */ 5 */
6package tools.refinery.logic.term; 6package tools.refinery.logic.term;
7 7
8import org.jetbrains.annotations.NotNull;
9
8import java.util.Comparator; 10import java.util.Comparator;
9import java.util.Objects; 11import java.util.Objects;
10import java.util.SortedMap; 12import java.util.SortedMap;
@@ -12,14 +14,14 @@ import java.util.TreeMap;
12 14
13public class ExtremeValueAggregator<T> implements StatefulAggregator<T, T> { 15public class ExtremeValueAggregator<T> implements StatefulAggregator<T, T> {
14 private final Class<T> type; 16 private final Class<T> type;
15 private final T emptyResult; 17 private final @NotNull T emptyResult;
16 private final Comparator<T> comparator; 18 private final Comparator<T> comparator;
17 19
18 public ExtremeValueAggregator(Class<T> type, T emptyResult) { 20 public ExtremeValueAggregator(Class<T> type, @NotNull T emptyResult) {
19 this(type, emptyResult, null); 21 this(type, emptyResult, null);
20 } 22 }
21 23
22 public ExtremeValueAggregator(Class<T> type, T emptyResult, Comparator<T> comparator) { 24 public ExtremeValueAggregator(Class<T> type, @NotNull T emptyResult, Comparator<T> comparator) {
23 this.type = type; 25 this.type = type;
24 this.emptyResult = emptyResult; 26 this.emptyResult = emptyResult;
25 this.comparator = comparator; 27 this.comparator = comparator;
@@ -40,6 +42,7 @@ public class ExtremeValueAggregator<T> implements StatefulAggregator<T, T> {
40 return new Aggregate(); 42 return new Aggregate();
41 } 43 }
42 44
45 @NotNull
43 @Override 46 @Override
44 public T getEmptyResult() { 47 public T getEmptyResult() {
45 return emptyResult; 48 return emptyResult;
@@ -85,6 +88,7 @@ public class ExtremeValueAggregator<T> implements StatefulAggregator<T, T> {
85 }); 88 });
86 } 89 }
87 90
91 @NotNull
88 @Override 92 @Override
89 public T getResult() { 93 public T getResult() {
90 return isEmpty() ? emptyResult : values.firstKey(); 94 return isEmpty() ? emptyResult : values.firstKey();
diff --git a/subprojects/logic/src/main/java/tools/refinery/logic/term/StatefulAggregate.java b/subprojects/logic/src/main/java/tools/refinery/logic/term/StatefulAggregate.java
index 75e7ecff..960e8c53 100644
--- a/subprojects/logic/src/main/java/tools/refinery/logic/term/StatefulAggregate.java
+++ b/subprojects/logic/src/main/java/tools/refinery/logic/term/StatefulAggregate.java
@@ -5,11 +5,14 @@
5 */ 5 */
6package tools.refinery.logic.term; 6package tools.refinery.logic.term;
7 7
8import org.jetbrains.annotations.NotNull;
9
8public interface StatefulAggregate<R, T> { 10public interface StatefulAggregate<R, T> {
9 void add(T value); 11 void add(T value);
10 12
11 void remove(T value); 13 void remove(T value);
12 14
15 @NotNull
13 R getResult(); 16 R getResult();
14 17
15 boolean isEmpty(); 18 boolean isEmpty();
diff --git a/subprojects/logic/src/main/java/tools/refinery/logic/term/StatefulAggregator.java b/subprojects/logic/src/main/java/tools/refinery/logic/term/StatefulAggregator.java
index 79d32535..2b9243b7 100644
--- a/subprojects/logic/src/main/java/tools/refinery/logic/term/StatefulAggregator.java
+++ b/subprojects/logic/src/main/java/tools/refinery/logic/term/StatefulAggregator.java
@@ -5,11 +5,14 @@
5 */ 5 */
6package tools.refinery.logic.term; 6package tools.refinery.logic.term;
7 7
8import org.jetbrains.annotations.NotNull;
9
8import java.util.stream.Stream; 10import java.util.stream.Stream;
9 11
10public interface StatefulAggregator<R, T> extends Aggregator<R, T> { 12public interface StatefulAggregator<R, T> extends Aggregator<R, T> {
11 StatefulAggregate<R, T> createEmptyAggregate(); 13 StatefulAggregate<R, T> createEmptyAggregate();
12 14
15 @NotNull
13 @Override 16 @Override
14 default R aggregateStream(Stream<T> stream) { 17 default R aggregateStream(Stream<T> stream) {
15 var accumulator = createEmptyAggregate(); 18 var accumulator = createEmptyAggregate();
@@ -21,6 +24,7 @@ public interface StatefulAggregator<R, T> extends Aggregator<R, T> {
21 return accumulator.getResult(); 24 return accumulator.getResult();
22 } 25 }
23 26
27 @NotNull
24 @Override 28 @Override
25 default R getEmptyResult() { 29 default R getEmptyResult() {
26 return createEmptyAggregate().getResult(); 30 return createEmptyAggregate().getResult();
diff --git a/subprojects/logic/src/main/java/tools/refinery/logic/term/StatelessAggregator.java b/subprojects/logic/src/main/java/tools/refinery/logic/term/StatelessAggregator.java
index 37db262e..e489378b 100644
--- a/subprojects/logic/src/main/java/tools/refinery/logic/term/StatelessAggregator.java
+++ b/subprojects/logic/src/main/java/tools/refinery/logic/term/StatelessAggregator.java
@@ -5,6 +5,8 @@
5 */ 5 */
6package tools.refinery.logic.term; 6package tools.refinery.logic.term;
7 7
8import org.jetbrains.annotations.NotNull;
9
8import java.util.stream.Stream; 10import java.util.stream.Stream;
9 11
10public interface StatelessAggregator<R, T> extends Aggregator<R, T> { 12public interface StatelessAggregator<R, T> extends Aggregator<R, T> {
@@ -12,6 +14,7 @@ public interface StatelessAggregator<R, T> extends Aggregator<R, T> {
12 14
13 R remove(R current, T value); 15 R remove(R current, T value);
14 16
17 @NotNull
15 @Override 18 @Override
16 default R aggregateStream(Stream<T> stream) { 19 default R aggregateStream(Stream<T> stream) {
17 var accumulator = getEmptyResult(); 20 var accumulator = getEmptyResult();
diff --git a/subprojects/logic/src/main/java/tools/refinery/logic/term/int_/IntSumAggregator.java b/subprojects/logic/src/main/java/tools/refinery/logic/term/int_/IntSumAggregator.java
index b42038ab..d4462587 100644
--- a/subprojects/logic/src/main/java/tools/refinery/logic/term/int_/IntSumAggregator.java
+++ b/subprojects/logic/src/main/java/tools/refinery/logic/term/int_/IntSumAggregator.java
@@ -5,8 +5,11 @@
5 */ 5 */
6package tools.refinery.logic.term.int_; 6package tools.refinery.logic.term.int_;
7 7
8import org.jetbrains.annotations.NotNull;
8import tools.refinery.logic.term.StatelessAggregator; 9import tools.refinery.logic.term.StatelessAggregator;
9 10
11// Singleton implementation, since there is only one way to sum integers.
12@SuppressWarnings("squid:S6548")
10public final class IntSumAggregator implements StatelessAggregator<Integer, Integer> { 13public final class IntSumAggregator implements StatelessAggregator<Integer, Integer> {
11 public static final IntSumAggregator INSTANCE = new IntSumAggregator(); 14 public static final IntSumAggregator INSTANCE = new IntSumAggregator();
12 15
@@ -23,6 +26,7 @@ public final class IntSumAggregator implements StatelessAggregator<Integer, Inte
23 return Integer.class; 26 return Integer.class;
24 } 27 }
25 28
29 @NotNull
26 @Override 30 @Override
27 public Integer getEmptyResult() { 31 public Integer getEmptyResult() {
28 return 0; 32 return 0;
diff --git a/subprojects/logic/src/main/java/tools/refinery/logic/term/real/RealSumAggregator.java b/subprojects/logic/src/main/java/tools/refinery/logic/term/real/RealSumAggregator.java
index 4b090188..b6f79270 100644
--- a/subprojects/logic/src/main/java/tools/refinery/logic/term/real/RealSumAggregator.java
+++ b/subprojects/logic/src/main/java/tools/refinery/logic/term/real/RealSumAggregator.java
@@ -5,12 +5,15 @@
5 */ 5 */
6package tools.refinery.logic.term.real; 6package tools.refinery.logic.term.real;
7 7
8import org.jetbrains.annotations.NotNull;
8import tools.refinery.logic.term.StatefulAggregate; 9import tools.refinery.logic.term.StatefulAggregate;
9import tools.refinery.logic.term.StatefulAggregator; 10import tools.refinery.logic.term.StatefulAggregator;
10 11
11import java.util.Map; 12import java.util.Map;
12import java.util.TreeMap; 13import java.util.TreeMap;
13 14
15// Singleton implementation, since there is only one way to sum reals.
16@SuppressWarnings("squid:S6548")
14public final class RealSumAggregator implements StatefulAggregator<Double, Double> { 17public final class RealSumAggregator implements StatefulAggregator<Double, Double> {
15 public static final RealSumAggregator INSTANCE = new RealSumAggregator(); 18 public static final RealSumAggregator INSTANCE = new RealSumAggregator();
16 19
@@ -32,6 +35,7 @@ public final class RealSumAggregator implements StatefulAggregator<Double, Doubl
32 return new Aggregate(); 35 return new Aggregate();
33 } 36 }
34 37
38 @NotNull
35 @Override 39 @Override
36 public Double getEmptyResult() { 40 public Double getEmptyResult() {
37 return 0d; 41 return 0d;
@@ -63,6 +67,7 @@ public final class RealSumAggregator implements StatefulAggregator<Double, Doubl
63 }); 67 });
64 } 68 }
65 69
70 @NotNull
66 @Override 71 @Override
67 public Double getResult() { 72 public Double getResult() {
68 return values.entrySet() 73 return values.entrySet()
diff --git a/subprojects/logic/src/main/java/tools/refinery/logic/term/uppercardinality/UpperCardinalitySumAggregator.java b/subprojects/logic/src/main/java/tools/refinery/logic/term/uppercardinality/UpperCardinalitySumAggregator.java
index 7c45e6ef..846e954b 100644
--- a/subprojects/logic/src/main/java/tools/refinery/logic/term/uppercardinality/UpperCardinalitySumAggregator.java
+++ b/subprojects/logic/src/main/java/tools/refinery/logic/term/uppercardinality/UpperCardinalitySumAggregator.java
@@ -5,10 +5,11 @@
5 */ 5 */
6package tools.refinery.logic.term.uppercardinality; 6package tools.refinery.logic.term.uppercardinality;
7 7
8import org.jetbrains.annotations.NotNull;
8import tools.refinery.logic.term.StatefulAggregate; 9import tools.refinery.logic.term.StatefulAggregate;
9import tools.refinery.logic.term.StatefulAggregator; 10import tools.refinery.logic.term.StatefulAggregator;
10 11
11// Singleton implementation, since there is only one way to aggregate upper cardinalities. 12// Singleton implementation, since there is only one way to sum upper cardinalities.
12@SuppressWarnings("squid:S6548") 13@SuppressWarnings("squid:S6548")
13public class UpperCardinalitySumAggregator implements StatefulAggregator<UpperCardinality, UpperCardinality> { 14public class UpperCardinalitySumAggregator implements StatefulAggregator<UpperCardinality, UpperCardinality> {
14 public static final UpperCardinalitySumAggregator INSTANCE = new UpperCardinalitySumAggregator(); 15 public static final UpperCardinalitySumAggregator INSTANCE = new UpperCardinalitySumAggregator();
@@ -46,8 +47,8 @@ public class UpperCardinalitySumAggregator implements StatefulAggregator<UpperCa
46 47
47 @Override 48 @Override
48 public void add(UpperCardinality value) { 49 public void add(UpperCardinality value) {
49 if (value instanceof FiniteUpperCardinality finiteUpperCardinality) { 50 if (value instanceof FiniteUpperCardinality(var finiteUpperBound)) {
50 sumFiniteUpperBounds += finiteUpperCardinality.finiteUpperBound(); 51 sumFiniteUpperBounds += finiteUpperBound;
51 } else if (value instanceof UnboundedUpperCardinality) { 52 } else if (value instanceof UnboundedUpperCardinality) {
52 countUnbounded += 1; 53 countUnbounded += 1;
53 } else { 54 } else {
@@ -57,8 +58,8 @@ public class UpperCardinalitySumAggregator implements StatefulAggregator<UpperCa
57 58
58 @Override 59 @Override
59 public void remove(UpperCardinality value) { 60 public void remove(UpperCardinality value) {
60 if (value instanceof FiniteUpperCardinality finiteUpperCardinality) { 61 if (value instanceof FiniteUpperCardinality(var finiteUpperBound)) {
61 sumFiniteUpperBounds -= finiteUpperCardinality.finiteUpperBound(); 62 sumFiniteUpperBounds -= finiteUpperBound;
62 } else if (value instanceof UnboundedUpperCardinality) { 63 } else if (value instanceof UnboundedUpperCardinality) {
63 countUnbounded -= 1; 64 countUnbounded -= 1;
64 } else { 65 } else {
@@ -66,6 +67,7 @@ public class UpperCardinalitySumAggregator implements StatefulAggregator<UpperCa
66 } 67 }
67 } 68 }
68 69
70 @NotNull
69 @Override 71 @Override
70 public UpperCardinality getResult() { 72 public UpperCardinality getResult() {
71 return countUnbounded > 0 ? UpperCardinalities.UNBOUNDED : UpperCardinalities.atMost(sumFiniteUpperBounds); 73 return countUnbounded > 0 ? UpperCardinalities.UNBOUNDED : UpperCardinalities.atMost(sumFiniteUpperBounds);
diff --git a/subprojects/store-query-interpreter/src/test/java/tools/refinery/store/query/interpreter/AggregatorBatchingTest.java b/subprojects/store-query-interpreter/src/test/java/tools/refinery/store/query/interpreter/AggregatorBatchingTest.java
index 209d7ac0..0bdd2148 100644
--- a/subprojects/store-query-interpreter/src/test/java/tools/refinery/store/query/interpreter/AggregatorBatchingTest.java
+++ b/subprojects/store-query-interpreter/src/test/java/tools/refinery/store/query/interpreter/AggregatorBatchingTest.java
@@ -5,6 +5,7 @@
5 */ 5 */
6package tools.refinery.store.query.interpreter; 6package tools.refinery.store.query.interpreter;
7 7
8import org.jetbrains.annotations.NotNull;
8import org.junit.jupiter.api.Test; 9import org.junit.jupiter.api.Test;
9import tools.refinery.store.model.Model; 10import tools.refinery.store.model.Model;
10import tools.refinery.store.model.ModelStore; 11import tools.refinery.store.model.ModelStore;
@@ -167,6 +168,7 @@ class AggregatorBatchingTest {
167 sum -= value; 168 sum -= value;
168 } 169 }
169 170
171 @NotNull
170 @Override 172 @Override
171 public Integer getResult() { 173 public Integer getResult() {
172 extractCount++; 174 extractCount++;