aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-10-27 09:59:51 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-10-27 09:59:51 +0200
commitbcb6b8dc4b68657c3474f4f878e8f8f7409469c9 (patch)
treec40ce3d76e995b0101b98987535bf5402d28f8b2
parent69e4b41cd83b8cd3f0a12a41f15691e8acf7ff87 (diff)
Working translation
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/CompositeTensorFunction.java2
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/Constant.java24
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/Join.java5
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/Map.java5
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/PrimitiveTensorFunction.java1
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/Product.java18
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/Reduce.java5
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/TensorFunction.java2
-rw-r--r--vespajlib/src/test/java/com/yahoo/tensor/functions/TensorFunctionTestCase.java23
9 files changed, 83 insertions, 2 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
index fa4a70d264a..23cdc0e6051 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/functions/CompositeTensorFunction.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/CompositeTensorFunction.java
@@ -6,6 +6,6 @@ package com.yahoo.tensor.functions;
*
* @author bratseth
*/
-public abstract class CompositeTensorFunction {
+public abstract class CompositeTensorFunction extends TensorFunction {
}
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/Constant.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/Constant.java
new file mode 100644
index 00000000000..113247be3bb
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/Constant.java
@@ -0,0 +1,24 @@
+package com.yahoo.tensor.functions;
+
+import com.yahoo.tensor.MapTensor;
+
+/**
+ * A function which returns a constant tensor.
+ *
+ * @author bratseth
+ */
+public class Constant extends PrimitiveTensorFunction {
+
+ private final MapTensor constant;
+
+ public Constant(String tensorString) {
+ this.constant = MapTensor.from(tensorString);
+ }
+
+ @Override
+ public PrimitiveTensorFunction toPrimitive() { return this; }
+
+ @Override
+ public String toString() { return constant.toString(); }
+
+}
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/Join.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/Join.java
index 421ea631ee3..4d945963fdf 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/functions/Join.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/Join.java
@@ -26,5 +26,10 @@ public class Join extends PrimitiveTensorFunction {
public PrimitiveTensorFunction toPrimitive() {
return new Join(argumentA.toPrimitive(), argumentB.toPrimitive(), combinator);
}
+
+ @Override
+ public String toString() {
+ return "join(" + argumentA.toString() + ", " + argumentB.toString() + ", lambda(a, b) (...))";
+ }
}
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/Map.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/Map.java
index cb0615693ae..22dd08504d7 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/functions/Map.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/Map.java
@@ -26,4 +26,9 @@ public class Map extends PrimitiveTensorFunction {
return new Map(argument.toPrimitive(), mapper);
}
+ @Override
+ public String toString() {
+ return "map(" + argument.toString() + ", lambda(a) (...))";
+ }
+
}
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/PrimitiveTensorFunction.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/PrimitiveTensorFunction.java
index 1c41990af23..9c0c9abaeb7 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/functions/PrimitiveTensorFunction.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/PrimitiveTensorFunction.java
@@ -3,6 +3,7 @@ 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.
+ * Primitive tensor functions are fully inspectable.
*
* @author bratseth
*/
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/Product.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/Product.java
index a95eea213c7..09038a294ce 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/functions/Product.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/Product.java
@@ -6,4 +6,22 @@ package com.yahoo.tensor.functions;
* @author bratseth
*/
public class Product extends CompositeTensorFunction {
+
+ private final TensorFunction argumentA, argumentB;
+
+ public Product(TensorFunction argumentA, TensorFunction argumentB) {
+ this.argumentA = argumentA;
+ this.argumentB = argumentB;
+ }
+
+ @Override
+ public PrimitiveTensorFunction toPrimitive() {
+ return new Join(argumentA.toPrimitive(), argumentB.toPrimitive(), (a, b) -> a * b);
+ }
+
+ @Override
+ public String toString() {
+ return "product(" + argumentA.toString() + ", " + argumentB.toString() + ")";
+ }
+
}
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/Reduce.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/Reduce.java
index 327234701ad..4b306d376a6 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/functions/Reduce.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/Reduce.java
@@ -30,4 +30,9 @@ public class Reduce extends PrimitiveTensorFunction {
return new Reduce(argument.toPrimitive(), dimension, reductor, postTransformation);
}
+ @Override
+ public String toString() {
+ return "reduce(" + argument.toString() + ", " + dimension + ", lambda(a, b) (...), lambda(a, b) (...))";
+ }
+
}
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/TensorFunction.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/TensorFunction.java
index bce2e237e6a..95fca95a042 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/functions/TensorFunction.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/TensorFunction.java
@@ -1,7 +1,7 @@
package com.yahoo.tensor.functions;
/**
- * An inspectable representation of a tensor function which is able to be translated to a set of primitive
+ * A 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.
*
diff --git a/vespajlib/src/test/java/com/yahoo/tensor/functions/TensorFunctionTestCase.java b/vespajlib/src/test/java/com/yahoo/tensor/functions/TensorFunctionTestCase.java
new file mode 100644
index 00000000000..501397e89bc
--- /dev/null
+++ b/vespajlib/src/test/java/com/yahoo/tensor/functions/TensorFunctionTestCase.java
@@ -0,0 +1,23 @@
+package com.yahoo.tensor.functions;
+
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests translation of composite to primitive tensor function translation.
+ *
+ * @author bratseth
+ */
+public class TensorFunctionTestCase {
+
+ @Test
+ public void testTranslation() {
+ assertTranslated("join({{x:1}:1.0}, {{x:2}:1.0}, lambda(a, b) (...))",
+ new Product(new Constant("{{x:1}:1.0}"), new Constant("{{x:2}:1.0}")));
+ }
+
+ private void assertTranslated(String expectedTranslation, TensorFunction inputFunction) {
+ assertEquals(expectedTranslation, inputFunction.toPrimitive().toString());
+ }
+
+}