diff options
author | Håvard Pettersen <havardpe@oath.com> | 2020-10-16 09:56:34 +0000 |
---|---|---|
committer | Håvard Pettersen <havardpe@oath.com> | 2020-10-16 09:56:34 +0000 |
commit | b2e422bcbee8c094475d125398a5338a9ea3eadd (patch) | |
tree | c9073b64385d2acd9423ef9d35dcc4504fd73946 /eval | |
parent | 8572a7438a8e2718aa065ecb9b7ced7b865d1e6f (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.cpp | 6 | ||||
-rw-r--r-- | eval/src/vespa/eval/instruction/generic_reduce.cpp | 6 |
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); |