26 #ifndef CASADI_BLAZING_SPLINE_IMPL_HPP
27 #define CASADI_BLAZING_SPLINE_IMPL_HPP
29 #include "blazing_spline.hpp"
30 #include "function_internal.hpp"
35 class CASADI_EXPORT BlazingSplineFunction :
public FunctionInternal {
40 BlazingSplineFunction(
41 const std::string& name,
42 const std::vector< std::vector<double> >& knots,
43 casadi_int diff_order,
44 bool precompute_coeff =
true,
45 bool precompute_grid =
false);
50 BlazingSplineFunction(
51 const std::string& name,
52 const std::vector<casadi_int>& knot_dims,
53 casadi_int diff_order,
54 bool precompute_coeff =
false,
55 bool precompute_grid =
false,
56 bool inv_input =
false);
61 std::string class_name()
const override {
return "BlazingSplineFunction";}
66 ~BlazingSplineFunction()
override;
71 void merge(
const std::vector<MX>& arg,
72 std::vector<MX>& subs_from, std::vector<MX>& subs_to)
const override;
78 static const Options options_;
79 const Options& get_options()
const override {
return options_;}
85 void init(
const Dict& opts)
override;
87 void init_derived_members();
92 bool has_codegen()
const override {
return true;}
97 void codegen_body(CodeGenerator& g)
const override;
103 bool has_jacobian()
const override;
104 Function get_jacobian(
const std::string& name,
105 const std::vector<std::string>& inames,
106 const std::vector<std::string>& onames,
107 const Dict& opts)
const override;
113 bool has_parametric_knots()
const {
return knots_.empty(); }
118 casadi_int ndim()
const {
return knots_offset_.size()-1; }
123 casadi_int arg_knots()
const {
return 2; }
128 casadi_int arg_inv()
const {
return arg_knots() + 1; }
130 casadi_int diff_order_;
131 bool precompute_coeff_ =
false;
132 bool precompute_grid_ =
false;
133 bool inv_input_ =
false;
134 std::vector< std::vector<double> > knots_;
135 std::vector<std::string> lookup_modes_;
136 std::string pedantic_mode_order_ =
"warn";
137 std::string pedantic_mode_size_ =
"error";
140 std::vector<casadi_int> knots_offset_;
141 std::vector<double> knots_stacked_;
143 std::vector<double> knots_inv_;
146 casadi_int nc_, ndc_, nddc_;
152 size_t get_n_in()
override;
153 size_t get_n_out()
override;
159 bool get_diff_in(casadi_int i)
override;
165 Sparsity get_sparsity_in(casadi_int i)
override;
166 Sparsity get_sparsity_out(casadi_int i)
override;
173 std::string get_name_in(casadi_int i)
override;
174 std::string get_name_out(casadi_int i)
override;
180 void serialize_body(SerializingStream &s)
const override;
185 static ProtoFunction* deserialize(DeserializingStream& s);
190 std::string serialize_base_function()
const override {
return "BlazingSplineFunction"; }
196 explicit BlazingSplineFunction(DeserializingStream& s);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.