26 #ifndef CASADI_REPMAT_HPP
27 #define CASADI_REPMAT_HPP
29 #include "mx_node.hpp"
43 class CASADI_EXPORT HorzRepmat :
public MXNode {
47 HorzRepmat(
const MX& x, casadi_int n);
51 int eval_gen(
const T** arg, T** res, casadi_int* iw, T* w)
const;
54 ~HorzRepmat()
override {}
59 std::string disp(
const std::vector<std::string>& arg)
const override;
62 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
65 int eval_sx(
const SXElem** arg, SXElem** res, casadi_int* iw, SXElem* w)
const override;
70 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res)
const override;
75 void eval_linear(
const std::vector<std::array<MX, 3> >& arg,
76 std::vector<std::array<MX, 3> >& res)
const override {
77 eval_linear_rearrange(arg, res);
83 int sp_forward(
const bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
88 int sp_reverse(bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
93 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
94 std::vector<std::vector<MX> >& fsens)
const override;
99 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
100 std::vector<std::vector<MX> >& asens)
const override;
105 void generate(CodeGenerator& g,
106 const std::vector<casadi_int>& arg,
107 const std::vector<casadi_int>& res,
108 const std::vector<bool>& arg_is_ref,
109 std::vector<bool>& res_is_ref)
const override;
114 casadi_int op()
const override {
return OP_HORZREPMAT;}
121 void serialize_body(SerializingStream& s)
const override;
126 static MXNode* deserialize(DeserializingStream& s) {
return new HorzRepmat(s); }
132 explicit HorzRepmat(DeserializingStream& s);
141 class CASADI_EXPORT HorzRepsum :
public MXNode {
145 HorzRepsum(
const MX& x, casadi_int n);
148 template<
typename T,
typename R>
149 int eval_gen(
const T** arg, T** res, casadi_int* iw, T* w, R reduction)
const;
152 ~HorzRepsum()
override {}
157 std::string disp(
const std::vector<std::string>& arg)
const override;
160 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
163 int eval_sx(
const SXElem** arg, SXElem** res, casadi_int* iw, SXElem* w)
const override;
168 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res)
const override;
173 int sp_forward(
const bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
178 int sp_reverse(bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
183 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
184 std::vector<std::vector<MX> >& fsens)
const override;
189 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
190 std::vector<std::vector<MX> >& asens)
const override;
195 void generate(CodeGenerator& g,
196 const std::vector<casadi_int>& arg,
197 const std::vector<casadi_int>& res,
198 const std::vector<bool>& arg_is_ref,
199 std::vector<bool>& res_is_ref)
const override;
204 casadi_int op()
const override {
return OP_HORZREPSUM;}
211 void serialize_body(SerializingStream& s)
const override;
216 static MXNode* deserialize(DeserializingStream& s) {
return new HorzRepsum(s); }
222 explicit HorzRepsum(DeserializingStream& s);