26 #ifndef CASADI_INTERPOLANT_IMPL_HPP
27 #define CASADI_INTERPOLANT_IMPL_HPP
29 #include "interpolant.hpp"
30 #include "function_internal.hpp"
31 #include "plugin_interface.hpp"
40 class CASADI_EXPORT Interpolant
41 :
public FunctionInternal,
public PluginInterface<Interpolant> {
44 Interpolant(
const std::string& name,
45 const std::vector<double>& grid,
46 const std::vector<casadi_int>& offset,
47 const std::vector<double>& values,
51 ~Interpolant()
override;
56 std::string class_name()
const override {
return "Interpolant";}
62 size_t get_n_in()
override {
return 1+has_parametric_values()+has_parametric_grid();}
63 size_t get_n_out()
override {
return 1;}
69 bool get_diff_in(casadi_int i)
override {
return i==0; }
75 Sparsity get_sparsity_in(casadi_int i)
override;
76 Sparsity get_sparsity_out(casadi_int i)
override;
83 std::string get_name_in(casadi_int i)
override;
84 std::string get_name_out(casadi_int i)
override;
91 static const Options options_;
92 const Options& get_options()
const override {
return options_;}
96 void init(
const Dict& opts)
override;
99 static std::vector<casadi_int> interpret_lookup_mode(
const std::vector<std::string>& modes,
100 const std::vector<double>& grid,
const std::vector<casadi_int>& offset,
101 const std::vector<casadi_int>& margin_left=std::vector<casadi_int>(),
102 const std::vector<casadi_int>& margin_right=std::vector<casadi_int>());
104 static void stack_grid(
const std::vector< std::vector<double> >& grid,
105 std::vector<casadi_int>& offset, std::vector<double>& stacked);
107 static void check_grid(
const std::vector< std::vector<double> >& grid);
108 static void check_grid(
const std::vector<casadi_int>& grid);
110 static std::vector<double> meshgrid(
const std::vector< std::vector<double> >& grid);
113 typedef Interpolant* (*Creator)(
const std::string& name,
114 const std::vector<double>& grid,
115 const std::vector<casadi_int>& offset,
116 const std::vector<double>& values,
122 static Function construct(
const std::string& solver,
const std::string& name,
123 const std::vector<double>& grid,
124 const std::vector<casadi_int>& offset,
125 const std::vector<double>& values,
129 typedef Function (* DoInline)(
const std::string& name,
130 const std::vector<double>& grid,
131 const std::vector<casadi_int>& offset,
132 const std::vector<double>& values,
137 struct Exposed{ DoInline do_inline; };
140 static std::map<std::string, Plugin> solvers_;
143 static const std::string infix_;
155 std::vector<double> grid_;
158 std::vector<casadi_int> offset_;
161 std::vector<double> values_;
164 std::vector<std::string> lookup_modes_;
169 void serialize_body(SerializingStream &s)
const override;
173 void serialize_type(SerializingStream &s)
const override;
178 std::string serialize_base_function()
const override {
return "Interpolant"; }
182 static ProtoFunction* deserialize(DeserializingStream& s);
187 bool has_parametric_values()
const {
return values_.empty(); }
192 bool has_parametric_grid()
const {
return grid_.empty(); }
194 casadi_int arg_values()
const;
195 casadi_int arg_grid()
const;
200 casadi_int coeff_size()
const;
201 static casadi_int coeff_size(
const std::vector<casadi_int>& offset, casadi_int m);
205 bool arg_values(casadi_int i)
const;
206 bool arg_grid(casadi_int i)
const;
211 explicit Interpolant(DeserializingStream& s);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.