summaryrefslogtreecommitdiffstats
path: root/eval
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2021-02-04 11:23:59 +0000
committerHåvard Pettersen <havardpe@oath.com>2021-02-04 12:19:58 +0000
commit74d55d62b2eaa30424a6c8fdedcac90dcf0dc571 (patch)
tree1eef5289f42df1ef39bed479839ccc93b35392a7 /eval
parent7bfb2536fc656e401469107d4c1dd182be80248b (diff)
use GenSpec in tensor_model.cpp
Diffstat (limited to 'eval')
-rw-r--r--eval/src/apps/tensor_conformance/generate.cpp2
-rw-r--r--eval/src/vespa/eval/eval/test/gen_spec.h4
-rw-r--r--eval/src/vespa/eval/eval/test/tensor_conformance.cpp4
-rw-r--r--eval/src/vespa/eval/eval/test/tensor_model.cpp70
-rw-r--r--eval/src/vespa/eval/eval/test/tensor_model.h15
5 files changed, 13 insertions, 82 deletions
diff --git a/eval/src/apps/tensor_conformance/generate.cpp b/eval/src/apps/tensor_conformance/generate.cpp
index 537e35dee1f..5feb6b3b3e4 100644
--- a/eval/src/apps/tensor_conformance/generate.cpp
+++ b/eval/src/apps/tensor_conformance/generate.cpp
@@ -32,7 +32,7 @@ void generate_reduce(Aggr aggr, const Sequence &seq, TestBuilder &dst) {
TensorSpec input = spec(layout, seq);
for (const Domain &domain: layout) {
vespalib::string expr = vespalib::make_string("reduce(a,%s,%s)",
- AggrNames::name_of(aggr)->c_str(), domain.dimension.c_str());
+ AggrNames::name_of(aggr)->c_str(), domain.name().c_str());
dst.add(expr, {{"a", input}});
}
{
diff --git a/eval/src/vespa/eval/eval/test/gen_spec.h b/eval/src/vespa/eval/eval/test/gen_spec.h
index 6b9631c66c7..280f6c1d8db 100644
--- a/eval/src/vespa/eval/eval/test/gen_spec.h
+++ b/eval/src/vespa/eval/eval/test/gen_spec.h
@@ -94,6 +94,9 @@ private:
public:
GenSpec() : _dims(), _cells(CellType::DOUBLE), _seq(N()) {}
+ GenSpec(double bias) : _dims(), _cells(CellType::DOUBLE), _seq(N(bias)) {}
+ GenSpec(const std::vector<DimSpec> &dims_in) : _dims(dims_in), _cells(CellType::DOUBLE), _seq(N()) {}
+
GenSpec(GenSpec &&other);
GenSpec(const GenSpec &other);
GenSpec &operator=(GenSpec &&other);
@@ -125,6 +128,7 @@ 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;
diff --git a/eval/src/vespa/eval/eval/test/tensor_conformance.cpp b/eval/src/vespa/eval/eval/test/tensor_conformance.cpp
index 1e9afde3cb9..779ce30663f 100644
--- a/eval/src/vespa/eval/eval/test/tensor_conformance.cpp
+++ b/eval/src/vespa/eval/eval/test/tensor_conformance.cpp
@@ -142,9 +142,9 @@ struct TestContext {
TensorSpec input = spec(layout, seq);
for (const Domain &domain: layout) {
TEST_STATE(fmt("shape: %s, reduce dimension: %s",
- infer_type(layout).c_str(), domain.dimension.c_str()).c_str());
+ infer_type(layout).c_str(), domain.name().c_str()).c_str());
vespalib::string expr = fmt("reduce(a,%s,%s)",
- AggrNames::name_of(aggr)->c_str(), domain.dimension.c_str());
+ AggrNames::name_of(aggr)->c_str(), domain.name().c_str());
TEST_DO(verify_result(factory, expr, {input}));
}
{
diff --git a/eval/src/vespa/eval/eval/test/tensor_model.cpp b/eval/src/vespa/eval/eval/test/tensor_model.cpp
index 7860563bccd..3d30a7a6734 100644
--- a/eval/src/vespa/eval/eval/test/tensor_model.cpp
+++ b/eval/src/vespa/eval/eval/test/tensor_model.cpp
@@ -5,9 +5,6 @@
namespace vespalib::eval::test {
-Domain::Domain(const Domain &) = default;
-Domain::~Domain() = default;
-
Layout float_cells(const Layout &layout) {
return Layout(CellType::FLOAT, layout.domains);
}
@@ -24,77 +21,18 @@ Domain z() { return Domain("z", {}); }
Domain z(size_t size) { return Domain("z", size); }
Domain z(const std::vector<vespalib::string> &keys) { return Domain("z", keys); }
-// Infer the tensor type spanned by the given spaces
vespalib::string infer_type(const Layout &layout) {
- std::vector<ValueType::Dimension> dimensions;
- for (const auto &domain: layout) {
- if (domain.size == 0) {
- dimensions.emplace_back(domain.dimension); // mapped
- } else {
- dimensions.emplace_back(domain.dimension, domain.size); // indexed
- }
- }
- return ValueType::tensor_type(dimensions, layout.cell_type).to_spec();
+ return GenSpec(layout.domains).cells(layout.cell_type).type().to_spec();
}
-// Wrapper for the things needed to generate a tensor
-struct Source {
- using Address = TensorSpec::Address;
-
- const Layout &layout;
- const Sequence &seq;
- Source(const Layout &layout_in, const Sequence &seq_in)
- : layout(layout_in), seq(seq_in) {}
-};
-
-// Mix layout with a number sequence to make a tensor spec
-class TensorSpecBuilder
-{
-private:
- using Label = TensorSpec::Label;
- using Address = TensorSpec::Address;
-
- Source _source;
- TensorSpec _spec;
- Address _addr;
- size_t _idx;
-
- void generate(size_t layout_idx) {
- if (layout_idx == _source.layout.size()) {
- _spec.add(_addr, _source.seq(_idx++));
- } else {
- const Domain &domain = _source.layout[layout_idx];
- if (domain.size > 0) { // indexed
- for (size_t i = 0; i < domain.size; ++i) {
- _addr.emplace(domain.dimension, Label(i)).first->second = Label(i);
- generate(layout_idx + 1);
- }
- } else { // mapped
- for (const vespalib::string &key: domain.keys) {
- _addr.emplace(domain.dimension, Label(key)).first->second = Label(key);
- generate(layout_idx + 1);
- }
- }
- }
- }
-
-public:
- TensorSpecBuilder(const Layout &layout, const Sequence &seq)
- : _source(layout, seq), _spec(infer_type(layout)), _addr(), _idx(0) {}
- TensorSpec build() {
- generate(0);
- return _spec;
- }
-};
-
TensorSpec spec(const Layout &layout, const Sequence &seq) {
- return TensorSpecBuilder(layout, seq).build();
+ return GenSpec(layout.domains).cells(layout.cell_type).seq(seq).gen();
}
TensorSpec spec(const Domain &domain, const Sequence &seq) {
- return TensorSpecBuilder(Layout({domain}), seq).build();
+ return spec(Layout({domain}), seq);
}
TensorSpec spec(double value) {
- return spec(Layout({}), Seq({value}));
+ return GenSpec(value).gen();
}
TensorSpec spec(const vespalib::string &type,
diff --git a/eval/src/vespa/eval/eval/test/tensor_model.h b/eval/src/vespa/eval/eval/test/tensor_model.h
index 56504795cee..85f6e5ccfa4 100644
--- a/eval/src/vespa/eval/eval/test/tensor_model.h
+++ b/eval/src/vespa/eval/eval/test/tensor_model.h
@@ -29,18 +29,7 @@ struct MyIn {
}
};
-// A collection of labels for a single dimension
-struct Domain {
- vespalib::string dimension;
- size_t size; // indexed
- std::vector<vespalib::string> keys; // mapped
- Domain(const Domain &);
- Domain(const vespalib::string &dimension_in, size_t size_in)
- : dimension(dimension_in), size(size_in), keys() {}
- Domain(const vespalib::string &dimension_in, const std::vector<vespalib::string> &keys_in)
- : dimension(dimension_in), size(0), keys(keys_in) {}
- ~Domain();
-};
+using Domain = DimSpec;
struct Layout {
CellType cell_type;
@@ -69,7 +58,7 @@ Domain z();
Domain z(size_t size);
Domain z(const std::vector<vespalib::string> &keys);
-// Infer the tensor type spanned by the given spaces
+// Infer the tensor type implied by the given layout
vespalib::string infer_type(const Layout &layout);
TensorSpec spec(const Layout &layout, const Sequence &seq);