55 const SelectivityVector& rows,
56 std::vector<VectorPtr>& args,
58 exec::EvalCtx& context,
59 VectorPtr& output)
const override {
60 BaseVector::ensureWritable(rows, type, context.pool(), output);
64 BaseVector* input = args[0].get();
66 exec::LocalDecodedVector inputHolder(context, *input, rows);
67 auto decodedInputArray = inputHolder.get();
69 decodedInputArray->base()->as<ArrayVector>()->elements();
71 float* inputValues = baseInputArray->values()->asMutable<
float>();
73 auto numInput = rows.size();
76 Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>>
77 m(inputValues, numInput, inputDims_);
79 std::vector<std::vector<float>> results;
81 if (inputDims_ % 2 != 0) {
82 throw std::runtime_error(fmt::format(
83 "Position Encoding Dims has to be a even number, current value is: {}",
86 for (
int i = 0; i < numInput; i++) {
87 for (
int j = 0; j < inputDims_ / 2; j++) {
88 float angle = i / std::pow(10000.0, 2.0 * j / inputDims_);
89 int dataShift = i * inputDims_ + j * 2;
90 inputValues[dataShift] += std::sin(angle);
91 inputValues[dataShift + 1] += std::cos(angle);
93 std::vector<float> row(m.row(i).data(), m.row(i).data() + m.cols());
94 results.push_back(row);
97 VectorMaker maker{context.pool()};
98 output = maker.arrayVector<
float>(results, REAL());