summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2019-04-04 08:49:06 +0200
committerGitHub <noreply@github.com>2019-04-04 08:49:06 +0200
commitf6e6d076a237bc5d08cf618a8caa2a683b3c78e6 (patch)
tree001e4d544e7e8354c163a44f8eb5c8d4e4e497d9 /searchlib
parentc8c842d622eb744504fe0b7b15044602b85ec0ee (diff)
parent8c23296c0feb1c418706f847c7b78ae926180859 (diff)
Merge pull request #9003 from vespa-engine/bratseth/tensor-value-type
Bratseth/tensor value type
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/abi-spec.json1
-rwxr-xr-xsearchlib/src/main/javacc/RankingExpressionParser.jj14
-rw-r--r--searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java2
-rw-r--r--searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTester.java2
4 files changed, 17 insertions, 2 deletions
diff --git a/searchlib/abi-spec.json b/searchlib/abi-spec.json
index 79c633b9617..b8c51f4e33d 100644
--- a/searchlib/abi-spec.json
+++ b/searchlib/abi-spec.json
@@ -886,6 +886,7 @@
"public final com.yahoo.searchlib.rankingexpression.rule.LambdaFunctionNode lambdaFunction()",
"public final com.yahoo.tensor.functions.Reduce$Aggregator tensorReduceAggregator()",
"public final com.yahoo.tensor.TensorType tensorTypeArgument()",
+ "public final com.yahoo.tensor.TensorType$Value optionalTensorValueTypeParameter()",
"public final void tensorTypeDimension(com.yahoo.tensor.TensorType$Builder)",
"public final java.lang.String tensorFunctionName()",
"public final com.yahoo.searchlib.rankingexpression.rule.Function unaryFunctionName()",
diff --git a/searchlib/src/main/javacc/RankingExpressionParser.jj b/searchlib/src/main/javacc/RankingExpressionParser.jj
index 2f173ad0266..c83de4ced0a 100755
--- a/searchlib/src/main/javacc/RankingExpressionParser.jj
+++ b/searchlib/src/main/javacc/RankingExpressionParser.jj
@@ -598,9 +598,12 @@ Reduce.Aggregator tensorReduceAggregator() :
TensorType tensorTypeArgument() :
{
- TensorType.Builder builder = new TensorType.Builder();
+ TensorType.Builder builder;
+ TensorType.Value valueType;
}
{
+ valueType = optionalTensorValueTypeParameter()
+ { builder = new TensorType.Builder(valueType); }
<LBRACE>
( tensorTypeDimension(builder) ) ?
( <COMMA> tensorTypeDimension(builder) ) *
@@ -608,6 +611,15 @@ TensorType tensorTypeArgument() :
{ return builder.build(); }
}
+TensorType.Value optionalTensorValueTypeParameter() :
+{
+ String valueType = "double";
+}
+{
+ ( <LT> valueType = identifier() <GT> )?
+ { return TensorTypeParser.toValueType(valueType); }
+}
+
// NOTE: Only indexed bound dimensions are parsed currently, as that is what we need
void tensorTypeDimension(TensorType.Builder builder) :
{
diff --git a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java
index f2122bb5da9..f7e38862883 100644
--- a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java
+++ b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java
@@ -238,6 +238,8 @@ public class EvaluationTestCase {
"{{x:0}:1}", "{}", "{{y:0,z:0}:1}");
tester.assertEvaluates("tensor(x{}):{}",
"tensor0 * tensor1", "{ {x:0}:3 }", "tensor(x{}):{ {x:1}:5 }");
+ tester.assertEvaluates("tensor<float>(x{}):{}",
+ "tensor0 * tensor1", "{ {x:0}:3 }", "tensor<float>(x{}):{ {x:1}:5 }");
tester.assertEvaluates("{ {x:0}:15 }",
"tensor0 * tensor1", "{ {x:0}:3 }", "{ {x:0}:5 }");
tester.assertEvaluates("{ {x:0,y:0}:15 }",
diff --git a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTester.java b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTester.java
index ba0db4de5e1..488930a8eb9 100644
--- a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTester.java
+++ b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTester.java
@@ -40,7 +40,7 @@ public class EvaluationTester {
int argumentIndex = 0;
for (String argumentString : tensorArgumentStrings) {
Tensor argument;
- if (argumentString.startsWith("tensor(")) // explicitly decided type
+ if (argumentString.startsWith("tensor")) // explicitly decided type
argument = Tensor.from(argumentString);
else // use mappedTensors+dimensions in tensor to decide type
argument = Tensor.from(typeFrom(argumentString, mappedTensors), argumentString);