aboutsummaryrefslogtreecommitdiffstats
path: root/vespajlib
diff options
context:
space:
mode:
Diffstat (limited to 'vespajlib')
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/Tensor.java20
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/CompositeTensorFunction.java11
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/Join.java30
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/Map.java29
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/PrimitiveTensorFunction.java10
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/Product.java9
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/Reduce.java33
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/TensorFunction.java20
8 files changed, 162 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/Tensor.java b/vespajlib/src/main/java/com/yahoo/tensor/Tensor.java
index 89847228b31..41882738e89 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/Tensor.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/Tensor.java
@@ -8,7 +8,11 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
+import java.util.function.DoubleBinaryOperator;
+import java.util.function.DoubleFunction;
+import java.util.function.DoubleUnaryOperator;
import java.util.function.UnaryOperator;
/**
@@ -44,7 +48,23 @@ public interface Tensor {
/** Returns the value of a cell, or NaN if this cell does not exist/have no value */
double get(TensorAddress address);
+
+ // ----------------- Level 0 functions
+
+ default Tensor map(Tensor tensor, DoubleUnaryOperator mapper) {
+ throw new UnsupportedOperationException("Not implemented");
+ }
+
+ default Tensor reduce(Tensor tensor, String dimension,
+ DoubleBinaryOperator reductor, Optional<DoubleBinaryOperator> postTransformation) {
+ throw new UnsupportedOperationException("Not implemented");
+ }
+
+ default Tensor join(Tensor tensorA, Tensor tensorB, DoubleBinaryOperator combinator) {
+ throw new UnsupportedOperationException("Not implemented");
+ }
+ // ----------------- Old stuff
/**
* Returns the <i>sparse tensor product</i> of this tensor and the argument tensor.
* This is the all-to-all combinations of cells in the argument tenors, except the combinations
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/CompositeTensorFunction.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/CompositeTensorFunction.java
new file mode 100644
index 00000000000..fa4a70d264a
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/CompositeTensorFunction.java
@@ -0,0 +1,11 @@
+package com.yahoo.tensor.functions;
+
+/**
+ * A composite tensor function is a tensor function which can be expressed (less tersely)
+ * as a tree of primitive tensor functions.
+ *
+ * @author bratseth
+ */
+public abstract class CompositeTensorFunction {
+
+}
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/Join.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/Join.java
new file mode 100644
index 00000000000..421ea631ee3
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/Join.java
@@ -0,0 +1,30 @@
+package com.yahoo.tensor.functions;
+
+import java.util.function.DoubleBinaryOperator;
+
+/**
+ * The join tensor function.
+ *
+ * @author bratseth
+ */
+public class Join extends PrimitiveTensorFunction {
+
+ private final TensorFunction argumentA, argumentB;
+ private final DoubleBinaryOperator combinator;
+
+ public Join(TensorFunction argumentA, TensorFunction argumentB, DoubleBinaryOperator combinator) {
+ this.argumentA = argumentA;
+ this.argumentB = argumentB;
+ this.combinator = combinator;
+ }
+
+ public TensorFunction argumentA() { return argumentA; }
+ public TensorFunction argumentB() { return argumentB; }
+ public DoubleBinaryOperator combinator() { return combinator; }
+
+ @Override
+ public PrimitiveTensorFunction toPrimitive() {
+ return new Join(argumentA.toPrimitive(), argumentB.toPrimitive(), combinator);
+ }
+
+}
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/Map.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/Map.java
new file mode 100644
index 00000000000..cb0615693ae
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/Map.java
@@ -0,0 +1,29 @@
+package com.yahoo.tensor.functions;
+
+import java.util.function.DoubleBinaryOperator;
+import java.util.function.DoubleUnaryOperator;
+
+/**
+ * The join tensor function.
+ *
+ * @author bratseth
+ */
+public class Map extends PrimitiveTensorFunction {
+
+ private final TensorFunction argument;
+ private final DoubleUnaryOperator mapper;
+
+ public Map(TensorFunction argument, DoubleUnaryOperator mapper) {
+ this.argument = argument;
+ this.mapper = mapper;
+ }
+
+ public TensorFunction argument() { return argument; }
+ public DoubleUnaryOperator mapper() { return mapper; }
+
+ @Override
+ public PrimitiveTensorFunction toPrimitive() {
+ return new Map(argument.toPrimitive(), mapper);
+ }
+
+}
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/PrimitiveTensorFunction.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/PrimitiveTensorFunction.java
new file mode 100644
index 00000000000..1c41990af23
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/PrimitiveTensorFunction.java
@@ -0,0 +1,10 @@
+package com.yahoo.tensor.functions;
+
+/**
+ * A primitive tensor function is a tensor function which cannot be expressed in terms of other tensor functions.
+ * All tensor implementations must implement all primitive tensor functions.
+ *
+ * @author bratseth
+ */
+public abstract class PrimitiveTensorFunction extends TensorFunction {
+}
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/Product.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/Product.java
new file mode 100644
index 00000000000..a95eea213c7
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/Product.java
@@ -0,0 +1,9 @@
+package com.yahoo.tensor.functions;
+
+/**
+ * The product tensor function
+ *
+ * @author bratseth
+ */
+public class Product extends CompositeTensorFunction {
+}
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/Reduce.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/Reduce.java
new file mode 100644
index 00000000000..327234701ad
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/Reduce.java
@@ -0,0 +1,33 @@
+package com.yahoo.tensor.functions;
+
+import java.util.Optional;
+import java.util.function.DoubleBinaryOperator;
+
+/**
+ * The reduce tensor function.
+ *
+ * @author bratseth
+ */
+public class Reduce extends PrimitiveTensorFunction {
+
+ private final TensorFunction argument;
+ private final String dimension;
+ private final DoubleBinaryOperator reductor;
+ private final Optional<DoubleBinaryOperator> postTransformation;
+
+ public Reduce(TensorFunction argument, String dimension,
+ DoubleBinaryOperator reductor, Optional<DoubleBinaryOperator> postTransformation) {
+ this.argument = argument;
+ this.dimension = dimension;
+ this.reductor = reductor;
+ this.postTransformation = postTransformation;
+ }
+
+ public TensorFunction argument() { return argument; }
+
+ @Override
+ public PrimitiveTensorFunction toPrimitive() {
+ return new Reduce(argument.toPrimitive(), dimension, reductor, postTransformation);
+ }
+
+}
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/TensorFunction.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/TensorFunction.java
new file mode 100644
index 00000000000..bce2e237e6a
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/TensorFunction.java
@@ -0,0 +1,20 @@
+package com.yahoo.tensor.functions;
+
+/**
+ * An inspectable representation of a tensor function which is able to be translated to a set of primitive
+ * tensor functions if necessary.
+ * All tensor functions are immutable.
+ *
+ * @author bratseth
+ */
+public abstract class TensorFunction {
+
+ /**
+ * Translate this function - and all of its arguments recursively -
+ * to a tree of primitive functions only.
+ *
+ * @return a tree of primitive functions implementing this
+ */
+ public abstract PrimitiveTensorFunction toPrimitive();
+
+}