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)
const override;
66 void eval_linear(
const std::vector<std::array<MX, 3> >& arg,
67 std::vector<std::array<MX, 3> >& res)
const override;
72 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
73 std::vector<std::vector<MX> >& fsens)
const override;
78 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
79 std::vector<std::vector<MX> >& asens)
const override;
85 virtual std::vector<casadi_int>
all()
const = 0;
93 MX get_nzref(
const Sparsity& sp,
const std::vector<casadi_int>& nz)
const override;
111 const std::vector<casadi_int>& nz) :
GetNonzeros(sp, x), nz_(nz) {}
117 std::vector<casadi_int>
all()
const override {
return nz_;}
122 int sp_forward(
const bvec_t** arg,
bvec_t** res, casadi_int* iw,
bvec_t* w)
const override;
132 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res)
const override;
136 int eval_gen(
const T*
const* arg, T*
const* res, casadi_int* iw, T* w)
const;
139 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
142 int eval_sx(
const SXElem** arg,
SXElem** res, casadi_int* iw,
SXElem* w)
const override;
147 std::string disp(
const std::vector<std::string>& arg)
const override;
153 const std::vector<casadi_int>& arg,
154 const std::vector<casadi_int>& res,
155 const std::vector<bool>& arg_is_ref,
156 std::vector<bool>& res_is_ref)
const override;
161 bool is_equal(
const MXNode* node, casadi_int depth)
const override;
164 Dict info()
const override {
return {{
"nz", nz_}}; }
167 std::vector<casadi_int>
nz_;
195 std::vector<casadi_int>
all()
const override {
return s_.all(s_.stop);}
200 int sp_forward(
const bvec_t** arg,
bvec_t** res, casadi_int* iw,
bvec_t* w)
const override;
209 int eval_gen(
const T*
const* arg, T*
const* res, casadi_int* iw, T* w)
const;
212 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
215 int eval_sx(
const SXElem** arg,
SXElem** res, casadi_int* iw,
SXElem* w)
const override;
220 std::string disp(
const std::vector<std::string>& arg)
const override;
226 const std::vector<casadi_int>& arg,
227 const std::vector<casadi_int>& res,
228 const std::vector<bool>& arg_is_ref,
229 std::vector<bool>& res_is_ref)
const override;
234 bool is_equal(
const MXNode* node, casadi_int depth)
const override;
237 Dict info()
const override {
return {{
"slice", s_.info()}}; }
269 std::vector<casadi_int>
all()
const override {
return inner_.all(outer_, outer_.stop);}
274 int sp_forward(
const bvec_t** arg,
bvec_t** res, casadi_int* iw,
bvec_t* w)
const override;
283 int eval_gen(
const T*
const* arg, T*
const* res, casadi_int* iw, T* w)
const;
286 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
289 int eval_sx(
const SXElem** arg,
SXElem** res, casadi_int* iw,
SXElem* w)
const override;
294 std::string disp(
const std::vector<std::string>& arg)
const override;
300 const std::vector<casadi_int>& arg,
301 const std::vector<casadi_int>& res,
302 const std::vector<bool>& arg_is_ref,
303 std::vector<bool>& res_is_ref)
const override;
308 bool is_equal(
const MXNode* node, casadi_int depth)
const override;
311 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.
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.