26 #ifndef CASADI_SETNONZEROS_PARAM_HPP
27 #define CASADI_SETNONZEROS_PARAM_HPP
29 #include "mx_node.hpp"
44 class CASADI_EXPORT SetNonzerosParam :
public MXNode {
53 static MX create(
const MX& y,
const MX& x,
const MX& nz);
54 static MX create(
const MX& y,
const MX& x,
const MX& inner,
const Slice& outer);
55 static MX create(
const MX& y,
const MX& x,
const Slice& inner,
const MX& outer);
56 static MX create(
const MX& y,
const MX& x,
const MX& inner,
const MX& outer);
60 SetNonzerosParam(
const MX& y,
const MX& x,
const MX& nz);
61 SetNonzerosParam(
const MX& y,
const MX& x,
const MX& nz,
const MX& nz2);
64 ~SetNonzerosParam()
override = 0;
69 int sp_forward(
const bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
74 int sp_reverse(bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
79 casadi_int op()
const override {
return Add ? OP_ADDNONZEROS_PARAM : OP_SETNONZEROS_PARAM;}
82 casadi_int n_inplace()
const override {
return 1;}
87 void generate(CodeGenerator& g,
88 const std::vector<casadi_int>& arg,
89 const std::vector<casadi_int>& res,
90 const std::vector<bool>& arg_is_ref,
91 std::vector<bool>& res_is_ref)
const override;
96 static MXNode* deserialize(DeserializingStream& s);
102 explicit SetNonzerosParam(DeserializingStream& s) : MXNode(s) {}
113 class CASADI_EXPORT SetNonzerosParamVector :
public SetNonzerosParam<Add>{
117 SetNonzerosParamVector(
const MX& y,
const MX& x,
const MX& nz);
120 ~SetNonzerosParamVector()
override {}
125 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
126 const std::vector<bool>& unique={})
const override;
129 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
134 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
135 std::vector<std::vector<MX> >& fsens)
const override;
140 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
141 std::vector<std::vector<MX> >& asens)
const override;
146 std::string disp(
const std::vector<std::string>& arg)
const override;
151 void generate(CodeGenerator& g,
152 const std::vector<casadi_int>& arg,
153 const std::vector<casadi_int>& res,
154 const std::vector<bool>& arg_is_ref,
155 std::vector<bool>& res_is_ref)
const override;
160 void serialize_body(SerializingStream& s)
const override;
164 void serialize_type(SerializingStream& s)
const override;
169 explicit SetNonzerosParamVector(DeserializingStream& s);
174 class CASADI_EXPORT SetNonzerosParamSlice :
public SetNonzerosParam<Add>{
180 size_t sz_iw()
const override;
183 SetNonzerosParamSlice(
const MX& y,
const MX& x,
const MX& inner,
const Slice& outer) :
184 SetNonzerosParam<Add>(y, x, inner), outer_(outer) {}
187 ~SetNonzerosParamSlice()
override {}
192 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
193 const std::vector<bool>& unique={})
const override;
198 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
199 std::vector<std::vector<MX> >& fsens)
const override;
204 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
205 std::vector<std::vector<MX> >& asens)
const override;
208 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
213 std::string disp(
const std::vector<std::string>& arg)
const override;
218 void generate(CodeGenerator& g,
219 const std::vector<casadi_int>& arg,
220 const std::vector<casadi_int>& res,
221 const std::vector<bool>& arg_is_ref,
222 std::vector<bool>& res_is_ref)
const override;
230 void serialize_body(SerializingStream& s)
const override;
234 void serialize_type(SerializingStream& s)
const override;
239 explicit SetNonzerosParamSlice(DeserializingStream& s);
245 class CASADI_EXPORT SetNonzerosSliceParam :
public SetNonzerosParam<Add>{
249 SetNonzerosSliceParam(
const MX& y,
const MX& x,
const Slice& inner,
const MX& outer) :
250 SetNonzerosParam<Add>(y, x, outer), inner_(inner) {}
253 ~SetNonzerosSliceParam()
override {}
258 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
259 const std::vector<bool>& unique={})
const override;
262 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
267 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
268 std::vector<std::vector<MX> >& fsens)
const override;
273 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
274 std::vector<std::vector<MX> >& asens)
const override;
279 std::string disp(
const std::vector<std::string>& arg)
const override;
284 void generate(CodeGenerator& g,
285 const std::vector<casadi_int>& arg,
286 const std::vector<casadi_int>& res,
287 const std::vector<bool>& arg_is_ref,
288 std::vector<bool>& res_is_ref)
const override;
296 void serialize_body(SerializingStream& s)
const override;
300 void serialize_type(SerializingStream& s)
const override;
305 explicit SetNonzerosSliceParam(DeserializingStream& s);
310 class CASADI_EXPORT SetNonzerosParamParam :
public SetNonzerosParam<Add>{
316 size_t sz_iw()
const override;
319 SetNonzerosParamParam(
const MX& y,
const MX& x,
const MX& inner,
const MX& outer) :
320 SetNonzerosParam<Add>(y, x, inner, outer) {}
323 ~SetNonzerosParamParam()
override {}
328 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
329 const std::vector<bool>& unique={})
const override;
332 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
337 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
338 std::vector<std::vector<MX> >& fsens)
const override;
343 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
344 std::vector<std::vector<MX> >& asens)
const override;
349 std::string disp(
const std::vector<std::string>& arg)
const override;
354 void generate(CodeGenerator& g,
355 const std::vector<casadi_int>& arg,
356 const std::vector<casadi_int>& res,
357 const std::vector<bool>& arg_is_ref,
358 std::vector<bool>& res_is_ref)
const override;
363 void serialize_type(SerializingStream& s)
const override;
368 explicit SetNonzerosParamParam(DeserializingStream& s);