| #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<std::string>& 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<std::string>& inputs, | |
| const std::vector<std::string>& outputs, | |
| const std::vector<AttributeProto>& 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 |