Separate out parse functionality into helper functions.

Non trivial parse function:
 * Mean

Stub parse function:
 * HardSwish
 * Minimum
 * Neg
 * NotEqual
 * Pad
 * PadV2
 * Prelu
 * Relu
 * Relu6
 * Round
 * Rsqrt
 * Sin
 * Sqrt
 * Square
 * Tanh

PiperOrigin-RevId: 318599351
Change-Id: I7dd72ae56611efd57d5b47dce844f2bcdb345766
This commit is contained in:
Advait Jain 2020-06-26 23:13:26 -07:00 committed by TensorFlower Gardener
parent ff28621f73
commit b928c4c5ec
3 changed files with 312 additions and 79 deletions

View File

@ -461,6 +461,14 @@ TfLiteStatus ParseGreaterEqual(const Operator*, BuiltinOperator, ErrorReporter*,
return kTfLiteOk; return kTfLiteOk;
} }
// We have this parse function instead of directly returning kTfLiteOk from the
// switch-case in ParseOpData because this function is used as part of the
// selective registration for the OpResolver implementation in micro.
TfLiteStatus ParseHardSwish(const Operator*, BuiltinOperator, ErrorReporter*,
BuiltinDataAllocator*, void**) {
return kTfLiteOk;
}
TfLiteStatus ParseL2Normalization(const Operator* op, BuiltinOperator, TfLiteStatus ParseL2Normalization(const Operator* op, BuiltinOperator,
ErrorReporter* error_reporter, ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, BuiltinDataAllocator* allocator,
@ -552,6 +560,46 @@ TfLiteStatus ParseMaximum(const Operator*, BuiltinOperator, ErrorReporter*,
return kTfLiteOk; return kTfLiteOk;
} }
// We have this parse function instead of directly returning kTfLiteOk from the
// switch-case in ParseOpData because this function is used as part of the
// selective registration for the OpResolver implementation in micro.
TfLiteStatus ParseMinimum(const Operator*, BuiltinOperator, ErrorReporter*,
BuiltinDataAllocator*, void**) {
return kTfLiteOk;
}
// We have this parse function instead of directly returning kTfLiteOk from the
// switch-case in ParseOpData because this function is used as part of the
// selective registration for the OpResolver implementation in micro.
TfLiteStatus ParseNeg(const Operator*, BuiltinOperator, ErrorReporter*,
BuiltinDataAllocator*, void**) {
return kTfLiteOk;
}
// We have this parse function instead of directly returning kTfLiteOk from the
// switch-case in ParseOpData because this function is used as part of the
// selective registration for the OpResolver implementation in micro.
TfLiteStatus ParseNotEqual(const Operator*, BuiltinOperator, ErrorReporter*,
BuiltinDataAllocator*, void**) {
return kTfLiteOk;
}
// We have this parse function instead of directly returning kTfLiteOk from the
// switch-case in ParseOpData because this function is used as part of the
// selective registration for the OpResolver implementation in micro.
TfLiteStatus ParsePad(const Operator*, BuiltinOperator, ErrorReporter*,
BuiltinDataAllocator*, void**) {
return kTfLiteOk;
}
// We have this parse function instead of directly returning kTfLiteOk from the
// switch-case in ParseOpData because this function is used as part of the
// selective registration for the OpResolver implementation in micro.
TfLiteStatus ParsePadV2(const Operator*, BuiltinOperator, ErrorReporter*,
BuiltinDataAllocator*, void**) {
return kTfLiteOk;
}
TfLiteStatus ParsePool(const Operator* op, BuiltinOperator, TfLiteStatus ParsePool(const Operator* op, BuiltinOperator,
ErrorReporter* error_reporter, ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data) { BuiltinDataAllocator* allocator, void** builtin_data) {
@ -583,6 +631,65 @@ TfLiteStatus ParsePool(const Operator* op, BuiltinOperator,
return kTfLiteOk; return kTfLiteOk;
} }
// We have this parse function instead of directly returning kTfLiteOk from the
// switch-case in ParseOpData because this function is used as part of the
// selective registration for the OpResolver implementation in micro.
TfLiteStatus ParsePrelu(const Operator*, BuiltinOperator, ErrorReporter*,
BuiltinDataAllocator*, void**) {
return kTfLiteOk;
}
// We have this parse function instead of directly returning kTfLiteOk from the
// switch-case in ParseOpData because this function is used as part of the
// selective registration for the OpResolver implementation in micro.
TfLiteStatus ParseQuantize(const Operator*, BuiltinOperator, ErrorReporter*,
BuiltinDataAllocator*, void**) {
return kTfLiteOk;
}
TfLiteStatus ParseReducer(const Operator* op, BuiltinOperator,
ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator,
void** builtin_data) {
CheckParsePointerParams(op, error_reporter, allocator, builtin_data);
SafeBuiltinDataAllocator safe_allocator(allocator);
std::unique_ptr<TfLiteReducerParams,
SafeBuiltinDataAllocator::BuiltinDataDeleter>
params = safe_allocator.Allocate<TfLiteReducerParams>();
TF_LITE_ENSURE(error_reporter, params != nullptr);
const ReducerOptions* schema_params = op->builtin_options_as_ReducerOptions();
if (schema_params != nullptr) {
params->keep_dims = schema_params->keep_dims();
} else {
// TODO(b/157480169): We should either return kTfLiteError or fill in some
// reasonable defaults in the params struct. We are not doing so until we
// better undertand the ramifications of changing the legacy behavior.
}
*builtin_data = params.release();
return kTfLiteOk;
}
// We have this parse function instead of directly returning kTfLiteOk from the
// switch-case in ParseOpData because this function is used as part of the
// selective registration for the OpResolver implementation in micro.
TfLiteStatus ParseRelu(const Operator*, BuiltinOperator, ErrorReporter*,
BuiltinDataAllocator*, void**) {
return kTfLiteOk;
}
// We have this parse function instead of directly returning kTfLiteOk from the
// switch-case in ParseOpData because this function is used as part of the
// selective registration for the OpResolver implementation in micro.
TfLiteStatus ParseRelu6(const Operator*, BuiltinOperator, ErrorReporter*,
BuiltinDataAllocator*, void**) {
return kTfLiteOk;
}
TfLiteStatus ParseReshape(const Operator* op, BuiltinOperator, TfLiteStatus ParseReshape(const Operator* op, BuiltinOperator,
ErrorReporter* error_reporter, ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, BuiltinDataAllocator* allocator,
@ -627,8 +734,24 @@ TfLiteStatus ParseReshape(const Operator* op, BuiltinOperator,
// We have this parse function instead of directly returning kTfLiteOk from the // We have this parse function instead of directly returning kTfLiteOk from the
// switch-case in ParseOpData because this function is used as part of the // switch-case in ParseOpData because this function is used as part of the
// selective registration for the OpResolver implementation in micro. // selective registration for the OpResolver implementation in micro.
TfLiteStatus ParseQuantize(const Operator*, BuiltinOperator, ErrorReporter*, TfLiteStatus ParseRound(const Operator*, BuiltinOperator, ErrorReporter*,
BuiltinDataAllocator*, void**) { BuiltinDataAllocator*, void**) {
return kTfLiteOk;
}
// We have this parse function instead of directly returning kTfLiteOk from the
// switch-case in ParseOpData because this function is used as part of the
// selective registration for the OpResolver implementation in micro.
TfLiteStatus ParseRsqrt(const Operator*, BuiltinOperator, ErrorReporter*,
BuiltinDataAllocator*, void**) {
return kTfLiteOk;
}
// We have this parse function instead of directly returning kTfLiteOk from the
// switch-case in ParseOpData because this function is used as part of the
// selective registration for the OpResolver implementation in micro.
TfLiteStatus ParseSin(const Operator*, BuiltinOperator, ErrorReporter*,
BuiltinDataAllocator*, void**) {
return kTfLiteOk; return kTfLiteOk;
} }
@ -658,6 +781,22 @@ TfLiteStatus ParseSoftmax(const Operator* op, BuiltinOperator,
return kTfLiteOk; return kTfLiteOk;
} }
// We have this parse function instead of directly returning kTfLiteOk from the
// switch-case in ParseOpData because this function is used as part of the
// selective registration for the OpResolver implementation in micro.
TfLiteStatus ParseSqrt(const Operator*, BuiltinOperator, ErrorReporter*,
BuiltinDataAllocator*, void**) {
return kTfLiteOk;
}
// We have this parse function instead of directly returning kTfLiteOk from the
// switch-case in ParseOpData because this function is used as part of the
// selective registration for the OpResolver implementation in micro.
TfLiteStatus ParseSquare(const Operator*, BuiltinOperator, ErrorReporter*,
BuiltinDataAllocator*, void**) {
return kTfLiteOk;
}
TfLiteStatus ParseSvdf(const Operator* op, BuiltinOperator, TfLiteStatus ParseSvdf(const Operator* op, BuiltinOperator,
ErrorReporter* error_reporter, ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data) { BuiltinDataAllocator* allocator, void** builtin_data) {
@ -686,6 +825,14 @@ TfLiteStatus ParseSvdf(const Operator* op, BuiltinOperator,
return kTfLiteOk; return kTfLiteOk;
} }
// We have this parse function instead of directly returning kTfLiteOk from the
// switch-case in ParseOpData because this function is used as part of the
// selective registration for the OpResolver implementation in micro.
TfLiteStatus ParseTanh(const Operator*, BuiltinOperator, ErrorReporter*,
BuiltinDataAllocator*, void**) {
return kTfLiteOk;
}
TfLiteStatus ParseOpData(const Operator* op, BuiltinOperator op_type, TfLiteStatus ParseOpData(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter, ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data) { BuiltinDataAllocator* allocator, void** builtin_data) {
@ -775,6 +922,11 @@ TfLiteStatus ParseOpData(const Operator* op, BuiltinOperator op_type,
builtin_data); builtin_data);
} }
case BuiltinOperator_HARD_SWISH: {
return ParseHardSwish(op, op_type, error_reporter, allocator,
builtin_data);
}
case BuiltinOperator_L2_NORMALIZATION: { case BuiltinOperator_L2_NORMALIZATION: {
return ParseL2Normalization(op, op_type, error_reporter, allocator, return ParseL2Normalization(op, op_type, error_reporter, allocator,
builtin_data); builtin_data);
@ -825,23 +977,98 @@ TfLiteStatus ParseOpData(const Operator* op, BuiltinOperator op_type,
return ParsePool(op, op_type, error_reporter, allocator, builtin_data); return ParsePool(op, op_type, error_reporter, allocator, builtin_data);
} }
case BuiltinOperator_MEAN: {
return ParseReducer(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_MINIMUM: {
return ParseMinimum(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_NEG: {
return ParseNeg(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_NOT_EQUAL: {
return ParseNotEqual(op, op_type, error_reporter, allocator,
builtin_data);
}
case BuiltinOperator_PAD: {
return ParsePad(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_PADV2: {
return ParsePadV2(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_PRELU: {
return ParsePrelu(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_QUANTIZE: { case BuiltinOperator_QUANTIZE: {
return ParseQuantize(op, op_type, error_reporter, allocator, return ParseQuantize(op, op_type, error_reporter, allocator,
builtin_data); builtin_data);
} }
case BuiltinOperator_REDUCE_ANY: {
return ParseReducer(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_REDUCE_MAX: {
return ParseReducer(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_REDUCE_MIN: {
return ParseReducer(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_REDUCE_PROD: {
return ParseReducer(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_RELU: {
return ParseRelu(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_RELU6: {
return ParseRelu6(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_RESHAPE: { case BuiltinOperator_RESHAPE: {
return ParseReshape(op, op_type, error_reporter, allocator, builtin_data); return ParseReshape(op, op_type, error_reporter, allocator, builtin_data);
} }
case BuiltinOperator_ROUND: {
return ParseRound(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_RSQRT: {
return ParseRsqrt(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_SIN: {
return ParseSin(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_SOFTMAX: { case BuiltinOperator_SOFTMAX: {
return ParseSoftmax(op, op_type, error_reporter, allocator, builtin_data); return ParseSoftmax(op, op_type, error_reporter, allocator, builtin_data);
} }
case BuiltinOperator_SQRT: {
return ParseSqrt(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_SQUARE: {
return ParseSquare(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_SUM: {
return ParseReducer(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_SVDF: { case BuiltinOperator_SVDF: {
return ParseSvdf(op, op_type, error_reporter, allocator, builtin_data); return ParseSvdf(op, op_type, error_reporter, allocator, builtin_data);
} }
case BuiltinOperator_TANH: {
return ParseTanh(op, op_type, error_reporter, allocator, builtin_data);
}
case BuiltinOperator_CAST: { case BuiltinOperator_CAST: {
auto params = safe_allocator.Allocate<TfLiteCastParams>(); auto params = safe_allocator.Allocate<TfLiteCastParams>();
TF_LITE_ENSURE(error_reporter, params != nullptr); TF_LITE_ENSURE(error_reporter, params != nullptr);
@ -1106,20 +1333,6 @@ TfLiteStatus ParseOpData(const Operator* op, BuiltinOperator op_type,
*builtin_data = params.release(); *builtin_data = params.release();
return kTfLiteOk; return kTfLiteOk;
} }
case BuiltinOperator_MEAN:
case BuiltinOperator_REDUCE_MAX:
case BuiltinOperator_REDUCE_MIN:
case BuiltinOperator_REDUCE_PROD:
case BuiltinOperator_REDUCE_ANY:
case BuiltinOperator_SUM: {
auto params = safe_allocator.Allocate<TfLiteReducerParams>();
TF_LITE_ENSURE(error_reporter, params != nullptr);
if (const auto* schema_params = op->builtin_options_as_ReducerOptions()) {
params->keep_dims = schema_params->keep_dims();
}
*builtin_data = params.release();
return kTfLiteOk;
}
case BuiltinOperator_SPLIT: { case BuiltinOperator_SPLIT: {
auto params = safe_allocator.Allocate<TfLiteSplitParams>(); auto params = safe_allocator.Allocate<TfLiteSplitParams>();
TF_LITE_ENSURE(error_reporter, params != nullptr); TF_LITE_ENSURE(error_reporter, params != nullptr);
@ -1336,34 +1549,19 @@ TfLiteStatus ParseOpData(const Operator* op, BuiltinOperator op_type,
case BuiltinOperator_EQUAL: case BuiltinOperator_EQUAL:
case BuiltinOperator_EXP: case BuiltinOperator_EXP:
case BuiltinOperator_EXPAND_DIMS: case BuiltinOperator_EXPAND_DIMS:
case BuiltinOperator_HARD_SWISH:
case BuiltinOperator_LOG_SOFTMAX: case BuiltinOperator_LOG_SOFTMAX:
case BuiltinOperator_MATRIX_DIAG: case BuiltinOperator_MATRIX_DIAG:
case BuiltinOperator_MATRIX_SET_DIAG: case BuiltinOperator_MATRIX_SET_DIAG:
case BuiltinOperator_MINIMUM:
case BuiltinOperator_NEG:
case BuiltinOperator_NOT_EQUAL:
case BuiltinOperator_PAD:
case BuiltinOperator_PADV2:
case BuiltinOperator_PRELU:
case BuiltinOperator_RELU:
case BuiltinOperator_RELU6:
case BuiltinOperator_RELU_N1_TO_1: case BuiltinOperator_RELU_N1_TO_1:
case BuiltinOperator_ROUND:
case BuiltinOperator_RSQRT:
case BuiltinOperator_SELECT: case BuiltinOperator_SELECT:
case BuiltinOperator_SELECT_V2: case BuiltinOperator_SELECT_V2:
case BuiltinOperator_SIN:
case BuiltinOperator_SLICE: case BuiltinOperator_SLICE:
case BuiltinOperator_SPACE_TO_BATCH_ND: case BuiltinOperator_SPACE_TO_BATCH_ND:
case BuiltinOperator_SQRT:
case BuiltinOperator_TANH:
case BuiltinOperator_TILE: case BuiltinOperator_TILE:
case BuiltinOperator_TOPK_V2: case BuiltinOperator_TOPK_V2:
case BuiltinOperator_TRANSPOSE: case BuiltinOperator_TRANSPOSE:
case BuiltinOperator_POW: case BuiltinOperator_POW:
case BuiltinOperator_FLOOR_DIV: case BuiltinOperator_FLOOR_DIV:
case BuiltinOperator_SQUARE:
case BuiltinOperator_ZEROS_LIKE: case BuiltinOperator_ZEROS_LIKE:
case BuiltinOperator_FILL: case BuiltinOperator_FILL:
case BuiltinOperator_FLOOR_MOD: case BuiltinOperator_FLOOR_MOD:

View File

@ -140,6 +140,11 @@ TfLiteStatus ParseGreaterEqual(const Operator* op, BuiltinOperator op_type,
BuiltinDataAllocator* allocator, BuiltinDataAllocator* allocator,
void** builtin_data); void** builtin_data);
TfLiteStatus ParseHardSwish(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator,
void** builtin_data);
TfLiteStatus ParseL2Normalization(const Operator* op, BuiltinOperator op_type, TfLiteStatus ParseL2Normalization(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter, ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, BuiltinDataAllocator* allocator,
@ -182,27 +187,88 @@ TfLiteStatus ParseMaximum(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter, ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data); BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParseMinimum(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParseNeg(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParseNotEqual(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator,
void** builtin_data);
TfLiteStatus ParsePad(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParsePadV2(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParsePool(const Operator* op, BuiltinOperator op_type, TfLiteStatus ParsePool(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter, ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data); BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParsePrelu(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParseQuantize(const Operator* op, BuiltinOperator op_type, TfLiteStatus ParseQuantize(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter, ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, BuiltinDataAllocator* allocator,
void** builtin_data); void** builtin_data);
TfLiteStatus ParseReducer(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParseRelu(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParseRelu6(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParseReshape(const Operator* op, BuiltinOperator op_type, TfLiteStatus ParseReshape(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter, ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data); BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParseRound(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParseRsqrt(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParseSin(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParseSoftmax(const Operator* op, BuiltinOperator op_type, TfLiteStatus ParseSoftmax(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter, ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data); BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParseSqrt(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParseSquare(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParseSvdf(const Operator* op, BuiltinOperator op_type, TfLiteStatus ParseSvdf(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter, ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data); BuiltinDataAllocator* allocator, void** builtin_data);
TfLiteStatus ParseTanh(const Operator* op, BuiltinOperator op_type,
ErrorReporter* error_reporter,
BuiltinDataAllocator* allocator, void** builtin_data);
} // namespace tflite } // namespace tflite
#endif // TENSORFLOW_LITE_CORE_API_FLATBUFFER_CONVERSIONS_H_ #endif // TENSORFLOW_LITE_CORE_API_FLATBUFFER_CONVERSIONS_H_

View File

@ -194,10 +194,9 @@ class MicroMutableOpResolver : public MicroOpResolver {
} }
TfLiteStatus AddHardSwish() { TfLiteStatus AddHardSwish() {
// TODO(b/149408647): Replace ParseOpData with the operator specific parse
// function.
return AddBuiltin(BuiltinOperator_HARD_SWISH, return AddBuiltin(BuiltinOperator_HARD_SWISH,
*tflite::ops::micro::Register_HARD_SWISH(), ParseOpData); *tflite::ops::micro::Register_HARD_SWISH(),
ParseHardSwish);
} }
TfLiteStatus AddL2Normalization() { TfLiteStatus AddL2Normalization() {
@ -256,17 +255,13 @@ class MicroMutableOpResolver : public MicroOpResolver {
} }
TfLiteStatus AddMean() { TfLiteStatus AddMean() {
// TODO(b/149408647): Replace ParseOpData with the operator specific parse
// function.
return AddBuiltin(BuiltinOperator_MEAN, return AddBuiltin(BuiltinOperator_MEAN,
*tflite::ops::micro::Register_MEAN(), ParseOpData); *tflite::ops::micro::Register_MEAN(), ParseReducer);
} }
TfLiteStatus AddMinimum() { TfLiteStatus AddMinimum() {
// TODO(b/149408647): Replace ParseOpData with the operator specific parse
// function.
return AddBuiltin(BuiltinOperator_MINIMUM, return AddBuiltin(BuiltinOperator_MINIMUM,
*tflite::ops::micro::Register_MINIMUM(), ParseOpData); *tflite::ops::micro::Register_MINIMUM(), ParseMinimum);
} }
TfLiteStatus AddMul() { TfLiteStatus AddMul() {
@ -277,17 +272,13 @@ class MicroMutableOpResolver : public MicroOpResolver {
} }
TfLiteStatus AddNeg() { TfLiteStatus AddNeg() {
// TODO(b/149408647): Replace ParseOpData with the operator specific parse
// function.
return AddBuiltin(BuiltinOperator_NEG, *tflite::ops::micro::Register_NEG(), return AddBuiltin(BuiltinOperator_NEG, *tflite::ops::micro::Register_NEG(),
ParseOpData); ParseNeg);
} }
TfLiteStatus AddNotEqual() { TfLiteStatus AddNotEqual() {
// TODO(b/149408647): Replace ParseOpData with the operator specific parse
// function.
return AddBuiltin(BuiltinOperator_NOT_EQUAL, return AddBuiltin(BuiltinOperator_NOT_EQUAL,
*tflite::ops::micro::Register_NOT_EQUAL(), ParseOpData); *tflite::ops::micro::Register_NOT_EQUAL(), ParseNotEqual);
} }
TfLiteStatus AddPack() { TfLiteStatus AddPack() {
@ -298,24 +289,18 @@ class MicroMutableOpResolver : public MicroOpResolver {
} }
TfLiteStatus AddPad() { TfLiteStatus AddPad() {
// TODO(b/149408647): Replace ParseOpData with the operator specific parse
// function.
return AddBuiltin(BuiltinOperator_PAD, *tflite::ops::micro::Register_PAD(), return AddBuiltin(BuiltinOperator_PAD, *tflite::ops::micro::Register_PAD(),
ParseOpData); ParsePad);
} }
TfLiteStatus AddPadV2() { TfLiteStatus AddPadV2() {
// TODO(b/149408647): Replace ParseOpData with the operator specific parse
// function.
return AddBuiltin(BuiltinOperator_PADV2, return AddBuiltin(BuiltinOperator_PADV2,
*tflite::ops::micro::Register_PADV2(), ParseOpData); *tflite::ops::micro::Register_PADV2(), ParsePadV2);
} }
TfLiteStatus AddPrelu() { TfLiteStatus AddPrelu() {
// TODO(b/149408647): Replace ParseOpData with the operator specific parse
// function.
return AddBuiltin(BuiltinOperator_PRELU, return AddBuiltin(BuiltinOperator_PRELU,
*tflite::ops::micro::Register_PRELU(), ParseOpData); *tflite::ops::micro::Register_PRELU(), ParsePrelu);
} }
TfLiteStatus AddQuantize() { TfLiteStatus AddQuantize() {
@ -324,17 +309,13 @@ class MicroMutableOpResolver : public MicroOpResolver {
} }
TfLiteStatus AddRelu() { TfLiteStatus AddRelu() {
// TODO(b/149408647): Replace ParseOpData with the operator specific parse
// function.
return AddBuiltin(BuiltinOperator_RELU, return AddBuiltin(BuiltinOperator_RELU,
*tflite::ops::micro::Register_RELU(), ParseOpData); *tflite::ops::micro::Register_RELU(), ParseRelu);
} }
TfLiteStatus AddRelu6() { TfLiteStatus AddRelu6() {
// TODO(b/149408647): Replace ParseOpData with the operator specific parse
// function.
return AddBuiltin(BuiltinOperator_RELU6, return AddBuiltin(BuiltinOperator_RELU6,
*tflite::ops::micro::Register_RELU6(), ParseOpData); *tflite::ops::micro::Register_RELU6(), ParseRelu6);
} }
TfLiteStatus AddReshape() { TfLiteStatus AddReshape() {
@ -351,24 +332,18 @@ class MicroMutableOpResolver : public MicroOpResolver {
} }
TfLiteStatus AddRound() { TfLiteStatus AddRound() {
// TODO(b/149408647): Replace ParseOpData with the operator specific parse
// function.
return AddBuiltin(BuiltinOperator_ROUND, return AddBuiltin(BuiltinOperator_ROUND,
*tflite::ops::micro::Register_ROUND(), ParseOpData); *tflite::ops::micro::Register_ROUND(), ParseRound);
} }
TfLiteStatus AddRsqrt() { TfLiteStatus AddRsqrt() {
// TODO(b/149408647): Replace ParseOpData with the operator specific parse
// function.
return AddBuiltin(BuiltinOperator_RSQRT, return AddBuiltin(BuiltinOperator_RSQRT,
*tflite::ops::micro::Register_RSQRT(), ParseOpData); *tflite::ops::micro::Register_RSQRT(), ParseRsqrt);
} }
TfLiteStatus AddSin() { TfLiteStatus AddSin() {
// TODO(b/149408647): Replace ParseOpData with the operator specific parse
// function.
return AddBuiltin(BuiltinOperator_SIN, *tflite::ops::micro::Register_SIN(), return AddBuiltin(BuiltinOperator_SIN, *tflite::ops::micro::Register_SIN(),
ParseOpData); ParseSin);
} }
TfLiteStatus AddSoftmax() { TfLiteStatus AddSoftmax() {
@ -384,17 +359,13 @@ class MicroMutableOpResolver : public MicroOpResolver {
} }
TfLiteStatus AddSqrt() { TfLiteStatus AddSqrt() {
// TODO(b/149408647): Replace ParseOpData with the operator specific parse
// function.
return AddBuiltin(BuiltinOperator_SQRT, return AddBuiltin(BuiltinOperator_SQRT,
*tflite::ops::micro::Register_SQRT(), ParseOpData); *tflite::ops::micro::Register_SQRT(), ParseSqrt);
} }
TfLiteStatus AddSquare() { TfLiteStatus AddSquare() {
// TODO(b/149408647): Replace ParseOpData with the operator specific parse
// function.
return AddBuiltin(BuiltinOperator_SQUARE, return AddBuiltin(BuiltinOperator_SQUARE,
*tflite::ops::micro::Register_SQUARE(), ParseOpData); *tflite::ops::micro::Register_SQUARE(), ParseSquare);
} }
TfLiteStatus AddStridedSlice() { TfLiteStatus AddStridedSlice() {
@ -418,10 +389,8 @@ class MicroMutableOpResolver : public MicroOpResolver {
} }
TfLiteStatus AddTanh() { TfLiteStatus AddTanh() {
// TODO(b/149408647): Replace ParseOpData with the operator specific parse
// function.
return AddBuiltin(BuiltinOperator_TANH, return AddBuiltin(BuiltinOperator_TANH,
*tflite::ops::micro::Register_TANH(), ParseOpData); *tflite::ops::micro::Register_TANH(), ParseTanh);
} }
TfLiteStatus AddUnpack() { TfLiteStatus AddUnpack() {