26 #ifndef CASADI_ORT_INTERFACE_HPP
27 #define CASADI_ORT_INTERFACE_HPP
29 #include "casadi/core/onnx_function_impl.hpp"
30 #include <casadi/interfaces/ort/casadi_onnx_ort_export.h>
32 #include <onnxruntime_c_api.h>
33 #include "ort_runtime.h"
46 struct OnnxRuntimeMemory :
public OnnxMemory {
47 casadi_onnxruntime_data d{};
61 class OnnxRuntimeInterface :
public OnnxFunction {
63 OnnxRuntimeInterface(
const std::string& name,
64 const GraphBuilderInternal* gb,
65 const std::vector<std::string>& inputs,
66 const std::vector<std::string>& outputs);
73 ~OnnxRuntimeInterface()
override;
76 static OnnxFunction* creator(
const std::string& name,
77 const GraphBuilderInternal* gb,
78 const std::vector<std::string>& inputs,
79 const std::vector<std::string>& outputs,
81 return new OnnxRuntimeInterface(name, gb, inputs, outputs);
84 const char* plugin_name()
const override {
return "ort"; }
85 std::string class_name()
const override {
return "OnnxRuntimeInterface"; }
89 static const Options options_;
90 const Options& get_options()
const override {
return options_; }
94 void init(
const Dict& opts)
override;
97 void* alloc_mem()
const override {
return new OnnxRuntimeMemory(); }
100 int init_mem(
void* mem)
const override;
103 void free_mem(
void* mem)
const override;
106 int eval(
const double** arg,
double** res,
107 casadi_int* iw,
double* w,
void* mem)
const override;
110 bool has_codegen()
const override {
return true; }
113 void codegen_declarations(CodeGenerator& g)
const override;
116 void codegen_body(CodeGenerator& g)
const override;
119 void serialize_body(SerializingStream &s)
const override;
122 static ProtoFunction* deserialize(DeserializingStream& s) {
123 return new OnnxRuntimeInterface(s);
127 static const std::string meta_doc;
131 explicit OnnxRuntimeInterface(DeserializingStream& s);
134 void ort_check(OrtStatus* status,
const std::string& what)
const;
139 const OrtApi* ort_api_;
140 std::string provider_;
143 std::vector<const char*> in_names_c_, out_names_c_;
144 std::vector<casadi_int> in_elem_, out_elem_, in_ndim_, out_ndim_;
145 std::vector<casadi_int> in_dims_, out_dims_, in_numel_, out_numel_;
146 casadi_onnxruntime_prob prob_;
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.