diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2019-11-08 15:23:49 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2019-11-08 15:23:49 +0100 |
commit | cdcafc6fc8b4417abab8c72bbce5c503533558ea (patch) | |
tree | ea4b1c1a64da79bf42270d1b59f10ae32013b4d8 /vespajlib/src/main/java/com/yahoo/tensor | |
parent | df287b9364b8088192146df70f5f4814ff6c94c1 (diff) |
Serialize scalar functions with context
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/tensor')
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/tensor/functions/DynamicTensor.java | 35 | ||||
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/tensor/functions/ScalarFunction.java | 22 |
2 files changed, 39 insertions, 18 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/DynamicTensor.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/DynamicTensor.java index 1154f962a6f..b8b644f8b49 100644 --- a/vespajlib/src/main/java/com/yahoo/tensor/functions/DynamicTensor.java +++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/DynamicTensor.java @@ -46,21 +46,28 @@ public abstract class DynamicTensor extends PrimitiveTensorFunction { TensorType type() { return type; } + @Override + public String toString(ToStringContext context) { + return type().toString() + ":" + contentToString(context); + } + + abstract String contentToString(ToStringContext context); + /** Creates a dynamic tensor function. The cell addresses must match the type. */ - public static DynamicTensor from(TensorType type, Map<TensorAddress, Function<EvaluationContext<?> , Double>> cells) { + public static DynamicTensor from(TensorType type, Map<TensorAddress, ScalarFunction> cells) { return new MappedDynamicTensor(type, cells); } /** Creates a dynamic tensor function for a bound, indexed tensor */ - public static DynamicTensor from(TensorType type, List<Function<EvaluationContext<?> , Double>> cells) { + public static DynamicTensor from(TensorType type, List<ScalarFunction> cells) { return new IndexedDynamicTensor(type, cells); } private static class MappedDynamicTensor extends DynamicTensor { - private final ImmutableMap<TensorAddress, Function<EvaluationContext<?> , Double>> cells; + private final ImmutableMap<TensorAddress, ScalarFunction> cells; - MappedDynamicTensor(TensorType type, Map<TensorAddress, Function<EvaluationContext<?> , Double>> cells) { + MappedDynamicTensor(TensorType type, Map<TensorAddress, ScalarFunction> cells) { super(type); this.cells = ImmutableMap.copyOf(cells); } @@ -74,11 +81,7 @@ public abstract class DynamicTensor extends PrimitiveTensorFunction { } @Override - public String toString(ToStringContext context) { - return type().toString() + ":" + contentToString(); - } - - private String contentToString() { + String contentToString(ToStringContext context) { if (type().dimensions().isEmpty()) { if (cells.isEmpty()) return "{}"; return "{" + cells.values().iterator().next() + "}"; @@ -86,7 +89,7 @@ public abstract class DynamicTensor extends PrimitiveTensorFunction { StringBuilder b = new StringBuilder("{"); for (var cell : cells.entrySet()) { - b.append(cell.getKey().toString(type())).append(":").append(cell.getValue()); + b.append(cell.getKey().toString(type())).append(":").append(cell.getValue().toString(context)); b.append(","); } if (b.length() > 1) @@ -100,9 +103,9 @@ public abstract class DynamicTensor extends PrimitiveTensorFunction { private static class IndexedDynamicTensor extends DynamicTensor { - private final List<Function<EvaluationContext<?>, Double>> cells; + private final List<ScalarFunction> cells; - IndexedDynamicTensor(TensorType type, List<Function<EvaluationContext<?> , Double>> cells) { + IndexedDynamicTensor(TensorType type, List<ScalarFunction> cells) { super(type); if ( ! type.dimensions().stream().allMatch(d -> d.type() == TensorType.Dimension.Type.indexedBound)) throw new IllegalArgumentException("A dynamic tensor can only be created from a list if the type has " + @@ -119,11 +122,7 @@ public abstract class DynamicTensor extends PrimitiveTensorFunction { } @Override - public String toString(ToStringContext context) { - return type().toString() + ":" + contentToString(); - } - - private String contentToString() { + String contentToString(ToStringContext context) { if (type().dimensions().isEmpty()) { if (cells.isEmpty()) return "{}"; return "{" + cells.get(0) + "}"; @@ -133,7 +132,7 @@ public abstract class DynamicTensor extends PrimitiveTensorFunction { StringBuilder b = new StringBuilder("{"); for (var cell : cells) { indexes.next(); - b.append(indexes.toAddress().toString(type())).append(":").append(cell); + b.append(indexes.toAddress().toString(type())).append(":").append(cell.toString(context)); b.append(","); } if (b.length() > 1) diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/ScalarFunction.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/ScalarFunction.java new file mode 100644 index 00000000000..c6a244b64df --- /dev/null +++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/ScalarFunction.java @@ -0,0 +1,22 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.tensor.functions; + +import com.yahoo.tensor.evaluation.EvaluationContext; + +import java.util.function.Function; + +/** + * A function which returns a scalar + * + * @author bratseth + */ +public interface ScalarFunction extends Function<EvaluationContext<?>, Double> { + + @Override + Double apply(EvaluationContext<?> context); + + default String toString(ToStringContext context) { + return toString(); + } + +} |