diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2019-12-16 09:49:05 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2019-12-16 09:49:05 +0100 |
commit | 45992cec4b915513372b1d8e777e505aaee3f4a1 (patch) | |
tree | 17642d76df3a1c0b78465c92c7097cb2ca99957b | |
parent | 8456f802f14447fa4d93154eb0945bc7867686a4 (diff) |
Expression parse mapped 1-d tensor short form
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 |