return kEmptyTensorName;
}
+// This will provide v3/v3a format neutral BuiltinOperator
+tflite::BuiltinOperator builtin_code_neutral(const tflite::OperatorCode *opcode)
+{
+ assert(opcode != nullptr);
+ int8_t dp_code = opcode->deprecated_builtin_code();
+ // 127 is max of int8_t which is upper bound of v3 builtin_code
+ // NOTE TensorFlow uses 'BuiltinOperator_PLACEHOLDER_FOR_GREATER_OP_CODES' for 127
+ if (dp_code < 127 && dp_code >= 0)
+ return tflite::BuiltinOperator(dp_code);
+ return opcode->builtin_code();
+}
+
bool is_valid(const tflite::OperatorCode *opcode)
{
- tflite::BuiltinOperator code = opcode->builtin_code();
+ tflite::BuiltinOperator code = builtin_code_neutral(opcode);
return (tflite::BuiltinOperator_MIN <= code && code <= tflite::BuiltinOperator_MAX);
}
bool is_custom(const tflite::OperatorCode *opcode)
{
- tflite::BuiltinOperator code = opcode->builtin_code();
+ tflite::BuiltinOperator code = builtin_code_neutral(opcode);
return (code == tflite::BuiltinOperator_CUSTOM);
}
assert(index < _op_codes.size());
const tflite::OperatorCode *opcode = _op_codes.at(index);
- return opcode->builtin_code();
+ return builtin_code_neutral(opcode);
}
std::string TFliteImport::opcode_name(const tflite::Operator *op) const
return opcode->custom_code()->c_str();
}
- tflite::BuiltinOperator code = opcode->builtin_code();
+ tflite::BuiltinOperator code = builtin_code_neutral(opcode);
return EnumNameBuiltinOperator(code);
}