26 #ifndef CASADI_BSPLINE_HPP
27 #define CASADI_BSPLINE_HPP
29 #include "mx_node.hpp"
47 const std::vector<casadi_int>& offset,
48 const std::vector<casadi_int>& degree,
50 const std::vector<casadi_int>& lookup_mode);
55 static void prepare(casadi_int m,
const std::vector<casadi_int>& offset,
56 const std::vector<casadi_int>& degree, casadi_int &coeffs_size,
57 std::vector<casadi_int>& coeffs_dims, std::vector<casadi_int>& strides);
59 static casadi_int get_coeff_size(casadi_int m,
const std::vector<casadi_int>& offset,
60 const std::vector<casadi_int>& degree);
62 static void check_coeffs(casadi_int n, casadi_int m,
const std::vector<casadi_int>& offset,
63 const std::vector<casadi_int>& degree);
66 static M derivative_coeff(casadi_int i,
67 const std::vector< std::vector<double> >& knots,
68 const std::vector<casadi_int>& degree,
69 const std::vector<casadi_int>& coeffs_dims,
71 std::vector< std::vector<double> >& new_knots,
72 std::vector<casadi_int>& new_degree);
93 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
95 mutable std::mutex jac_cache_mtx_;
103 static size_t n_iw(
const std::vector<casadi_int> °ree);
108 static size_t n_w(
const std::vector<casadi_int> °ree);
113 size_t sz_iw()
const override;
118 size_t sz_w()
const override;
128 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
129 std::vector<std::vector<MX> >& fsens)
const override;
134 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
135 std::vector<std::vector<MX> >& asens)
const override;
141 const std::vector<casadi_int>& arg,
142 const std::vector<casadi_int>& res,
143 const std::vector<bool>& arg_is_ref,
144 std::vector<bool>& res_is_ref)
const override;
150 const std::vector<casadi_int>& arg,
151 const std::vector<bool>& arg_is_ref)
const = 0;
159 MX jac(
const MX& x,
const T& coeffs)
const;
186 static MX create(
const MX& x,
const std::vector< std::vector<double> >& knots,
187 const std::vector<double>& coeffs,
188 const std::vector<casadi_int>& degree,
193 BSpline(
const MX& x,
const std::vector<double>& knots,
194 const std::vector<casadi_int>& offset,
195 const std::vector<double>& coeffs,
196 const std::vector<casadi_int>& degree,
198 const std::vector<casadi_int>& lookup_mode);
204 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
209 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
210 const std::vector<bool>& unique={})
const override;
215 std::string generate(CodeGenerator& g,
216 const std::vector<casadi_int>& arg,
217 const std::vector<bool>& arg_is_ref)
const override;
222 std::string disp(
const std::vector<std::string>& arg)
const override;
227 MX jac_cached()
const override;
239 static DM dual(
const std::vector<double>& x,
240 const std::vector< std::vector<double> >& knots,
241 const std::vector<casadi_int>& degree,
261 static MX create(
const MX& x,
const MX& coeffs,
262 const std::vector< std::vector<double> >& knots,
263 const std::vector<casadi_int>& degree,
268 static MX create(
const MX& x,
const MX& coeffs,
269 const std::vector<MX>& knots,
270 const std::vector<casadi_int>& degree,
276 const std::vector<double>& knots,
277 const std::vector<casadi_int>& offset,
278 const std::vector<casadi_int>& degree,
280 const std::vector<casadi_int>& lookup_mode);
286 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
291 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
292 const std::vector<bool>& unique={})
const override;
294 MX jac_cached()
const override;
299 std::string generate(CodeGenerator& g,
300 const std::vector<casadi_int>& arg,
301 const std::vector<bool>& arg_is_ref)
const override;
306 std::string disp(
const std::vector<std::string>& arg)
const override;
311 void serialize_type(SerializingStream& s)
const override;
std::vector< casadi_int > lookup_mode_
std::vector< double > knots_
virtual std::string generate(CodeGenerator &g, const std::vector< casadi_int > &arg, const std::vector< bool > &arg_is_ref) const =0
Generate code for the operation.
~BSplineCommon() override
Destructor.
std::vector< casadi_int > degree_
std::vector< casadi_int > offset_
std::vector< casadi_int > coeffs_dims_
std::vector< casadi_int > strides_
virtual MX jac_cached() const =0
casadi_int op() const override
Get the operation.
BSplineParametric(DeserializingStream &s)
Deserializing constructor.
~BSplineParametric() override
Destructor.
~BSpline() override
Destructor.
std::vector< double > coeffs_
Helper class for C code generation.
Helper class for Serialization.
Node class for MX objects.
Helper class for Serialization.
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.