26 #ifndef CASADI_GETNONZEROS_HPP
27 #define CASADI_GETNONZEROS_HPP
29 #include "mx_node.hpp"
47 static MX create(
const Sparsity& sp,
const MX& x,
const std::vector<casadi_int>& nz);
61 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
62 const std::vector<bool>& unique={})
const override;
67 void eval_linear(
const std::vector<std::array<MX, 3> >& arg,
68 std::vector<std::array<MX, 3> >& res)
const override;
74 return sp_forward(arg, res, iw, w);
80 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
81 std::vector<std::vector<MX> >& fsens)
const override;
86 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
87 std::vector<std::vector<MX> >& asens)
const override;
93 virtual std::vector<casadi_int>
all()
const = 0;
101 MX get_nzref(
const Sparsity& sp,
const std::vector<casadi_int>& nz,
102 bool unique=
false)
const override;
120 const std::vector<casadi_int>& nz) :
GetNonzeros(sp, x), nz_(nz) {}
126 std::vector<casadi_int>
all()
const override {
return nz_;}
131 int sp_forward(
const bvec_t** arg,
bvec_t** res, casadi_int* iw,
bvec_t* w)
const override;
141 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
142 const std::vector<bool>& unique={})
const override;
146 int eval_gen(
const T*
const* arg, T*
const* res, casadi_int* iw, T* w)
const;
149 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
152 int eval_sx(
const SXElem** arg, SXElem** res, casadi_int* iw, SXElem* w)
const override;
157 std::string disp(
const std::vector<std::string>& arg)
const override;
162 void generate(CodeGenerator& g,
163 const std::vector<casadi_int>& arg,
164 const std::vector<casadi_int>& res,
165 const std::vector<bool>& arg_is_ref,
166 std::vector<bool>& res_is_ref)
const override;
171 bool is_equal(
const MXNode* node, casadi_int depth)
const override;
174 Dict info()
const override {
return {{
"nz", nz_}}; }
177 std::vector<casadi_int>
nz_;
205 std::vector<casadi_int>
all()
const override {
return s_.all(s_.stop);}
210 int sp_forward(
const bvec_t** arg,
bvec_t** res, casadi_int* iw,
bvec_t* w)
const override;
219 int eval_gen(
const T*
const* arg, T*
const* res, casadi_int* iw, T* w)
const;
222 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
225 int eval_sx(
const SXElem** arg,
SXElem** res, casadi_int* iw,
SXElem* w)
const override;
230 std::string disp(
const std::vector<std::string>& arg)
const override;
236 const std::vector<casadi_int>& arg,
237 const std::vector<casadi_int>& res,
238 const std::vector<bool>& arg_is_ref,
239 std::vector<bool>& res_is_ref)
const override;
244 bool is_equal(
const MXNode* node, casadi_int depth)
const override;
247 Dict info()
const override {
return {{
"slice", s_.info()}}; }
279 std::vector<casadi_int>
all()
const override {
return inner_.all(outer_, outer_.stop);}
284 int sp_forward(
const bvec_t** arg,
bvec_t** res, casadi_int* iw,
bvec_t* w)
const override;
293 int eval_gen(
const T*
const* arg, T*
const* res, casadi_int* iw, T* w)
const;
296 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
299 int eval_sx(
const SXElem** arg,
SXElem** res, casadi_int* iw,
SXElem* w)
const override;
304 std::string disp(
const std::vector<std::string>& arg)
const override;
310 const std::vector<casadi_int>& arg,
311 const std::vector<casadi_int>& res,
312 const std::vector<bool>& arg_is_ref,
313 std::vector<bool>& res_is_ref)
const override;
318 bool is_equal(
const MXNode* node, casadi_int depth)
const override;
321 Dict info()
const override {
return {{
"inner", inner_.info()}, {
"outer", outer_.info()}}; }
Helper class for C code generation.
Helper class for Serialization.
GetNonzerosSlice2(const Sparsity &sp, const MX &x, const Slice &inner, const Slice &outer)
Constructor.
Dict info() const override
~GetNonzerosSlice2() override
Destructor.
std::vector< casadi_int > all() const override
Get all the nonzeros.
std::vector< casadi_int > all() const override
Get all the nonzeros.
~GetNonzerosSlice() override
Destructor.
GetNonzerosSlice(const Sparsity &sp, const MX &x, const Slice &s)
Constructor.
Dict info() const override
~GetNonzerosVector() override
Destructor.
std::vector< casadi_int > all() const override
Get all the nonzeros.
Dict info() const override
std::vector< casadi_int > nz_
Operation sequence.
GetNonzerosVector(const Sparsity &sp, const MX &x, const std::vector< casadi_int > &nz)
Constructor.
Get nonzeros of a matrix.
casadi_int op() const override
Get the operation.
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.
~GetNonzeros() override
Destructor.
GetNonzeros(DeserializingStream &s)
Deserializing constructor.
Node class for MX objects.
The basic scalar symbolic class of CasADi.
Helper class for Serialization.
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.