26 #ifndef CASADI_SETNONZEROS_HPP
27 #define CASADI_SETNONZEROS_HPP
29 #include "mx_node.hpp"
52 static MX create(
const MX& y,
const MX& x,
const std::vector<casadi_int>& nz);
53 static MX create(
const MX& y,
const MX& x,
const Slice& s);
54 static MX create(
const MX& y,
const MX& x,
const Slice& inner,
const Slice& outer);
64 virtual std::vector<casadi_int>
all()
const = 0;
69 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
70 const std::vector<bool>& unique={})
const override;
76 std::vector<std::array<MX, 3> >& res)
const override {
77 eval_linear_rearrange(arg, res);
84 return sp_forward(arg, res, iw, w);
90 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
91 std::vector<std::vector<MX> >& fsens)
const override;
96 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
97 std::vector<std::vector<MX> >& asens)
const override;
140 std::vector<casadi_int>
all()
const override {
return nz_;}
145 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
146 const std::vector<bool>& unique={})
const override;
150 int eval_gen(
const T** arg, T** res, casadi_int* iw, T* w)
const;
153 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
156 int eval_sx(
const SXElem** arg, SXElem** res, casadi_int* iw, SXElem* w)
const override;
161 int sp_forward(
const bvec_t** arg,
bvec_t** res, casadi_int* iw,
bvec_t* w)
const override;
171 std::string disp(
const std::vector<std::string>& arg)
const override;
176 void generate(CodeGenerator& g,
177 const std::vector<casadi_int>& arg,
178 const std::vector<casadi_int>& res,
179 const std::vector<bool>& arg_is_ref,
180 std::vector<bool>& res_is_ref)
const override;
185 bool is_equal(
const MXNode* node, casadi_int depth)
const override;
188 Dict info()
const override {
return {{
"nz", nz_}, {
"add", Add}}; }
191 std::vector<casadi_int>
nz_;
220 std::vector<casadi_int>
all()
const override {
return s_.all(s_.stop);}
225 int sp_forward(
const bvec_t** arg,
bvec_t** res, casadi_int* iw,
bvec_t* w)
const override;
235 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
236 const std::vector<bool>& unique={})
const override;
240 int eval_gen(
const T** arg, T** res, casadi_int* iw, T* w)
const;
243 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
246 int eval_sx(
const SXElem** arg, SXElem** res, casadi_int* iw, SXElem* w)
const override;
251 std::string disp(
const std::vector<std::string>& arg)
const override;
256 void generate(CodeGenerator& g,
257 const std::vector<casadi_int>& arg,
258 const std::vector<casadi_int>& res,
259 const std::vector<bool>& arg_is_ref,
260 std::vector<bool>& res_is_ref)
const override;
265 bool is_equal(
const MXNode* node, casadi_int depth)
const override;
268 Dict info()
const override {
return {{
"slice", s_.info()}, {
"add", Add}}; }
295 SetNonzeros<Add>(y, x), inner_(inner), outer_(outer) {}
301 std::vector<casadi_int>
all()
const override {
return inner_.all(outer_, outer_.stop);}
306 int sp_forward(
const bvec_t** arg,
bvec_t** res, casadi_int* iw,
bvec_t* w)
const override;
316 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
317 const std::vector<bool>& unique={})
const override;
321 int eval_gen(
const T** arg, T** res, casadi_int* iw, T* w)
const;
324 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
327 int eval_sx(
const SXElem** arg, SXElem** res, casadi_int* iw, SXElem* w)
const override;
332 std::string disp(
const std::vector<std::string>& arg)
const override;
337 void generate(CodeGenerator& g,
338 const std::vector<casadi_int>& arg,
339 const std::vector<casadi_int>& res,
340 const std::vector<bool>& arg_is_ref,
341 std::vector<bool>& res_is_ref)
const override;
346 bool is_equal(
const MXNode* node, casadi_int depth)
const override;
349 Dict info()
const override {
return {{
"inner", inner_.info()}, {
"outer", outer_.info()},
Helper class for Serialization.
Node class for MX objects.
Helper class for Serialization.
std::vector< casadi_int > all() const override
Get all the nonzeros.
SetNonzerosSlice2(const MX &y, const MX &x, const Slice &inner, const Slice &outer)
Constructor.
Dict info() const override
~SetNonzerosSlice2() override
Destructor.
~SetNonzerosSlice() override
Destructor.
Dict info() const override
std::vector< casadi_int > all() const override
Get all the nonzeros.
SetNonzerosSlice(const MX &y, const MX &x, const Slice &s)
Constructor.
Add the nonzeros of a matrix to another matrix.
Dict info() const override
std::vector< casadi_int > nz_
Operation sequence.
std::vector< casadi_int > all() const override
Get all the nonzeros.
~SetNonzerosVector() override
Destructor.
Assign or add entries to a matrix.
void eval_linear(const std::vector< std::array< MX, 3 > > &arg, std::vector< std::array< MX, 3 > > &res) const override
Evaluate the MX node on a const/linear/nonlinear partition.
SetNonzeros(DeserializingStream &s)
Deserializing constructor.
casadi_int op() const override
Get the operation.
casadi_int n_inplace() const override
Can the operation be performed inplace (i.e. overwrite the result)
int eval_activity(const bvec_t **arg, bvec_t **res, casadi_int *iw, bvec_t *w) const override
Propagate signal activity forward (bit set = active)
virtual std::vector< casadi_int > all() const =0
Get all the nonzeros.
Class representing a Slice.
bool is_equal(double x, double y, casadi_int depth=0)
unsigned long long bvec_t
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.