18#include "kernels/Utils.h"
28void UnpackImpl(
const circle::Operator *
cur_op,
const circle::Tensor *input,
int output_count,
29 int axis, RuntimeGraph *runtime_graph)
37 const auto input_dims = Tensor::tensor_shape(input);
39 const int dimensions = input_dims.size();
43 axis += input_dims.size();
47 for (
int i = 0;
i < axis; ++
i)
52 for (
int i = axis + 1;
i < dimensions; ++
i)
62 const T *
input_data = kernels::getTensorData<T>(runtime_graph->getDataByTensor(input));
64 for (
int i = 0;
i < output_count; ++
i)
69 const auto t = runtime_graph->getCircleTensorByIndex(
output_index);
71 T *
output_data = kernels::getTensorData<T>(runtime_graph->getDataByTensor(t));
86 const auto input_index =
cur_op->inputs()->operator[](0);
89 assert(input_index != -1);
95 assert(input !=
nullptr);
96 assert(output !=
nullptr);
98 const auto *options =
cur_op->builtin_options_as_UnpackOptions();
103 for (
int i = 0;
i < Tensor::num_dims(input); ++
i)
105 if (
i == options->axis())
121 const auto input_index =
cur_op->inputs()->operator[](0);
122 assert(input_index != -1);
125 assert(input !=
nullptr);
127 const auto type = Tensor::element_type(input);
129 const auto *options =
cur_op->builtin_options_as_UnpackOptions();
134 case DataType::FLOAT32:
141 assert(
false &&
"Unsupported type");
const circle::Tensor * getCircleTensorByIndex(int32_t index)
#define LUCI_INTERPRETER_CHECK(cond)
void execute_kernel_CircleUnpack(const circle::Operator *cur_op, BaseRuntimeGraph *runtime_graph)
void configure_kernel_CircleUnpack(const circle::Operator *cur_op, BaseRuntimeGraph *runtime_graph)
T must_cast(loco::Node *node)
const loco::Dimension & dim(uint32_t axis) const