Qualify uses of std::string
PiperOrigin-RevId: 317319501 Change-Id: Ib75a31ad89fa1a6bda81450f2ab5ba07d7338ada
This commit is contained in:
parent
07c54454ee
commit
16cb89bd7b
@ -52,7 +52,7 @@ using ::tflite::Tensor;
|
||||
namespace {
|
||||
|
||||
// Check if a TensorFlow Op is a control flow op by its name.
|
||||
bool IsControlFlowOp(const string& tensorflow_op) {
|
||||
bool IsControlFlowOp(const std::string& tensorflow_op) {
|
||||
// Technically this is equivalent to `::tensorflow::Node::IsControlFlow()`.
|
||||
// It requires to construct a `::tensorflow::Graph` to use that helper
|
||||
// function, so we simply hardcode the list of control flow ops here.
|
||||
@ -68,7 +68,7 @@ bool IsControlFlowOp(const string& tensorflow_op) {
|
||||
}
|
||||
|
||||
// Check if a TensorFlow Op is unsupported by the Flex runtime.
|
||||
bool IsUnsupportedFlexOp(const string& tensorflow_op) {
|
||||
bool IsUnsupportedFlexOp(const std::string& tensorflow_op) {
|
||||
if (IsControlFlowOp(tensorflow_op)) {
|
||||
return true;
|
||||
}
|
||||
@ -82,14 +82,14 @@ bool IsUnsupportedFlexOp(const string& tensorflow_op) {
|
||||
}
|
||||
|
||||
// Map from operator name to TF Lite enum value, for all builtins.
|
||||
const std::map<string, BuiltinOperator>& GetBuiltinOpsMap() {
|
||||
static std::map<string, BuiltinOperator>* builtin_ops = nullptr;
|
||||
const std::map<std::string, BuiltinOperator>& GetBuiltinOpsMap() {
|
||||
static std::map<std::string, BuiltinOperator>* builtin_ops = nullptr;
|
||||
if (builtin_ops == nullptr) {
|
||||
builtin_ops = new std::map<string, BuiltinOperator>();
|
||||
builtin_ops = new std::map<std::string, BuiltinOperator>();
|
||||
|
||||
for (int i = BuiltinOperator_MIN; i <= BuiltinOperator_MAX; ++i) {
|
||||
BuiltinOperator op = static_cast<BuiltinOperator>(i);
|
||||
string name = EnumNameBuiltinOperator(op);
|
||||
std::string name = EnumNameBuiltinOperator(op);
|
||||
if (op != BuiltinOperator_CUSTOM && !name.empty()) {
|
||||
(*builtin_ops)[name] = op;
|
||||
}
|
||||
@ -99,10 +99,10 @@ const std::map<string, BuiltinOperator>& GetBuiltinOpsMap() {
|
||||
}
|
||||
|
||||
void WriteModelToString(const flatbuffers::FlatBufferBuilder& builder,
|
||||
string* file_contents) {
|
||||
std::string* file_contents) {
|
||||
const uint8_t* buffer = builder.GetBufferPointer();
|
||||
int size = builder.GetSize();
|
||||
*file_contents = string(reinterpret_cast<const char*>(buffer), size);
|
||||
*file_contents = std::string(reinterpret_cast<const char*>(buffer), size);
|
||||
}
|
||||
|
||||
} // Anonymous namespace.
|
||||
@ -115,7 +115,7 @@ OperatorKey::OperatorKey(
|
||||
bool enable_select_tf_ops) {
|
||||
// Get the op name (by Toco definition).
|
||||
const ::toco::Operator& op = *op_signature.op;
|
||||
string name = HelpfulOperatorTypeName(op);
|
||||
std::string name = HelpfulOperatorTypeName(op);
|
||||
|
||||
bool is_builtin = false;
|
||||
const auto& builtin_ops = GetBuiltinOpsMap();
|
||||
@ -146,7 +146,7 @@ OperatorKey::OperatorKey(
|
||||
is_flex_op_ = true;
|
||||
flex_tensorflow_op_ = tensorflow_op;
|
||||
custom_code_ =
|
||||
string(::tflite::kFlexCustomCodePrefix) + flex_tensorflow_op_;
|
||||
std::string(::tflite::kFlexCustomCodePrefix) + flex_tensorflow_op_;
|
||||
} else {
|
||||
custom_code_ = tensorflow_op;
|
||||
}
|
||||
@ -158,7 +158,7 @@ OperatorKey::OperatorKey(
|
||||
is_flex_op_ = true;
|
||||
flex_tensorflow_op_ = name;
|
||||
custom_code_ =
|
||||
string(::tflite::kFlexCustomCodePrefix) + flex_tensorflow_op_;
|
||||
std::string(::tflite::kFlexCustomCodePrefix) + flex_tensorflow_op_;
|
||||
} else {
|
||||
// If Flex is disabled or the original TensorFlow NodeDef isn't available,
|
||||
// we produce a custom op. This gives developers a chance to implement
|
||||
@ -175,7 +175,7 @@ OperatorKey::OperatorKey(
|
||||
|
||||
void LoadTensorsMap(const Model& model, TensorsMap* tensors_map) {
|
||||
// First find a list of unique array names.
|
||||
std::set<string> names;
|
||||
std::set<std::string> names;
|
||||
for (const auto& array_pair : model.GetArrayMap()) {
|
||||
names.insert(array_pair.first);
|
||||
}
|
||||
@ -218,7 +218,7 @@ Offset<Vector<Offset<Tensor>>> ExportTensors(
|
||||
std::map<int, Offset<Tensor>> ordered_tensors;
|
||||
|
||||
for (const auto& array_pair : model.GetArrayMap()) {
|
||||
const string& tensor_name = array_pair.first;
|
||||
const std::string& tensor_name = array_pair.first;
|
||||
const toco::Array& array = *array_pair.second;
|
||||
|
||||
int buffer_index = buffers_to_write->size();
|
||||
@ -283,7 +283,7 @@ Offset<Vector<int32_t>> ExportOutputTensors(
|
||||
const Model& model, const details::TensorsMap& tensors_map,
|
||||
FlatBufferBuilder* builder) {
|
||||
std::vector<int32_t> outputs;
|
||||
for (const string& output : model.flags.output_arrays()) {
|
||||
for (const std::string& output : model.flags.output_arrays()) {
|
||||
outputs.push_back(tensors_map.at(output));
|
||||
}
|
||||
return builder->CreateVector<int32_t>(outputs);
|
||||
@ -295,10 +295,10 @@ Offset<Vector<Offset<OperatorCode>>> ExportOperatorCodes(
|
||||
const details::OperatorsMap& operators_map, FlatBufferBuilder* builder,
|
||||
const ExportParams& params) {
|
||||
// Map from operator name to TF Lite enum value, for all builtins.
|
||||
std::map<string, BuiltinOperator> builtin_ops;
|
||||
std::map<std::string, BuiltinOperator> builtin_ops;
|
||||
for (int i = BuiltinOperator_MIN; i <= BuiltinOperator_MAX; ++i) {
|
||||
BuiltinOperator op = static_cast<BuiltinOperator>(i);
|
||||
string name = EnumNameBuiltinOperator(op);
|
||||
std::string name = EnumNameBuiltinOperator(op);
|
||||
if (op != BuiltinOperator_CUSTOM && !name.empty()) {
|
||||
builtin_ops[name] = op;
|
||||
}
|
||||
@ -349,13 +349,13 @@ Offset<Vector<Offset<Operator>>> ExportOperators(
|
||||
std::vector<Offset<Operator>> op_vector;
|
||||
for (const auto& op : model.operators) {
|
||||
std::vector<int32_t> inputs;
|
||||
for (const string& input : op->inputs) {
|
||||
for (const std::string& input : op->inputs) {
|
||||
// -1 is the ID for optional tensor in TFLite output
|
||||
int id = model.IsOptionalArray(input) ? -1 : tensors_map.at(input);
|
||||
inputs.push_back(id);
|
||||
}
|
||||
std::vector<int32_t> outputs;
|
||||
for (const string& output : op->outputs) {
|
||||
for (const std::string& output : op->outputs) {
|
||||
outputs.push_back(tensors_map.at(output));
|
||||
}
|
||||
const toco::OperatorSignature op_signature = {op.get(), &model};
|
||||
@ -428,15 +428,15 @@ Offset<Vector<Offset<Buffer>>> ExportBuffers(
|
||||
return builder->CreateVector(buffer_vector);
|
||||
}
|
||||
|
||||
tensorflow::Status Export(const Model& model, string* output_file_contents,
|
||||
tensorflow::Status Export(const Model& model, std::string* output_file_contents,
|
||||
const ExportParams& params) {
|
||||
const auto ops_by_type = BuildOperatorByTypeMap(params.enable_select_tf_ops);
|
||||
return Export(model, output_file_contents, params, ops_by_type);
|
||||
}
|
||||
|
||||
void ParseControlFlowErrors(std::set<string>* custom_ops,
|
||||
std::vector<string>* error_msgs) {
|
||||
std::set<string> unsupported_control_flow_ops;
|
||||
void ParseControlFlowErrors(std::set<std::string>* custom_ops,
|
||||
std::vector<std::string>* error_msgs) {
|
||||
std::set<std::string> unsupported_control_flow_ops;
|
||||
// Check if unsupported ops contains control flow ops. It's impossible
|
||||
// to implement these ops as custom ops at the moment.
|
||||
for (const auto& op : *custom_ops) {
|
||||
@ -471,10 +471,10 @@ void ExportModelVersionBuffer(
|
||||
}
|
||||
|
||||
tensorflow::Status Export(
|
||||
const Model& model, string* output_file_contents,
|
||||
const Model& model, std::string* output_file_contents,
|
||||
const ExportParams& params,
|
||||
const std::map<OperatorType, std::unique_ptr<BaseOperator>>& ops_by_type) {
|
||||
for (const string& input_array : model.GetInvalidInputArrays()) {
|
||||
for (const std::string& input_array : model.GetInvalidInputArrays()) {
|
||||
if (model.HasArray(input_array)) {
|
||||
return tensorflow::errors::InvalidArgument(
|
||||
absl::StrCat("Placeholder ", input_array,
|
||||
@ -509,11 +509,11 @@ tensorflow::Status Export(
|
||||
}
|
||||
|
||||
// The set of used builtin ops.
|
||||
std::set<string> builtin_ops;
|
||||
std::set<std::string> builtin_ops;
|
||||
// The set of custom ops (not including Flex ops).
|
||||
std::set<string> custom_ops;
|
||||
std::set<std::string> custom_ops;
|
||||
// The set of Flex ops which are not supported.
|
||||
std::set<string> unsupported_flex_ops;
|
||||
std::set<std::string> unsupported_flex_ops;
|
||||
|
||||
for (const auto& it : operators_map) {
|
||||
const details::OperatorKey& key = it.first;
|
||||
@ -540,7 +540,7 @@ tensorflow::Status Export(
|
||||
"40-tflite-op-request.md\n and pasting the following:\n\n";
|
||||
};
|
||||
|
||||
std::vector<string> error_msgs;
|
||||
std::vector<std::string> error_msgs;
|
||||
ParseControlFlowErrors(&custom_ops, &error_msgs);
|
||||
|
||||
// Remove ExpandDims and ReorderAxes from unimplemented list unless they
|
||||
@ -549,7 +549,7 @@ tensorflow::Status Export(
|
||||
// transformation is unable to run because the output shape is not
|
||||
// defined. This causes unnecessary confusion during model conversion
|
||||
// time.
|
||||
std::set<string> custom_ops_final;
|
||||
std::set<std::string> custom_ops_final;
|
||||
for (const auto& op_type : custom_ops) {
|
||||
if (op_type != "ReorderAxes" && op_type != "ExpandDims") {
|
||||
custom_ops_final.insert(op_type);
|
||||
|
@ -35,19 +35,19 @@ struct ExportParams {
|
||||
|
||||
// Transform the given tf.mini model into a TF Lite flatbuffer and deposit the
|
||||
// result in the given string.
|
||||
tensorflow::Status Export(const Model& model, string* output_file_contents,
|
||||
tensorflow::Status Export(const Model& model, std::string* output_file_contents,
|
||||
const ExportParams& params);
|
||||
|
||||
// Export API with custom TFLite operator mapping.
|
||||
tensorflow::Status Export(
|
||||
const Model& model, string* output_file_contents,
|
||||
const Model& model, std::string* output_file_contents,
|
||||
const ExportParams& params,
|
||||
const std::map<OperatorType, std::unique_ptr<BaseOperator>>& ops_by_type);
|
||||
|
||||
// This is for backward-compatibility.
|
||||
// TODO(ycling): Remove the deprecated entry functions.
|
||||
inline void Export(const Model& model, bool allow_custom_ops,
|
||||
bool quantize_weights, string* output_file_contents) {
|
||||
bool quantize_weights, std::string* output_file_contents) {
|
||||
ExportParams params;
|
||||
params.allow_custom_ops = allow_custom_ops;
|
||||
params.quantize_weights =
|
||||
@ -60,7 +60,7 @@ inline void Export(const Model& model, bool allow_custom_ops,
|
||||
// TODO(ycling): Remove the deprecated entry functions.
|
||||
inline void Export(
|
||||
const Model& model, bool allow_custom_ops, bool quantize_weights,
|
||||
string* output_file_contents,
|
||||
std::string* output_file_contents,
|
||||
const std::map<OperatorType, std::unique_ptr<BaseOperator>>& ops_by_type) {
|
||||
ExportParams params;
|
||||
params.allow_custom_ops = allow_custom_ops;
|
||||
@ -72,7 +72,7 @@ inline void Export(
|
||||
|
||||
// This is for backward-compatibility.
|
||||
// TODO(ycling): Remove the deprecated entry functions.
|
||||
inline void Export(const Model& model, string* output_file_contents) {
|
||||
inline void Export(const Model& model, std::string* output_file_contents) {
|
||||
ExportParams params;
|
||||
params.allow_custom_ops = true;
|
||||
auto status = Export(model, output_file_contents, params);
|
||||
@ -82,7 +82,7 @@ inline void Export(const Model& model, string* output_file_contents) {
|
||||
namespace details {
|
||||
|
||||
// A map from tensor name to its final position in the TF Lite buffer.
|
||||
using TensorsMap = std::unordered_map<string, int>;
|
||||
using TensorsMap = std::unordered_map<std::string, int>;
|
||||
|
||||
// A key to identify an operator.
|
||||
// Only when `type` is `kUnsupported`, `custom_code` is filled to
|
||||
|
@ -34,13 +34,13 @@ using ::testing::HasSubstr;
|
||||
class ExportTest : public ::testing::Test {
|
||||
protected:
|
||||
void ResetOperators() { input_model_.operators.clear(); }
|
||||
void AddTensorsByName(std::initializer_list<string> names) {
|
||||
for (const string& name : names) {
|
||||
void AddTensorsByName(std::initializer_list<std::string> names) {
|
||||
for (const std::string& name : names) {
|
||||
input_model_.GetOrCreateArray(name);
|
||||
}
|
||||
}
|
||||
void AddOperatorsByName(std::initializer_list<string> names) {
|
||||
for (const string& name : names) {
|
||||
void AddOperatorsByName(std::initializer_list<std::string> names) {
|
||||
for (const std::string& name : names) {
|
||||
if (name == "Conv") {
|
||||
auto* op = new ConvOperator;
|
||||
op->padding.type = PaddingType::kSame;
|
||||
@ -153,14 +153,15 @@ class ExportTest : public ::testing::Test {
|
||||
}
|
||||
|
||||
tensorflow::Status ExportAndReturnStatus(const ExportParams& params) {
|
||||
string result;
|
||||
std::string result;
|
||||
return Export(input_model_, &result, params);
|
||||
}
|
||||
|
||||
std::vector<string> ExportAndSummarizeOperators(const ExportParams& params) {
|
||||
std::vector<string> names;
|
||||
std::vector<std::string> ExportAndSummarizeOperators(
|
||||
const ExportParams& params) {
|
||||
std::vector<std::string> names;
|
||||
|
||||
string result;
|
||||
std::string result;
|
||||
auto status = Export(input_model_, &result, params);
|
||||
if (!status.ok()) {
|
||||
LOG(INFO) << status.error_message();
|
||||
@ -171,10 +172,12 @@ class ExportTest : public ::testing::Test {
|
||||
|
||||
for (const ::tflite::OperatorCode* opcode : *model->operator_codes()) {
|
||||
if (opcode->builtin_code() != ::tflite::BuiltinOperator_CUSTOM) {
|
||||
names.push_back(string("builtin:") + ::tflite::EnumNameBuiltinOperator(
|
||||
opcode->builtin_code()));
|
||||
names.push_back(
|
||||
std::string("builtin:") +
|
||||
::tflite::EnumNameBuiltinOperator(opcode->builtin_code()));
|
||||
} else {
|
||||
names.push_back(string("custom:") + opcode->custom_code()->c_str());
|
||||
names.push_back(std::string("custom:") +
|
||||
opcode->custom_code()->c_str());
|
||||
}
|
||||
}
|
||||
|
||||
@ -185,7 +188,7 @@ class ExportTest : public ::testing::Test {
|
||||
const ExportParams& params) {
|
||||
std::vector<uint32_t> indices;
|
||||
|
||||
string result;
|
||||
std::string result;
|
||||
if (!Export(input_model_, &result, params).ok()) return indices;
|
||||
auto* model = ::tflite::GetModel(result.data());
|
||||
|
||||
@ -257,7 +260,7 @@ TEST_F(ExportTest, ExportMinRuntime) {
|
||||
params.enable_select_tf_ops = false;
|
||||
params.quantize_weights = QuantizedBufferType::NONE;
|
||||
|
||||
string output;
|
||||
std::string output;
|
||||
auto status = Export(input_model_, &output, params);
|
||||
auto* model = ::tflite::GetModel(output.data());
|
||||
EXPECT_EQ(model->metadata()->size(), 1);
|
||||
@ -265,7 +268,8 @@ TEST_F(ExportTest, ExportMinRuntime) {
|
||||
auto buf = model->metadata()->Get(0)->buffer();
|
||||
auto* buffer = (*model->buffers())[buf];
|
||||
auto* array = buffer->data();
|
||||
string version(reinterpret_cast<const char*>(array->data()), array->size());
|
||||
std::string version(reinterpret_cast<const char*>(array->data()),
|
||||
array->size());
|
||||
EXPECT_EQ(version, "1.6.0");
|
||||
}
|
||||
|
||||
@ -275,7 +279,7 @@ TEST_F(ExportTest, ExportEmptyMinRuntime) {
|
||||
ExportParams params;
|
||||
params.allow_custom_ops = true;
|
||||
|
||||
string output;
|
||||
std::string output;
|
||||
auto status = Export(input_model_, &output, params);
|
||||
auto* model = ::tflite::GetModel(output.data());
|
||||
EXPECT_EQ(model->metadata()->size(), 1);
|
||||
@ -283,7 +287,8 @@ TEST_F(ExportTest, ExportEmptyMinRuntime) {
|
||||
auto buf = model->metadata()->Get(0)->buffer();
|
||||
auto* buffer = (*model->buffers())[buf];
|
||||
auto* array = buffer->data();
|
||||
string version(reinterpret_cast<const char*>(array->data()), array->size());
|
||||
std::string version(reinterpret_cast<const char*>(array->data()),
|
||||
array->size());
|
||||
EXPECT_EQ(version, "");
|
||||
}
|
||||
|
||||
@ -296,7 +301,7 @@ TEST_F(ExportTest, UnsupportedControlFlowErrors) {
|
||||
// The model contains control flow ops which are not convertible, so we should
|
||||
// check the returned error message.
|
||||
|
||||
string output;
|
||||
std::string output;
|
||||
const auto ops_by_type = BuildOperatorByTypeMap();
|
||||
auto status = Export(input_model_, &output, params, ops_by_type);
|
||||
EXPECT_EQ(status.error_message(),
|
||||
@ -318,7 +323,7 @@ TEST_F(ExportTest, UnsupportedOpsAndNeedEnableFlex) {
|
||||
params.allow_custom_ops = false;
|
||||
params.enable_select_tf_ops = false;
|
||||
|
||||
string output;
|
||||
std::string output;
|
||||
const auto ops_by_type = BuildOperatorByTypeMap();
|
||||
auto status = Export(input_model_, &output, params, ops_by_type);
|
||||
EXPECT_EQ(
|
||||
@ -348,7 +353,7 @@ TEST_F(ExportTest, UnsupportedOpsNeedCustomImplementation) {
|
||||
params.allow_custom_ops = false;
|
||||
params.enable_select_tf_ops = true;
|
||||
|
||||
string output;
|
||||
std::string output;
|
||||
const auto ops_by_type = BuildOperatorByTypeMap();
|
||||
auto status = Export(input_model_, &output, params, ops_by_type);
|
||||
EXPECT_EQ(
|
||||
@ -378,7 +383,7 @@ TEST_F(ExportTest, UnsupportedControlFlowAndCustomOpsErrors) {
|
||||
// The model contains control flow ops which are not convertible, so we should
|
||||
// check the returned error message.
|
||||
|
||||
string output;
|
||||
std::string output;
|
||||
const auto ops_by_type = BuildOperatorByTypeMap();
|
||||
auto status = Export(input_model_, &output, params, ops_by_type);
|
||||
EXPECT_EQ(
|
||||
@ -407,11 +412,11 @@ TEST_F(ExportTest, UnsupportedControlFlowAndCustomOpsErrors) {
|
||||
TEST_F(ExportTest, QuantizeWeights) {
|
||||
// Sanity check for quantize_weights parameter.
|
||||
BuildQuantizableTestModel();
|
||||
string unquantized_result;
|
||||
std::string unquantized_result;
|
||||
Export(input_model_, true, /*quantize_weights*/ false, &unquantized_result);
|
||||
|
||||
BuildQuantizableTestModel();
|
||||
string quantized_result;
|
||||
std::string quantized_result;
|
||||
Export(input_model_, true, /*quantize_weights*/ true, &quantized_result);
|
||||
|
||||
// The quantized models should be smaller.
|
||||
@ -443,12 +448,13 @@ class OpSetsTest : public ExportTest {
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<string> ImportExport(std::initializer_list<string> op_names) {
|
||||
std::vector<std::string> ImportExport(
|
||||
std::initializer_list<std::string> op_names) {
|
||||
ResetOperators();
|
||||
if (!import_all_ops_as_unsupported_) {
|
||||
AddOperatorsByName(op_names);
|
||||
} else {
|
||||
for (const string& name : op_names) {
|
||||
for (const std::string& name : op_names) {
|
||||
auto* op = new TensorFlowUnsupportedOperator;
|
||||
op->tensorflow_op = name;
|
||||
input_model_.operators.emplace_back(op);
|
||||
@ -644,7 +650,7 @@ TEST_F(VersionedOpExportTest, Export) {
|
||||
AddConvOp(false);
|
||||
AddConvOp(true);
|
||||
|
||||
string result;
|
||||
std::string result;
|
||||
const auto ops_by_type = BuildFakeOperatorByTypeMap();
|
||||
Export(input_model_, true, false, &result, ops_by_type);
|
||||
|
||||
|
@ -99,7 +99,7 @@ void ImportTensors(const ::tflite::Model& input_model, Model* model) {
|
||||
|
||||
void ImportOperators(
|
||||
const ::tflite::Model& input_model,
|
||||
const std::map<string, std::unique_ptr<BaseOperator>>& ops_by_name,
|
||||
const std::map<std::string, std::unique_ptr<BaseOperator>>& ops_by_name,
|
||||
const details::TensorsTable& tensors_table,
|
||||
const details::OperatorsTable& operators_table, Model* model) {
|
||||
// TODO(aselle): add support for multiple subgraphs.
|
||||
@ -112,12 +112,12 @@ void ImportOperators(
|
||||
LOG(FATAL) << "Index " << index << " must be between zero and "
|
||||
<< operators_table.size();
|
||||
}
|
||||
string opname = operators_table.at(index);
|
||||
std::string opname = operators_table.at(index);
|
||||
|
||||
// Find and use the appropriate operator deserialization factory.
|
||||
std::unique_ptr<Operator> new_op = nullptr;
|
||||
if (ops_by_name.count(opname) == 0) {
|
||||
string effective_opname = "TENSORFLOW_UNSUPPORTED";
|
||||
std::string effective_opname = "TENSORFLOW_UNSUPPORTED";
|
||||
if (ops_by_name.count(effective_opname) == 0) {
|
||||
LOG(FATAL) << "Internal logic error: TENSORFLOW_UNSUPPORTED not found.";
|
||||
}
|
||||
@ -147,10 +147,10 @@ void ImportOperators(
|
||||
auto input_index = inputs->Get(i);
|
||||
// input_index == -1 indicates optional tensor.
|
||||
if (input_index != -1) {
|
||||
const string& input_name = tensors_table.at(input_index);
|
||||
const std::string& input_name = tensors_table.at(input_index);
|
||||
op->inputs.push_back(input_name);
|
||||
} else {
|
||||
const string& tensor_name =
|
||||
const std::string& tensor_name =
|
||||
toco::AvailableArrayName(*model, "OptionalTensor");
|
||||
model->CreateOptionalArray(tensor_name);
|
||||
op->inputs.push_back(tensor_name);
|
||||
@ -159,7 +159,7 @@ void ImportOperators(
|
||||
auto outputs = input_op->outputs();
|
||||
for (int i = 0; i < outputs->Length(); i++) {
|
||||
auto output_index = outputs->Get(i);
|
||||
const string& output_name = tensors_table.at(output_index);
|
||||
const std::string& output_name = tensors_table.at(output_index);
|
||||
op->outputs.push_back(output_name);
|
||||
}
|
||||
}
|
||||
@ -173,7 +173,7 @@ void ImportIOTensors(const ModelFlags& model_flags,
|
||||
auto inputs = (*input_model.subgraphs())[0]->inputs();
|
||||
if (inputs) {
|
||||
for (int input : *inputs) {
|
||||
const string& input_name = tensors_table.at(input);
|
||||
const std::string& input_name = tensors_table.at(input);
|
||||
model->flags.add_input_arrays()->set_name(input_name);
|
||||
}
|
||||
}
|
||||
@ -184,7 +184,7 @@ void ImportIOTensors(const ModelFlags& model_flags,
|
||||
auto outputs = (*input_model.subgraphs())[0]->outputs();
|
||||
if (outputs) {
|
||||
for (int output : *outputs) {
|
||||
const string& output_name = tensors_table.at(output);
|
||||
const std::string& output_name = tensors_table.at(output);
|
||||
model->flags.add_output_arrays(output_name);
|
||||
}
|
||||
}
|
||||
@ -199,7 +199,7 @@ bool Verify(const void* buf, size_t len) {
|
||||
} // namespace
|
||||
|
||||
std::unique_ptr<Model> Import(const ModelFlags& model_flags,
|
||||
const string& input_file_contents) {
|
||||
const std::string& input_file_contents) {
|
||||
::tflite::AlwaysTrueResolver r;
|
||||
if (!::tflite::Verify(input_file_contents.data(), input_file_contents.size(),
|
||||
r, ::tflite::DefaultErrorReporter())) {
|
||||
|
@ -24,17 +24,17 @@ namespace tflite {
|
||||
|
||||
// Parse the given string as TF Lite flatbuffer and return a new tf.mini model.
|
||||
std::unique_ptr<Model> Import(const ModelFlags &model_flags,
|
||||
const string &input_file_contents);
|
||||
const std::string &input_file_contents);
|
||||
|
||||
namespace details {
|
||||
|
||||
// The names of all tensors found in a TF Lite model.
|
||||
using TensorsTable = std::vector<string>;
|
||||
using TensorsTable = std::vector<std::string>;
|
||||
|
||||
// The names of all operators found in TF Lite model. If the operator is
|
||||
// builtin, the string representation of the corresponding enum value is used
|
||||
// as name.
|
||||
using OperatorsTable = std::vector<string>;
|
||||
using OperatorsTable = std::vector<std::string>;
|
||||
|
||||
void LoadTensorsTable(const ::tflite::Model &input_model,
|
||||
TensorsTable *tensors_table);
|
||||
|
@ -134,9 +134,9 @@ class ImportTest : public ::testing::Test {
|
||||
|
||||
input_model_ = ::tflite::GetModel(builder_.GetBufferPointer());
|
||||
}
|
||||
string InputModelAsString() {
|
||||
return string(reinterpret_cast<char*>(builder_.GetBufferPointer()),
|
||||
builder_.GetSize());
|
||||
std::string InputModelAsString() {
|
||||
return std::string(reinterpret_cast<char*>(builder_.GetBufferPointer()),
|
||||
builder_.GetSize());
|
||||
}
|
||||
flatbuffers::FlatBufferBuilder builder_;
|
||||
const ::tflite::Model* input_model_ = nullptr;
|
||||
|
@ -29,7 +29,7 @@ namespace tflite {
|
||||
|
||||
// Deprecated and please register new ops/versions in
|
||||
// tflite/tools/versioning/op_version.cc".
|
||||
string GetMinimumRuntimeVersionForModel(const Model& model) {
|
||||
std::string GetMinimumRuntimeVersionForModel(const Model& model) {
|
||||
// Use this as the placeholder string if a particular op is not yet included
|
||||
// in any Tensorflow's RC/Final release source package. Once that op is
|
||||
// included in the release, please update this with the real version string.
|
||||
@ -37,8 +37,8 @@ string GetMinimumRuntimeVersionForModel(const Model& model) {
|
||||
// A map from the version key of an op to its minimum runtime version.
|
||||
// For example, {{kAveragePool, 1}, "1.5.0"}, means the 1st version of
|
||||
// AveragePool requires a minimum TF Lite runtime version '1.5.0`.
|
||||
static const std::map<std::pair<OperatorType, int>, string>* op_version_map =
|
||||
new std::map<std::pair<OperatorType, int>, string>({
|
||||
static const std::map<std::pair<OperatorType, int>, std::string>*
|
||||
op_version_map = new std::map<std::pair<OperatorType, int>, std::string>({
|
||||
{{OperatorType::kAveragePool, 1}, "1.5.0"},
|
||||
{{OperatorType::kAveragePool, 2}, "1.14.0"},
|
||||
{{OperatorType::kAveragePool, 3}, kPendingReleaseOpVersion},
|
||||
@ -253,7 +253,7 @@ string GetMinimumRuntimeVersionForModel(const Model& model) {
|
||||
tflite::BuildOperatorByTypeMap(false /*enable_select_tf_ops=*/);
|
||||
OperatorSignature op_signature;
|
||||
op_signature.model = &model;
|
||||
string model_min_version;
|
||||
std::string model_min_version;
|
||||
for (const auto& op : model.operators) {
|
||||
if (op_types_map.find(op->type) == op_types_map.end()) continue;
|
||||
op_signature.op = op.get();
|
||||
|
@ -27,9 +27,9 @@ TEST(OpVersionTest, MinimumVersionForSameOpVersions) {
|
||||
Model model;
|
||||
// Float convolutional kernel is introduced since '1.5.0'.
|
||||
std::unique_ptr<ConvOperator> conv(new ConvOperator());
|
||||
const string conv_input = "conv_input";
|
||||
const string conv_filter = "conv_filter";
|
||||
const string conv_output = "conv_output";
|
||||
const std::string conv_input = "conv_input";
|
||||
const std::string conv_filter = "conv_filter";
|
||||
const std::string conv_output = "conv_output";
|
||||
conv->inputs.push_back(conv_input);
|
||||
conv->inputs.push_back(conv_filter);
|
||||
conv->outputs.push_back(conv_output);
|
||||
@ -44,8 +44,8 @@ TEST(OpVersionTest, MinimumVersionForSameOpVersions) {
|
||||
|
||||
// Float softmax kernel is introduced since '1.5.0'.
|
||||
std::unique_ptr<SoftmaxOperator> softmax(new SoftmaxOperator());
|
||||
const string softmax_input = "softmax_input";
|
||||
const string softmax_output = "softmax_output";
|
||||
const std::string softmax_input = "softmax_input";
|
||||
const std::string softmax_output = "softmax_output";
|
||||
softmax->inputs.push_back(softmax_input);
|
||||
softmax->outputs.push_back(softmax_output);
|
||||
array_map[softmax_input] = std::unique_ptr<Array>(new Array);
|
||||
@ -60,9 +60,9 @@ TEST(OpVersionTest, MinimumVersionForMultipleOpVersions) {
|
||||
Model model;
|
||||
// Dilated DepthWiseConvolution is introduced since '1.12.0'.
|
||||
std::unique_ptr<DepthwiseConvOperator> conv(new DepthwiseConvOperator());
|
||||
const string conv_input = "conv_input";
|
||||
const string conv_filter = "conv_filter";
|
||||
const string conv_output = "conv_output";
|
||||
const std::string conv_input = "conv_input";
|
||||
const std::string conv_filter = "conv_filter";
|
||||
const std::string conv_output = "conv_output";
|
||||
conv->inputs.push_back(conv_input);
|
||||
conv->inputs.push_back(conv_filter);
|
||||
conv->outputs.push_back(conv_output);
|
||||
@ -77,10 +77,10 @@ TEST(OpVersionTest, MinimumVersionForMultipleOpVersions) {
|
||||
// FullyConnected op with kShuffled4x16Int8 weight format is introduced from
|
||||
// '1.10.0'.
|
||||
std::unique_ptr<FullyConnectedOperator> fc(new FullyConnectedOperator());
|
||||
const string fc_input = "fc_input";
|
||||
const string fc_weights = "fc_weights";
|
||||
const string fc_bias = "fc_bias";
|
||||
const string fc_output = "fc_output";
|
||||
const std::string fc_input = "fc_input";
|
||||
const std::string fc_weights = "fc_weights";
|
||||
const std::string fc_bias = "fc_bias";
|
||||
const std::string fc_output = "fc_output";
|
||||
fc->inputs.push_back(fc_input);
|
||||
fc->inputs.push_back(fc_weights);
|
||||
fc->inputs.push_back(fc_bias);
|
||||
@ -121,10 +121,10 @@ TEST(OpVersionTest, MinimumVersionForMixedOpVersions) {
|
||||
// FullyConnected op with kShuffled4x16Int8 weight format is introduced from
|
||||
// '1.10.0'.
|
||||
std::unique_ptr<FullyConnectedOperator> fc(new FullyConnectedOperator());
|
||||
const string fc_input = "fc_input";
|
||||
const string fc_weights = "fc_weights";
|
||||
const string fc_bias = "fc_bias";
|
||||
const string fc_output = "fc_output";
|
||||
const std::string fc_input = "fc_input";
|
||||
const std::string fc_weights = "fc_weights";
|
||||
const std::string fc_bias = "fc_bias";
|
||||
const std::string fc_output = "fc_output";
|
||||
fc->inputs.push_back(fc_input);
|
||||
fc->inputs.push_back(fc_weights);
|
||||
fc->inputs.push_back(fc_bias);
|
||||
|
@ -238,7 +238,7 @@ class SpaceToBatchND
|
||||
TocoOperator* op) const override {}
|
||||
|
||||
int GetVersion(const OperatorSignature& op_signature) const override {
|
||||
const string& input_name = op_signature.op->inputs[0];
|
||||
const std::string& input_name = op_signature.op->inputs[0];
|
||||
const Array& input_array = op_signature.model->GetArray(input_name);
|
||||
::tflite::OpSignature op_sig =
|
||||
GetVersioningOpSig(builtin_op(), op_signature);
|
||||
@ -268,8 +268,8 @@ class Sub : public BuiltinOperator<SubOperator, ::tflite::SubOptions,
|
||||
}
|
||||
|
||||
int GetVersion(const OperatorSignature& op_signature) const override {
|
||||
const string& input1_name = op_signature.op->inputs[0];
|
||||
const string& input2_name = op_signature.op->inputs[1];
|
||||
const std::string& input1_name = op_signature.op->inputs[0];
|
||||
const std::string& input2_name = op_signature.op->inputs[1];
|
||||
const Array& input1_array = op_signature.model->GetArray(input1_name);
|
||||
const Array& input2_array = op_signature.model->GetArray(input2_name);
|
||||
::tflite::OpSignature op_sig =
|
||||
@ -305,8 +305,8 @@ class Div : public BuiltinOperator<DivOperator, ::tflite::DivOptions,
|
||||
}
|
||||
|
||||
int GetVersion(const OperatorSignature& op_signature) const override {
|
||||
const string& input1_name = op_signature.op->inputs[0];
|
||||
const string& input2_name = op_signature.op->inputs[1];
|
||||
const std::string& input1_name = op_signature.op->inputs[0];
|
||||
const std::string& input2_name = op_signature.op->inputs[1];
|
||||
const Array& input1_array = op_signature.model->GetArray(input1_name);
|
||||
const Array& input2_array = op_signature.model->GetArray(input2_name);
|
||||
::tflite::OpSignature op_sig =
|
||||
@ -339,7 +339,7 @@ class BatchToSpaceND
|
||||
TocoOperator* op) const override {}
|
||||
|
||||
int GetVersion(const OperatorSignature& op_signature) const override {
|
||||
const string& input_name = op_signature.op->inputs[0];
|
||||
const std::string& input_name = op_signature.op->inputs[0];
|
||||
const Array& input_array = op_signature.model->GetArray(input_name);
|
||||
::tflite::OpSignature op_sig =
|
||||
GetVersioningOpSig(builtin_op(), op_signature);
|
||||
@ -662,9 +662,9 @@ class Mul : public BuiltinOperator<MulOperator, ::tflite::MulOptions,
|
||||
}
|
||||
|
||||
int GetVersion(const OperatorSignature& op_signature) const override {
|
||||
const string& input1_name = op_signature.op->inputs[0];
|
||||
const string& input2_name = op_signature.op->inputs[1];
|
||||
const string& output_name = op_signature.op->outputs[0];
|
||||
const std::string& input1_name = op_signature.op->inputs[0];
|
||||
const std::string& input2_name = op_signature.op->inputs[1];
|
||||
const std::string& output_name = op_signature.op->outputs[0];
|
||||
const Array& input1_array = op_signature.model->GetArray(input1_name);
|
||||
const Array& input2_array = op_signature.model->GetArray(input2_name);
|
||||
const Array& output_array = op_signature.model->GetArray(output_name);
|
||||
@ -1440,7 +1440,7 @@ class Unpack : public BuiltinOperator<UnpackOperator, ::tflite::UnpackOptions,
|
||||
}
|
||||
|
||||
int GetVersion(const OperatorSignature& op_signature) const override {
|
||||
const string& input_name = op_signature.op->inputs[0];
|
||||
const std::string& input_name = op_signature.op->inputs[0];
|
||||
const Array& input_array = op_signature.model->GetArray(input_name);
|
||||
// If the op take int8/uint8 input, it is version 2.
|
||||
if (input_array.data_type == ArrayDataType::kInt8 ||
|
||||
@ -1577,7 +1577,7 @@ class Where : public BuiltinOperator<WhereOperator, ::tflite::WhereOptions,
|
||||
};
|
||||
|
||||
std::unique_ptr<flexbuffers::Builder> WriteFlexOpOptions(
|
||||
const string& tensorflow_node_def) {
|
||||
const std::string& tensorflow_node_def) {
|
||||
auto fbb = absl::make_unique<flexbuffers::Builder>();
|
||||
|
||||
::tensorflow::NodeDef node_def;
|
||||
@ -1597,7 +1597,7 @@ std::unique_ptr<flexbuffers::Builder> WriteFlexOpOptions(
|
||||
|
||||
class TensorFlowUnsupported : public BaseOperator {
|
||||
public:
|
||||
TensorFlowUnsupported(const string& name, OperatorType type,
|
||||
TensorFlowUnsupported(const std::string& name, OperatorType type,
|
||||
bool enable_select_tf_ops)
|
||||
: BaseOperator(name, type), enable_select_tf_ops_(enable_select_tf_ops) {}
|
||||
|
||||
@ -1676,7 +1676,7 @@ class TensorFlowUnsupported : public BaseOperator {
|
||||
case tensorflow::AttrValue::kList:
|
||||
if (attr.list().s_size() > 0) {
|
||||
auto start = fbb->StartVector(key);
|
||||
for (const string& v : attr.list().s()) {
|
||||
for (const std::string& v : attr.list().s()) {
|
||||
fbb->Add(v);
|
||||
}
|
||||
fbb->EndVector(start, /*typed=*/true, /*fixed=*/false);
|
||||
@ -1736,10 +1736,11 @@ class TensorFlowUnsupported : public BaseOperator {
|
||||
break;
|
||||
case flexbuffers::FBT_BOOL:
|
||||
(*attr)[key].set_b(value.AsBool());
|
||||
if (string(key) == "_output_quantized") {
|
||||
if (std::string(key) == "_output_quantized") {
|
||||
op->quantized = value.AsBool();
|
||||
}
|
||||
if (string(key) == "_support_output_type_float_in_quantized_op") {
|
||||
if (std::string(key) ==
|
||||
"_support_output_type_float_in_quantized_op") {
|
||||
op->support_output_type_float_in_quantized_op = value.AsBool();
|
||||
}
|
||||
break;
|
||||
@ -2095,9 +2096,9 @@ std::map<OperatorType, std::unique_ptr<BaseOperator>> BuildOperatorByTypeMap(
|
||||
return result;
|
||||
}
|
||||
|
||||
std::map<string, std::unique_ptr<BaseOperator>> BuildOperatorByNameMap(
|
||||
std::map<std::string, std::unique_ptr<BaseOperator>> BuildOperatorByNameMap(
|
||||
bool enable_select_tf_ops) {
|
||||
std::map<string, std::unique_ptr<BaseOperator>> result;
|
||||
std::map<std::string, std::unique_ptr<BaseOperator>> result;
|
||||
|
||||
std::vector<std::unique_ptr<BaseOperator>> ops =
|
||||
BuildOperatorList(enable_select_tf_ops);
|
||||
@ -2109,7 +2110,7 @@ std::map<string, std::unique_ptr<BaseOperator>> BuildOperatorByNameMap(
|
||||
}
|
||||
|
||||
bool ShouldExportAsFlexOp(bool enable_select_tf_ops,
|
||||
const string& tensorflow_op_name) {
|
||||
const std::string& tensorflow_op_name) {
|
||||
// If Flex ops aren't allow at all, simply return false.
|
||||
if (!enable_select_tf_ops) {
|
||||
return false;
|
||||
|
@ -30,7 +30,7 @@ class BaseOperator;
|
||||
// Return a map contained all know TF Lite Operators, keyed by their names.
|
||||
// TODO(ycling): The pattern to propagate parameters (e.g. enable_select_tf_ops)
|
||||
// is ugly here. Consider refactoring.
|
||||
std::map<string, std::unique_ptr<BaseOperator>> BuildOperatorByNameMap(
|
||||
std::map<std::string, std::unique_ptr<BaseOperator>> BuildOperatorByNameMap(
|
||||
bool enable_select_tf_ops = false);
|
||||
|
||||
// Return a map contained all know TF Lite Operators, keyed by the type of
|
||||
@ -41,7 +41,7 @@ std::map<OperatorType, std::unique_ptr<BaseOperator>> BuildOperatorByTypeMap(
|
||||
// Write the custom option FlexBuffer with a serialized TensorFlow NodeDef
|
||||
// for a Flex op.
|
||||
std::unique_ptr<flexbuffers::Builder> WriteFlexOpOptions(
|
||||
const string& tensorflow_node_def);
|
||||
const std::string& tensorflow_node_def);
|
||||
|
||||
// These are the flatbuffer types for custom and builtin options.
|
||||
using CustomOptions = flatbuffers::Vector<uint8_t>;
|
||||
@ -71,11 +71,11 @@ struct Options {
|
||||
class BaseOperator {
|
||||
public:
|
||||
// Build an operator with the given TF Lite name and tf.mini type.
|
||||
BaseOperator(const string& name, OperatorType type)
|
||||
BaseOperator(const std::string& name, OperatorType type)
|
||||
: name_(name), type_(type) {}
|
||||
virtual ~BaseOperator() = default;
|
||||
|
||||
string name() const { return name_; }
|
||||
std::string name() const { return name_; }
|
||||
OperatorType type() const { return type_; }
|
||||
|
||||
// Given a tf.mini operator, create the corresponding flatbuffer options and
|
||||
@ -111,7 +111,7 @@ class BaseOperator {
|
||||
}
|
||||
|
||||
private:
|
||||
string name_;
|
||||
std::string name_;
|
||||
OperatorType type_;
|
||||
};
|
||||
|
||||
@ -123,7 +123,7 @@ class BaseOperator {
|
||||
// Helper function to determine if a unsupported TensorFlow op should be
|
||||
// exported as an Flex op or a regular custom op.
|
||||
bool ShouldExportAsFlexOp(bool enable_select_tf_ops,
|
||||
const string& tensorflow_op_name);
|
||||
const std::string& tensorflow_op_name);
|
||||
|
||||
} // namespace tflite
|
||||
|
||||
|
@ -30,8 +30,8 @@ namespace {
|
||||
class OperatorTest : public ::testing::Test {
|
||||
protected:
|
||||
// Return the operator for the given name and type.
|
||||
const BaseOperator& GetOperator(const string& name, OperatorType type) {
|
||||
using OpsByName = std::map<string, std::unique_ptr<BaseOperator>>;
|
||||
const BaseOperator& GetOperator(const std::string& name, OperatorType type) {
|
||||
using OpsByName = std::map<std::string, std::unique_ptr<BaseOperator>>;
|
||||
using OpsByType = std::map<OperatorType, std::unique_ptr<BaseOperator>>;
|
||||
|
||||
static auto* by_name = new OpsByName(BuildOperatorByNameMap());
|
||||
@ -86,7 +86,7 @@ class OperatorTest : public ::testing::Test {
|
||||
// Verify serialization and deserialization of simple operators (those
|
||||
// that don't have any configuration parameters).
|
||||
template <typename T>
|
||||
void CheckSimpleOperator(const string& name, OperatorType type) {
|
||||
void CheckSimpleOperator(const std::string& name, OperatorType type) {
|
||||
Options options;
|
||||
auto output_toco_op =
|
||||
SerializeAndDeserialize(GetOperator(name, type), T(), &options);
|
||||
@ -99,7 +99,7 @@ class OperatorTest : public ::testing::Test {
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void CheckReducerOperator(const string& name, OperatorType type) {
|
||||
void CheckReducerOperator(const std::string& name, OperatorType type) {
|
||||
T op;
|
||||
|
||||
op.keep_dims = false;
|
||||
|
@ -25,7 +25,7 @@ DataBuffer::FlatBufferOffset CopyStringToBuffer(
|
||||
const Array& array, flatbuffers::FlatBufferBuilder* builder) {
|
||||
const auto& src_data = array.GetBuffer<ArrayDataType::kString>().data;
|
||||
::tflite::DynamicBuffer dyn_buffer;
|
||||
for (const string& str : src_data) {
|
||||
for (const std::string& str : src_data) {
|
||||
dyn_buffer.AddString(str.c_str(), str.length());
|
||||
}
|
||||
char* tensor_buffer;
|
||||
@ -58,12 +58,12 @@ DataBuffer::FlatBufferOffset CopyBuffer(
|
||||
|
||||
void CopyStringFromBuffer(const ::tflite::Buffer& buffer, Array* array) {
|
||||
auto* src_data = reinterpret_cast<const char*>(buffer.data()->data());
|
||||
std::vector<string>* dst_data =
|
||||
std::vector<std::string>* dst_data =
|
||||
&array->GetMutableBuffer<ArrayDataType::kString>().data;
|
||||
int32_t num_strings = ::tflite::GetStringCount(src_data);
|
||||
for (int i = 0; i < num_strings; i++) {
|
||||
::tflite::StringRef str_ref = ::tflite::GetString(src_data, i);
|
||||
string this_str(str_ref.str, str_ref.len);
|
||||
std::string this_str(str_ref.str, str_ref.len);
|
||||
dst_data->push_back(this_str);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user