diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-10-27 09:59:51 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-10-27 09:59:51 +0200 |
commit | bcb6b8dc4b68657c3474f4f878e8f8f7409469c9 (patch) | |
tree | c40ce3d76e995b0101b98987535bf5402d28f8b2 | |
parent | 69e4b41cd83b8cd3f0a12a41f15691e8acf7ff87 (diff) |
Working translation
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()); + } + +} |