--- /dev/null
+#ifndef __MORPH_DIMS_H__
+#define __MORPH_DIMS_H__
+
+#include <nncc/core/ADT/tensor/Shape.h>
+
+#include <vector>
+
+namespace morph
+{
+
+template <typename T> using Dims = std::vector<T>;
+
+Dims<uint32_t> as_dims(const nncc::core::ADT::tensor::Shape &);
+
+} // namespace morph
+
+#endif // __MORPH_DIMS_H__
--- /dev/null
+#include "morph/dims.h"
+
+using namespace nncc::core::ADT;
+
+namespace morph
+{
+
+Dims<uint32_t> as_dims(const tensor::Shape &shape)
+{
+ Dims<uint32_t> res;
+
+ for (uint32_t n = 0; n < shape.rank(); ++n)
+ {
+ res.emplace_back(shape.dim(n));
+ }
+
+ return res;
+}
+
+} // namespace morph
--- /dev/null
+#include "morph/dims.h"
+
+#include <gtest/gtest.h>
+
+using namespace nncc::core::ADT;
+
+TEST(DimsTest, as_dims_from_tensor)
+{
+ auto dims = morph::as_dims(tensor::Shape{1, 3, 4, 5});
+
+ ASSERT_EQ(dims.size(), 4);
+ ASSERT_EQ(dims.at(0), 1);
+ ASSERT_EQ(dims.at(1), 3);
+ ASSERT_EQ(dims.at(2), 4);
+ ASSERT_EQ(dims.at(3), 5);
+}