3#include "onnx_proto3.pb.h"
6namespace Experimental {
14 if (nodeproto.op_type() ==
"Flatten")
16 else if (nodeproto.op_type() ==
"Squeeze")
18 else if (nodeproto.op_type() ==
"Unsqueeze")
23 auto input_name = nodeproto.input(0);
25 auto shape_name = ((nodeproto.input_size() > 1) && ( opMode ==
Reshape || opMode ==
Unsqueeze || opMode ==
Squeeze) )
26 ? nodeproto.input(1) :
"";
30 throw std::runtime_error(
"TMVA::SOFIE ONNX Parser Reshape op has input tensor" + input_name +
31 " but its type is not yet registered");
37 std::unique_ptr<ROperator> op;
38 int attr_value = (opMode ==
Reshape) ? 0 : 1;
39 if (opMode ==
Reshape && nodeproto.attribute_size() > 0)
40 attr_value = nodeproto.attribute(0).i();
42 std::vector<int64_t> attr_axes = {};
43 if (nodeproto.input_size() == 1 && (opMode ==
Squeeze || opMode ==
Unsqueeze)) {
44 std::string attribute_name = nodeproto.attribute(0).name();
45 if (attribute_name ==
"axes")
46 attr_axes = {nodeproto.attribute(0).ints().begin(), nodeproto.attribute(0).ints().end()};
49 std::string output_name = nodeproto.output(0);
51 if (attr_axes.empty())
52 op.reset(
new ROperator_Reshape(opMode, attr_value, input_name, shape_name, output_name));
bool IsRegisteredTensorType(const std::string &)
void RegisterTensorType(const std::string &, ETensorType)
ETensorType GetTensorType(const std::string &name)
ParserFuncSignature ParseReshape
std::function< std::unique_ptr< ROperator >(RModelParser_ONNX &, const onnx::NodeProto &)> ParserFuncSignature
create variable transformations