diff options
Diffstat (limited to 'document/src/main/java/com/yahoo/document/json/readers/TensorModifyUpdateReader.java')
-rw-r--r-- | document/src/main/java/com/yahoo/document/json/readers/TensorModifyUpdateReader.java | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/document/src/main/java/com/yahoo/document/json/readers/TensorModifyUpdateReader.java b/document/src/main/java/com/yahoo/document/json/readers/TensorModifyUpdateReader.java index 5fd1c7bbab7..b8937d8b739 100644 --- a/document/src/main/java/com/yahoo/document/json/readers/TensorModifyUpdateReader.java +++ b/document/src/main/java/com/yahoo/document/json/readers/TensorModifyUpdateReader.java @@ -132,20 +132,27 @@ public class TensorModifyUpdateReader { Tensor.Builder tensorBuilder = Tensor.Builder.of(type); readTensorBlocks(buffer, tensorBuilder); - Tensor tensor = tensorBuilder.build(); - + Tensor tensor = convertToSparse(tensorBuilder.build()); validateBounds(tensor, type); return new TensorFieldValue(tensor); } + private static Tensor convertToSparse(Tensor tensor) { + if (tensor.type().dimensions().stream().noneMatch(dimension -> dimension.isIndexed())) return tensor; + Tensor.Builder b = Tensor.Builder.of(TensorModifyUpdate.convertDimensionsToMapped(tensor.type())); + for (Iterator<Tensor.Cell> i = tensor.cellIterator(); i.hasNext(); ) + b.cell(i.next()); + return b.build(); + } + /** Only validate if original type has indexed bound dimensions */ static void validateBounds(Tensor convertedTensor, TensorType originalType) { if (originalType.dimensions().stream().noneMatch(d -> d instanceof TensorType.IndexedBoundDimension)) { return; } - for (Iterator<Tensor.Cell> iter = convertedTensor.cellIterator(); iter.hasNext(); ) { - Tensor.Cell cell = iter.next(); + for (Iterator<Tensor.Cell> cellIterator = convertedTensor.cellIterator(); cellIterator.hasNext(); ) { + Tensor.Cell cell = cellIterator.next(); TensorAddress address = cell.getKey(); for (int i = 0; i < address.size(); ++i) { TensorType.Dimension dim = originalType.dimensions().get(i); |