Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
ParseBasicUnary.cxx
Go to the documentation of this file.
3#include "onnx.hxx"
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
44{
45 parser.RegisterOperator("Sqrt", ParseBasicUnary<EBasicUnaryOperator::kSqrt>);
46 parser.RegisterOperator("Reciprocal", ParseBasicUnary<EBasicUnaryOperator::kReciprocal>);
47 parser.RegisterOperator("Neg", ParseBasicUnary<EBasicUnaryOperator::kNeg>);
48 parser.RegisterOperator("Exp", ParseBasicUnary<EBasicUnaryOperator::kExp>);
49 parser.RegisterOperator("Log", ParseBasicUnary<EBasicUnaryOperator::kLog>);
50 parser.RegisterOperator("Sin", ParseBasicUnary<EBasicUnaryOperator::kSin>);
51 parser.RegisterOperator("Cos", ParseBasicUnary<EBasicUnaryOperator::kCos>);
52 parser.RegisterOperator("Abs", ParseBasicUnary<EBasicUnaryOperator::kAbs>);
53 parser.RegisterOperator("Softplus", ParseBasicUnary<EBasicUnaryOperator::kSoftplus>);
54 parser.RegisterOperator("Atan", ParseBasicUnary<EBasicUnaryOperator::kAtan>);
55 parser.RegisterOperator("Asinh", ParseBasicUnary<EBasicUnaryOperator::kAsinh>);
56 parser.RegisterOperator("Acosh", ParseBasicUnary<EBasicUnaryOperator::kAcosh>);
57 parser.RegisterOperator("Atanh", ParseBasicUnary<EBasicUnaryOperator::kAtanh>);
58 parser.RegisterOperator("Floor", ParseBasicUnary<EBasicUnaryOperator::kFloor>);
59}
60
61} // namespace SOFIE
62} // namespace Experimental
63} // namespace TMVA
void RegisterOperator(const std::string &name, ParserFuncSignature func)
void RegisterTensorType(const std::string &, ETensorType)
ETensorType GetTensorType(const std::string &name)
const std::string & input(int i) const
Definition onnx.hxx:509
const std::string & output(int i) const
Definition onnx.hxx:512
std::unique_ptr< ROperator > ParseBasicUnary(RModelParser_ONNX &parser, const onnx::NodeProto &nodeproto)
void RegisterBasicUnaryParsers(RModelParser_ONNX &parser)
create variable transformations