61 const circle::Tensor *input;
62 const circle::Tensor *axis;
63 const circle::Tensor *output;
69 uint16_t input_index = 0;
70 uint16_t axis_index = 0;
72 const circle::ReducerOptions *options;
76 runtime_kernel.
readKernel(op_index, runtime_context);
78 input = runtime_kernel.
inputs[input1TensorIdx];
79 axis = runtime_kernel.
inputs[input2TensorIdx];
80 output = runtime_kernel.
outputs[outputTensorIdx];
81 assert(input !=
nullptr);
82 assert(axis !=
nullptr);
83 assert(output !=
nullptr);
87 input_data = runtime_kernel.
inputs_data[input1TensorIdx];
88 axis_data = runtime_kernel.
inputs_data[input2TensorIdx];
89 output_data = runtime_kernel.
outputs_data[outputTensorIdx];
90 assert(input_data !=
nullptr);
91 assert(axis_data !=
nullptr);
92 assert(output_data !=
nullptr);
94 options = runtime_kernel.
first_operator->builtin_options_as_ReducerOptions();
96 input_index = runtime_kernel.
inputs_index[input1TensorIdx];
97 axis_index = runtime_kernel.
inputs_index[input2TensorIdx];
106 switch (input->type())
109 case circle::TensorType_FLOAT32:
110 is_ok = reduceProdGeneric<float>(
111 input_shape, core::utils::castInputData<float>(input_data), axis_shape,
112 core::utils::castInputData<int>(axis_data),
output_shape,
113 core::utils::castOutputData<float>(output_data), options->keep_dims());
116 case circle::TensorType_INT32:
117 is_ok = reduceProdGeneric<int32_t>(
118 input_shape, core::utils::castInputData<int32_t>(input_data), axis_shape,
119 core::utils::castInputData<int>(axis_data),
output_shape,
120 core::utils::castOutputData<int32_t>(output_data), options->keep_dims());
122 case circle::TensorType_INT64:
123 is_ok = reduceProdGeneric<int64_t>(
124 input_shape, core::utils::castInputData<int64_t>(input_data), axis_shape,
125 core::utils::castInputData<int>(axis_data),
output_shape,
126 core::utils::castOutputData<int64_t>(output_data), options->keep_dims());
129 assert(
false &&
"Unsupported type");