summaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main/java/com/yahoo/tensor/TensorParser.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2020-01-03 11:01:02 +0100
committerJon Bratseth <bratseth@verizonmedia.com>2020-01-03 11:01:02 +0100
commitfcaf3de39b725ece9d57e3c764bf0fae36206d5d (patch)
tree4f424b7a35507da40263211a8e0aa476a6d3dc52 /vespajlib/src/main/java/com/yahoo/tensor/TensorParser.java
parent869e9e83274e037cae548ac5eb3c72881e90859a (diff)
More tensor short forms in Tensor.toString()
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/tensor/TensorParser.java')
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/TensorParser.java13
1 files changed, 11 insertions, 2 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/TensorParser.java b/vespajlib/src/main/java/com/yahoo/tensor/TensorParser.java
index 9aa764a0b36..becec1a4493 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/TensorParser.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/TensorParser.java
@@ -99,7 +99,7 @@ class TensorParser {
if (type.isEmpty())
throw new IllegalArgumentException("The mixed tensor form requires an explicit tensor type " +
"on the form 'tensor(dimensions):...");
- if (type.get().dimensions().stream().filter(d -> ! d.isIndexed()).count() != 1)
+ if (type.get().dimensions().stream().filter(d -> ! d.isIndexed()).count() > 1)
throw new IllegalArgumentException("The mixed tensor form requires a type with a single mapped dimension, " +
"but got " + type.get());
@@ -310,7 +310,7 @@ class TensorParser {
}
private void parse() {
- TensorType.Dimension mappedDimension = builder.type().dimensions().stream().filter(d -> ! d.isIndexed()).findAny().get();
+ TensorType.Dimension mappedDimension = findMappedDimension();
TensorType mappedSubtype = MixedTensor.createPartialType(builder.type().valueType(), List.of(mappedDimension));
if (dimensionOrder != null)
dimensionOrder.remove(mappedDimension.name());
@@ -332,6 +332,15 @@ class TensorParser {
}
}
+ private TensorType.Dimension findMappedDimension() {
+ Optional<TensorType.Dimension> mappedDimension = builder.type().dimensions().stream().filter(d -> d.isMapped()).findAny();
+ if (mappedDimension.isPresent()) return mappedDimension.get();
+ if (builder.type().rank() == 1 && builder.type().dimensions().get(0).size().isEmpty())
+ return builder.type().dimensions().get(0);
+ throw new IllegalStateException("No suitable dimension in " + builder.type() +
+ " for parsing as a mixed tensor. This is a bug.");
+ }
+
private void parseDenseSubspace(TensorAddress mappedAddress, List<String> denseDimensionOrder) {
DenseValueParser denseParser = new DenseValueParser(string.substring(position),
denseDimensionOrder,