diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-05-06 16:31:47 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2022-05-06 16:31:47 +0200 |
commit | 1f33495b8170f41f8d4a6a53d17e4471a464a8a0 (patch) | |
tree | 60684760dfb3b510b16b46e789e53f6e8efc3ee0 | |
parent | 719332f44bdb9a6337f62751ef7891d34a60d815 (diff) |
Parse mixed tensor short form
-rw-r--r-- | config-model/src/main/javacc/IntermediateParser.jj | 40 | ||||
-rw-r--r-- | config-model/src/test/java/com/yahoo/vespa/model/search/test/SchemaInfoTestCase.java | 7 |
2 files changed, 37 insertions, 10 deletions
diff --git a/config-model/src/main/javacc/IntermediateParser.jj b/config-model/src/main/javacc/IntermediateParser.jj index 2520101fbc6..57fa9e4142c 100644 --- a/config-model/src/main/javacc/IntermediateParser.jj +++ b/config-model/src/main/javacc/IntermediateParser.jj @@ -39,6 +39,7 @@ import com.yahoo.searchlib.rankingexpression.Reference; import com.yahoo.searchlib.rankingexpression.evaluation.TensorValue; import com.yahoo.searchlib.rankingexpression.evaluation.Value; import com.yahoo.tensor.Tensor; +import com.yahoo.tensor.MixedTensor; import com.yahoo.tensor.TensorType; import com.yahoo.tensor.TensorAddress; @@ -2476,7 +2477,7 @@ Tensor tensorValue(TensorType type) : Tensor.Builder builder = Tensor.Builder.of(type); } { - ( mappedTensorValue(builder) | indexedTensorValues(new TensorAddress.Builder(TensorType.empty).build(), builder) ) + ( mappedTensorValue(builder) | indexedTensorValues(builder) ) { return builder.build(); } } @@ -2489,19 +2490,35 @@ void mappedTensorValue(Tensor.Builder builder) : {} void mappedTensorBlock(Tensor.Builder builder) : { - TensorAddress address; + TensorAddress mappedAddress; } { - address = tensorAddress(builder.type()) <COLON> (<NL>)* - ( mappedTensorCellValue(address, builder) | indexedTensorValues(address, builder) ) + mappedAddress = tensorAddress(builder.type().mappedSubtype()) <COLON> (<NL>)* + ( mappedTensorCellValue(mappedAddress, builder) | indexedTensorBlockValues(mappedAddress, builder) ) } -void indexedTensorValues(TensorAddress partialAddress, Tensor.Builder builder) : +void indexedTensorBlockValues(TensorAddress sparseAddress, Tensor.Builder builder) : { - List<Double> values = new ArrayList<Double>(); + List<Double> values; } { - "[" ( indexedTensorValue(values) )* ( <COMMA> (<NL>)* indexedTensorValue(values) )* "]" + values = arrayTensorValues() + { + MixedTensor.BoundBuilder boundBuilder = (MixedTensor.BoundBuilder)builder; + double[] arrayValues = new double[values.size()]; + for (int i = 0; i < values.size(); i++ ) { + arrayValues[i] = values.get(i); + } + boundBuilder.block(sparseAddress, arrayValues); + } +} + +void indexedTensorValues(Tensor.Builder builder) : +{ + List<Double> values; +} +{ + values = arrayTensorValues() { for (int i = 0; i < values.size(); i++ ) { TensorAddress.Builder addressBuilder = new TensorAddress.Builder(builder.type()); @@ -2511,6 +2528,15 @@ void indexedTensorValues(TensorAddress partialAddress, Tensor.Builder builder) : } } +List<Double> arrayTensorValues() : +{ + List<Double> values = new ArrayList<Double>(); +} +{ + "[" ( indexedTensorValue(values) )* ( <COMMA> (<NL>)* indexedTensorValue(values) )* "]" + { return values; } +} + void indexedTensorValue(List<Double> values) : { Number value; diff --git a/config-model/src/test/java/com/yahoo/vespa/model/search/test/SchemaInfoTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/search/test/SchemaInfoTestCase.java index fb2e736a79f..91234e9eeb1 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/search/test/SchemaInfoTestCase.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/search/test/SchemaInfoTestCase.java @@ -14,6 +14,7 @@ public class SchemaInfoTestCase { /** Schema-info should contain all schemas, independent of clusters. */ @Test public void requireThatSchemaInfoIsAvailable() { + List.of(1.0,2.0,3.0).toArray(new Double[3]); String inputs = " rank-profile inputs {" + " inputs {" + @@ -23,7 +24,7 @@ public class SchemaInfoTestCase { " query(myDouble2) tensor()" + " query(myMap) tensor(key{}): { label1:1.0,\n \"label2\": 2.0, 'label3': 3.0 }" + " query(myVector) tensor(x[3]):\n\n[1 ,2.0,3]" + - // " query(myMixed) tensor(key{},x[2]): { key1:[-1.0, 1.1], key2: [1,2]}" + + " query(myMixed) tensor(key{},x[2]): { key1:[-1.0, 1.1], key2: [1,2]}" + " }" + " }"; List<String> schemas = List.of("type1", "type2"); @@ -51,14 +52,14 @@ public class SchemaInfoTestCase { tester.assertRankProfile(schema, 5, "rankfeatures", false, true); var inputs = tester.assertRankProfile(schema, 6, "inputs", false, false); - assertEquals(6, inputs.input().size()); + assertEquals(7, inputs.input().size()); assertInput("query(foo)", "tensor<float>(x[10])", inputs.input(0)); assertInput("query(bar)", "tensor(key{},x[1000])", inputs.input(1)); assertInput("query(myDouble1)", "tensor()", inputs.input(2)); assertInput("query(myDouble2)", "tensor()", inputs.input(3)); assertInput("query(myMap)", "tensor(key{})", inputs.input(4)); assertInput("query(myVector)", "tensor(x[3])", inputs.input(5)); - // assertInput("query(myMixed)", "tensor(key{},x[2])", inputs.input(5)); + assertInput("query(myMixed)", "tensor(key{},x[2])", inputs.input(6)); assertEquals(2, schema.summaryclass().size()); assertEquals("default", schema.summaryclass(0).name()); |