diff options
author | Jon Bratseth <bratseth@oath.com> | 2020-01-13 14:40:50 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-13 14:40:50 +0100 |
commit | bb62137368495e880c6b217a49524e193352e2a3 (patch) | |
tree | 4f0790c28543befe4606c0680631aed184daeb91 | |
parent | 2bc80f900585a40d1cfb49f66ee9a4248ecf733b (diff) | |
parent | cf081f8d488eea6adf05c7b384b2175cbf019af7 (diff) |
Merge pull request #11765 from vespa-engine/lesters/revert-revert-resolving-input-types
Lesters/revert revert resolving input types
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java | 19 | ||||
-rw-r--r-- | config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java | 2 |
2 files changed, 15 insertions, 6 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java index 8fad8695e88..2d0998864f1 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java @@ -50,7 +50,7 @@ public class RankingExpressionTypeResolver extends Processor { resolveTypesIn(profile, validate); } catch (IllegalArgumentException e) { - throw new IllegalArgumentException("In " + search + ", " + profile, e); + throw new IllegalArgumentException("In " + (search != null ? search + ", " : "") + profile, e); } } } @@ -63,10 +63,19 @@ public class RankingExpressionTypeResolver extends Processor { private void resolveTypesIn(RankProfile profile, boolean validate) { MapEvaluationTypeContext context = profile.typeContext(queryProfiles); for (Map.Entry<String, RankProfile.RankingExpressionFunction> function : profile.getFunctions().entrySet()) { - if (hasUntypedArguments(function.getValue().function())) continue; - TensorType type = resolveType(function.getValue().function().getBody(), - "function '" + function.getKey() + "'", - context); + ExpressionFunction expressionFunction = function.getValue().function(); + if (hasUntypedArguments(expressionFunction)) continue; + + // Add any missing inputs for type resolution + for (String argument : expressionFunction.arguments()) { + Reference ref = Reference.fromIdentifier(argument); + if (context.getType(ref).equals(TensorType.empty)) { + context.setType(ref, expressionFunction.argumentTypes().get(argument)); + } + } + context.forgetResolvedTypes(); + + TensorType type = resolveType(expressionFunction.getBody(), "function '" + function.getKey() + "'", context); function.getValue().setReturnType(type); } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java b/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java index 77b25489047..3d4ac7f2eeb 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java @@ -154,7 +154,7 @@ public class ModelEvaluationTest { "rankingExpression(imported_ml_function_mnist_saved_dnn_hidden1_add).type: tensor(d3[300])\n" + "rankingExpression(serving_default.y).rankingScript: join(reduce(join(map(join(reduce(join(join(join(rankingExpression(imported_ml_function_mnist_saved_dnn_hidden1_add), 0.009999999776482582, f(a,b)(a * b)), rankingExpression(imported_ml_function_mnist_saved_dnn_hidden1_add), f(a,b)(max(a,b))), constant(mnist_saved_dnn_hidden2_weights_read), f(a,b)(a * b)), sum, d3), constant(mnist_saved_dnn_hidden2_bias_read), f(a,b)(a + b)), f(a)(1.0507009873554805 * if (a >= 0, a, 1.6732632423543772 * (exp(a) - 1)))), constant(mnist_saved_dnn_outputs_weights_read), f(a,b)(a * b)), sum, d2), constant(mnist_saved_dnn_outputs_bias_read), f(a,b)(a + b))\n" + "rankingExpression(serving_default.y).input.type: tensor(d0[],d1[784])\n" + - "rankingExpression(serving_default.y).type: tensor(d1[10])\n"; + "rankingExpression(serving_default.y).type: tensor(d0[],d1[10])\n"; private RankProfilesConfig.Rankprofile.Fef findProfile(String name, RankProfilesConfig config) { for (RankProfilesConfig.Rankprofile profile : config.rankprofile()) { |