public TensorFunction<NAMETYPE> withTransformedFunctions(
            Function<ScalarFunction<NAMETYPE>, ScalarFunction<NAMETYPE>> transformer)
    {
        List<DimensionValue<NAMETYPE>> transformedAddress = new ArrayList<>();
        for (var orig : subspaceAddress) {
            var idxFun = orig.index();
            if (idxFun.isPresent()) {
                var transformed = transformer.apply(idxFun.get());
                transformedAddress.add(new DimensionValue<NAMETYPE>(orig.dimension(), transformed));
            } else {
                transformedAddress.add(orig);
            }
        }
        return new Slice<>(argument, transformedAddress);
    }
Creates a value function

@param argument the tensor to return a cell value from
@param subspaceAddress a description of the address of the cell to return the value of. This is not a TensorAddress
                       because those require a type, but a type is not resolved until this is evaluated
vespajlib/src/main/java/com/yahoo/tensor/functions/Slice.java