diff options
author | Arne Juul <arnej@yahooinc.com> | 2023-11-30 13:48:01 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahooinc.com> | 2023-12-11 08:47:15 +0000 |
commit | 055b84652f6a0c9b517c76588c145d92216f6e02 (patch) | |
tree | 635c1763de83261409293d6ae9edb8fc03e9a51d /config-model/src/main | |
parent | 18e3fb5c91e9e40d46fccc1b8988c445f27ec19e (diff) |
add parsing of special strings for inf/nan cell values
Diffstat (limited to 'config-model/src/main')
-rw-r--r-- | config-model/src/main/java/com/yahoo/vespa/model/application/validation/ConstantTensorJsonValidator.java | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ConstantTensorJsonValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ConstantTensorJsonValidator.java index fcb99215565..c41c6e59a4f 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ConstantTensorJsonValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ConstantTensorJsonValidator.java @@ -7,6 +7,8 @@ import com.fasterxml.jackson.core.JsonToken; import com.google.common.base.Joiner; import com.yahoo.tensor.TensorType; +import static com.yahoo.tensor.serialization.JsonFormat.decodeNumberString; + import java.io.IOException; import java.io.Reader; import java.util.ArrayList; @@ -282,9 +284,19 @@ public class ConstantTensorJsonValidator { } private void validateNumeric(String where, JsonToken token) throws IOException { - if (token != JsonToken.VALUE_NUMBER_FLOAT && token != JsonToken.VALUE_NUMBER_INT) { - throw new InvalidConstantTensorException(parser, String.format("Inside '%s': cell value is not a number (%s)", where, token.toString())); + if (token == JsonToken.VALUE_NUMBER_FLOAT || token == JsonToken.VALUE_NUMBER_INT) { + return; // ok + } + if (token == JsonToken.VALUE_STRING) { + String input = parser.getValueAsString(); + try { + double d = decodeNumberString(input); + return; + } catch (NumberFormatException e) { + throw new InvalidConstantTensorException(parser, String.format("Inside '%s': %s", where, e.getMessage())); + } } + throw new InvalidConstantTensorException(parser, String.format("Inside '%s': cell value is not a number (%s)", where, token.toString())); } private void assertCurrentTokenIs(JsonToken wantedToken) { |