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 void generate(CodeGenerator& g,
81 const std::vector<casadi_int>& arg,
82 const std::vector<casadi_int>& res,
83 const std::vector<bool>& arg_is_ref,
84 std::vector<bool>& res_is_ref)
const override;
87 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
90 int eval_sx(
const SXElem** arg, SXElem** res, casadi_int* iw, SXElem* w)
const override;
95 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
96 const std::vector<bool>& unique={})
const override;
101 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
102 std::vector<std::vector<MX> >& fsens)
const override;
107 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
108 std::vector<std::vector<MX> >& asens)
const override;
113 int sp_forward(
const bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
118 int eval_activity(
const bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
123 int sp_reverse(bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
128 const Function& which_function()
const override {
return fcn_;}
133 casadi_int which_output()
const override {
return -1;}
138 casadi_int nout()
const override;
143 const Sparsity& sparsity(casadi_int oind)
const override;
148 casadi_int op()
const override {
return OP_CALL;}
153 size_t sz_arg()
const override;
158 size_t sz_res()
const override;
163 size_t sz_iw()
const override;
168 size_t sz_w()
const override;
173 void serialize_body(SerializingStream& s)
const override;
178 static MXNode* deserialize(DeserializingStream& s) {
return new Call(s); }
184 explicit Call(
const Function& fcn,
const std::vector<MX>& arg);
189 explicit Call(DeserializingStream& s);
194 static MX common_cond(
const std::vector<std::vector<MX>>& seed);
200 mutable WeakCache<casadi_int, MX> cache_;