diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-12-13 21:25:04 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-13 21:25:04 +0100 |
commit | d976f82207c09b3215661e1d034ae9a42f28a63d (patch) | |
tree | 2d301a94e4326e1b9493f77a8b4419073de6a379 /vespajlib/src | |
parent | 4f48e420144ab7288fe45406bd4d1ea69de6eecb (diff) |
Revert "add parsing of special strings for inf/nan cell values"
Diffstat (limited to 'vespajlib/src')
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/tensor/serialization/JsonFormat.java | 41 | ||||
-rw-r--r-- | vespajlib/src/test/java/com/yahoo/tensor/serialization/JsonFormatTestCase.java | 47 |
2 files changed, 8 insertions, 80 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/serialization/JsonFormat.java b/vespajlib/src/main/java/com/yahoo/tensor/serialization/JsonFormat.java index 8cf36cbd038..28f14c8d7ca 100644 --- a/vespajlib/src/main/java/com/yahoo/tensor/serialization/JsonFormat.java +++ b/vespajlib/src/main/java/com/yahoo/tensor/serialization/JsonFormat.java @@ -234,11 +234,10 @@ public class JsonFormat { TensorAddress address = decodeAddress(cell.field("address"), builder.type()); Inspector value = cell.field("value"); - if (value.valid()) { - builder.cell(address, decodeNumeric(value)); - } else { + if (value.type() != Type.LONG && value.type() != Type.DOUBLE) throw new IllegalArgumentException("Excepted a cell to contain a numeric value called 'value'"); - } + + builder.cell(address, value.asDouble()); } private static void decodeSingleDimensionCell(String key, Inspector value, Tensor.Builder builder) { @@ -269,8 +268,8 @@ public class JsonFormat { values.traverse((ArrayTraverser) (__, value) -> { if (value.type() == Type.ARRAY) decodeNestedValues(value, builder, index); - else if (value.type() == Type.LONG || value.type() == Type.DOUBLE || value.type() == Type.STRING || value.type() == Type.NIX) - indexedBuilder.cellByDirectIndex(index.next(), decodeNumeric(value)); + else if (value.type() == Type.LONG || value.type() == Type.DOUBLE) + indexedBuilder.cellByDirectIndex(index.next(), value.asDouble()); else throw new IllegalArgumentException("Excepted the values array to contain numbers or nested arrays, not " + value.type()); }); @@ -447,33 +446,9 @@ public class JsonFormat { } private static double decodeNumeric(Inspector numericField) { - if (numericField.type() == Type.DOUBLE || numericField.type() == Type.LONG) { - return numericField.asDouble(); - } - if (numericField.type() == Type.STRING) { - return decodeNumberString(numericField.asString()); - } - if (numericField.type() == Type.NIX) { - return Double.NaN; - } - throw new IllegalArgumentException("Excepted a number, not " + numericField.type()); - } - - public static double decodeNumberString(String input) { - String s = input.toLowerCase(); - if (s.equals("infinity") || s.equals("+infinity") || s.equals("inf") || s.equals("+inf")) { - return Double.POSITIVE_INFINITY; - } - if (s.equals("-infinity") || s.equals("-inf")) { - return Double.NEGATIVE_INFINITY; - } - if (s.equals("nan") || s.equals("+nan")) { - return Double.NaN; - } - if (s.equals("-nan")) { - return Math.copySign(Double.NaN, -1.0); // or Double.longBitsToDouble(0xfff8000000000000L); - } - throw new NumberFormatException("Excepted a number, got string '" + input + "'"); + if (numericField.type() != Type.LONG && numericField.type() != Type.DOUBLE) + throw new IllegalArgumentException("Excepted a number, not " + numericField.type()); + return numericField.asDouble(); } } diff --git a/vespajlib/src/test/java/com/yahoo/tensor/serialization/JsonFormatTestCase.java b/vespajlib/src/test/java/com/yahoo/tensor/serialization/JsonFormatTestCase.java index 52f44f0ac42..d95396aca50 100644 --- a/vespajlib/src/test/java/com/yahoo/tensor/serialization/JsonFormatTestCase.java +++ b/vespajlib/src/test/java/com/yahoo/tensor/serialization/JsonFormatTestCase.java @@ -669,53 +669,6 @@ public class JsonFormatTestCase { "{\"type\":\"tensor<float>(x[1])\",\"values\":[0.3333333432674408]}"); } - @Test - public void testSpecialNumberStrings() { - assertEquals(Double.POSITIVE_INFINITY, JsonFormat.decodeNumberString("Infinity"), 0.0); - assertEquals(Double.POSITIVE_INFINITY, JsonFormat.decodeNumberString("+Infinity"), 0.0); - assertEquals(Double.POSITIVE_INFINITY, JsonFormat.decodeNumberString("Inf"), 0.0); - assertEquals(Double.POSITIVE_INFINITY, JsonFormat.decodeNumberString("+Inf"), 0.0); - assertEquals(Double.POSITIVE_INFINITY, JsonFormat.decodeNumberString("infinity"), 0.0); - assertEquals(Double.NEGATIVE_INFINITY, JsonFormat.decodeNumberString("-Infinity"), 0.0); - assertEquals(Double.NEGATIVE_INFINITY, JsonFormat.decodeNumberString("-Inf"), 0.0); - assertEquals(Double.NEGATIVE_INFINITY, JsonFormat.decodeNumberString("-infinity"), 0.0); - assertEquals(Double.NEGATIVE_INFINITY, JsonFormat.decodeNumberString("-inf"), 0.0); - assertEquals(0x7FF8000000000000L, Double.doubleToRawLongBits(JsonFormat.decodeNumberString("nan"))); - assertEquals(0x7FF8000000000000L, Double.doubleToRawLongBits(JsonFormat.decodeNumberString("NaN"))); - assertEquals(0x7FF8000000000000L, Double.doubleToRawLongBits(JsonFormat.decodeNumberString("+NaN"))); - assertEquals(0xFFF8000000000000L, Double.doubleToRawLongBits(JsonFormat.decodeNumberString("-nan"))); - assertEquals(0xFFF8000000000000L, Double.doubleToRawLongBits(JsonFormat.decodeNumberString("-NaN"))); - } - - @Test - public void testWithNanVariants() { - TensorType x3 = TensorType.fromSpec("tensor(x[3])"); - String json = "{\"cells\":[" + - "{\"address\":{\"x\":\"0\"},\"value\":\"nan\"}," + - "{\"address\":{\"x\":\"1\"},\"value\":null}," + - "{\"address\":{\"x\":\"2\"},\"value\":\"+NaN\"}" + - "]}"; - var t = JsonFormat.decode(x3, json.getBytes(StandardCharsets.UTF_8)); - checkThreeNans(t); - json = "['nan', null, '+NaN']"; - t = JsonFormat.decode(x3, json.getBytes(StandardCharsets.UTF_8)); - checkThreeNans(t); - json = "{'type':'tensor(x[3])','values':['nan', null, '+NaN']}"; - t = JsonFormat.decode(x3, json.getBytes(StandardCharsets.UTF_8)); - checkThreeNans(t); - } - - private void checkThreeNans(Tensor t) { - final Double nan = Double.NaN; - int cnt = 0; - for (var iter = t.cellIterator(); iter.hasNext(); ) { - var cell = iter.next(); - assertEquals(nan, cell.getValue()); - ++cnt; - } - assertEquals(3, cnt); - } - private void assertEncodeShortForm(String tensor, String expected) { assertEncodeShortForm(Tensor.from(tensor), expected); } |