25 #ifndef CASADI_UNO_INTERFACE_HPP
26 #define CASADI_UNO_INTERFACE_HPP
28 #include <casadi/interfaces/uno/casadi_nlpsol_uno_export.h>
29 #include "casadi/core/nlpsol_impl.hpp"
30 #include <Uno_C_API.h>
33 #include "uno_runtime.hpp"
49 struct UnoMemory :
public NlpsolMemory {
50 const UnoInterface&
self;
52 const char* return_status;
53 UnoMemory(
const UnoInterface& uno_interface);
61 class UnoInterface :
public Nlpsol {
63 explicit UnoInterface(
const std::string& name,
const Function& nlp);
64 ~UnoInterface()
override;
66 const char* plugin_name()
const override {
return "uno"; }
67 std::string class_name()
const override {
return "UnoInterface"; }
69 static Nlpsol* creator(
const std::string& name,
const Function& nlp) {
70 return new UnoInterface(name, nlp);
73 static const Options options_;
74 const Options& get_options()
const override {
return options_; }
76 void init(
const Dict& opts)
override;
77 void* alloc_mem()
const override {
return new UnoMemory(*
this); }
78 int init_mem(
void* mem)
const override;
79 void free_mem(
void* mem)
const override;
80 void set_work(
void* mem,
const double**& arg,
double**& res,
81 casadi_int*& iw,
double*& w)
const override;
82 int solve(
void* mem)
const override;
83 Dict get_stats(
void* mem)
const override;
85 void serialize_body(SerializingStream& s)
const override;
86 static ProtoFunction* deserialize(DeserializingStream& s) {
87 return new UnoInterface(s);
90 static const std::string meta_doc;
93 void codegen_body(CodeGenerator& g)
const override;
94 void codegen_declarations(CodeGenerator& g)
const override;
95 void codegen_init_mem(CodeGenerator& g)
const override;
96 void codegen_free_mem(CodeGenerator& g)
const override;
97 std::string codegen_mem_type()
const override {
return "struct casadi_uno_data"; }
98 bool codegen_needs_mem()
const override {
return true; }
101 explicit UnoInterface(DeserializingStream& s);
107 void set_uno_prob(CodeGenerator& g)
const;
111 Sparsity hesslag_sp_;
113 std::vector<uno_int> jacobian_row_indices_;
114 std::vector<uno_int> jacobian_column_indices_;
115 std::vector<uno_int> hessian_row_indices_;
116 std::vector<uno_int> hessian_column_indices_;
121 std::vector<double> placeholder_lb_g_, placeholder_ub_g_;
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.