aboutsummaryrefslogtreecommitdiffstats
path: root/eval
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2020-10-16 09:56:34 +0000
committerHåvard Pettersen <havardpe@oath.com>2020-10-16 09:56:34 +0000
commitb2e422bcbee8c094475d125398a5338a9ea3eadd (patch)
treec9073b64385d2acd9423ef9d35dcc4504fd73946 /eval
parent8572a7438a8e2718aa065ecb9b7ced7b865d1e6f (diff)
reduce empty mixed to dense must add cells with default value
Diffstat (limited to 'eval')
-rw-r--r--eval/src/tests/instruction/generic_reduce/generic_reduce_test.cpp6
-rw-r--r--eval/src/vespa/eval/instruction/generic_reduce.cpp6
2 files changed, 11 insertions, 1 deletions
diff --git a/eval/src/tests/instruction/generic_reduce/generic_reduce_test.cpp b/eval/src/tests/instruction/generic_reduce/generic_reduce_test.cpp
index 335e4e46642..1329ad549c5 100644
--- a/eval/src/tests/instruction/generic_reduce/generic_reduce_test.cpp
+++ b/eval/src/tests/instruction/generic_reduce/generic_reduce_test.cpp
@@ -23,6 +23,8 @@ std::vector<Layout> layouts = {
{x(3),y(5),z(7)},
float_cells({x(3),y(5),z(7)}),
{x({"a","b","c"})},
+ {x({})},
+ {x({}),y(10)},
{x({"a","b","c"}),y({"foo","bar"})},
{x({"a","b","c"}),y({"foo","bar"}),z({"i","j","k","l"})},
float_cells({x({"a","b","c"}),y({"foo","bar"}),z({"i","j","k","l"})}),
@@ -55,7 +57,9 @@ TensorSpec reference_reduce(const TensorSpec &a, const std::vector<vespalib::str
for (const auto &my_entry: my_map) {
result.add(my_entry.first, my_entry.second.value()->result());
}
- return result;
+ // use SimpleValue to add implicit cells with default value
+ const auto &factory = SimpleValueBuilderFactory::get();
+ return spec_from_value(*value_from_spec(result, factory));
}
TensorSpec perform_generic_reduce(const TensorSpec &a, const std::vector<vespalib::string> &dims, Aggr aggr) {
diff --git a/eval/src/vespa/eval/instruction/generic_reduce.cpp b/eval/src/vespa/eval/instruction/generic_reduce.cpp
index 412ae56d621..a76ee322759 100644
--- a/eval/src/vespa/eval/instruction/generic_reduce.cpp
+++ b/eval/src/vespa/eval/instruction/generic_reduce.cpp
@@ -117,6 +117,12 @@ void my_generic_reduce_op(State &state, uint64_t param_in) {
};
param.dense_plan.execute_keep(reduce_cells);
}
+ if (sparse.map.empty() && param.sparse_plan.keep_dims.empty()) {
+ auto zero = builder->add_subspace({});
+ for (size_t i = 0; i < zero.size(); ++i) {
+ zero[i] = OCT{};
+ }
+ }
auto &result = state.stash.create<std::unique_ptr<Value>>(builder->build(std::move(builder)));
const Value &result_ref = *(result.get());
state.pop_push(result_ref);