summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2019-12-16 09:49:05 +0100
committerJon Bratseth <bratseth@verizonmedia.com>2019-12-16 09:49:05 +0100
commit45992cec4b915513372b1d8e777e505aaee3f4a1 (patch)
tree17642d76df3a1c0b78465c92c7097cb2ca99957b
parent8456f802f14447fa4d93154eb0945bc7867686a4 (diff)
Expression parse mapped 1-d tensor short form
-rw-r--r--searchlib/abi-spec.json2
-rwxr-xr-xsearchlib/src/main/javacc/RankingExpressionParser.jj19
-rw-r--r--searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java1
3 files changed, 20 insertions, 2 deletions
diff --git a/searchlib/abi-spec.json b/searchlib/abi-spec.json
index 5889f4844af..bde3b6abb6c 100644
--- a/searchlib/abi-spec.json
+++ b/searchlib/abi-spec.json
@@ -914,6 +914,8 @@
"public final com.yahoo.tensor.functions.DynamicTensor mappedTensorValueBody(com.yahoo.tensor.TensorType)",
"public final com.yahoo.tensor.functions.DynamicTensor mixedTensorValueBody(com.yahoo.tensor.TensorType, java.util.List)",
"public final com.yahoo.tensor.functions.DynamicTensor indexedTensorValueBody(com.yahoo.tensor.TensorType, java.util.List)",
+ "public final void keyValueOrMixedBlock(com.yahoo.tensor.TensorType, java.util.List, java.util.Map)",
+ "public final void keyValue(com.yahoo.tensor.TensorType, java.util.Map)",
"public final void mixedBlock(com.yahoo.tensor.TensorType, java.util.List, java.util.Map)",
"public final java.util.List indexedTensorCells()",
"public final void indexedTensorCellSubspaceList(java.util.List)",
diff --git a/searchlib/src/main/javacc/RankingExpressionParser.jj b/searchlib/src/main/javacc/RankingExpressionParser.jj
index 1bfb13cff6f..e413e398183 100755
--- a/searchlib/src/main/javacc/RankingExpressionParser.jj
+++ b/searchlib/src/main/javacc/RankingExpressionParser.jj
@@ -868,8 +868,8 @@ DynamicTensor mixedTensorValueBody(TensorType type, List dimensionOrder) :
}
{
<LCURLY>
- mixedBlock(type, dimensionOrder, cells)
- ( <COMMA> mixedBlock(type, dimensionOrder, cells))*
+ keyValueOrMixedBlock(type, dimensionOrder, cells)
+ ( <COMMA> keyValueOrMixedBlock(type, dimensionOrder, cells))*
<RCURLY>
{ return DynamicTensor.from(type, cells); }
}
@@ -883,6 +883,21 @@ DynamicTensor indexedTensorValueBody(TensorType type, List dimensionOrder) :
{ return DynamicTensor.from(type, TensorFunctionNode.wrapScalars(type, dimensionOrder, cells)); }
}
+void keyValueOrMixedBlock(TensorType type, List dimensionOrder, java.util.Map cellMap) : {}
+{
+ LOOKAHEAD(3) mixedBlock(type, dimensionOrder, cellMap) | keyValue(type, cellMap)
+}
+
+void keyValue(TensorType type, java.util.Map cellMap) :
+{
+ String label;
+ ExpressionNode value;
+}
+{
+ label = tag() <COLON> value = expression()
+ { cellMap.put(TensorAddress.ofLabels(label), TensorFunctionNode.wrapScalar(value)); }
+}
+
void mixedBlock(TensorType type, List dimensionOrder, java.util.Map cellMap) :
{
String label;
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 21127607107..26861dd3cd6 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
@@ -413,6 +413,7 @@ public class EvaluationTestCase {
" key2:[[1.0, 2.0, 3.00],[4.00, 5.0, 6.0]]}",
"tensor(key{},x[2],y[3]):{key1:[[one,one_half,a_quarter],[a_quarter,one_half,one]]," +
" key2:[[1,2,3],[4,5,6]]}");
+ tester.assertEvaluates("tensor(x{}):{{x:a}:1, {x:b}:-2, {x:cee}:0.5}", "tensor(x{}):{a:1, b:-2, cee:one_half}");
// Opposite order in the expression:
// - indexed