26 #ifndef CASADI_CONCAT_HPP
27 #define CASADI_CONCAT_HPP
29 #include "mx_node.hpp"
46 Concat(
const std::vector<MX>& x);
53 int eval_gen(
const T*
const* arg,
T*
const* res, casadi_int* iw,
T* w)
const;
56 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
59 int eval_sx(
const SXElem** arg,
SXElem** res, casadi_int* iw,
SXElem* w)
const override;
65 std::vector<std::array<MX, 3> >& res)
const override {
66 eval_linear_rearrange(arg, res);
73 return sp_forward(arg, res, iw, w);
79 int sp_forward(
const bvec_t** arg,
bvec_t** res, casadi_int* iw,
bvec_t* w)
const override;
90 const std::vector<casadi_int>& arg,
91 const std::vector<casadi_int>& res,
92 const std::vector<bool>& arg_is_ref,
93 std::vector<bool>& res_is_ref)
const override;
96 MX get_nzref(
const Sparsity& sp,
const std::vector<casadi_int>& nz,
97 bool unique=
false)
const override;
103 return sameOpAndDeps(node, depth);
109 bool is_valid_input()
const override;
114 casadi_int n_primitives()
const override;
119 void primitives(std::vector<MX>::iterator& it)
const override;
124 bool has_duplicates()
const override;
129 void reset_input()
const override;
149 Horzcat(
const std::vector<MX>& x);
157 std::string disp(
const std::vector<std::string>& arg)
const override;
162 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
163 const std::vector<bool>& unique={})
const override;
168 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
169 std::vector<std::vector<MX> >& fsens)
const override;
174 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
175 std::vector<std::vector<MX> >& asens)
const override;
184 void split_primitives_gen(
const T& x,
typename std::vector<T>::iterator& it)
const;
190 void split_primitives(
const MX& x, std::vector<MX>::iterator& it)
const override;
191 void split_primitives(
const SX& x, std::vector<SX>::iterator& it)
const override;
192 void split_primitives(
const DM& x, std::vector<DM>::iterator& it)
const override;
197 T join_primitives_gen(
typename std::vector<T>::const_iterator& it)
const;
203 MX join_primitives(std::vector<MX>::const_iterator& it)
const override;
204 SX join_primitives(std::vector<SX>::const_iterator& it)
const override;
205 DM join_primitives(std::vector<DM>::const_iterator& it)
const override;
211 std::vector<casadi_int> off()
const;
234 Vertcat(
const std::vector<MX>& x);
242 std::string disp(
const std::vector<std::string>& arg)
const override;
247 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
248 const std::vector<bool>& unique={})
const override;
253 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
254 std::vector<std::vector<MX> >& fsens)
const override;
259 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
260 std::vector<std::vector<MX> >& asens)
const override;
269 void split_primitives_gen(
const T& x,
typename std::vector<T>::iterator& it)
const;
275 void split_primitives(
const MX& x, std::vector<MX>::iterator& it)
const override;
276 void split_primitives(
const SX& x, std::vector<SX>::iterator& it)
const override;
277 void split_primitives(
const DM& x, std::vector<DM>::iterator& it)
const override;
282 T join_primitives_gen(
typename std::vector<T>::const_iterator& it)
const;
288 MX join_primitives(std::vector<MX>::const_iterator& it)
const override;
289 SX join_primitives(std::vector<SX>::const_iterator& it)
const override;
290 DM join_primitives(std::vector<DM>::const_iterator& it)
const override;
296 std::vector<casadi_int> off()
const;
320 Diagcat(
const std::vector<MX>& x);
328 std::string disp(
const std::vector<std::string>& arg)
const override;
333 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
334 const std::vector<bool>& unique={})
const override;
339 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
340 std::vector<std::vector<MX> >& fsens)
const override;
345 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
346 std::vector<std::vector<MX> >& asens)
const override;
355 void split_primitives_gen(
const T& x,
typename std::vector<T>::iterator& it)
const;
361 void split_primitives(
const MX& x, std::vector<MX>::iterator& it)
const override;
362 void split_primitives(
const SX& x, std::vector<SX>::iterator& it)
const override;
363 void split_primitives(
const DM& x, std::vector<DM>::iterator& it)
const override;
368 T join_primitives_gen(
typename std::vector<T>::const_iterator& it)
const;
374 MX join_primitives(std::vector<MX>::const_iterator& it)
const override;
375 SX join_primitives(std::vector<SX>::const_iterator& it)
const override;
376 DM join_primitives(std::vector<DM>::const_iterator& it)
const override;
382 std::pair<std::vector<casadi_int>, std::vector<casadi_int> > off()
const;
Helper class for C code generation.
Concatenation: Join multiple expressions stacking the nonzeros.
bool is_equal(const MXNode *node, casadi_int depth) const override
Check if two nodes are equivalent up to a given depth.
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.
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)
Concat(DeserializingStream &s)
Deserializing constructor.
Helper class for Serialization.
Diagonal concatenation of matrices.
static MXNode * deserialize(DeserializingStream &s)
Deserialize without type information.
Diagcat(DeserializingStream &s)
Deserializing constructor.
~Diagcat() override
Destructor.
casadi_int op() const override
Get the operation.
Horizontal concatenation.
casadi_int op() const override
Get the operation.
~Horzcat() override
Destructor.
Horzcat(DeserializingStream &s)
Deserializing constructor.
static MXNode * deserialize(DeserializingStream &s)
Deserialize without type information.
Node class for MX objects.
Sparse matrix class. SX and DM are specializations.
The basic scalar symbolic class of CasADi.
Vertical concatenation of vectors.
casadi_int op() const override
Get the operation.
static MXNode * deserialize(DeserializingStream &s)
Deserialize without type information.
~Vertcat() override
Destructor.
Vertcat(DeserializingStream &s)
Deserializing constructor.
unsigned long long bvec_t