26 #ifndef CASADI_GETNONZEROS_PARAM_HPP
27 #define CASADI_GETNONZEROS_PARAM_HPP
29 #include "mx_node.hpp"
42 class CASADI_EXPORT GetNonzerosParam :
public MXNode {
47 static MX create(
const MX& x,
const MX& nz);
48 static MX create(
const MX& x,
const MX& inner,
const Slice& outer);
49 static MX create(
const MX& x,
const Slice& inner,
const MX& outer);
50 static MX create(
const MX& x,
const MX& inner,
const MX& outer);
54 GetNonzerosParam(
const Sparsity& sp,
const MX& y,
const MX& nz);
55 GetNonzerosParam(
const Sparsity& sp,
const MX& y,
const MX& nz,
const MX& nz_extra);
58 ~GetNonzerosParam()
override {}
63 int sp_forward(
const bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
68 int sp_reverse(bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
73 casadi_int op()
const override {
return OP_GETNONZEROS_PARAM;}
78 static MXNode* deserialize(DeserializingStream& s);
84 explicit GetNonzerosParam(DeserializingStream& s) : MXNode(s) {}
88 class CASADI_EXPORT GetNonzerosParamVector :
public GetNonzerosParam {
91 GetNonzerosParamVector(
const MX& x,
92 const MX& nz) : GetNonzerosParam(nz.sparsity(), x, nz) {}
95 ~GetNonzerosParamVector()
override {}
100 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
101 std::vector<std::vector<MX> >& fsens)
const override;
106 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
107 std::vector<std::vector<MX> >& asens)
const override;
110 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
115 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
116 const std::vector<bool>& unique={})
const override;
121 std::string disp(
const std::vector<std::string>& arg)
const override;
126 void generate(CodeGenerator& g,
127 const std::vector<casadi_int>& arg,
128 const std::vector<casadi_int>& res,
129 const std::vector<bool>& arg_is_ref,
130 std::vector<bool>& res_is_ref)
const override;
135 void serialize_body(SerializingStream& s)
const override;
139 void serialize_type(SerializingStream& s)
const override;
144 explicit GetNonzerosParamVector(DeserializingStream& s);
148 class CASADI_EXPORT GetNonzerosSliceParam :
public GetNonzerosParam {
152 GetNonzerosSliceParam(
const Sparsity& sp,
const MX& x,
const Slice& inner,
154 GetNonzerosParam(sp, x, outer), inner_(inner) {}
157 ~GetNonzerosSliceParam()
override {}
160 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
165 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
166 const std::vector<bool>& unique={})
const override;
171 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
172 std::vector<std::vector<MX> >& fsens)
const override;
177 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
178 std::vector<std::vector<MX> >& asens)
const override;
183 std::string disp(
const std::vector<std::string>& arg)
const override;
188 void generate(CodeGenerator& g,
189 const std::vector<casadi_int>& arg,
190 const std::vector<casadi_int>& res,
191 const std::vector<bool>& arg_is_ref,
192 std::vector<bool>& res_is_ref)
const override;
195 Dict info()
const override {
return {{
"inner", inner_.info()}}; }
203 void serialize_body(SerializingStream& s)
const override;
207 void serialize_type(SerializingStream& s)
const override;
212 explicit GetNonzerosSliceParam(DeserializingStream& s);
216 class CASADI_EXPORT GetNonzerosParamSlice :
public GetNonzerosParam {
220 GetNonzerosParamSlice(
const Sparsity& sp,
const MX& x,
const MX& inner,
221 const Slice& outer) :
222 GetNonzerosParam(sp, x, inner), outer_(outer) {}
225 ~GetNonzerosParamSlice()
override {}
230 size_t sz_iw()
const override;
233 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
238 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
239 const std::vector<bool>& unique={})
const override;
244 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
245 std::vector<std::vector<MX> >& fsens)
const override;
250 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
251 std::vector<std::vector<MX> >& asens)
const override;
256 std::string disp(
const std::vector<std::string>& arg)
const override;
261 void generate(CodeGenerator& g,
262 const std::vector<casadi_int>& arg,
263 const std::vector<casadi_int>& res,
264 const std::vector<bool>& arg_is_ref,
265 std::vector<bool>& res_is_ref)
const override;
268 Dict info()
const override {
return {{
"outer", outer_.info()}}; }
276 void serialize_body(SerializingStream& s)
const override;
280 void serialize_type(SerializingStream& s)
const override;
285 explicit GetNonzerosParamSlice(DeserializingStream& s);
290 class CASADI_EXPORT GetNonzerosParamParam :
public GetNonzerosParam {
294 GetNonzerosParamParam(
const Sparsity& sp,
const MX& x,
const MX& inner,
296 GetNonzerosParam(sp, x, inner, outer) {}
299 ~GetNonzerosParamParam()
override {}
304 size_t sz_iw()
const override;
307 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
312 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
313 const std::vector<bool>& unique={})
const override;
318 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
319 std::vector<std::vector<MX> >& fsens)
const override;
324 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
325 std::vector<std::vector<MX> >& asens)
const override;
330 std::string disp(
const std::vector<std::string>& arg)
const override;
335 void generate(CodeGenerator& g,
336 const std::vector<casadi_int>& arg,
337 const std::vector<casadi_int>& res,
338 const std::vector<bool>& arg_is_ref,
339 std::vector<bool>& res_is_ref)
const override;
342 Dict info()
const override {
return {}; }
348 void serialize_type(SerializingStream& s)
const override;
353 explicit GetNonzerosParamParam(DeserializingStream& s);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.