Logo ROOT  
Reference Guide
Loading...
Searching...
No Matches
ParseBasicUnary.cxx
Go to the documentation of this file.
3#include "onnx_proto3.pb.h"
4
5namespace TMVA {
6namespace Experimental {
7namespace SOFIE {
8
9template <EBasicUnaryOperator Op>
10std::unique_ptr<ROperator> ParseBasicUnary(RModelParser_ONNX &parser, const onnx::NodeProto &nodeproto)
11{
13
14 std::string input_name = nodeproto.input(0);
15 if (parser.IsRegisteredTensorType(input_name)) {
16 input_type = parser.GetTensorType(input_name);
17 } else {
18 throw
19 std::runtime_error("TMVA::SOFIE ONNX Parser Unary op has input tensor " + input_name +
20 " but its type is not yet registered");
21 }
22
23 std::unique_ptr<ROperator> op;
24 std::string output_name = nodeproto.output(0);
25
26 switch (input_type) {
28 op.reset(new ROperator_BasicUnary<float, Op>(input_name, output_name));
29 break;
30 default:
31 throw std::runtime_error("TMVA::SOFIE - Unsupported - Binary Operator does not yet support input type " +
32 std::to_string(static_cast<int>(input_type)));
33 }
34
35 // Infer the output type
36 if (!parser.IsRegisteredTensorType(output_name)) {
37 parser.RegisterTensorType(output_name, input_type);
38 }
39
40 return op;
41};
42
43// Parse Sqrt
44ParserFuncSignature ParseSqrt = [](RModelParser_ONNX &parser, const onnx::NodeProto &nodeproto) {
45 return ParseBasicUnary<EBasicUnaryOperator::kSqrt>(parser, nodeproto);
46};
47
48// Parse Reciprocal
49ParserFuncSignature ParseReciprocal = [](RModelParser_ONNX &parser, const onnx::NodeProto &nodeproto) {
51};
52
53// Parse Neg
54ParserFuncSignature ParseNeg = [](RModelParser_ONNX &parser, const onnx::NodeProto &nodeproto) {
55 return ParseBasicUnary<EBasicUnaryOperator::kNeg>(parser, nodeproto);
56};
57
58// Parse Exp
59ParserFuncSignature ParseExp = [](RModelParser_ONNX &parser, const onnx::NodeProto &nodeproto) {
60 return ParseBasicUnary<EBasicUnaryOperator::kExp>(parser, nodeproto);
61};
62
63// Parse Log
64ParserFuncSignature ParseLog = [](RModelParser_ONNX &parser, const onnx::NodeProto &nodeproto) {
65 return ParseBasicUnary<EBasicUnaryOperator::kLog>(parser, nodeproto);
66};
67
68// Parse Sin
69ParserFuncSignature ParseSin = [](RModelParser_ONNX &parser, const onnx::NodeProto &nodeproto) {
70 return ParseBasicUnary<EBasicUnaryOperator::kSin>(parser, nodeproto);
71};
72
73// Parse Cos
74ParserFuncSignature ParseCos = [](RModelParser_ONNX &parser, const onnx::NodeProto &nodeproto) {
75 return ParseBasicUnary<EBasicUnaryOperator::kCos>(parser, nodeproto);
76};
77
78// Parse Abs
79ParserFuncSignature ParseAbs = [](RModelParser_ONNX &parser, const onnx::NodeProto &nodeproto) {
80 return ParseBasicUnary<EBasicUnaryOperator::kAbs>(parser, nodeproto);
81};
82
83//Parse Softplus
84ParserFuncSignature ParseSoftplus = [](RModelParser_ONNX &parser, const onnx::NodeProto &nodeproto) {
86};
87
88//Parse Atan
89ParserFuncSignature ParseAtan = [](RModelParser_ONNX &parser, const onnx::NodeProto &nodeproto) {
90 return ParseBasicUnary<EBasicUnaryOperator::kAtan>(parser, nodeproto);
91};
92
93//Parse Floor
94ParserFuncSignature ParseFloor = [](RModelParser_ONNX &parser, const onnx::NodeProto &nodeproto) {
95 return ParseBasicUnary<EBasicUnaryOperator::kFloor>(parser, nodeproto);
96};
97
98} // namespace SOFIE
99} // namespace Experimental
100} // namespace TMVA
void RegisterTensorType(const std::string &, ETensorType)
ETensorType GetTensorType(const std::string &name)
ParserFuncSignature ParseSqrt
ParserFuncSignature ParseNeg
ParserFuncSignature ParseCos
ParserFuncSignature ParseLog
std::unique_ptr< ROperator > ParseBasicUnary(RModelParser_ONNX &parser, const onnx::NodeProto &nodeproto)
ParserFuncSignature ParseExp
std::function< std::unique_ptr< ROperator >(RModelParser_ONNX &, const onnx::NodeProto &)> ParserFuncSignature
ParserFuncSignature ParseSoftplus
ParserFuncSignature ParseReciprocal
ParserFuncSignature ParseAtan
ParserFuncSignature ParseFloor
ParserFuncSignature ParseAbs
ParserFuncSignature ParseSin
create variable transformations