namespace ops
{
-/**
- * @brief Pad operation class
- */
class PadOp : public Operation
{
public:
/**
+ * TODO Remove this constructor after eliminating all its uses.
* @brief Class for Pad operation in modelIR
* @param arg The input
* @param num_dims Number of dimensions
*/
PadOp(Output *arg, int32_t num_dims, std::vector<std::pair<int32_t, int32_t>> paddings,
const Scalar &scalar_value)
- : Operation(Type::pad, {arg}), _num_dims(num_dims), _paddings(std::move(paddings)),
- _scalar_value(scalar_value)
+ : Operation(Type::pad, {arg})
+
{
+ _padding_before.resize(num_dims);
+ _padding_after.resize(num_dims);
+ for (int i = 0; i < num_dims; ++i)
+ {
+ _padding_before[i] = paddings[i].first;
+ _padding_after[i] = paddings[i].second;
+ }
+ _padding_value = scalar_value.get<float>();
+ inferOutputShapes();
+ }
+
+ /// @param arg The tensor to be padded.
+ /// @param padding_before The padding to be added before the tensor.
+ /// @param padding_after The padding to be added after the tensor.
+ /// @param padding_value The value to be used for padding.
+ PadOp(Output *arg, std::vector<std::int32_t> padding_before,
+ std::vector<std::int32_t> padding_after, float padding_value)
+ : Operation(Type::pad, {arg}), _padding_before(std::move(padding_before)),
+ _padding_after(std::move(padding_after)), _padding_value(padding_value)
+ {
+ assert(_padding_before.size() == _padding_after.size());
inferOutputShapes();
}
Operation *copyWithInputs(const std::vector<Output *> &inputs) override
{
- return new PadOp(inputs[0], _num_dims, _paddings, _scalar_value);
+ return new PadOp(inputs[0], _padding_before, _padding_after, _padding_value);
}
/**
+ * TODO Remove this method after eliminating all its uses.
* @param dim Dimension number
* @return Pair of paddings for dimension
*/
- std::pair<int32_t, int32_t> getPaddingForDim(int dim) const { return _paddings[dim]; }
+ std::pair<int32_t, int32_t> getPaddingForDim(int dim) const
+ {
+ return {_padding_before[dim], _padding_after[dim]};
+ }
/**
+ * TODO Remove this method after eliminating all its uses.
* @return Number of dimensions
*/
- int getNumDim() const { return _num_dims; }
+ int getNumDim() const { return getInputShape(0).rank(); }
/**
+ * TODO Remove this method after eliminating all its uses.
* @return Scalar value
*/
- Scalar getScalar() const { return _scalar_value; }
+ Scalar getScalar() const
+ {
+ return Scalar(reinterpret_cast<const char *>(&_padding_value), DataType::FLOAT32,
+ sizeof(float));
+ }
+
+ const std::vector<std::int32_t> &getPaddingBefore() const { return _padding_before; }
+
+ const std::vector<std::int32_t> &getPaddingAfter() const { return _padding_after; }
+
+ float getPaddingValue() const { return _padding_value; }
private:
void inferOutputShapes();
- std::vector<std::pair<int32_t, int32_t>> _paddings;
- int32_t _num_dims;
- Scalar _scalar_value;
+ std::vector<std::int32_t> _padding_before;
+ std::vector<std::int32_t> _padding_after;
+ float _padding_value;
};
} // namespace ops