diff options
Diffstat (limited to 'eval/src')
9 files changed, 23 insertions, 13 deletions
diff --git a/eval/src/apps/tensor_conformance/generate.cpp b/eval/src/apps/tensor_conformance/generate.cpp index f70c472cbcd..f3a99f8a36c 100644 --- a/eval/src/apps/tensor_conformance/generate.cpp +++ b/eval/src/apps/tensor_conformance/generate.cpp @@ -193,6 +193,8 @@ void generate_tensor_concat(TestBuilder &dst) { spec({x(2),y(2),z(3)}, Seq({1.0, 2.0, 3.0, 1.0, 2.0, 3.0, 4.0, 4.0, 4.0, 5.0, 5.0, 5.0}))); dst.add("concat(a,b,x)", {{"a", spec(y(3), Seq({1.0, 2.0, 3.0}))}, {"b", spec(y(2), Seq({4.0, 5.0}))}}, spec({x(2), y(2)}, Seq({1.0, 2.0, 4.0, 5.0}))); + dst.add("concat(concat(a,b,x),concat(c,d,x),y)", {{"a", spec(1.0)}, {"b", spec(2.0)}, {"c", spec(3.0)}, {"d", spec(4.0)}}, + spec({x(2), y(2)}, Seq({1.0, 3.0, 2.0, 4.0}))); } //----------------------------------------------------------------------------- diff --git a/eval/src/apps/tensor_conformance/test_spec.json b/eval/src/apps/tensor_conformance/test_spec.json index 513d5e8e902..335c4bcb939 100644 --- a/eval/src/apps/tensor_conformance/test_spec.json +++ b/eval/src/apps/tensor_conformance/test_spec.json @@ -1235,6 +1235,7 @@ {"expression":"concat(a,b,x)","inputs":{"a":"0x02020178020179023FF0000000000000400000000000000040080000000000004010000000000000","b":"0x020101780240140000000000004018000000000000"},"result":{"expect":"0x02020178040179023FF00000000000004000000000000000400800000000000040100000000000004014000000000000401400000000000040180000000000004018000000000000"}} {"expression":"concat(a,b,x)","inputs":{"a":"0x0201017A033FF000000000000040000000000000004008000000000000","b":"0x020101790240100000000000004014000000000000"},"result":{"expect":"0x0203017802017902017A033FF0000000000000400000000000000040080000000000003FF000000000000040000000000000004008000000000000401000000000000040100000000000004010000000000000401400000000000040140000000000004014000000000000"}} {"expression":"concat(a,b,x)","inputs":{"a":"0x02010179033FF000000000000040000000000000004008000000000000","b":"0x020101790240100000000000004014000000000000"},"result":{"expect":"0x02020178020179023FF0000000000000400000000000000040100000000000004014000000000000"}} +{"expression":"concat(concat(a,b,x),concat(c,d,x),y)","inputs":{"a":"0x02003FF0000000000000","b":"0x02004000000000000000","c":"0x02004008000000000000","d":"0x02004010000000000000"},"result":{"expect":"0x02020178020179023FF0000000000000400800000000000040000000000000004010000000000000"}} {"expression":"rename(a,x,y)","inputs":{"a":"0x02010178053FF00000000000004000000000000000400800000000000040100000000000004014000000000000"},"result":{"expect":"0x02010179053FF00000000000004000000000000000400800000000000040100000000000004014000000000000"}} {"expression":"rename(a,y,x)","inputs":{"a":"0x0202017905017A053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000"},"result":{"expect":"0x0202017805017A053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000"}} {"expression":"rename(a,z,x)","inputs":{"a":"0x0202017905017A053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000"},"result":{"expect":"0x02020178050179053FF000000000000040180000000000004026000000000000403000000000000040350000000000004000000000000000401C00000000000040280000000000004031000000000000403600000000000040080000000000004020000000000000402A0000000000004032000000000000403700000000000040100000000000004022000000000000402C0000000000004033000000000000403800000000000040140000000000004024000000000000402E00000000000040340000000000004039000000000000"}} @@ -1244,4 +1245,4 @@ {"expression":"tensor(x[10])(x+1)","inputs":{},"result":{"expect":"0x020101780A3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402000000000000040220000000000004024000000000000"}} {"expression":"tensor(x[5],y[4])(x*4+(y+1))","inputs":{},"result":{"expect":"0x02020178050179043FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E00000000000040300000000000004031000000000000403200000000000040330000000000004034000000000000"}} {"expression":"tensor(x[5],y[4])(x==y)","inputs":{},"result":{"expect":"0x02020178050179043FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000000000000000000000000000000000000000000000000000000000000000000000"}} -{"num_tests":1246} +{"num_tests":1247} diff --git a/eval/src/tests/tensor/dense_dot_product_function/dense_dot_product_function_test.cpp b/eval/src/tests/tensor/dense_dot_product_function/dense_dot_product_function_test.cpp index abf51d57b9a..71bbacc7806 100644 --- a/eval/src/tests/tensor/dense_dot_product_function/dense_dot_product_function_test.cpp +++ b/eval/src/tests/tensor/dense_dot_product_function/dense_dot_product_function_test.cpp @@ -31,10 +31,10 @@ makeTensor(size_t numCells, double cellBias) double calcDotProduct(const DenseTensor &lhs, const DenseTensor &rhs) { - size_t numCells = std::min(lhs.cells().size(), rhs.cells().size()); + size_t numCells = std::min(lhs.cellsRef().size(), rhs.cellsRef().size()); double result = 0; for (size_t i = 0; i < numCells; ++i) { - result += (lhs.cells()[i] * rhs.cells()[i]); + result += (lhs.cellsRef()[i] * rhs.cellsRef()[i]); } return result; } diff --git a/eval/src/tests/tensor/dense_tensor_builder/dense_tensor_builder_test.cpp b/eval/src/tests/tensor/dense_tensor_builder/dense_tensor_builder_test.cpp index 61efdbe6d22..ae6166f9d24 100644 --- a/eval/src/tests/tensor/dense_tensor_builder/dense_tensor_builder_test.cpp +++ b/eval/src/tests/tensor/dense_tensor_builder/dense_tensor_builder_test.cpp @@ -10,6 +10,15 @@ using vespalib::IllegalArgumentException; using Builder = DenseTensorBuilder; using vespalib::eval::TensorSpec; using vespalib::eval::ValueType; +using vespalib::ConstArrayRef; + +template <typename T> std::vector<T> make_vector(const ConstArrayRef<T> &ref) { + std::vector<T> vec; + for (const T &t: ref) { + vec.push_back(t); + } + return vec; +} void assertTensor(const std::vector<ValueType::Dimension> &expDims, @@ -18,7 +27,7 @@ assertTensor(const std::vector<ValueType::Dimension> &expDims, { const DenseTensor &realTensor = dynamic_cast<const DenseTensor &>(tensor); EXPECT_EQUAL(ValueType::tensor_type(expDims), realTensor.type()); - EXPECT_EQUAL(expCells, realTensor.cells()); + EXPECT_EQUAL(expCells, make_vector(realTensor.cellsRef())); } void diff --git a/eval/src/vespa/eval/tensor/dense/dense_tensor.cpp b/eval/src/vespa/eval/tensor/dense/dense_tensor.cpp index 9693e89bb75..e775385b623 100644 --- a/eval/src/vespa/eval/tensor/dense/dense_tensor.cpp +++ b/eval/src/vespa/eval/tensor/dense/dense_tensor.cpp @@ -25,12 +25,12 @@ void checkCellsSize(const DenseTensor &arg) { auto cellsSize = calcCellsSize(arg.fast_type()); - if (arg.cells().size() != cellsSize) { + if (arg.cellsRef().size() != cellsSize) { throw IllegalStateException(make_string("Wrong cell size, " "expected=%zu, " "actual=%zu", cellsSize, - arg.cells().size())); + arg.cellsRef().size())); } } diff --git a/eval/src/vespa/eval/tensor/dense/dense_tensor.h b/eval/src/vespa/eval/tensor/dense/dense_tensor.h index c45d3c7ccb6..0da5f570674 100644 --- a/eval/src/vespa/eval/tensor/dense/dense_tensor.h +++ b/eval/src/vespa/eval/tensor/dense/dense_tensor.h @@ -19,7 +19,6 @@ class DenseTensor : public DenseTensorView public: typedef std::unique_ptr<DenseTensor> UP; using Cells = std::vector<double>; - using CellsIterator = DenseTensorCellsIterator; private: eval::ValueType _type; @@ -32,8 +31,6 @@ public: DenseTensor(const eval::ValueType &type_in, Cells &&cells_in); DenseTensor(eval::ValueType &&type_in, Cells &&cells_in); bool operator==(const DenseTensor &rhs) const; - const Cells &cells() const { return _cells; } - }; } diff --git a/eval/src/vespa/eval/tensor/serialization/dense_binary_format.cpp b/eval/src/vespa/eval/tensor/serialization/dense_binary_format.cpp index a2d600aa0c9..feb811a92de 100644 --- a/eval/src/vespa/eval/tensor/serialization/dense_binary_format.cpp +++ b/eval/src/vespa/eval/tensor/serialization/dense_binary_format.cpp @@ -22,7 +22,7 @@ makeValueType(std::vector<eval::ValueType::Dimension> &&dimensions) { } void -DenseBinaryFormat::serialize(nbostream &stream, const DenseTensor &tensor) +DenseBinaryFormat::serialize(nbostream &stream, const DenseTensorView &tensor) { stream.putInt1_4Bytes(tensor.fast_type().dimensions().size()); size_t cellsSize = 1; @@ -31,7 +31,7 @@ DenseBinaryFormat::serialize(nbostream &stream, const DenseTensor &tensor) stream.putInt1_4Bytes(dimension.size); cellsSize *= dimension.size; } - const DenseTensor::Cells &cells = tensor.cells(); + DenseTensorView::CellsRef cells = tensor.cellsRef(); assert(cells.size() == cellsSize); for (const auto &value : cells) { stream << value; diff --git a/eval/src/vespa/eval/tensor/serialization/dense_binary_format.h b/eval/src/vespa/eval/tensor/serialization/dense_binary_format.h index 13efc945880..8019648ffcb 100644 --- a/eval/src/vespa/eval/tensor/serialization/dense_binary_format.h +++ b/eval/src/vespa/eval/tensor/serialization/dense_binary_format.h @@ -10,6 +10,7 @@ class nbostream; namespace tensor { class DenseTensor; +class DenseTensorView; /** * Class for serializing a dense tensor. @@ -17,7 +18,7 @@ class DenseTensor; class DenseBinaryFormat { public: - static void serialize(nbostream &stream, const DenseTensor &tensor); + static void serialize(nbostream &stream, const DenseTensorView &tensor); static std::unique_ptr<DenseTensor> deserialize(nbostream &stream); }; diff --git a/eval/src/vespa/eval/tensor/serialization/typed_binary_format.cpp b/eval/src/vespa/eval/tensor/serialization/typed_binary_format.cpp index c242f44df94..5db4f0aeb12 100644 --- a/eval/src/vespa/eval/tensor/serialization/typed_binary_format.cpp +++ b/eval/src/vespa/eval/tensor/serialization/typed_binary_format.cpp @@ -19,7 +19,7 @@ namespace tensor { void TypedBinaryFormat::serialize(nbostream &stream, const Tensor &tensor) { - if (auto denseTensor = dynamic_cast<const DenseTensor *>(&tensor)) { + if (auto denseTensor = dynamic_cast<const DenseTensorView *>(&tensor)) { stream.putInt1_4Bytes(DENSE_BINARY_FORMAT_TYPE); DenseBinaryFormat::serialize(stream, *denseTensor); } else if (auto wrapped = dynamic_cast<const WrappedSimpleTensor *>(&tensor)) { |