26 #ifndef CASADI_MAPSUM_HPP
27 #define CASADI_MAPSUM_HPP
29 #include "function_internal.hpp"
40 class CASADI_EXPORT MapSum :
public FunctionInternal {
43 static Function create(
const std::string& name,
44 const std::string& parallelization,
45 const Function& f, casadi_int n,
46 const std::vector<bool>& reduce_in,
47 const std::vector<bool>& reduce_out,
51 static Function create(
const std::string& name,
52 const std::string& parallelization,
53 const Function& f, casadi_int n,
54 const std::vector<casadi_int>& reduce_in,
55 const std::vector<casadi_int>& reduce_out,
66 std::string class_name()
const override {
return "MapSum";}
72 Sparsity get_sparsity_in(casadi_int i)
override {
73 return repmat(f_.sparsity_in(i), 1, reduce_in_[i] ? 1 : n_);
75 Sparsity get_sparsity_out(casadi_int i)
override {
76 return repmat(f_.sparsity_out(i), 1, reduce_out_[i] ? 1 : n_);
83 double get_default_in(casadi_int ind)
const override {
return f_.default_in(ind);}
89 size_t get_n_in()
override {
return f_.n_in();}
90 size_t get_n_out()
override {
return f_.n_out();}
97 std::string get_name_in(casadi_int i)
override {
return f_.name_in(i);}
98 std::string get_name_out(casadi_int i)
override {
return f_.name_out(i);}
105 int eval_gen(
const T** arg, T** res, casadi_int* iw, T* w,
int mem=0)
const;
108 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w,
void* mem)
const override;
111 virtual std::string parallelization()
const {
return "serial"; }
116 int eval_sx(
const SXElem** arg, SXElem** res,
117 casadi_int* iw, SXElem* w,
void* mem)
const override;
122 int sp_forward(
const bvec_t** arg, bvec_t** res,
123 casadi_int* iw, bvec_t* w,
void* mem)
const override;
128 int sp_reverse(bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w,
void* mem)
const override;
132 bool has_spfwd()
const override {
return true;}
133 bool has_sprev()
const override {
return true;}
139 bool has_codegen()
const override {
return true;}
144 void codegen_declarations(CodeGenerator& g)
const override;
149 void codegen_body(CodeGenerator& g)
const override;
154 void init(
const Dict& opts)
override;
157 virtual std::vector<std::string> get_function()
const override;
160 const Function& get_function(
const std::string &name)
const override;
163 bool has_function(
const std::string& fname)
const override;
169 bool has_forward(casadi_int nfwd)
const override {
return true;}
170 Function get_forward(casadi_int nfwd,
const std::string& name,
171 const std::vector<std::string>& inames,
172 const std::vector<std::string>& onames,
173 const Dict& opts)
const override;
180 bool has_reverse(casadi_int nadj)
const override {
return true;}
181 Function get_reverse(casadi_int nadj,
const std::string& name,
182 const std::vector<std::string>& inames,
183 const std::vector<std::string>& onames,
184 const Dict& opts)
const override;
191 void serialize_body(SerializingStream &s)
const override;
196 void serialize_type(SerializingStream &s)
const override;
201 std::string serialize_base_function()
const override {
return "MapSum"; }
206 static ProtoFunction* deserialize(DeserializingStream& s);
212 explicit MapSum(DeserializingStream& s);
215 MapSum(
const std::string& name,
const Function& f, casadi_int n,
216 const std::vector<bool>& reduce_in,
217 const std::vector<bool>& reduce_out);
226 std::vector<bool> reduce_in_;
229 std::vector<bool> reduce_out_;
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.