aboutsummaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main/java/com/yahoo/tensor/functions
diff options
context:
space:
mode:
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/tensor/functions')
-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
7 files changed, 142 insertions, 0 deletions
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();
+
+}