mirror of
https://github.com/vee1e/tflite-micro.git
synced 2026-09-01 17:57:27 +00:00
@tensorflow/micro Add consistent const-tensor checks and error messages across these kernels: TRANSPOSE STRIDED_SLICE FILL BROADCAST_TO EXPAND_DIMS Modify associated kernel unit tests. bug=fixes #3140
54 lines
2.3 KiB
C++
54 lines
2.3 KiB
C++
/* Copyright 2025 The TensorFlow Authors. All Rights Reserved.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
==============================================================================*/
|
|
#include "tensorflow/lite/c/common.h"
|
|
#include "tensorflow/lite/kernels/internal/reference/transpose.h"
|
|
#include "tensorflow/lite/kernels/internal/tensor_ctypes.h"
|
|
#include "tensorflow/lite/kernels/internal/types.h"
|
|
#include "tensorflow/lite/kernels/kernel_util.h"
|
|
#include "tensorflow/lite/micro/kernels/kernel_util.h"
|
|
#include "tensorflow/lite/micro/kernels/transpose.h"
|
|
#include "tensorflow/lite/micro/micro_log.h"
|
|
|
|
namespace tflite {
|
|
|
|
TfLiteStatus TransposePrepare(TfLiteContext* context, TfLiteNode* node) {
|
|
TF_LITE_ENSURE_EQ(context, NumInputs(node), 2);
|
|
TF_LITE_ENSURE_EQ(context, NumOutputs(node), 1);
|
|
|
|
TransposeContext op_context(context, node);
|
|
|
|
// Ensure validity of input tensor.
|
|
TF_LITE_ENSURE_MSG(context, NumDimensions(op_context.input) <= 5,
|
|
"Transpose op only supports 1D-5D input arrays.");
|
|
TF_LITE_ENSURE_TYPES_EQ(context, op_context.input->type,
|
|
op_context.output->type);
|
|
TF_LITE_ENSURE_MSG(context, IsConstantTensor(op_context.perm),
|
|
"Non-constant >perm< tensor is not supported");
|
|
|
|
int dims = NumDimensions(op_context.input);
|
|
const int32_t* perm_data = GetTensorData<int32_t>(op_context.perm);
|
|
|
|
// Ensure validity of the permutations tensor as a 1D tensor.
|
|
TF_LITE_ENSURE_EQ(context, NumDimensions(op_context.perm), 1);
|
|
TF_LITE_ENSURE_EQ(context, op_context.perm->dims->data[0], dims);
|
|
for (int idx = 0; idx < dims; ++idx) {
|
|
TF_LITE_ENSURE_MSG(context, (perm_data[idx] >= 0 && perm_data[idx] < dims),
|
|
"Transpose op permutations array is out of bounds.");
|
|
}
|
|
|
|
return kTfLiteOk;
|
|
}
|
|
|
|
} // namespace tflite
|