diff options
author | Arne H Juul <arnej27959@users.noreply.github.com> | 2021-02-05 19:29:18 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-05 19:29:18 +0100 |
commit | fbc302824871c911cd5ceb6c6587453cd15a3313 (patch) | |
tree | bbb9ca4ea4af1c543913cff3afc92042aaa02712 | |
parent | ff2ae195a7fc9e42cbdd49412c20a08f77d04763 (diff) | |
parent | 1bcb4ffac595d07c890aea8a03f6752bc251b2ad (diff) |
Merge pull request #16423 from vespa-engine/havardpe/param-repo-adjust-add-options
adjust param repo add options and remove seq_bias
39 files changed, 300 insertions, 366 deletions
diff --git a/eval/src/tests/eval/fast_value/fast_value_test.cpp b/eval/src/tests/eval/fast_value/fast_value_test.cpp index 9d29d8de660..bb268a386ac 100644 --- a/eval/src/tests/eval/fast_value/fast_value_test.cpp +++ b/eval/src/tests/eval/fast_value/fast_value_test.cpp @@ -159,8 +159,8 @@ const std::vector<GenSpec> layouts = { TEST(FastValueBuilderFactoryTest, fast_values_can_be_copied) { auto factory = FastValueBuilderFactory::get(); for (const auto &layout: layouts) { - for (TensorSpec expect : { layout.cpy().cells_float().gen(), - layout.cpy().cells_double().gen() }) + for (TensorSpec expect : { layout.cpy().cells_float(), + layout.cpy().cells_double() }) { std::unique_ptr<Value> value = value_from_spec(expect, factory); std::unique_ptr<Value> copy = factory.copy(*value); diff --git a/eval/src/tests/eval/gen_spec/gen_spec_test.cpp b/eval/src/tests/eval/gen_spec/gen_spec_test.cpp index 9af26e1284d..40fa9424243 100644 --- a/eval/src/tests/eval/gen_spec/gen_spec_test.cpp +++ b/eval/src/tests/eval/gen_spec/gen_spec_test.cpp @@ -57,12 +57,12 @@ TensorSpec scalar_5 = TensorSpec("double").add({}, 5.0); TEST(GenSpecTest, scalar_double) { EXPECT_EQ(GenSpec().gen(), scalar_1); - EXPECT_EQ(GenSpec().seq_bias(5.0).gen(), scalar_5); + EXPECT_EQ(GenSpec(5.0).gen(), scalar_5); } TEST(GenSpecTest, not_scalar_float_just_yet) { EXPECT_EQ(GenSpec().cells_float().gen(), scalar_1); - EXPECT_EQ(GenSpec().cells_float().seq_bias(5.0).gen(), scalar_5); + EXPECT_EQ(GenSpec(5.0).cells_float().gen(), scalar_5); } //----------------------------------------------------------------------------- @@ -228,6 +228,11 @@ TEST(GenSpecTest, generating_inverted_mixed) { EXPECT_EQ(GenSpec().idx("d", 3).map("c", 1).idx("b", 1).map("a", 3).gen(), inverted_mixed); } +TEST(GenSpecTest, gen_spec_can_be_implicitly_converted_to_tensor_spec) { + EXPECT_EQ(GenSpec().map("a", 3).idx("b", 1).map("c", 1).idx("d", 3), basic_mixed); + EXPECT_EQ(GenSpec().idx("d", 3).map("c", 1).idx("b", 1).map("a", 3), inverted_mixed); +} + //----------------------------------------------------------------------------- GTEST_MAIN_RUN_ALL_TESTS() diff --git a/eval/src/tests/eval/simple_value/simple_value_test.cpp b/eval/src/tests/eval/simple_value/simple_value_test.cpp index c1301bf6b1a..f7bda441bfd 100644 --- a/eval/src/tests/eval/simple_value/simple_value_test.cpp +++ b/eval/src/tests/eval/simple_value/simple_value_test.cpp @@ -67,8 +67,8 @@ TensorSpec simple_value_join(const TensorSpec &a, const TensorSpec &b, join_fun_ TEST(SimpleValueTest, simple_values_can_be_converted_from_and_to_tensor_spec) { for (const auto &layout: layouts) { - for (TensorSpec expect : { layout.cpy().cells_float().gen(), - layout.cpy().cells_double().gen() }) + for (TensorSpec expect : { layout.cpy().cells_float(), + layout.cpy().cells_double() }) { std::unique_ptr<Value> value = value_from_spec(expect, SimpleValueBuilderFactory::get()); TensorSpec actual = spec_from_value(*value); @@ -79,8 +79,8 @@ TEST(SimpleValueTest, simple_values_can_be_converted_from_and_to_tensor_spec) { TEST(SimpleValueTest, simple_values_can_be_copied) { for (const auto &layout: layouts) { - for (TensorSpec expect : { layout.cpy().cells_float().gen(), - layout.cpy().cells_double().gen() }) + for (TensorSpec expect : { layout.cpy().cells_float(), + layout.cpy().cells_double() }) { std::unique_ptr<Value> value = value_from_spec(expect, SimpleValueBuilderFactory::get()); std::unique_ptr<Value> copy = SimpleValueBuilderFactory::get().copy(*value); @@ -130,11 +130,11 @@ TEST(SimpleValueTest, new_generic_join_works_for_simple_values) { for (size_t i = 0; i < join_layouts.size(); i += 2) { const auto l = join_layouts[i].cpy().seq(N_16ths); const auto r = join_layouts[i + 1].cpy().seq(N_16ths); - for (TensorSpec lhs : { l.cpy().cells_float().gen(), - l.cpy().cells_double().gen() }) + for (TensorSpec lhs : { l.cpy().cells_float(), + l.cpy().cells_double() }) { - for (TensorSpec rhs : { r.cpy().cells_float().gen(), - r.cpy().cells_double().gen() }) + for (TensorSpec rhs : { r.cpy().cells_float(), + r.cpy().cells_double() }) { for (auto fun: {operation::Add::f, operation::Sub::f, operation::Mul::f, operation::Div::f}) { SCOPED_TRACE(fmt("\n===\nLHS: %s\nRHS: %s\n===\n", lhs.to_string().c_str(), rhs.to_string().c_str())); diff --git a/eval/src/tests/eval/tensor_lambda/tensor_lambda_test.cpp b/eval/src/tests/eval/tensor_lambda/tensor_lambda_test.cpp index dd21b663fa9..4b17e49fa80 100644 --- a/eval/src/tests/eval/tensor_lambda/tensor_lambda_test.cpp +++ b/eval/src/tests/eval/tensor_lambda/tensor_lambda_test.cpp @@ -25,15 +25,15 @@ const ValueBuilderFactory &prod_factory = FastValueBuilderFactory::get(); EvalFixture::ParamRepo make_params() { return EvalFixture::ParamRepo() - .add("a", GenSpec().seq_bias(1).gen()) - .add("b", GenSpec().seq_bias(2).gen()) - .add("x3", GenSpec().idx("x", 3).gen()) - .add("x3f", GenSpec().idx("x", 3).cells_float().gen()) - .add("x3m", GenSpec().map("x", 3).gen()) - .add("x3y5", GenSpec().idx("x", 3).idx("y", 5).gen()) - .add("x3y5f", GenSpec().idx("x", 3).idx("y", 5).cells_float().gen()) - .add("x15", GenSpec().idx("x", 15).gen()) - .add("x15f", GenSpec().idx("x", 15).cells_float().gen()); + .add("a", GenSpec(1)) + .add("b", GenSpec(2)) + .add("x3", GenSpec().idx("x", 3)) + .add("x3f", GenSpec().idx("x", 3).cells_float()) + .add("x3m", GenSpec().map("x", 3)) + .add("x3y5", GenSpec().idx("x", 3).idx("y", 5)) + .add("x3y5f", GenSpec().idx("x", 3).idx("y", 5).cells_float()) + .add("x15", GenSpec().idx("x", 15)) + .add("x15f", GenSpec().idx("x", 15).cells_float()); } EvalFixture::ParamRepo param_repo = make_params(); diff --git a/eval/src/tests/eval/value_codec/value_codec_test.cpp b/eval/src/tests/eval/value_codec/value_codec_test.cpp index 110b58c27de..30de76abb7d 100644 --- a/eval/src/tests/eval/value_codec/value_codec_test.cpp +++ b/eval/src/tests/eval/value_codec/value_codec_test.cpp @@ -32,8 +32,8 @@ const std::vector<GenSpec> layouts = { TEST(ValueCodecTest, simple_values_can_be_converted_from_and_to_tensor_spec) { for (const auto &layout: layouts) { - for (TensorSpec expect : { layout.cpy().cells_float().gen(), - layout.cpy().cells_double().gen() }) + for (TensorSpec expect : { layout.cpy().cells_float(), + layout.cpy().cells_double() }) { std::unique_ptr<Value> value = value_from_spec(expect, factory); TensorSpec actual = spec_from_value(*value); diff --git a/eval/src/tests/instruction/add_trivial_dimension_optimizer/add_trivial_dimension_optimizer_test.cpp b/eval/src/tests/instruction/add_trivial_dimension_optimizer/add_trivial_dimension_optimizer_test.cpp index d2dccfde2fd..3ad6b3ef5dc 100644 --- a/eval/src/tests/instruction/add_trivial_dimension_optimizer/add_trivial_dimension_optimizer_test.cpp +++ b/eval/src/tests/instruction/add_trivial_dimension_optimizer/add_trivial_dimension_optimizer_test.cpp @@ -20,11 +20,11 @@ const ValueBuilderFactory &prod_factory = FastValueBuilderFactory::get(); EvalFixture::ParamRepo make_params() { return EvalFixture::ParamRepo() - .add("x5", GenSpec().idx("x", 5).gen()) - .add("x5f", GenSpec().idx("x", 5).cells_float().gen()) - .add("x5y1", GenSpec().idx("x", 5).idx("y", 1).gen()) - .add("y1z1", GenSpec().idx("y", 5).idx("z", 1).gen()) - .add("x_m", GenSpec().map("x", {"a"}).gen()); + .add("x5", GenSpec().idx("x", 5)) + .add("x5f", GenSpec().idx("x", 5).cells_float()) + .add("x5y1", GenSpec().idx("x", 5).idx("y", 1)) + .add("y1z1", GenSpec().idx("y", 5).idx("z", 1)) + .add("x_m", GenSpec().map("x", {"a"})); } EvalFixture::ParamRepo param_repo = make_params(); diff --git a/eval/src/tests/instruction/dense_dot_product_function/dense_dot_product_function_test.cpp b/eval/src/tests/instruction/dense_dot_product_function/dense_dot_product_function_test.cpp index 5121c587d5b..1b913e41e94 100644 --- a/eval/src/tests/instruction/dense_dot_product_function/dense_dot_product_function_test.cpp +++ b/eval/src/tests/instruction/dense_dot_product_function/dense_dot_product_function_test.cpp @@ -19,7 +19,7 @@ using namespace vespalib::eval::test; const ValueBuilderFactory &prod_factory = FastValueBuilderFactory::get(); TensorSpec makeTensor(size_t numCells, double cellBias) { - return GenSpec().idx("x", numCells).seq_bias(cellBias).gen(); + return GenSpec(cellBias).idx("x", numCells); } const double leftBias = 3.0; @@ -39,7 +39,7 @@ void check_gen_with_result(size_t l, size_t r, double wanted) { param_repo.add("b", makeTensor(r, rightBias)); vespalib::string expr = "reduce(a*b,sum,x)"; EvalFixture evaluator(prod_factory, expr, param_repo, true); - EXPECT_EQUAL(GenSpec().seq_bias(wanted).gen(), evaluator.result()); + EXPECT_EQUAL(GenSpec(wanted), evaluator.result()); EXPECT_EQUAL(evaluator.result(), EvalFixture::ref(expr, param_repo)); auto info = evaluator.find_all<DenseDotProductFunction>(); EXPECT_EQUAL(info.size(), 1u); @@ -87,16 +87,16 @@ TEST("require that dot product with equal sizes is correct") { EvalFixture::ParamRepo make_params() { return EvalFixture::ParamRepo() - .add("v01_x1", GenSpec().idx("x", 1).seq_bias(2.0).gen()) - .add("v02_x3", GenSpec().idx("x", 3).seq_bias(4.0).gen()) - .add("v03_x3", GenSpec().idx("x", 3).seq_bias(5.0).gen()) - .add("v04_y3", GenSpec().idx("y", 3).seq_bias(10).gen()) - .add("v05_x5", GenSpec().idx("x", 5).seq_bias(6.0).gen()) - .add("v06_x5", GenSpec().idx("x", 5).seq_bias(7.0).gen()) - .add("v07_x5f", GenSpec().cells_float().idx("x", 5).seq_bias(7.0).gen()) - .add("v08_x5f", GenSpec().cells_float().idx("x", 5).seq_bias(6.0).gen()) - .add("m01_x3y3", GenSpec().idx("x", 3).idx("y", 3).seq_bias(1.0).gen()) - .add("m02_x3y3", GenSpec().idx("x", 3).idx("y", 3).seq_bias(2.0).gen()); + .add("v01_x1", GenSpec(2.0).idx("x", 1)) + .add("v02_x3", GenSpec(4.0).idx("x", 3)) + .add("v03_x3", GenSpec(5.0).idx("x", 3)) + .add("v04_y3", GenSpec(10).idx("y", 3)) + .add("v05_x5", GenSpec(6.0).idx("x", 5)) + .add("v06_x5", GenSpec(7.0).idx("x", 5)) + .add("v07_x5f", GenSpec(7.0).cells_float().idx("x", 5)) + .add("v08_x5f", GenSpec(6.0).cells_float().idx("x", 5)) + .add("m01_x3y3", GenSpec(1.0).idx("x", 3).idx("y", 3)) + .add("m02_x3y3", GenSpec(2.0).idx("x", 3).idx("y", 3)); } EvalFixture::ParamRepo param_repo = make_params(); diff --git a/eval/src/tests/instruction/dense_inplace_join_function/dense_inplace_join_function_test.cpp b/eval/src/tests/instruction/dense_inplace_join_function/dense_inplace_join_function_test.cpp index a1fea41858c..07e995d091f 100644 --- a/eval/src/tests/instruction/dense_inplace_join_function/dense_inplace_join_function_test.cpp +++ b/eval/src/tests/instruction/dense_inplace_join_function/dense_inplace_join_function_test.cpp @@ -23,21 +23,21 @@ GenSpec::seq_t glb = [] (size_t) noexcept { EvalFixture::ParamRepo make_params() { return EvalFixture::ParamRepo() - .add("con_x5_A", GenSpec().idx("x", 5).seq(glb).gen()) - .add("con_x5_B", GenSpec().idx("x", 5).seq(glb).gen()) - .add("con_x5_C", GenSpec().idx("x", 5).seq(glb).gen()) - .add("con_x5y3_A", GenSpec().idx("x", 5).idx("y", 3).seq(glb).gen()) - .add("con_x5y3_B", GenSpec().idx("x", 5).idx("y", 3).seq(glb).gen()) - .add_mutable("mut_dbl_A", GenSpec().seq_bias(1.5).gen()) - .add_mutable("mut_dbl_B", GenSpec().seq_bias(2.5).gen()) - .add_mutable("mut_x5_A", GenSpec().idx("x", 5).seq(glb).gen()) - .add_mutable("mut_x5_B", GenSpec().idx("x", 5).seq(glb).gen()) - .add_mutable("mut_x5_C", GenSpec().idx("x", 5).seq(glb).gen()) - .add_mutable("mut_x5f_D", GenSpec().cells_float().idx("x", 5).seq(glb).gen()) - .add_mutable("mut_x5f_E", GenSpec().cells_float().idx("x", 5).seq(glb).gen()) - .add_mutable("mut_x5y3_A", GenSpec().idx("x", 5).idx("y", 3).seq(glb).gen()) - .add_mutable("mut_x5y3_B", GenSpec().idx("x", 5).idx("y", 3).seq(glb).gen()) - .add_mutable("mut_x_sparse", GenSpec().map("x", {"a", "b", "c"}).seq(glb).gen()); + .add("con_x5_A", GenSpec().idx("x", 5).seq(glb)) + .add("con_x5_B", GenSpec().idx("x", 5).seq(glb)) + .add("con_x5_C", GenSpec().idx("x", 5).seq(glb)) + .add("con_x5y3_A", GenSpec().idx("x", 5).idx("y", 3).seq(glb)) + .add("con_x5y3_B", GenSpec().idx("x", 5).idx("y", 3).seq(glb)) + .add_mutable("mut_dbl_A", GenSpec(1.5)) + .add_mutable("mut_dbl_B", GenSpec(2.5)) + .add_mutable("mut_x5_A", GenSpec().idx("x", 5).seq(glb)) + .add_mutable("mut_x5_B", GenSpec().idx("x", 5).seq(glb)) + .add_mutable("mut_x5_C", GenSpec().idx("x", 5).seq(glb)) + .add_mutable("mut_x5f_D", GenSpec().cells_float().idx("x", 5).seq(glb)) + .add_mutable("mut_x5f_E", GenSpec().cells_float().idx("x", 5).seq(glb)) + .add_mutable("mut_x5y3_A", GenSpec().idx("x", 5).idx("y", 3).seq(glb)) + .add_mutable("mut_x5y3_B", GenSpec().idx("x", 5).idx("y", 3).seq(glb)) + .add_mutable("mut_x_sparse", GenSpec().map("x", {"a", "b", "c"}).seq(glb)); } EvalFixture::ParamRepo param_repo = make_params(); diff --git a/eval/src/tests/instruction/dense_replace_type_function/dense_replace_type_function_test.cpp b/eval/src/tests/instruction/dense_replace_type_function/dense_replace_type_function_test.cpp index 5dcdbc5bab8..00af70d9136 100644 --- a/eval/src/tests/instruction/dense_replace_type_function/dense_replace_type_function_test.cpp +++ b/eval/src/tests/instruction/dense_replace_type_function/dense_replace_type_function_test.cpp @@ -33,7 +33,7 @@ struct Fixture { std::vector<TensorFunction::Child::CREF> children; InterpretedFunction::State state; Fixture() - : my_value(value_from_spec(GenSpec().idx("x", 10).gen(), prod_factory)), + : my_value(value_from_spec(GenSpec().idx("x", 10), prod_factory)), new_type(ValueType::from_spec("tensor(x[5],y[2])")), mock_child(my_value->type()), my_fun(new_type, mock_child), diff --git a/eval/src/tests/instruction/dense_simple_expand_function/dense_simple_expand_function_test.cpp b/eval/src/tests/instruction/dense_simple_expand_function/dense_simple_expand_function_test.cpp index 132f88076f6..e8f68e5021e 100644 --- a/eval/src/tests/instruction/dense_simple_expand_function/dense_simple_expand_function_test.cpp +++ b/eval/src/tests/instruction/dense_simple_expand_function/dense_simple_expand_function_test.cpp @@ -18,9 +18,9 @@ const ValueBuilderFactory &prod_factory = FastValueBuilderFactory::get(); EvalFixture::ParamRepo make_params() { return EvalFixture::ParamRepo() - .add("a", GenSpec().seq_bias(1.5).gen()) - .add("sparse", GenSpec().map("x", {"a"}).gen()) - .add("mixed", GenSpec().map("y", {"a"}).idx("z", 5).gen()) + .add("a", GenSpec(1.5)) + .add("sparse", GenSpec().map("x", {"a"})) + .add("mixed", GenSpec().map("y", {"a"}).idx("z", 5)) .add_variants("a5", GenSpec().idx("a", 5)) .add_variants("b3", GenSpec().idx("b", 3)) .add_variants("A1a5c1", GenSpec().idx("A", 1).idx("a", 5).idx("c", 1)) diff --git a/eval/src/tests/instruction/dense_single_reduce_function/dense_single_reduce_function_test.cpp b/eval/src/tests/instruction/dense_single_reduce_function/dense_single_reduce_function_test.cpp index 2d7b32359bc..a2733b1f7cb 100644 --- a/eval/src/tests/instruction/dense_single_reduce_function/dense_single_reduce_function_test.cpp +++ b/eval/src/tests/instruction/dense_single_reduce_function/dense_single_reduce_function_test.cpp @@ -26,8 +26,8 @@ EvalFixture::ParamRepo make_params() { .add_variants("a1b1c2", GenSpec().idx("a", 1).idx("b", 1).idx("c", 2)) .add_variants("a1b1c1", GenSpec().idx("a", 1).idx("b", 1).idx("c", 1)) .add_variants("a10", GenSpec().idx("a", 10)) - .add("xy_mapped", GenSpec().map("x", {"a", "b"}).map("y", {"x", "y"}).gen()) - .add("xyz_mixed", GenSpec().map("x", {"a", "b"}).map("y", {"x", "y"}).idx("z", 3).gen()); + .add("xy_mapped", GenSpec().map("x", {"a", "b"}).map("y", {"x", "y"})) + .add("xyz_mixed", GenSpec().map("x", {"a", "b"}).map("y", {"x", "y"}).idx("z", 3)); } EvalFixture::ParamRepo param_repo = make_params(); diff --git a/eval/src/tests/instruction/dense_tensor_create_function/dense_tensor_create_function_test.cpp b/eval/src/tests/instruction/dense_tensor_create_function/dense_tensor_create_function_test.cpp index 15a677c738d..3ab701e58a6 100644 --- a/eval/src/tests/instruction/dense_tensor_create_function/dense_tensor_create_function_test.cpp +++ b/eval/src/tests/instruction/dense_tensor_create_function/dense_tensor_create_function_test.cpp @@ -18,9 +18,9 @@ const ValueBuilderFactory &prod_factory = FastValueBuilderFactory::get(); EvalFixture::ParamRepo make_params() { return EvalFixture::ParamRepo() - .add("a", GenSpec().seq_bias(1.0).gen()) - .add("b", GenSpec().seq_bias(2.0).gen()) - .add("c", GenSpec().seq_bias(3.0).gen()); + .add("a", GenSpec(1.0)) + .add("b", GenSpec(2.0)) + .add("c", GenSpec(3.0)); } EvalFixture::ParamRepo param_repo = make_params(); diff --git a/eval/src/tests/instruction/dense_tensor_peek_function/dense_tensor_peek_function_test.cpp b/eval/src/tests/instruction/dense_tensor_peek_function/dense_tensor_peek_function_test.cpp index 3662aa6243a..782666ed36e 100644 --- a/eval/src/tests/instruction/dense_tensor_peek_function/dense_tensor_peek_function_test.cpp +++ b/eval/src/tests/instruction/dense_tensor_peek_function/dense_tensor_peek_function_test.cpp @@ -18,15 +18,15 @@ const ValueBuilderFactory &prod_factory = FastValueBuilderFactory::get(); EvalFixture::ParamRepo make_params() { return EvalFixture::ParamRepo() - .add("a", GenSpec().seq_bias(1.0).gen()) - .add("b", GenSpec().seq_bias(2.0).gen()) - .add("c", GenSpec().seq_bias(3.0).gen()) - .add("x3", GenSpec().idx("x", 3).gen()) - .add("x3f", GenSpec().cells_float().idx("x", 3).gen()) - .add("x3y2", GenSpec().idx("x", 3).idx("y", 2).gen()) - .add("x3y2f", GenSpec().cells_float().idx("x", 3).idx("y", 2).gen()) - .add("xm", GenSpec().map("x", {"1","2","3","-1","-2","-3"}).gen()) - .add("xmy2", GenSpec().map("x", {"1","2","3"}).idx("y", 2).gen()); + .add("a", GenSpec(1.0)) + .add("b", GenSpec(2.0)) + .add("c", GenSpec(3.0)) + .add("x3", GenSpec().idx("x", 3)) + .add("x3f", GenSpec().cells_float().idx("x", 3)) + .add("x3y2", GenSpec().idx("x", 3).idx("y", 2)) + .add("x3y2f", GenSpec().cells_float().idx("x", 3).idx("y", 2)) + .add("xm", GenSpec().map("x", {"1","2","3","-1","-2","-3"})) + .add("xmy2", GenSpec().map("x", {"1","2","3"}).idx("y", 2)); } EvalFixture::ParamRepo param_repo = make_params(); diff --git a/eval/src/tests/instruction/dense_xw_product_function/dense_xw_product_function_test.cpp b/eval/src/tests/instruction/dense_xw_product_function/dense_xw_product_function_test.cpp index 35f6b7b1eb8..f4fce7cb5f5 100644 --- a/eval/src/tests/instruction/dense_xw_product_function/dense_xw_product_function_test.cpp +++ b/eval/src/tests/instruction/dense_xw_product_function/dense_xw_product_function_test.cpp @@ -30,15 +30,15 @@ GenSpec::seq_t my_mat_seq = [] (size_t i) noexcept { return (5.0 + i) * 43.0; }; void add_vector(EvalFixture::ParamRepo &repo, const char *d1, size_t s1) { auto name = make_string("%s%zu", d1, s1); auto layout = GenSpec().idx(d1, s1).seq(my_vec_seq); - repo.add(name, layout.gen()); - repo.add(name + "f", layout.cells_float().gen()); + repo.add(name, layout); + repo.add(name + "f", layout.cells_float()); } void add_matrix(EvalFixture::ParamRepo &repo, const char *d1, size_t s1, const char *d2, size_t s2) { auto name = make_string("%s%zu%s%zu", d1, s1, d2, s2); auto layout = GenSpec().idx(d1, s1).idx(d2, s2).seq(my_mat_seq); - repo.add(name, layout.gen()); - repo.add(name + "f", layout.cells_float().gen()); + repo.add(name, layout); + repo.add(name + "f", layout.cells_float()); } EvalFixture::ParamRepo make_params() { diff --git a/eval/src/tests/instruction/fast_rename_optimizer/fast_rename_optimizer_test.cpp b/eval/src/tests/instruction/fast_rename_optimizer/fast_rename_optimizer_test.cpp index e915a396ae7..3bc1472f2d5 100644 --- a/eval/src/tests/instruction/fast_rename_optimizer/fast_rename_optimizer_test.cpp +++ b/eval/src/tests/instruction/fast_rename_optimizer/fast_rename_optimizer_test.cpp @@ -19,13 +19,13 @@ const ValueBuilderFactory &prod_factory = FastValueBuilderFactory::get(); EvalFixture::ParamRepo make_params() { return EvalFixture::ParamRepo() - .add("x5", GenSpec().idx("x", 5).gen()) - .add("x5f", GenSpec().idx("x", 5).cells_float().gen()) - .add("x_m", GenSpec().map("x", {"a", "b", "c"}).gen()) - .add("xy_mm", GenSpec().map("x", {"a", "b", "c"}).map("y", {"d","e"}).gen()) - .add("x5y3z_m", GenSpec().idx("x", 5).idx("y", 3).map("z", {"a","b"}).gen()) - .add("x5yz_m", GenSpec().idx("x", 5).map("y", {"a","b"}).map("z", {"d","e"}).gen()) - .add("x5y3", GenSpec().idx("x", 5).idx("y", 3).gen()); + .add("x5", GenSpec().idx("x", 5)) + .add("x5f", GenSpec().idx("x", 5).cells_float()) + .add("x_m", GenSpec().map("x", {"a", "b", "c"})) + .add("xy_mm", GenSpec().map("x", {"a", "b", "c"}).map("y", {"d","e"})) + .add("x5y3z_m", GenSpec().idx("x", 5).idx("y", 3).map("z", {"a","b"})) + .add("x5yz_m", GenSpec().idx("x", 5).map("y", {"a","b"}).map("z", {"d","e"})) + .add("x5y3", GenSpec().idx("x", 5).idx("y", 3)); } EvalFixture::ParamRepo param_repo = make_params(); diff --git a/eval/src/tests/instruction/generic_concat/generic_concat_test.cpp b/eval/src/tests/instruction/generic_concat/generic_concat_test.cpp index 17e012b8e33..637a1633f0f 100644 --- a/eval/src/tests/instruction/generic_concat/generic_concat_test.cpp +++ b/eval/src/tests/instruction/generic_concat/generic_concat_test.cpp @@ -78,11 +78,11 @@ void test_generic_concat_with(const ValueBuilderFactory &factory) { for (size_t i = 0; i < concat_layouts.size(); i += 2) { const auto l = concat_layouts[i]; const auto r = concat_layouts[i+1].cpy().seq(N_16ths); - for (TensorSpec lhs : { l.cpy().cells_float().gen(), - l.cpy().cells_double().gen() }) + for (TensorSpec lhs : { l.cpy().cells_float(), + l.cpy().cells_double() }) { - for (TensorSpec rhs : { r.cpy().cells_float().gen(), - r.cpy().cells_double().gen() }) + for (TensorSpec rhs : { r.cpy().cells_float(), + r.cpy().cells_double() }) { SCOPED_TRACE(fmt("\n===\nin LHS: %s\nin RHS: %s\n===\n", lhs.to_string().c_str(), rhs.to_string().c_str())); auto actual = perform_generic_concat(lhs, rhs, "y", factory); diff --git a/eval/src/tests/instruction/generic_create/generic_create_test.cpp b/eval/src/tests/instruction/generic_create/generic_create_test.cpp index fcf4618d592..3677159b64e 100644 --- a/eval/src/tests/instruction/generic_create/generic_create_test.cpp +++ b/eval/src/tests/instruction/generic_create/generic_create_test.cpp @@ -91,8 +91,8 @@ TensorSpec perform_generic_create(const TensorSpec &a, const ValueBuilderFactory void test_generic_create_with(const ValueBuilderFactory &factory) { for (const auto &layout : create_layouts) { - for (TensorSpec full : { layout.cpy().cells_float().gen(), - layout.cpy().cells_double().gen() }) + for (TensorSpec full : { layout.cpy().cells_float(), + layout.cpy().cells_double() }) { auto actual = perform_generic_create(full, factory); auto expect = reference_create(full).normalize(); diff --git a/eval/src/tests/instruction/generic_join/generic_join_test.cpp b/eval/src/tests/instruction/generic_join/generic_join_test.cpp index f724cdf1024..994e67934e7 100644 --- a/eval/src/tests/instruction/generic_join/generic_join_test.cpp +++ b/eval/src/tests/instruction/generic_join/generic_join_test.cpp @@ -107,11 +107,11 @@ TEST(GenericJoinTest, generic_join_works_for_simple_and_fast_values) { for (size_t i = 0; i < join_layouts.size(); i += 2) { const auto &l = join_layouts[i]; const auto &r = join_layouts[i+1]; - for (TensorSpec lhs : { l.cpy().cells_float().gen(), - l.cpy().cells_double().gen() }) + for (TensorSpec lhs : { l.cpy().cells_float(), + l.cpy().cells_double() }) { - for (TensorSpec rhs : { r.cpy().cells_float().gen(), - r.cpy().cells_double().gen() }) + for (TensorSpec rhs : { r.cpy().cells_float(), + r.cpy().cells_double() }) { for (auto fun: {operation::Add::f, operation::Sub::f, operation::Mul::f, operation::Div::f}) { SCOPED_TRACE(fmt("\n===\nLHS: %s\nRHS: %s\n===\n", lhs.to_string().c_str(), rhs.to_string().c_str())); diff --git a/eval/src/tests/instruction/generic_map/generic_map_test.cpp b/eval/src/tests/instruction/generic_map/generic_map_test.cpp index 8e39fa68072..9f30efe135e 100644 --- a/eval/src/tests/instruction/generic_map/generic_map_test.cpp +++ b/eval/src/tests/instruction/generic_map/generic_map_test.cpp @@ -43,8 +43,8 @@ TensorSpec perform_generic_map(const TensorSpec &a, map_fun_t func, const ValueB void test_generic_map_with(const ValueBuilderFactory &factory) { for (const auto &layout : map_layouts) { - for (TensorSpec lhs : { layout.cpy().cells_float().gen(), - layout.cpy().cells_double().gen() }) + for (TensorSpec lhs : { layout.cpy().cells_float(), + layout.cpy().cells_double() }) { for (auto func : {operation::Floor::f, operation::Fabs::f, operation::Square::f, operation::Inv::f}) { SCOPED_TRACE(fmt("\n===\nLHS: %s\n===\n", lhs.to_string().c_str())); diff --git a/eval/src/tests/instruction/generic_merge/generic_merge_test.cpp b/eval/src/tests/instruction/generic_merge/generic_merge_test.cpp index d5f7bc071f6..bb14d869440 100644 --- a/eval/src/tests/instruction/generic_merge/generic_merge_test.cpp +++ b/eval/src/tests/instruction/generic_merge/generic_merge_test.cpp @@ -50,11 +50,11 @@ void test_generic_merge_with(const ValueBuilderFactory &factory) { for (size_t i = 0; i < merge_layouts.size(); i += 2) { const auto l = merge_layouts[i]; const auto r = merge_layouts[i+1].cpy().seq(N_16ths); - for (TensorSpec lhs : { l.cpy().cells_float().gen(), - l.cpy().cells_double().gen() }) + for (TensorSpec lhs : { l.cpy().cells_float(), + l.cpy().cells_double() }) { - for (TensorSpec rhs : { r.cpy().cells_float().gen(), - r.cpy().cells_double().gen() }) + for (TensorSpec rhs : { r.cpy().cells_float(), + r.cpy().cells_double() }) { SCOPED_TRACE(fmt("\n===\nLHS: %s\nRHS: %s\n===\n", lhs.to_string().c_str(), rhs.to_string().c_str())); for (auto fun: {operation::Add::f, operation::Mul::f, operation::Sub::f, operation::Max::f}) { diff --git a/eval/src/tests/instruction/generic_peek/generic_peek_test.cpp b/eval/src/tests/instruction/generic_peek/generic_peek_test.cpp index c80e8a1296b..cafaf5837ec 100644 --- a/eval/src/tests/instruction/generic_peek/generic_peek_test.cpp +++ b/eval/src/tests/instruction/generic_peek/generic_peek_test.cpp @@ -194,8 +194,8 @@ void fill_dims_and_check(const TensorSpec &input, void test_generic_peek_with(const ValueBuilderFactory &factory) { for (const auto &layout : peek_layouts) { - for (TensorSpec input : { layout.cpy().cells_float().gen(), - layout.cpy().cells_double().gen() }) + for (TensorSpec input : { layout.cpy().cells_float(), + layout.cpy().cells_double() }) { ValueType input_type = ValueType::from_spec(input.type()); const auto &dims = input_type.dimensions(); 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 2c5baf234c4..4e4cc5fb50b 100644 --- a/eval/src/tests/instruction/generic_reduce/generic_reduce_test.cpp +++ b/eval/src/tests/instruction/generic_reduce/generic_reduce_test.cpp @@ -70,8 +70,8 @@ TEST(GenericReduceTest, sparse_reduce_plan_can_be_created) { void test_generic_reduce_with(const ValueBuilderFactory &factory) { for (const auto &layout: layouts) { - for (TensorSpec input : { layout.cpy().cells_float().gen(), - layout.cpy().cells_double().gen() }) + for (TensorSpec input : { layout.cpy().cells_float(), + layout.cpy().cells_double() }) { SCOPED_TRACE(fmt("tensor type: %s, num_cells: %zu", input.type().c_str(), input.cells().size())); for (Aggr aggr: {Aggr::SUM, Aggr::AVG, Aggr::MIN, Aggr::MAX}) { diff --git a/eval/src/tests/instruction/generic_rename/generic_rename_test.cpp b/eval/src/tests/instruction/generic_rename/generic_rename_test.cpp index f0c2241202e..dedb22f2763 100644 --- a/eval/src/tests/instruction/generic_rename/generic_rename_test.cpp +++ b/eval/src/tests/instruction/generic_rename/generic_rename_test.cpp @@ -110,8 +110,8 @@ TensorSpec perform_generic_rename(const TensorSpec &a, void test_generic_rename_with(const ValueBuilderFactory &factory) { for (const auto &layout : rename_layouts) { - for (TensorSpec lhs : { layout.cpy().cells_float().gen(), - layout.cpy().cells_double().gen() }) + for (TensorSpec lhs : { layout.cpy().cells_float(), + layout.cpy().cells_double() }) { ValueType lhs_type = ValueType::from_spec(lhs.type()); for (const auto & from_to : rename_from_to) { diff --git a/eval/src/tests/instruction/join_with_number/join_with_number_function_test.cpp b/eval/src/tests/instruction/join_with_number/join_with_number_function_test.cpp index e6a256a493b..6c8afbca681 100644 --- a/eval/src/tests/instruction/join_with_number/join_with_number_function_test.cpp +++ b/eval/src/tests/instruction/join_with_number/join_with_number_function_test.cpp @@ -35,9 +35,9 @@ const ValueBuilderFactory &prod_factory = FastValueBuilderFactory::get(); EvalFixture::ParamRepo make_params() { auto repo = EvalFixture::ParamRepo() - .add("a", GenSpec().seq_bias(1.5).gen()) - .add("number", GenSpec().seq_bias(2.5).gen()) - .add("dense", GenSpec().idx("y", 5).gen()) + .add("a", GenSpec(1.5)) + .add("number", GenSpec(2.5)) + .add("dense", GenSpec().idx("y", 5)) .add_variants("x3y5", GenSpec().idx("x", 3).idx("y", 5)) .add_variants("mixed", GenSpec().map("x", {"a"}).idx("y", 5).map("z", {"d","e"})) .add_variants("sparse", GenSpec().map("x", {"a","b","c"}).map("z", {"d","e","f"})); diff --git a/eval/src/tests/instruction/mixed_inner_product_function/mixed_inner_product_function_test.cpp b/eval/src/tests/instruction/mixed_inner_product_function/mixed_inner_product_function_test.cpp index 6b549b4d4d4..11e7c41fad2 100644 --- a/eval/src/tests/instruction/mixed_inner_product_function/mixed_inner_product_function_test.cpp +++ b/eval/src/tests/instruction/mixed_inner_product_function/mixed_inner_product_function_test.cpp @@ -27,20 +27,20 @@ const ValueBuilderFactory &prod_factory = FastValueBuilderFactory::get(); EvalFixture::ParamRepo make_params() { return EvalFixture::ParamRepo() - .add_variants("x3", GenSpec().idx("x", 3).seq_bias(2.0)) - .add_variants("x3$2", GenSpec().idx("x", 3).seq_bias(13.25)) - .add_variants("y3", GenSpec().idx("y", 3).seq_bias(4.0)) - .add_variants("z3", GenSpec().idx("z", 3).seq_bias(0.25)) - .add_variants("x3y3", GenSpec().idx("x", 3).idx("y", 3).seq_bias(5.0)) - .add_variants("x1y3", GenSpec().idx("x", 1).idx("y", 3).seq_bias(6.0)) - .add_variants("x3y1", GenSpec().idx("x", 3).idx("y", 1).seq_bias(1.5)) - .add_variants("x3z3", GenSpec().idx("x", 3).idx("z", 3).seq_bias(2.5)) - .add_variants("x3y3z3", GenSpec().idx("x", 3).idx("y", 3).idx("z", 3).seq_bias(-4.0)) - .add("mix_x3zm", GenSpec().idx("x", 3).map("z", {"c","d"}).seq_bias(0.5).gen()) - .add("mix_y3zm", GenSpec().idx("y", 3).map("z", {"c","d"}).seq_bias(3.5).gen()) - .add("mix_x3zm_f", GenSpec().idx("x", 3).map("z", {"c","d"}).cells_float().seq_bias(0.5).gen()) - .add("mix_y3zm_f", GenSpec().idx("y", 3).map("z", {"c","d"}).cells_float().seq_bias(3.5).gen()) - .add("mix_x3y3zm", GenSpec().idx("x", 3).idx("y", 3).map("z", {"c","d"}).seq_bias(0.0).gen()) + .add_variants("x3", GenSpec(2.0).idx("x", 3)) + .add_variants("x3$2", GenSpec(13.25).idx("x", 3)) + .add_variants("y3", GenSpec(4.0).idx("y", 3)) + .add_variants("z3", GenSpec(0.25).idx("z", 3)) + .add_variants("x3y3", GenSpec(5.0).idx("x", 3).idx("y", 3)) + .add_variants("x1y3", GenSpec(6.0).idx("x", 1).idx("y", 3)) + .add_variants("x3y1", GenSpec(1.5).idx("x", 3).idx("y", 1)) + .add_variants("x3z3", GenSpec(2.5).idx("x", 3).idx("z", 3)) + .add_variants("x3y3z3", GenSpec(-4.0).idx("x", 3).idx("y", 3).idx("z", 3)) + .add("mix_x3zm", GenSpec(0.5).idx("x", 3).map("z", {"c","d"})) + .add("mix_y3zm", GenSpec(3.5).idx("y", 3).map("z", {"c","d"})) + .add("mix_x3zm_f", GenSpec(0.5).idx("x", 3).map("z", {"c","d"}).cells_float()) + .add("mix_y3zm_f", GenSpec(3.5).idx("y", 3).map("z", {"c","d"}).cells_float()) + .add("mix_x3y3zm", GenSpec(0.0).idx("x", 3).idx("y", 3).map("z", {"c","d"})) ; } diff --git a/eval/src/tests/instruction/mixed_map_function/mixed_map_function_test.cpp b/eval/src/tests/instruction/mixed_map_function/mixed_map_function_test.cpp index 3a7d1368f03..dae147da216 100644 --- a/eval/src/tests/instruction/mixed_map_function/mixed_map_function_test.cpp +++ b/eval/src/tests/instruction/mixed_map_function/mixed_map_function_test.cpp @@ -15,8 +15,8 @@ const ValueBuilderFactory &prod_factory = FastValueBuilderFactory::get(); EvalFixture::ParamRepo make_params() { return EvalFixture::ParamRepo() - .add("a", GenSpec().seq_bias(1.5).gen()) - .add("b", GenSpec().seq_bias(2.5).gen()) + .add("a", GenSpec(1.5)) + .add("b", GenSpec(2.5)) .add_variants("sparse", GenSpec().map("x", {"a"})) .add_variants("mixed", GenSpec().map("x", {"a"}).idx("y", 5)) .add_variants("x5y3", GenSpec().idx("x", 5).idx("y", 3)); diff --git a/eval/src/tests/instruction/mixed_simple_join_function/mixed_simple_join_function_test.cpp b/eval/src/tests/instruction/mixed_simple_join_function/mixed_simple_join_function_test.cpp index 105ae22e06e..6220682d716 100644 --- a/eval/src/tests/instruction/mixed_simple_join_function/mixed_simple_join_function_test.cpp +++ b/eval/src/tests/instruction/mixed_simple_join_function/mixed_simple_join_function_test.cpp @@ -45,12 +45,12 @@ const ValueBuilderFactory &prod_factory = FastValueBuilderFactory::get(); EvalFixture::ParamRepo make_params() { return EvalFixture::ParamRepo() - .add("a", GenSpec().seq_bias(1.5).gen()) - .add("b", GenSpec().seq_bias(2.5).gen()) - .add("sparse", GenSpec().map("x", {"a", "b", "c"}).gen()) - .add("mixed", GenSpec().map("x", {"a", "b", "c"}).idx("y", 5).idx("z", 3).gen()) - .add("empty_mixed", GenSpec().map("x", {}).idx("y", 5).idx("z", 3).gen()) - .add_mutable("@mixed", GenSpec().map("x", {"a", "b", "c"}).idx("y", 5).idx("z", 3).gen()) + .add("a", GenSpec(1.5)) + .add("b", GenSpec(2.5)) + .add("sparse", GenSpec().map("x", {"a", "b", "c"})) + .add("mixed", GenSpec().map("x", {"a", "b", "c"}).idx("y", 5).idx("z", 3)) + .add("empty_mixed", GenSpec().map("x", {}).idx("y", 5).idx("z", 3)) + .add_mutable("@mixed", GenSpec().map("x", {"a", "b", "c"}).idx("y", 5).idx("z", 3)) .add_variants("a1b1c1", GenSpec().idx("a", 1).idx("b", 1).idx("c", 1)) .add_variants("x1y1z1", GenSpec().idx("x", 1).idx("y", 1).idx("z", 1)) .add_variants("x3y5z3", GenSpec().idx("x", 3).idx("y", 5).idx("z", 3)) diff --git a/eval/src/tests/instruction/pow_as_map_optimizer/pow_as_map_optimizer_test.cpp b/eval/src/tests/instruction/pow_as_map_optimizer/pow_as_map_optimizer_test.cpp index fe32a59bb78..029a080197d 100644 --- a/eval/src/tests/instruction/pow_as_map_optimizer/pow_as_map_optimizer_test.cpp +++ b/eval/src/tests/instruction/pow_as_map_optimizer/pow_as_map_optimizer_test.cpp @@ -16,10 +16,10 @@ const ValueBuilderFactory &prod_factory = FastValueBuilderFactory::get(); EvalFixture::ParamRepo make_params() { return EvalFixture::ParamRepo() - .add("a", GenSpec().seq_bias(1.5).gen()) - .add("b", GenSpec().seq_bias(2.5).gen()) - .add("sparse", GenSpec().map("x", {"a","b"}).gen()) - .add("mixed", GenSpec().map("x", {"a"}).idx("y", 5).gen()) + .add("a", GenSpec(1.5)) + .add("b", GenSpec(2.5)) + .add("sparse", GenSpec().map("x", {"a","b"})) + .add("mixed", GenSpec().map("x", {"a"}).idx("y", 5)) .add_variants("x5y3", GenSpec().idx("x", 5).idx("y", 3)); } EvalFixture::ParamRepo param_repo = make_params(); diff --git a/eval/src/tests/instruction/remove_trivial_dimension_optimizer/remove_trivial_dimension_optimizer_test.cpp b/eval/src/tests/instruction/remove_trivial_dimension_optimizer/remove_trivial_dimension_optimizer_test.cpp index 794725a8257..6439ec305dd 100644 --- a/eval/src/tests/instruction/remove_trivial_dimension_optimizer/remove_trivial_dimension_optimizer_test.cpp +++ b/eval/src/tests/instruction/remove_trivial_dimension_optimizer/remove_trivial_dimension_optimizer_test.cpp @@ -19,10 +19,10 @@ const ValueBuilderFactory &prod_factory = FastValueBuilderFactory::get(); EvalFixture::ParamRepo make_params() { return EvalFixture::ParamRepo() - .add("x1y5z1", GenSpec().idx("x", 1).idx("y", 5).idx("z", 1).gen()) - .add("x1y5z1f", GenSpec().idx("x", 1).idx("y", 5).idx("z", 1).cells_float().gen()) - .add("x1y1z1", GenSpec().idx("x", 1).idx("y", 1).idx("z", 1).gen()) - .add("x1y5z_m", GenSpec().idx("x", 1).idx("y", 5).map("z", {"a"}).gen()); + .add("x1y5z1", GenSpec().idx("x", 1).idx("y", 5).idx("z", 1)) + .add("x1y5z1f", GenSpec().idx("x", 1).idx("y", 5).idx("z", 1).cells_float()) + .add("x1y1z1", GenSpec().idx("x", 1).idx("y", 1).idx("z", 1)) + .add("x1y5z_m", GenSpec().idx("x", 1).idx("y", 5).map("z", {"a"})); } EvalFixture::ParamRepo param_repo = make_params(); diff --git a/eval/src/tests/instruction/sparse_dot_product_function/sparse_dot_product_function_test.cpp b/eval/src/tests/instruction/sparse_dot_product_function/sparse_dot_product_function_test.cpp index ac333f5224a..96f156ccdb9 100644 --- a/eval/src/tests/instruction/sparse_dot_product_function/sparse_dot_product_function_test.cpp +++ b/eval/src/tests/instruction/sparse_dot_product_function/sparse_dot_product_function_test.cpp @@ -17,13 +17,13 @@ const ValueBuilderFactory &test_factory = SimpleValueBuilderFactory::get(); EvalFixture::ParamRepo make_params() { return EvalFixture::ParamRepo() - .add_variants("v1_x", GenSpec().map("x", 32, 1).seq_bias(3.0)) - .add_variants("v2_x", GenSpec().map("x", 16, 2).seq_bias(7.0)) - .add("v3_y", GenSpec().map("y", 10, 1).gen()) - .add("v4_xd", GenSpec().idx("x", 10).gen()) - .add("m1_xy", GenSpec().map("x", 32, 1).map("y", 16, 2).seq_bias(3.0).gen()) - .add("m2_xy", GenSpec().map("x", 16, 2).map("y", 32, 1).seq_bias(7.0).gen()) - .add("m3_xym", GenSpec().map("x", 8, 1).idx("y", 5).gen()); + .add_variants("v1_x", GenSpec(3.0).map("x", 32, 1)) + .add_variants("v2_x", GenSpec(7.0).map("x", 16, 2)) + .add("v3_y", GenSpec().map("y", 10, 1)) + .add("v4_xd", GenSpec().idx("x", 10)) + .add("m1_xy", GenSpec(3.0).map("x", 32, 1).map("y", 16, 2)) + .add("m2_xy", GenSpec(7.0).map("x", 16, 2).map("y", 32, 1)) + .add("m3_xym", GenSpec().map("x", 8, 1).idx("y", 5)); } EvalFixture::ParamRepo param_repo = make_params(); diff --git a/eval/src/tests/instruction/sparse_merge_function/sparse_merge_function_test.cpp b/eval/src/tests/instruction/sparse_merge_function/sparse_merge_function_test.cpp index e175286e18c..8bd27bd9a03 100644 --- a/eval/src/tests/instruction/sparse_merge_function/sparse_merge_function_test.cpp +++ b/eval/src/tests/instruction/sparse_merge_function/sparse_merge_function_test.cpp @@ -17,15 +17,15 @@ const ValueBuilderFactory &test_factory = SimpleValueBuilderFactory::get(); EvalFixture::ParamRepo make_params() { return EvalFixture::ParamRepo() - .add("scalar1", GenSpec(1.0).gen()) - .add("scalar2", GenSpec(2.0).gen()) + .add("scalar1", GenSpec(1.0)) + .add("scalar2", GenSpec(2.0)) .add_variants("v1_x", GenSpec(3.0).map("x", 32, 1)) .add_variants("v2_x", GenSpec(4.0).map("x", 16, 2)) .add_variants("v3_xz", GenSpec(5.0).map("x", 16, 2).idx("z", 1)) - .add("dense", GenSpec(6.0).idx("x", 10).gen()) - .add("m1_xy", GenSpec(7.0).map("x", 32, 1).map("y", 16, 2).gen()) - .add("m2_xy", GenSpec(8.0).map("x", 16, 2).map("y", 32, 1).gen()) - .add("mixed", GenSpec(9.0).map("x", 8, 1).idx("y", 5).gen()); + .add("dense", GenSpec(6.0).idx("x", 10)) + .add("m1_xy", GenSpec(7.0).map("x", 32, 1).map("y", 16, 2)) + .add("m2_xy", GenSpec(8.0).map("x", 16, 2).map("y", 32, 1)) + .add("mixed", GenSpec(9.0).map("x", 8, 1).idx("y", 5)); } EvalFixture::ParamRepo param_repo = make_params(); diff --git a/eval/src/tests/instruction/sum_max_dot_product_function/sum_max_dot_product_function_test.cpp b/eval/src/tests/instruction/sum_max_dot_product_function/sum_max_dot_product_function_test.cpp index 1013c98b424..f68c089e784 100644 --- a/eval/src/tests/instruction/sum_max_dot_product_function/sum_max_dot_product_function_test.cpp +++ b/eval/src/tests/instruction/sum_max_dot_product_function/sum_max_dot_product_function_test.cpp @@ -45,9 +45,9 @@ void assert_not_optimized(const TensorSpec &a, const TensorSpec &b, const vespal //----------------------------------------------------------------------------- -GenSpec QueGen(size_t x_size, size_t z_size) { return GenSpec().cells_float().map("x", x_size).idx("z", z_size).seq_bias(0.5); } +GenSpec QueGen(size_t x_size, size_t z_size) { return GenSpec(0.5).cells_float().map("x", x_size).idx("z", z_size); } -GenSpec DocGen(size_t y_size, size_t z_size) { return GenSpec().cells_float().map("y", y_size).idx("z", z_size).seq_bias(2.5); } +GenSpec DocGen(size_t y_size, size_t z_size) { return GenSpec(2.5).cells_float().map("y", y_size).idx("z", z_size); } GenSpec Que() { return QueGen(3, 5); } GenSpec Doc() { return DocGen(6, 5); } @@ -58,10 +58,10 @@ GenSpec DocEmptyX() { return DocGen(0, 5); } GenSpec QueTrivialZ() { return QueGen(3, 1); } GenSpec DocTrivialZ() { return DocGen(6, 1); } -auto query = Que().gen(); -auto document = Doc().gen(); -auto empty_query = QueEmptyX().gen(); -auto empty_document = DocEmptyX().gen(); +auto query = Que(); +auto document = Doc(); +auto empty_query = QueEmptyX(); +auto empty_document = DocEmptyX(); TEST(SumMaxDotProduct, expressions_can_be_optimized) { @@ -73,24 +73,24 @@ TEST(SumMaxDotProduct, expressions_can_be_optimized) } TEST(SumMaxDotProduct, double_cells_are_not_optimized) { - auto double_query = Que().cells_double().gen(); - auto double_document = Doc().cells_double().gen(); + auto double_query = Que().cells_double(); + auto double_document = Doc().cells_double(); assert_not_optimized(query, double_document); assert_not_optimized(double_query, document); assert_not_optimized(double_query, double_document); } TEST(SumMaxDotProduct, trivial_dot_product_is_not_optimized) { - auto trivial_query = QueTrivialZ().gen(); - auto trivial_document = DocTrivialZ().gen(); + auto trivial_query = QueTrivialZ(); + auto trivial_document = DocTrivialZ(); assert_not_optimized(trivial_query, trivial_document); } TEST(SumMaxDotProduct, additional_dimensions_are_not_optimized) { - auto extra_sparse_query = Que().map("a", 1).gen(); - auto extra_dense_query = Que().idx("a", 1).gen(); - auto extra_sparse_document = Doc().map("a", 1).gen(); - auto extra_dense_document = Doc().idx("a", 1).gen(); + auto extra_sparse_query = Que().map("a", 1); + auto extra_dense_query = Que().idx("a", 1); + auto extra_sparse_document = Doc().map("a", 1); + auto extra_dense_document = Doc().idx("a", 1); vespalib::string extra_sum_expr = "reduce(reduce(reduce(a*b,sum,z),max,y),sum,a,x)"; vespalib::string extra_max_expr = "reduce(reduce(reduce(a*b,sum,z),max,a,y),sum,x)"; assert_not_optimized(extra_sparse_query, document); @@ -104,8 +104,8 @@ TEST(SumMaxDotProduct, additional_dimensions_are_not_optimized) { } TEST(SumMaxDotProduct, more_dense_variants_are_not_optimized) { - auto dense_query = GenSpec().cells_float().idx("x", 3).idx("z", 5).seq_bias(0.5).gen(); - auto dense_document = GenSpec().cells_float().idx("y", 5).idx("z", 5).seq_bias(2.5).gen(); + auto dense_query = GenSpec(0.5).cells_float().idx("x", 3).idx("z", 5); + auto dense_document = GenSpec(2.5).cells_float().idx("y", 5).idx("z", 5); assert_not_optimized(dense_query, document); assert_not_optimized(query, dense_document); assert_not_optimized(dense_query, dense_document); diff --git a/eval/src/tests/instruction/vector_from_doubles_function/vector_from_doubles_function_test.cpp b/eval/src/tests/instruction/vector_from_doubles_function/vector_from_doubles_function_test.cpp index 2371c1e4006..635296ef78c 100644 --- a/eval/src/tests/instruction/vector_from_doubles_function/vector_from_doubles_function_test.cpp +++ b/eval/src/tests/instruction/vector_from_doubles_function/vector_from_doubles_function_test.cpp @@ -18,11 +18,11 @@ const ValueBuilderFactory &prod_factory = FastValueBuilderFactory::get(); EvalFixture::ParamRepo make_params() { return EvalFixture::ParamRepo() - .add("a", GenSpec().seq_bias(1.0).gen()) - .add("b", GenSpec().seq_bias(2.0).gen()) - .add("c", GenSpec().seq_bias(3.0).gen()) - .add("d", GenSpec().seq_bias(4.0).gen()) - .add("x5", GenSpec().idx("x", 5).gen()); + .add("a", GenSpec(1.0)) + .add("b", GenSpec(2.0)) + .add("c", GenSpec(3.0)) + .add("d", GenSpec(4.0)) + .add("x5", GenSpec().idx("x", 5)); } EvalFixture::ParamRepo param_repo = make_params(); diff --git a/eval/src/tests/streamed/value/streamed_value_test.cpp b/eval/src/tests/streamed/value/streamed_value_test.cpp index 7aaa8cdebbc..965970e47e3 100644 --- a/eval/src/tests/streamed/value/streamed_value_test.cpp +++ b/eval/src/tests/streamed/value/streamed_value_test.cpp @@ -67,8 +67,8 @@ TensorSpec streamed_value_join(const TensorSpec &a, const TensorSpec &b, join_fu TEST(StreamedValueTest, streamed_values_can_be_converted_from_and_to_tensor_spec) { for (const auto &layout: layouts) { - for (TensorSpec expect : { layout.cpy().cells_float().gen(), - layout.cpy().cells_double().gen() }) + for (TensorSpec expect : { layout.cpy().cells_float(), + layout.cpy().cells_double() }) { std::unique_ptr<Value> value = value_from_spec(expect, StreamedValueBuilderFactory::get()); TensorSpec actual = spec_from_value(*value); @@ -79,8 +79,8 @@ TEST(StreamedValueTest, streamed_values_can_be_converted_from_and_to_tensor_spec TEST(StreamedValueTest, streamed_values_can_be_copied) { for (const auto &layout: layouts) { - for (TensorSpec expect : { layout.cpy().cells_float().gen(), - layout.cpy().cells_double().gen() }) + for (TensorSpec expect : { layout.cpy().cells_float(), + layout.cpy().cells_double() }) { std::unique_ptr<Value> value = value_from_spec(expect, StreamedValueBuilderFactory::get()); std::unique_ptr<Value> copy = StreamedValueBuilderFactory::get().copy(*value); @@ -130,11 +130,11 @@ TEST(StreamedValueTest, new_generic_join_works_for_streamed_values) { for (size_t i = 0; i < join_layouts.size(); i += 2) { const auto l = join_layouts[i].cpy().seq(N_16ths); const auto r = join_layouts[i + 1].cpy().seq(N_16ths); - for (TensorSpec lhs : { l.cpy().cells_float().gen(), - l.cpy().cells_double().gen() }) + for (TensorSpec lhs : { l.cpy().cells_float(), + l.cpy().cells_double() }) { - for (TensorSpec rhs : { r.cpy().cells_float().gen(), - r.cpy().cells_double().gen() }) + for (TensorSpec rhs : { r.cpy().cells_float(), + r.cpy().cells_double() }) { for (auto fun: {operation::Add::f, operation::Sub::f, operation::Mul::f, operation::Max::f}) { SCOPED_TRACE(fmt("\n===\nLHS: %s\nRHS: %s\n===\n", lhs.to_string().c_str(), rhs.to_string().c_str())); diff --git a/eval/src/tests/tensor/instruction_benchmark/instruction_benchmark.cpp b/eval/src/tests/tensor/instruction_benchmark/instruction_benchmark.cpp index 000794aca7d..d8dff63cddf 100644 --- a/eval/src/tests/tensor/instruction_benchmark/instruction_benchmark.cpp +++ b/eval/src/tests/tensor/instruction_benchmark/instruction_benchmark.cpp @@ -61,7 +61,7 @@ template <typename T> using CREF = std::reference_wrapper<const T>; //----------------------------------------------------------------------------- -test::GenSpec GS(double bias) { return test::GenSpec().cells_float().seq_bias(bias); } +test::GenSpec GS(double bias) { return test::GenSpec(bias).cells_float(); } //----------------------------------------------------------------------------- @@ -566,7 +566,7 @@ void benchmark_tensor_create(const vespalib::string &desc, const TensorSpec &pro ASSERT_FALSE(proto_type.is_error()); std::vector<CREF<TensorSpec>> stack_spec; for (const auto &cell: proto.cells()) { - stack_spec.emplace_back(stash.create<TensorSpec>(GS(cell.second).gen())); + stack_spec.emplace_back(stash.create<TensorSpec>(GS(cell.second))); } std::vector<EvalOp::UP> list; for (const Impl &impl: impl_list) { @@ -602,7 +602,7 @@ void benchmark_tensor_peek(const vespalib::string &desc, const TensorSpec &lhs, stack_spec.emplace_back(lhs); if (peek_spec.is_dynamic) { for (const auto &entry: peek_spec.spec) { - stack_spec.emplace_back(stash.create<TensorSpec>(GS(double(entry.second)).gen())); + stack_spec.emplace_back(stash.create<TensorSpec>(GS(double(entry.second)))); } } std::vector<EvalOp::UP> list; @@ -617,15 +617,15 @@ void benchmark_tensor_peek(const vespalib::string &desc, const TensorSpec &lhs, //----------------------------------------------------------------------------- TEST(MakeInputTest, print_some_test_input) { - auto number = GS(5.0).gen(); - auto sparse = GS(1.0).map("x", 5, 3).gen(); - auto dense = GS(10.0).idx("x", 5).gen(); - auto mixed = GS(100.0).map("x", 3, 7).idx("y", 2).idx("z", 2).gen(); + auto number = GS(5.0); + auto sparse = GS(1.0).map("x", 5, 3); + auto dense = GS(10.0).idx("x", 5); + auto mixed = GS(100.0).map("x", 3, 7).idx("y", 2).idx("z", 2); fprintf(stderr, "--------------------------------------------------------\n"); - fprintf(stderr, "simple number: %s\n", number.to_string().c_str()); - fprintf(stderr, "sparse vector: %s\n", sparse.to_string().c_str()); - fprintf(stderr, "dense vector: %s\n", dense.to_string().c_str()); - fprintf(stderr, "mixed cube: %s\n", mixed.to_string().c_str()); + fprintf(stderr, "simple number: %s\n", number.gen().to_string().c_str()); + fprintf(stderr, "sparse vector: %s\n", sparse.gen().to_string().c_str()); + fprintf(stderr, "dense vector: %s\n", dense.gen().to_string().c_str()); + fprintf(stderr, "mixed cube: %s\n", mixed.gen().to_string().c_str()); fprintf(stderr, "--------------------------------------------------------\n"); } @@ -685,197 +685,197 @@ void benchmark_encode_decode(const vespalib::string &desc, const TensorSpec &pro // relevant for the overall performance of the tensor implementation. TEST(EncodeDecodeBench, encode_decode_dense) { - auto proto = GS(1.0).idx("a", 64).idx("b", 64).gen(); + auto proto = GS(1.0).idx("a", 64).idx("b", 64); benchmark_encode_decode("dense tensor", proto); } TEST(EncodeDecodeBench, encode_decode_sparse) { - auto proto = GS(1.0).map("a", 64, 1).map("b", 64, 1).gen(); + auto proto = GS(1.0).map("a", 64, 1).map("b", 64, 1); benchmark_encode_decode("sparse tensor", proto); } TEST(EncodeDecodeBench, encode_decode_mixed) { - auto proto = GS(1.0).map("a", 64, 1).idx("b", 64).gen(); + auto proto = GS(1.0).map("a", 64, 1).idx("b", 64); benchmark_encode_decode("mixed tensor", proto); } //----------------------------------------------------------------------------- TEST(DenseConcat, small_vectors) { - auto lhs = GS(1.0).idx("x", 10).gen(); - auto rhs = GS(2.0).idx("x", 10).gen(); + auto lhs = GS(1.0).idx("x", 10); + auto rhs = GS(2.0).idx("x", 10); benchmark_concat("small dense vector append concat", lhs, rhs, "x"); } TEST(DenseConcat, cross_vectors) { - auto lhs = GS(1.0).idx("x", 10).gen(); - auto rhs = GS(2.0).idx("x", 10).gen(); + auto lhs = GS(1.0).idx("x", 10); + auto rhs = GS(2.0).idx("x", 10); benchmark_concat("small dense vector cross concat", lhs, rhs, "y"); } TEST(DenseConcat, cube_and_vector) { - auto lhs = GS(1.0).idx("a", 16).idx("b", 16).idx("c", 16).gen(); - auto rhs = GS(42.0).idx("a", 16).gen(); + auto lhs = GS(1.0).idx("a", 16).idx("b", 16).idx("c", 16); + auto rhs = GS(42.0).idx("a", 16); benchmark_concat("cube vs vector concat", lhs, rhs, "a"); } TEST(SparseConcat, small_vectors) { - auto lhs = GS(1.0).map("x", 10, 1).gen(); - auto rhs = GS(2.0).map("x", 10, 2).gen(); + auto lhs = GS(1.0).map("x", 10, 1); + auto rhs = GS(2.0).map("x", 10, 2); benchmark_concat("small sparse concat", lhs, rhs, "y"); } TEST(MixedConcat, mixed_vs_dense) { - auto lhs = GS(1.0).idx("a", 16).idx("b", 16).map("c", 16, 1).gen(); - auto rhs = GS(2.0).idx("a", 16).idx("b", 16).gen(); + auto lhs = GS(1.0).idx("a", 16).idx("b", 16).map("c", 16, 1); + auto rhs = GS(2.0).idx("a", 16).idx("b", 16); benchmark_concat("mixed dense concat a", lhs, rhs, "a"); } TEST(MixedConcat, large_mixed_a) { - auto lhs = GS(1.0).idx("a", 16).idx("b", 16).map("c", 16, 1).gen(); - auto rhs = GS(2.0).idx("a", 16).idx("b", 16).map("c", 16, 2).gen(); + auto lhs = GS(1.0).idx("a", 16).idx("b", 16).map("c", 16, 1); + auto rhs = GS(2.0).idx("a", 16).idx("b", 16).map("c", 16, 2); benchmark_concat("mixed append concat a", lhs, rhs, "a"); } TEST(MixedConcat, large_mixed_b) { - auto lhs = GS(1.0).idx("a", 16).idx("b", 16).map("c", 16, 1).gen(); - auto rhs = GS(2.0).idx("a", 16).idx("b", 16).map("c", 16, 2).gen(); + auto lhs = GS(1.0).idx("a", 16).idx("b", 16).map("c", 16, 1); + auto rhs = GS(2.0).idx("a", 16).idx("b", 16).map("c", 16, 2); benchmark_concat("mixed append concat b", lhs, rhs, "b"); } //----------------------------------------------------------------------------- TEST(NumberJoin, plain_op2) { - auto lhs = GS(2.0).gen(); - auto rhs = GS(3.0).gen(); + auto lhs = GS(2.0); + auto rhs = GS(3.0); benchmark_join("simple numbers multiply", lhs, rhs, operation::Mul::f); } //----------------------------------------------------------------------------- TEST(DenseJoin, small_vectors) { - auto lhs = GS(1.0).idx("x", 10).gen(); - auto rhs = GS(2.0).idx("x", 10).gen(); + auto lhs = GS(1.0).idx("x", 10); + auto rhs = GS(2.0).idx("x", 10); benchmark_join("small dense vector multiply", lhs, rhs, operation::Mul::f); } TEST(DenseJoin, full_overlap) { - auto lhs = GS(1.0).idx("a", 16).idx("b", 16).idx("c", 16).gen(); - auto rhs = GS(2.0).idx("a", 16).idx("b", 16).idx("c", 16).gen(); + auto lhs = GS(1.0).idx("a", 16).idx("b", 16).idx("c", 16); + auto rhs = GS(2.0).idx("a", 16).idx("b", 16).idx("c", 16); benchmark_join("dense full overlap multiply", lhs, rhs, operation::Mul::f); } TEST(DenseJoin, partial_overlap) { - auto lhs = GS(1.0).idx("a", 8).idx("c", 8).idx("d", 8).gen(); - auto rhs = GS(2.0).idx("b", 8).idx("c", 8).idx("d", 8).gen(); + auto lhs = GS(1.0).idx("a", 8).idx("c", 8).idx("d", 8); + auto rhs = GS(2.0).idx("b", 8).idx("c", 8).idx("d", 8); benchmark_join("dense partial overlap multiply", lhs, rhs, operation::Mul::f); } TEST(DenseJoin, subset_overlap) { - auto lhs = GS(1.0).idx("a", 16).idx("b", 16).idx("c", 16).gen(); - auto rhs_inner = GS(2.0).idx("b", 16).idx("c", 16).gen(); - auto rhs_outer = GS(3.0).idx("a", 16).idx("b", 16).gen(); + auto lhs = GS(1.0).idx("a", 16).idx("b", 16).idx("c", 16); + auto rhs_inner = GS(2.0).idx("b", 16).idx("c", 16); + auto rhs_outer = GS(3.0).idx("a", 16).idx("b", 16); benchmark_join("dense subset overlap inner multiply", lhs, rhs_inner, operation::Mul::f); benchmark_join("dense subset overlap outer multiply", lhs, rhs_outer, operation::Mul::f); } TEST(DenseJoin, no_overlap) { - auto lhs = GS(1.0).idx("a", 4).idx("e", 4).idx("f", 4).gen(); - auto rhs = GS(2.0).idx("b", 4).idx("c", 4).idx("d", 4).gen(); + auto lhs = GS(1.0).idx("a", 4).idx("e", 4).idx("f", 4); + auto rhs = GS(2.0).idx("b", 4).idx("c", 4).idx("d", 4); benchmark_join("dense no overlap multiply", lhs, rhs, operation::Mul::f); } TEST(DenseJoin, simple_expand) { - auto lhs = GS(1.0).idx("a", 5).idx("b", 4).idx("c", 4).gen(); - auto rhs = GS(2.0).idx("d", 4).idx("e", 4).idx("f", 5).gen(); + auto lhs = GS(1.0).idx("a", 5).idx("b", 4).idx("c", 4); + auto rhs = GS(2.0).idx("d", 4).idx("e", 4).idx("f", 5); benchmark_join("dense simple expand multiply", lhs, rhs, operation::Mul::f); } TEST(DenseJoin, multiply_by_number) { - auto lhs = GS(3.0).gen(); - auto rhs = GS(2.0).idx("a", 16).idx("b", 16).idx("c", 16).gen(); + auto lhs = GS(3.0); + auto rhs = GS(2.0).idx("a", 16).idx("b", 16).idx("c", 16); benchmark_join("dense cube multiply by number", lhs, rhs, operation::Mul::f); } //----------------------------------------------------------------------------- TEST(SparseJoin, small_vectors) { - auto lhs = GS(1.0).map("x", 10, 1).gen(); - auto rhs = GS(2.0).map("x", 10, 2).gen(); + auto lhs = GS(1.0).map("x", 10, 1); + auto rhs = GS(2.0).map("x", 10, 2); benchmark_join("small sparse vector multiply", lhs, rhs, operation::Mul::f); } TEST(SparseJoin, large_vectors) { - auto lhs = GS(1.0).map("x", 1800, 1).gen(); - auto rhs = GS(2.0).map("x", 1000, 2).gen(); + auto lhs = GS(1.0).map("x", 1800, 1); + auto rhs = GS(2.0).map("x", 1000, 2); benchmark_join("large sparse vector multiply", lhs, rhs, operation::Mul::f); } TEST(SparseJoin, full_overlap) { - auto lhs = GS(1.0).map("a", 16, 1).map("b", 16, 1).map("c", 16, 1).gen(); - auto rhs = GS(2.0).map("a", 16, 2).map("b", 16, 2).map("c", 16, 2).gen(); + auto lhs = GS(1.0).map("a", 16, 1).map("b", 16, 1).map("c", 16, 1); + auto rhs = GS(2.0).map("a", 16, 2).map("b", 16, 2).map("c", 16, 2); benchmark_join("sparse full overlap multiply", lhs, rhs, operation::Mul::f); } TEST(SparseJoin, full_overlap_big_vs_small) { - auto lhs = GS(1.0).map("a", 16, 1).map("b", 16, 1).map("c", 16, 1).gen(); - auto rhs = GS(2.0).map("a", 2, 1).map("b", 2, 1).map("c", 2, 1).gen(); + auto lhs = GS(1.0).map("a", 16, 1).map("b", 16, 1).map("c", 16, 1); + auto rhs = GS(2.0).map("a", 2, 1).map("b", 2, 1).map("c", 2, 1); benchmark_join("sparse full overlap big vs small multiply", lhs, rhs, operation::Mul::f); } TEST(SparseJoin, partial_overlap) { - auto lhs = GS(1.0).map("a", 8, 1).map("c", 8, 1).map("d", 8, 1).gen(); - auto rhs = GS(2.0).map("b", 8, 2).map("c", 8, 2).map("d", 8, 2).gen(); + auto lhs = GS(1.0).map("a", 8, 1).map("c", 8, 1).map("d", 8, 1); + auto rhs = GS(2.0).map("b", 8, 2).map("c", 8, 2).map("d", 8, 2); benchmark_join("sparse partial overlap multiply", lhs, rhs, operation::Mul::f); } TEST(SparseJoin, no_overlap) { - auto lhs = GS(1.0).map("a", 4, 1).map("e", 4, 1).map("f", 4, 1).gen(); - auto rhs = GS(2.0).map("b", 4, 1).map("c", 4, 1).map("d", 4, 1).gen(); + auto lhs = GS(1.0).map("a", 4, 1).map("e", 4, 1).map("f", 4, 1); + auto rhs = GS(2.0).map("b", 4, 1).map("c", 4, 1).map("d", 4, 1); benchmark_join("sparse no overlap multiply", lhs, rhs, operation::Mul::f); } TEST(SparseJoin, multiply_by_number) { - auto lhs = GS(3.0).gen(); - auto rhs = GS(2.0).map("a", 16, 2).map("b", 16, 2).map("c", 16, 2).gen(); + auto lhs = GS(3.0); + auto rhs = GS(2.0).map("a", 16, 2).map("b", 16, 2).map("c", 16, 2); benchmark_join("sparse multiply by number", lhs, rhs, operation::Mul::f); } //----------------------------------------------------------------------------- TEST(MixedJoin, full_overlap) { - auto lhs = GS(1.0).map("a", 16, 1).map("b", 16, 1).idx("c", 16).gen(); - auto rhs = GS(2.0).map("a", 16, 2).map("b", 16, 2).idx("c", 16).gen(); + auto lhs = GS(1.0).map("a", 16, 1).map("b", 16, 1).idx("c", 16); + auto rhs = GS(2.0).map("a", 16, 2).map("b", 16, 2).idx("c", 16); benchmark_join("mixed full overlap multiply", lhs, rhs, operation::Mul::f); } TEST(MixedJoin, partial_sparse_overlap) { - auto lhs = GS(1.0).map("a", 8, 1).map("c", 8, 1).idx("d", 8).gen(); - auto rhs = GS(2.0).map("b", 8, 2).map("c", 8, 2).idx("d", 8).gen(); + auto lhs = GS(1.0).map("a", 8, 1).map("c", 8, 1).idx("d", 8); + auto rhs = GS(2.0).map("b", 8, 2).map("c", 8, 2).idx("d", 8); benchmark_join("mixed partial sparse overlap multiply", lhs, rhs, operation::Mul::f); } TEST(MixedJoin, no_overlap) { - auto lhs = GS(1.0).map("a", 4, 1).map("e", 4, 1).idx("f", 4).gen(); - auto rhs = GS(2.0).map("b", 4, 1).map("c", 4, 1).idx("d", 4).gen(); + auto lhs = GS(1.0).map("a", 4, 1).map("e", 4, 1).idx("f", 4); + auto rhs = GS(2.0).map("b", 4, 1).map("c", 4, 1).idx("d", 4); benchmark_join("mixed no overlap multiply", lhs, rhs, operation::Mul::f); } TEST(MixedJoin, multiply_by_number) { - auto lhs = GS(3.0).gen(); - auto rhs = GS(2.0).map("a", 16, 2).map("b", 16, 2).idx("c", 16).gen(); + auto lhs = GS(3.0); + auto rhs = GS(2.0).map("a", 16, 2).map("b", 16, 2).idx("c", 16); benchmark_join("mixed multiply by number", lhs, rhs, operation::Mul::f); } //----------------------------------------------------------------------------- TEST(ReduceBench, number_reduce) { - auto lhs = GS(1.0).gen(); + auto lhs = GS(1.0); benchmark_reduce("number reduce", lhs, Aggr::SUM, {}); } TEST(ReduceBench, dense_reduce) { - auto lhs = GS(1.0).idx("a", 16).idx("b", 16).idx("c", 16).gen(); + auto lhs = GS(1.0).idx("a", 16).idx("b", 16).idx("c", 16); benchmark_reduce("dense reduce inner", lhs, Aggr::SUM, {"c"}); benchmark_reduce("dense reduce middle", lhs, Aggr::SUM, {"b"}); benchmark_reduce("dense reduce outer", lhs, Aggr::SUM, {"a"}); @@ -886,7 +886,7 @@ TEST(ReduceBench, dense_reduce) { } TEST(ReduceBench, sparse_reduce) { - auto lhs = GS(1.0).map("a", 16, 1).map("b", 16, 1).map("c", 16, 1).gen(); + auto lhs = GS(1.0).map("a", 16, 1).map("b", 16, 1).map("c", 16, 1); benchmark_reduce("sparse reduce inner", lhs, Aggr::SUM, {"c"}); benchmark_reduce("sparse reduce middle", lhs, Aggr::SUM, {"b"}); benchmark_reduce("sparse reduce outer", lhs, Aggr::SUM, {"a"}); @@ -898,7 +898,7 @@ TEST(ReduceBench, sparse_reduce) { TEST(ReduceBench, mixed_reduce) { auto lhs = GS(1.0).map("a", 4, 1).map("b", 4, 1).map("c", 4, 1) - .idx("d", 4).idx("e", 4).idx("f", 4).gen(); + .idx("d", 4).idx("e", 4).idx("f", 4); benchmark_reduce("mixed reduce middle dense", lhs, Aggr::SUM, {"e"}); benchmark_reduce("mixed reduce middle sparse", lhs, Aggr::SUM, {"b"}); benchmark_reduce("mixed reduce middle sparse/dense", lhs, Aggr::SUM, {"b", "e"}); @@ -910,87 +910,87 @@ TEST(ReduceBench, mixed_reduce) { //----------------------------------------------------------------------------- TEST(RenameBench, dense_rename) { - auto lhs = GS(1.0).idx("a", 64).idx("b", 64).gen(); + auto lhs = GS(1.0).idx("a", 64).idx("b", 64); benchmark_rename("dense transpose", lhs, {"a", "b"}, {"b", "a"}); } TEST(RenameBench, sparse_rename) { - auto lhs = GS(1.0).map("a", 64, 1).map("b", 64, 1).gen(); + auto lhs = GS(1.0).map("a", 64, 1).map("b", 64, 1); benchmark_rename("sparse transpose", lhs, {"a", "b"}, {"b", "a"}); } TEST(RenameBench, mixed_rename) { - auto lhs = GS(1.0).map("a", 8, 1).map("b", 8, 1).idx("c", 8).idx("d", 8).gen(); + auto lhs = GS(1.0).map("a", 8, 1).map("b", 8, 1).idx("c", 8).idx("d", 8); benchmark_rename("mixed multi-transpose", lhs, {"a", "b", "c", "d"}, {"b", "a", "d", "c"}); } //----------------------------------------------------------------------------- TEST(MergeBench, dense_merge) { - auto lhs = GS(1.0).idx("a", 64).idx("b", 64).gen(); - auto rhs = GS(2.0).idx("a", 64).idx("b", 64).gen(); + auto lhs = GS(1.0).idx("a", 64).idx("b", 64); + auto rhs = GS(2.0).idx("a", 64).idx("b", 64); benchmark_merge("dense merge", lhs, rhs, operation::Max::f); } TEST(MergeBench, sparse_merge_big_small) { - auto lhs = GS(1.0).map("a", 64, 1).map("b", 64, 1).gen(); - auto rhs = GS(2.0).map("a", 8, 1).map("b", 8, 1).gen(); + auto lhs = GS(1.0).map("a", 64, 1).map("b", 64, 1); + auto rhs = GS(2.0).map("a", 8, 1).map("b", 8, 1); benchmark_merge("sparse merge big vs small", lhs, rhs, operation::Max::f); } TEST(MergeBench, sparse_merge_minimal_overlap) { - auto lhs = GS(1.0).map("a", 64, 11).map("b", 32, 11).gen(); - auto rhs = GS(2.0).map("a", 32, 13).map("b", 64, 13).gen(); + auto lhs = GS(1.0).map("a", 64, 11).map("b", 32, 11); + auto rhs = GS(2.0).map("a", 32, 13).map("b", 64, 13); benchmark_merge("sparse merge minimal overlap", lhs, rhs, operation::Max::f); } TEST(MergeBench, mixed_merge) { - auto lhs = GS(1.0).map("a", 64, 1).idx("b", 64).gen(); - auto rhs = GS(2.0).map("a", 64, 2).idx("b", 64).gen(); + auto lhs = GS(1.0).map("a", 64, 1).idx("b", 64); + auto rhs = GS(2.0).map("a", 64, 2).idx("b", 64); benchmark_merge("mixed merge", lhs, rhs, operation::Max::f); } //----------------------------------------------------------------------------- TEST(MapBench, number_map) { - auto lhs = GS(1.75).gen(); + auto lhs = GS(1.75); benchmark_map("number map", lhs, operation::Floor::f); } TEST(MapBench, dense_map) { - auto lhs = GS(1.75).idx("a", 64).idx("b", 64).gen(); + auto lhs = GS(1.75).idx("a", 64).idx("b", 64); benchmark_map("dense map", lhs, operation::Floor::f); } TEST(MapBench, sparse_map_small) { - auto lhs = GS(1.75).map("a", 4, 1).map("b", 4, 1).gen(); + auto lhs = GS(1.75).map("a", 4, 1).map("b", 4, 1); benchmark_map("sparse map small", lhs, operation::Floor::f); } TEST(MapBench, sparse_map_big) { - auto lhs = GS(1.75).map("a", 64, 1).map("b", 64, 1).gen(); + auto lhs = GS(1.75).map("a", 64, 1).map("b", 64, 1); benchmark_map("sparse map big", lhs, operation::Floor::f); } TEST(MapBench, mixed_map) { - auto lhs = GS(1.75).map("a", 64, 1).idx("b", 64).gen(); + auto lhs = GS(1.75).map("a", 64, 1).idx("b", 64); benchmark_map("mixed map", lhs, operation::Floor::f); } //----------------------------------------------------------------------------- TEST(TensorCreateBench, create_dense) { - auto proto = GS(1.0).idx("a", 32).idx("b", 32).gen(); + auto proto = GS(1.0).idx("a", 32).idx("b", 32); benchmark_tensor_create("dense tensor create", proto); } TEST(TensorCreateBench, create_sparse) { - auto proto = GS(1.0).map("a", 32, 1).map("b", 32, 1).gen(); + auto proto = GS(1.0).map("a", 32, 1).map("b", 32, 1); benchmark_tensor_create("sparse tensor create", proto); } TEST(TensorCreateBench, create_mixed) { - auto proto = GS(1.0).map("a", 32, 1).idx("b", 32).gen(); + auto proto = GS(1.0).map("a", 32, 1).idx("b", 32); benchmark_tensor_create("mixed tensor create", proto); } @@ -998,7 +998,7 @@ TEST(TensorCreateBench, create_mixed) { TEST(TensorLambdaBench, simple_lambda) { auto type = ValueType::from_spec("tensor<float>(a[64],b[64])"); - auto p0 = GS(3.5).gen(); + auto p0 = GS(3.5); auto function = Function::parse({"a", "b", "p0"}, "(a*64+b)*p0"); ASSERT_FALSE(function->has_error()); benchmark_tensor_lambda("simple tensor lambda", type, p0, *function); @@ -1006,7 +1006,7 @@ TEST(TensorLambdaBench, simple_lambda) { TEST(TensorLambdaBench, complex_lambda) { auto type = ValueType::from_spec("tensor<float>(a[64],b[64])"); - auto p0 = GS(1.0).idx("x", 3).gen(); + auto p0 = GS(1.0).idx("x", 3); auto function = Function::parse({"a", "b", "p0"}, "(a*64+b)*reduce(p0,sum)"); ASSERT_FALSE(function->has_error()); benchmark_tensor_lambda("complex tensor lambda", type, p0, *function); @@ -1015,7 +1015,7 @@ TEST(TensorLambdaBench, complex_lambda) { //----------------------------------------------------------------------------- TEST(TensorPeekBench, dense_peek) { - auto lhs = GS(1.0).idx("a", 64).idx("b", 64).gen(); + auto lhs = GS(1.0).idx("a", 64).idx("b", 64); benchmark_tensor_peek("dense peek cell verbatim", lhs, verbatim_peek().add("a", 1).add("b", 2)); benchmark_tensor_peek("dense peek cell dynamic", lhs, dynamic_peek().add("a", 1).add("b", 2)); benchmark_tensor_peek("dense peek vector verbatim", lhs, verbatim_peek().add("a", 1)); @@ -1023,7 +1023,7 @@ TEST(TensorPeekBench, dense_peek) { } TEST(TensorPeekBench, sparse_peek) { - auto lhs = GS(1.0).map("a", 64, 1).map("b", 64, 1).gen(); + auto lhs = GS(1.0).map("a", 64, 1).map("b", 64, 1); benchmark_tensor_peek("sparse peek cell verbatim", lhs, verbatim_peek().add("a", 1).add("b", 2)); benchmark_tensor_peek("sparse peek cell dynamic", lhs, dynamic_peek().add("a", 1).add("b", 2)); benchmark_tensor_peek("sparse peek vector verbatim", lhs, verbatim_peek().add("a", 1)); @@ -1031,7 +1031,7 @@ TEST(TensorPeekBench, sparse_peek) { } TEST(TensorPeekBench, mixed_peek) { - auto lhs = GS(1.0).map("a", 8, 1).map("b", 8, 1).idx("c", 8).idx("d", 8).gen(); + auto lhs = GS(1.0).map("a", 8, 1).map("b", 8, 1).idx("c", 8).idx("d", 8); benchmark_tensor_peek("mixed peek cell verbatim", lhs, verbatim_peek().add("a", 1).add("b", 2).add("c", 3).add("d", 4)); benchmark_tensor_peek("mixed peek cell dynamic", lhs, dynamic_peek().add("a", 1).add("b", 2).add("c", 3).add("d", 4)); benchmark_tensor_peek("mixed peek dense verbatim", lhs, verbatim_peek().add("a", 1).add("b", 2)); diff --git a/eval/src/vespa/eval/eval/test/eval_fixture.cpp b/eval/src/vespa/eval/eval/test/eval_fixture.cpp index 966954b9026..1c1d1aef18d 100644 --- a/eval/src/vespa/eval/eval/test/eval_fixture.cpp +++ b/eval/src/vespa/eval/eval/test/eval_fixture.cpp @@ -105,82 +105,21 @@ std::vector<Value::CREF> get_refs(const std::vector<Value::UP> &values) { return result; } -void add_cell_values(TensorSpec &spec, TensorSpec::Address &addr, - const std::vector<std::pair<vespalib::string, size_t> > &dims, - size_t idx, size_t &seq, std::function<double(size_t)> gen) -{ - if (idx < dims.size()) { - for (size_t i = 0; i < dims[idx].second; ++i) { - addr.emplace(dims[idx].first, TensorSpec::Label(i)).first->second = TensorSpec::Label(i); - add_cell_values(spec, addr, dims, idx + 1, seq, gen); - } - } else { - spec.add(addr, gen(seq++)); - } -} - -TensorSpec make_dense(const vespalib::string &type, - const std::vector<std::pair<vespalib::string, size_t> > &dims, - std::function<double(size_t)> gen) -{ - TensorSpec spec(type); - TensorSpec::Address addr; - size_t seq = 0; - add_cell_values(spec, addr, dims, 0, seq, gen); - return spec; -} - } // namespace vespalib::eval::test ParamRepo & -ParamRepo::add(const vespalib::string &name, TensorSpec value_in, bool is_mutable_in) { +EvalFixture::ParamRepo::add(const vespalib::string &name, TensorSpec value) +{ ASSERT_TRUE(map.find(name) == map.end()); - map.insert_or_assign(name, Param(std::move(value_in), is_mutable_in)); + map.insert_or_assign(name, Param(std::move(value), false)); return *this; } ParamRepo & -EvalFixture::ParamRepo::add_vector(const char *d1, size_t s1, gen_fun_t gen) -{ - return add_dense({{d1, s1}}, gen); -} - -ParamRepo & -EvalFixture::ParamRepo::add_matrix(const char *d1, size_t s1, const char *d2, size_t s2, gen_fun_t gen) +EvalFixture::ParamRepo::add_mutable(const vespalib::string &name, TensorSpec value) { - return add_dense({{d1, s1}, {d2, s2}}, gen); -} - -ParamRepo & -EvalFixture::ParamRepo::add_cube(const char *d1, size_t s1, const char *d2, size_t s2, const char *d3, size_t s3, gen_fun_t gen) -{ - return add_dense({{d1, s1}, {d2, s2}, {d3, s3}}, gen); -} - -ParamRepo & -EvalFixture::ParamRepo::add_dense(const std::vector<std::pair<vespalib::string, size_t> > &dims, gen_fun_t gen) -{ - vespalib::string prev; - vespalib::string name; - vespalib::string type; - for (const auto &dim: dims) { - if (!prev.empty()) { - ASSERT_LESS(prev, dim.first); - type += ","; - } - name += fmt("%s%zu", dim.first.c_str(), dim.second); - type += fmt("%s[%zu]", dim.first.c_str(), dim.second); - prev = dim.first; - } - int cpy = 1; - vespalib::string suffix = ""; - while (map.find(name + suffix) != map.end()) { - suffix = fmt("$%d", ++cpy); - } - add(name + suffix, make_dense(fmt("tensor(%s)", type.c_str()), dims, gen)); - add(name + "f" + suffix, make_dense(fmt("tensor<float>(%s)", type.c_str()), dims, gen)); - add_mutable("@" + name + suffix, make_dense(fmt("tensor(%s)", type.c_str()), dims, gen)); - add_mutable("@" + name + "f" + suffix, make_dense(fmt("tensor<float>(%s)", type.c_str()), dims, gen)); + ASSERT_TRUE(map.find(name) == map.end()); + map.insert_or_assign(name, Param(std::move(value), true)); return *this; } @@ -192,12 +131,12 @@ EvalFixture::ParamRepo::add_variants(const vespalib::string &name_base, auto name_f = name_base + "_f"; auto name_m = "@" + name_base; auto name_m_f = "@" + name_base + "_f"; - auto dbl_ts = spec.cpy().cells_double().gen(); - auto flt_ts = spec.cpy().cells_float().gen(); - add(name_base, dbl_ts); - add(name_f, flt_ts); - add_mutable(name_m, dbl_ts); - add_mutable(name_m_f, flt_ts); + auto dbl_gs = spec.cpy().cells_double(); + auto flt_gs = spec.cpy().cells_float(); + add(name_base, dbl_gs); + add(name_f, flt_gs); + add_mutable(name_m, dbl_gs); + add_mutable(name_m_f, flt_gs); return *this; } diff --git a/eval/src/vespa/eval/eval/test/eval_fixture.h b/eval/src/vespa/eval/eval/test/eval_fixture.h index 44adaca3298..71198a160a9 100644 --- a/eval/src/vespa/eval/eval/test/eval_fixture.h +++ b/eval/src/vespa/eval/eval/test/eval_fixture.h @@ -30,21 +30,12 @@ public: using gen_fun_t = std::function<double(size_t)>; static double gen_N(size_t seq) { return (seq + 1); } ParamRepo() : map() {} - ParamRepo &add(const vespalib::string &name, TensorSpec value_in, bool is_mutable_in); - ParamRepo &add(const vespalib::string &name, const TensorSpec &value) { - return add(name, value, false); - } - ParamRepo &add_mutable(const vespalib::string &name, const TensorSpec &value) { - return add(name, value, true); - } - ParamRepo &add_vector(const char *d1, size_t s1, gen_fun_t = gen_N); - ParamRepo &add_matrix(const char *d1, size_t s1, const char *d2, size_t s2, gen_fun_t gen = gen_N); - ParamRepo &add_cube(const char *d1, size_t s1, const char *d2, size_t s2, const char *d3, size_t s3, gen_fun_t gen = gen_N); - ParamRepo &add_dense(const std::vector<std::pair<vespalib::string, size_t> > &dims, gen_fun_t gen = gen_N); + + ParamRepo &add(const vespalib::string &name, TensorSpec value); + ParamRepo &add_mutable(const vespalib::string &name, TensorSpec spec); // produce 4 variants: float/double * mutable/const - ParamRepo &add_variants(const vespalib::string &name_base, - const GenSpec &spec); + ParamRepo &add_variants(const vespalib::string &name_base, const GenSpec &spec); ~ParamRepo() {} }; diff --git a/eval/src/vespa/eval/eval/test/gen_spec.h b/eval/src/vespa/eval/eval/test/gen_spec.h index 280f6c1d8db..b3a3916967b 100644 --- a/eval/src/vespa/eval/eval/test/gen_spec.h +++ b/eval/src/vespa/eval/eval/test/gen_spec.h @@ -128,10 +128,9 @@ public: _seq = seq_in; return *this; } - // TODO: stop using and remove - GenSpec &seq_bias(double bias) { return seq(N(bias)); } ValueType type() const; TensorSpec gen() const; + operator TensorSpec() const { return gen(); } }; } // namespace diff --git a/eval/src/vespa/eval/eval/test/tensor_model.cpp b/eval/src/vespa/eval/eval/test/tensor_model.cpp index 3d30a7a6734..b7ad4d0071f 100644 --- a/eval/src/vespa/eval/eval/test/tensor_model.cpp +++ b/eval/src/vespa/eval/eval/test/tensor_model.cpp @@ -26,13 +26,13 @@ vespalib::string infer_type(const Layout &layout) { } TensorSpec spec(const Layout &layout, const Sequence &seq) { - return GenSpec(layout.domains).cells(layout.cell_type).seq(seq).gen(); + return GenSpec(layout.domains).cells(layout.cell_type).seq(seq); } TensorSpec spec(const Domain &domain, const Sequence &seq) { return spec(Layout({domain}), seq); } TensorSpec spec(double value) { - return GenSpec(value).gen(); + return GenSpec(value); } TensorSpec spec(const vespalib::string &type, |