summaryrefslogtreecommitdiffstats
path: root/eval
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2020-09-25 08:49:36 +0000
committerArne Juul <arnej@verizonmedia.com>2020-09-28 12:06:35 +0000
commit55b186000b19bec24008eefeae9e4c23a476e91e (patch)
tree9332b0a8b2d16a2282b59e0b08ecd5d2eb5c66fd /eval
parent4390afc15f1de2600a89ed14cffef1881dbf6e62 (diff)
add DenseTensorValueBuilder
Diffstat (limited to 'eval')
-rw-r--r--eval/src/vespa/eval/eval/double_value_builder.cpp1
-rw-r--r--eval/src/vespa/eval/tensor/dense/CMakeLists.txt1
-rw-r--r--eval/src/vespa/eval/tensor/dense/dense_tensor_value_builder.cpp27
-rw-r--r--eval/src/vespa/eval/tensor/dense/dense_tensor_value_builder.h32
4 files changed, 61 insertions, 0 deletions
diff --git a/eval/src/vespa/eval/eval/double_value_builder.cpp b/eval/src/vespa/eval/eval/double_value_builder.cpp
index b90bf294d9d..299880cd2e2 100644
--- a/eval/src/vespa/eval/eval/double_value_builder.cpp
+++ b/eval/src/vespa/eval/eval/double_value_builder.cpp
@@ -11,6 +11,7 @@ DoubleValueBuilder::DoubleValueBuilder(const eval::ValueType &type,
: _value(0.0)
{
assert(type.is_double());
+ assert(type.cell_type() == ValueType::CellType::DOUBLE);
assert(num_mapped_in == 0);
assert(subspace_size_in == 1);
}
diff --git a/eval/src/vespa/eval/tensor/dense/CMakeLists.txt b/eval/src/vespa/eval/tensor/dense/CMakeLists.txt
index b4e849a1dde..3a41fed132e 100644
--- a/eval/src/vespa/eval/tensor/dense/CMakeLists.txt
+++ b/eval/src/vespa/eval/tensor/dense/CMakeLists.txt
@@ -26,6 +26,7 @@ vespa_add_library(eval_tensor_dense OBJECT
dense_tensor_modify.cpp
dense_tensor_peek_function.cpp
dense_tensor_reduce.cpp
+ dense_tensor_value_builder.cpp
dense_tensor_view.cpp
dense_xw_product_function.cpp
index_lookup_table.cpp
diff --git a/eval/src/vespa/eval/tensor/dense/dense_tensor_value_builder.cpp b/eval/src/vespa/eval/tensor/dense/dense_tensor_value_builder.cpp
new file mode 100644
index 00000000000..0dea9b5bdfb
--- /dev/null
+++ b/eval/src/vespa/eval/tensor/dense/dense_tensor_value_builder.cpp
@@ -0,0 +1,27 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "dense_tensor_value_builder.h"
+
+namespace vespalib::tensor {
+
+template<typename T>
+DenseTensorValueBuilder<T>::DenseTensorValueBuilder(
+ const eval::ValueType &type,
+ size_t num_mapped_in,
+ size_t subspace_size_in,
+ size_t)
+ : _type(type),
+ _cells(subspace_size_in)
+{
+ assert(type.is_dense());
+ assert(num_mapped_in == 0);
+ assert(subspace_size_in == type.dense_subspace_size());
+}
+
+template<typename T>
+DenseTensorValueBuilder<T>::~DenseTensorValueBuilder() = default;
+
+template class DenseTensorValueBuilder<float>;
+template class DenseTensorValueBuilder<double>;
+
+}
diff --git a/eval/src/vespa/eval/tensor/dense/dense_tensor_value_builder.h b/eval/src/vespa/eval/tensor/dense/dense_tensor_value_builder.h
new file mode 100644
index 00000000000..374ef3c191d
--- /dev/null
+++ b/eval/src/vespa/eval/tensor/dense/dense_tensor_value_builder.h
@@ -0,0 +1,32 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include "dense_tensor.h"
+
+namespace vespalib::tensor {
+
+/**
+ * A builder for DenseTensor objects
+ **/
+template<typename T>
+class DenseTensorValueBuilder : public eval::ValueBuilder<T>
+{
+private:
+ eval::ValueType _type;
+ std::vector<T> _cells;
+public:
+ DenseTensorValueBuilder(const eval::ValueType &type, size_t num_mapped_in,
+ size_t subspace_size_in, size_t expected_subspaces);
+ ~DenseTensorValueBuilder() override;
+ ArrayRef<T>
+ add_subspace(const std::vector<vespalib::stringref> &) override {
+ return _cells;
+ }
+ std::unique_ptr<eval::Value>
+ build(std::unique_ptr<eval::ValueBuilder<T>>) override {
+ return std::make_unique<DenseTensor<T>>(std::move(_type), std::move(_cells));
+ }
+};
+
+} // namespace