26 #ifndef CASADI_CALL_HPP
27 #define CASADI_CALL_HPP
29 #include "multiple_output.hpp"
30 #include "function.hpp"
40 class CASADI_EXPORT Call :
public MultipleOutput {
45 static std::vector<MX> create(
const Function& fcn,
const std::vector<MX>& arg);
55 static MX projectArg(
const MX& x,
const Sparsity& sp, casadi_int i);
60 std::string disp(
const std::vector<std::string>& arg)
const override;
65 void add_dependency(CodeGenerator& g)
const override;
70 bool has_refcount()
const override;
75 void codegen_incref(CodeGenerator& g, std::set<void*>& added)
const override;
80 void codegen_decref(CodeGenerator& g, std::set<void*>& added)
const override;
85 void generate(CodeGenerator& g,
86 const std::vector<casadi_int>& arg,
87 const std::vector<casadi_int>& res)
const override;
90 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
93 int eval_sx(
const SXElem** arg, SXElem** res, casadi_int* iw, SXElem* w)
const override;
98 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res)
const override;
103 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
104 std::vector<std::vector<MX> >& fsens)
const override;
109 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
110 std::vector<std::vector<MX> >& asens)
const override;
115 int sp_forward(
const bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
120 int sp_reverse(bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
125 const Function& which_function()
const override {
return fcn_;}
130 casadi_int which_output()
const override {
return -1;}
135 casadi_int nout()
const override;
140 const Sparsity& sparsity(casadi_int oind)
const override;
145 casadi_int op()
const override {
return OP_CALL;}
150 size_t sz_arg()
const override;
155 size_t sz_res()
const override;
160 size_t sz_iw()
const override;
165 size_t sz_w()
const override;
170 void serialize_body(SerializingStream& s)
const override;
175 static MXNode* deserialize(DeserializingStream& s) {
return new Call(s); }
181 explicit Call(
const Function& fcn,
const std::vector<MX>& arg);
186 explicit Call(DeserializingStream& s);
191 static MX common_cond(
const std::vector<std::vector<MX>>& seed);