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 int sp_forward(
const bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
80 int sp_reverse(bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
85 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
86 std::vector<std::vector<MX> >& fsens)
const override;
91 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
92 std::vector<std::vector<MX> >& asens)
const override;
97 void generate(CodeGenerator& g,
98 const std::vector<casadi_int>& arg,
99 const std::vector<casadi_int>& res)
const override;
104 casadi_int op()
const override {
return OP_HORZREPMAT;}
111 void serialize_body(SerializingStream& s)
const override;
116 static MXNode* deserialize(DeserializingStream& s) {
return new HorzRepmat(s); }
122 explicit HorzRepmat(DeserializingStream& s);
131 class CASADI_EXPORT HorzRepsum :
public MXNode {
135 HorzRepsum(
const MX& x, casadi_int n);
138 template<
typename T,
typename R>
139 int eval_gen(
const T** arg, T** res, casadi_int* iw, T* w, R reduction)
const;
142 ~HorzRepsum()
override {}
147 std::string disp(
const std::vector<std::string>& arg)
const override;
150 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
153 int eval_sx(
const SXElem** arg, SXElem** res, casadi_int* iw, SXElem* w)
const override;
158 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res)
const override;
163 int sp_forward(
const bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
168 int sp_reverse(bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
173 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
174 std::vector<std::vector<MX> >& fsens)
const override;
179 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
180 std::vector<std::vector<MX> >& asens)
const override;
185 void generate(CodeGenerator& g,
186 const std::vector<casadi_int>& arg,
187 const std::vector<casadi_int>& res)
const override;
192 casadi_int op()
const override {
return OP_HORZREPSUM;}
199 void serialize_body(SerializingStream& s)
const override;
204 static MXNode* deserialize(DeserializingStream& s) {
return new HorzRepsum(s); }
210 explicit HorzRepsum(DeserializingStream& s);