26 #ifndef CASADI_UNARY_MX_HPP
27 #define CASADI_UNARY_MX_HPP
29 #include "mx_node.hpp"
39 class CASADI_EXPORT UnaryMX :
public MXNode {
45 UnaryMX(Operation op, MX x);
50 ~UnaryMX()
override {}
55 std::string disp(
const std::vector<std::string>& arg)
const override;
58 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
61 int eval_sx(
const SXElem** arg, SXElem** res, casadi_int* iw, SXElem* w)
const override;
66 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res)
const override;
71 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
72 std::vector<std::vector<MX> >& fsens)
const override;
77 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
78 std::vector<std::vector<MX> >& asens)
const override;
83 int sp_forward(
const bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
88 int sp_reverse(bvec_t** arg, bvec_t** res, casadi_int* iw, bvec_t* w)
const override;
93 bool is_unary()
const override {
return true;}
98 casadi_int op()
const override {
return op_;}
103 void generate(CodeGenerator& g,
104 const std::vector<casadi_int>& arg,
105 const std::vector<casadi_int>& res)
const override;
108 casadi_int n_inplace()
const override {
return 1;}
111 MX get_unary(casadi_int op)
const override;
114 MX _get_binary(casadi_int op,
const MX& y,
bool scX,
bool scY)
const override;
119 bool is_equal(
const MXNode* node, casadi_int depth)
const override {
120 return sameOpAndDeps(node, depth);
126 void serialize_body(SerializingStream& s)
const override;
131 static MXNode* deserialize(DeserializingStream& s) {
return new UnaryMX(s); }
140 explicit UnaryMX(DeserializingStream& s);