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);
50 static MX create_call(
const Function& fcn,
const std::vector<MX>& arg);
55 MX get_output(casadi_int oind)
const override;
65 static MX projectArg(
const MX& x,
const Sparsity& sp, casadi_int i);
70 std::string disp(
const std::vector<std::string>& arg)
const override;
75 void add_dependency(CodeGenerator& g)
const override;
80 bool has_refcount()
const override;
85 void codegen_incref(CodeGenerator& g, std::set<void*>& added)
const override;
90 void codegen_decref(CodeGenerator& g, std::set<void*>& added)
const override;
95 void generate(CodeGenerator& g,
96 const std::vector<casadi_int>& arg,
97 const std::vector<casadi_int>& res,
98 const std::vector<bool>& arg_is_ref,
99 std::vector<bool>& res_is_ref)
const override;
102 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
105 int eval_sx(
const SXElem** arg, SXElem** res, casadi_int* iw, SXElem* w)
const override;
110 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res)
const override;
115 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
116 std::vector<std::vector<MX> >& fsens)
const override;
121 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
122 std::vector<std::vector<MX> >& asens)
const override;
127 int sp_forward(
const bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
132 int sp_reverse(bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
137 const Function& which_function()
const override {
return fcn_;}
142 casadi_int which_output()
const override {
return -1;}
147 casadi_int nout()
const override;
152 const Sparsity& sparsity(casadi_int oind)
const override;
157 casadi_int op()
const override {
return OP_CALL;}
162 size_t sz_arg()
const override;
167 size_t sz_res()
const override;
172 size_t sz_iw()
const override;
177 size_t sz_w()
const override;
182 void serialize_body(SerializingStream& s)
const override;
187 static MXNode* deserialize(DeserializingStream& s) {
return new Call(s); }
193 explicit Call(
const Function& fcn,
const std::vector<MX>& arg);
198 explicit Call(DeserializingStream& s);
203 static MX common_cond(
const std::vector<std::vector<MX>>& seed);
209 mutable WeakCache<casadi_int, MX> cache_;