Logo ROOT  
Reference Guide
Loading...
Searching...
No Matches
ParseNonZero.cxx
Go to the documentation of this file.
3#include "onnx_proto3.pb.h"
4
5namespace TMVA {
6namespace Experimental {
7namespace SOFIE {
8
9ParserFuncSignature ParseNonZero = [](RModelParser_ONNX &parser, const onnx::NodeProto &nodeproto) {
10 ETensorType input_type;
11
12 auto input_name = nodeproto.input(0);
13 if (parser.IsRegisteredTensorType(input_name)) {
14 input_type = parser.GetTensorType(input_name);
15 } else {
16 throw std::runtime_error("TMVA::SOFIE ONNX Parser NonZero op has input tensor" + input_name +
17 " but its type is not yet registered");
18 }
19
20 std::string output_name = nodeproto.output(0);
21
22 std::unique_ptr<ROperator> op;
23 switch (input_type) {
25 op.reset(new ROperator_NonZero<float>(input_name, output_name));
26 break;
28 op.reset(new ROperator_NonZero<int64_t>(input_name, output_name));
29 break;
31 op.reset(new ROperator_NonZero<int32_t>(input_name, output_name));
32 break;
34 op.reset(new ROperator_NonZero<int8_t>(input_name, output_name));
35 break;
37 op.reset(new ROperator_NonZero<uint8_t>(input_name, output_name));
38 break;
40 op.reset(new ROperator_NonZero<bool>(input_name, output_name));
41 break;
42 default:
43 throw std::runtime_error("TMVA::SOFIE - Unsupported - Operator NonZero does not yet support input type " +
44 std::to_string(static_cast<int>(input_type)));
45 }
46
47
48
49 if (!parser.IsRegisteredTensorType(output_name)) {
50 parser.RegisterTensorType(output_name, input_type);
51 }
52
53 return op;
54};
55
56} // namespace SOFIE
57} // namespace Experimental
58} // namespace TMVA
void RegisterTensorType(const std::string &, ETensorType)
ETensorType GetTensorType(const std::string &name)
ParserFuncSignature ParseNonZero
std::function< std::unique_ptr< ROperator >(RModelParser_ONNX &, const onnx::NodeProto &)> ParserFuncSignature
create variable transformations