diff options
author | HÃ¥vard Pettersen <3535158+havardpe@users.noreply.github.com> | 2021-08-25 10:29:07 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-25 10:29:07 +0200 |
commit | cdf4bbf395ee8775ce029e01910d26e2a4aee8e2 (patch) | |
tree | 073aff3521732ac24b30a2eb935632216dac79cc /eval | |
parent | 25a715b5479f1a8d001dbc2e6d4993652f82ba67 (diff) | |
parent | fbf0652e9e85e79eefb738149d48b94ce9f3909f (diff) |
Merge pull request #18844 from vespa-engine/havardpe/tensor-as-expression
enable making an expression from a tensor spec.
Diffstat (limited to 'eval')
-rw-r--r-- | eval/src/tests/eval/tensor_spec/tensor_spec_test.cpp | 11 | ||||
-rw-r--r-- | eval/src/vespa/eval/eval/tensor_spec.cpp | 14 | ||||
-rw-r--r-- | eval/src/vespa/eval/eval/tensor_spec.h | 1 |
3 files changed, 26 insertions, 0 deletions
diff --git a/eval/src/tests/eval/tensor_spec/tensor_spec_test.cpp b/eval/src/tests/eval/tensor_spec/tensor_spec_test.cpp index aa62e52f6f4..7c48606d6dd 100644 --- a/eval/src/tests/eval/tensor_spec/tensor_spec_test.cpp +++ b/eval/src/tests/eval/tensor_spec/tensor_spec_test.cpp @@ -19,6 +19,17 @@ TEST("require that a tensor spec can be converted to and from slime") { EXPECT_EQUAL(TensorSpec::from_slime(slime.get()), spec); } +TEST("require that a tensor spec can be converted to and from an expression") { + TensorSpec spec("tensor<float>(x[2],y{})"); + spec.add({{"x", 0}, {"y", "xxx"}}, 1.0) + .add({{"x", 0}, {"y", "yyy"}}, 2.0) + .add({{"x", 1}, {"y", "xxx"}}, 3.0) + .add({{"x", 1}, {"y", "yyy"}}, 4.0); + vespalib::string expr = spec.to_expr(); + fprintf(stderr, "expr: \n%s\n", expr.c_str()); + EXPECT_EQUAL(TensorSpec::from_expr(expr), spec); +} + TEST("require that tensor specs can be diffed") { TensorSpec expect("tensor(x[2],y{})"); expect.add({{"x", 0}, {"y", "xxx"}}, 1.5) diff --git a/eval/src/vespa/eval/eval/tensor_spec.cpp b/eval/src/vespa/eval/eval/tensor_spec.cpp index 684242fc485..5e833710e8c 100644 --- a/eval/src/vespa/eval/eval/tensor_spec.cpp +++ b/eval/src/vespa/eval/eval/tensor_spec.cpp @@ -284,6 +284,20 @@ TensorSpec::to_slime(slime::Cursor &tensor) const } } +vespalib::string +TensorSpec::to_expr() const +{ + vespalib::string out = _type; + out.append(":{"); + CommaTracker cell_list; + for (const auto &cell: _cells) { + cell_list.maybe_add_comma(out); + out.append(make_string("%s:%g", as_string(cell.first).c_str(), cell.second.value)); + } + out.append("}"); + return out; +} + TensorSpec TensorSpec::from_slime(const slime::Inspector &tensor) { diff --git a/eval/src/vespa/eval/eval/tensor_spec.h b/eval/src/vespa/eval/eval/tensor_spec.h index eab4c4ff49d..29e8a978c12 100644 --- a/eval/src/vespa/eval/eval/tensor_spec.h +++ b/eval/src/vespa/eval/eval/tensor_spec.h @@ -75,6 +75,7 @@ public: vespalib::string to_string() const; TensorSpec normalize() const; void to_slime(slime::Cursor &tensor) const; + vespalib::string to_expr() const; static TensorSpec from_slime(const slime::Inspector &tensor); static TensorSpec from_value(const eval::Value &value); static TensorSpec from_expr(const vespalib::string &expr); |