#include "caffe2/onnx/helper.h" #include "caffe2/core/logging.h" #include "caffe2/core/operator.h" namespace caffe2 { namespace onnx { std::string DummyName::NewDummyName() { while (true) { const std::string name = c10::str("OC2_DUMMY_", counter_++); auto ret = used_names_.insert(name); if (ret.second) { // NOLINTNEXTLINE(performance-no-automatic-move) return name; } } } void DummyName::Reset(const std::unordered_set& used_names) { used_names_ = used_names; counter_ = 0; } ::ONNX_NAMESPACE::TypeProto ExtraTypeProto( const ::ONNX_NAMESPACE::TensorProto& tensor) { ::ONNX_NAMESPACE::TypeProto t; auto* tensor_type = t.mutable_tensor_type(); tensor_type->set_elem_type(tensor.data_type()); auto* shape = tensor_type->mutable_shape(); for (const auto d : tensor.dims()) { shape->add_dim()->set_dim_value(d); } return t; } NodeProto MakeNode( const std::string& type, const std::vector& inputs, const std::vector& outputs, const std::vector& attributes, const std::string& name) { NodeProto node; if (!name.empty()) { node.set_name(name); } node.set_op_type(type); for (const auto& input : inputs) { node.add_input(input); } for (const auto& output : outputs) { node.add_output(output); } for (const auto& attr : attributes) { node.add_attribute()->CopyFrom(attr); } return node; } } // namespace onnx } // namespace caffe2