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)
const override;
120 std::string disp(
const std::vector<std::string>& arg)
const override;
125 void generate(CodeGenerator& g,
126 const std::vector<casadi_int>& arg,
127 const std::vector<casadi_int>& res,
128 const std::vector<bool>& arg_is_ref,
129 std::vector<bool>& res_is_ref)
const override;
134 void serialize_body(SerializingStream& s)
const override;
138 void serialize_type(SerializingStream& s)
const override;
143 explicit GetNonzerosParamVector(DeserializingStream& s);
147 class CASADI_EXPORT GetNonzerosSliceParam :
public GetNonzerosParam {
151 GetNonzerosSliceParam(
const Sparsity& sp,
const MX& x,
const Slice& inner,
153 GetNonzerosParam(sp, x, outer), inner_(inner) {}
156 ~GetNonzerosSliceParam()
override {}
159 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
164 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res)
const override;
169 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
170 std::vector<std::vector<MX> >& fsens)
const override;
175 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
176 std::vector<std::vector<MX> >& asens)
const override;
181 std::string disp(
const std::vector<std::string>& arg)
const override;
186 void generate(CodeGenerator& g,
187 const std::vector<casadi_int>& arg,
188 const std::vector<casadi_int>& res,
189 const std::vector<bool>& arg_is_ref,
190 std::vector<bool>& res_is_ref)
const override;
193 Dict info()
const override {
return {{
"inner", inner_.info()}}; }
201 void serialize_body(SerializingStream& s)
const override;
205 void serialize_type(SerializingStream& s)
const override;
210 explicit GetNonzerosSliceParam(DeserializingStream& s);
214 class CASADI_EXPORT GetNonzerosParamSlice :
public GetNonzerosParam {
218 GetNonzerosParamSlice(
const Sparsity& sp,
const MX& x,
const MX& inner,
219 const Slice& outer) :
220 GetNonzerosParam(sp, x, inner), outer_(outer) {}
223 ~GetNonzerosParamSlice()
override {}
228 size_t sz_iw()
const override;
231 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
236 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res)
const override;
241 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
242 std::vector<std::vector<MX> >& fsens)
const override;
247 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
248 std::vector<std::vector<MX> >& asens)
const override;
253 std::string disp(
const std::vector<std::string>& arg)
const override;
258 void generate(CodeGenerator& g,
259 const std::vector<casadi_int>& arg,
260 const std::vector<casadi_int>& res,
261 const std::vector<bool>& arg_is_ref,
262 std::vector<bool>& res_is_ref)
const override;
265 Dict info()
const override {
return {{
"outer", outer_.info()}}; }
273 void serialize_body(SerializingStream& s)
const override;
277 void serialize_type(SerializingStream& s)
const override;
282 explicit GetNonzerosParamSlice(DeserializingStream& s);
287 class CASADI_EXPORT GetNonzerosParamParam :
public GetNonzerosParam {
291 GetNonzerosParamParam(
const Sparsity& sp,
const MX& x,
const MX& inner,
293 GetNonzerosParam(sp, x, inner, outer) {}
296 ~GetNonzerosParamParam()
override {}
301 size_t sz_iw()
const override;
304 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
309 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res)
const override;
314 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
315 std::vector<std::vector<MX> >& fsens)
const override;
320 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
321 std::vector<std::vector<MX> >& asens)
const override;
326 std::string disp(
const std::vector<std::string>& arg)
const override;
331 void generate(CodeGenerator& g,
332 const std::vector<casadi_int>& arg,
333 const std::vector<casadi_int>& res,
334 const std::vector<bool>& arg_is_ref,
335 std::vector<bool>& res_is_ref)
const override;
338 Dict info()
const override {
return {}; }
344 void serialize_type(SerializingStream& s)
const override;
349 explicit GetNonzerosParamParam(DeserializingStream& s);
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.