51 const circle::Tensor *input = runtime_kernel.
inputs[inputTensorIdx];
52 const circle::Tensor *positions = runtime_kernel.
inputs[positionsTensorIdx];
53 const circle::Tensor *output = runtime_kernel.
outputs[outputTensorIdx];
55 assert(input !=
nullptr);
56 assert(positions !=
nullptr);
57 assert(output !=
nullptr);
59 status = utils::checkCondition(input->type() == output->type());
63 const auto *options = runtime_kernel.
first_operator->builtin_options_as_GatherOptions();
65 if (options ==
nullptr)
68 status = utils::checkCondition(positions->type() == circle::TensorType_INT32);
72 auto input_type = input->type();
73 status = utils::checkCondition(input_type == circle::TensorType_INT32 or
74 input_type == circle::TensorType_FLOAT32 or
75 input_type == circle::TensorType_INT8);
80 if (input_type == circle::TensorType_INT8)
82 status = utils::checkCondition(*output->quantization()->scale()->begin() ==
83 *input->quantization()->scale()->begin());
86 status = utils::checkCondition(*output->quantization()->zero_point()->begin() ==
87 *input->quantization()->zero_point()->begin());
93 int32_t axis = options->axis();
104 status = utils::checkCondition(axis >= 0 and axis < num_dims);
108 int32_t batch_dims = options->batch_dims();
114 batch_dims += coords_num_dims;
117 status = utils::checkCondition(batch_dims <= axis and batch_dims >= 0 and
118 batch_dims < num_dims and batch_dims <= coords_num_dims);
123 for (
int i = 0; i < batch_dims; ++i)
125 status = utils::checkCondition(input_shape.
dims(i) == positions_shape.
dims(i));