26 #ifndef CASADI_NORM_HPP
27 #define CASADI_NORM_HPP
29 #include "mx_node.hpp"
40 class CASADI_EXPORT Norm :
public MXNode {
46 explicit Norm(
const MX& x);
57 explicit Norm(DeserializingStream& s) : MXNode(s) {}
66 class CASADI_EXPORT NormF :
public Norm {
72 explicit NormF(
const MX& x) : Norm(x) {}
81 int eval_gen(
const T** arg, T** res, casadi_int* iw, T* w)
const;
84 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
87 int eval_sx(
const SXElem** arg, SXElem** res, casadi_int* iw, SXElem* w)
const override;
92 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
93 const std::vector<bool>& unique={})
const override;
98 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
99 std::vector<std::vector<MX> >& fsens)
const override;
104 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
105 std::vector<std::vector<MX> >& asens)
const override;
110 void generate(CodeGenerator& g,
111 const std::vector<casadi_int>& arg,
112 const std::vector<casadi_int>& res,
113 const std::vector<bool>& arg_is_ref,
114 std::vector<bool>& res_is_ref)
const override;
119 std::string disp(
const std::vector<std::string>& arg)
const override;
124 casadi_int op()
const override {
return OP_NORMF;}
129 static MXNode* deserialize(DeserializingStream& s) {
return new NormF(s); }
135 explicit NormF(DeserializingStream& s) : Norm(s) {}
144 class CASADI_EXPORT Norm2 :
public Norm {
150 explicit Norm2(
const MX& x): Norm(x) {}
160 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
161 const std::vector<bool>& unique={})
const override;
166 std::string disp(
const std::vector<std::string>& arg)
const override;
171 casadi_int op()
const override {
return OP_NORM2;}
176 static MXNode* deserialize(DeserializingStream& s) {
return new Norm2(s); }
182 explicit Norm2(DeserializingStream& s) : Norm(s) {}
191 class CASADI_EXPORT Norm1 :
public Norm {
197 explicit Norm1(
const MX& x) : Norm(x) {}
207 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
208 std::vector<std::vector<MX> >& fsens)
const override;
213 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
214 std::vector<std::vector<MX> >& asens)
const override;
218 int eval_gen(
const T** arg, T** res, casadi_int* iw, T* w)
const;
221 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
224 int eval_sx(
const SXElem** arg, SXElem** res, casadi_int* iw, SXElem* w)
const override;
229 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
230 const std::vector<bool>& unique={})
const override;
235 void generate(CodeGenerator& g,
236 const std::vector<casadi_int>& arg,
237 const std::vector<casadi_int>& res,
238 const std::vector<bool>& arg_is_ref,
239 std::vector<bool>& res_is_ref)
const override;
244 std::string disp(
const std::vector<std::string>& arg)
const override;
249 casadi_int op()
const override {
return OP_NORM1;}
254 static MXNode* deserialize(DeserializingStream& s) {
return new Norm1(s); }
260 explicit Norm1(DeserializingStream& s) : Norm(s) {}
269 class CASADI_EXPORT NormInf :
public Norm {
275 explicit NormInf(
const MX& x) : Norm(x) {}
280 ~NormInf()
override {}
285 void ad_forward(
const std::vector<std::vector<MX> >& fseed,
286 std::vector<std::vector<MX> >& fsens)
const override;
291 void ad_reverse(
const std::vector<std::vector<MX> >& aseed,
292 std::vector<std::vector<MX> >& asens)
const override;
296 int eval_gen(
const T** arg, T** res, casadi_int* iw, T* w)
const;
299 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w)
const override;
302 int eval_sx(
const SXElem** arg, SXElem** res, casadi_int* iw, SXElem* w)
const override;
307 void eval_mx(
const std::vector<MX>& arg, std::vector<MX>& res,
308 const std::vector<bool>& unique={})
const override;
313 void generate(CodeGenerator& g,
314 const std::vector<casadi_int>& arg,
315 const std::vector<casadi_int>& res,
316 const std::vector<bool>& arg_is_ref,
317 std::vector<bool>& res_is_ref)
const override;
322 std::string disp(
const std::vector<std::string>& arg)
const override;
327 casadi_int op()
const override {
return OP_NORMINF;}
332 static MXNode* deserialize(DeserializingStream& s) {
return new NormInf(s); }
338 explicit NormInf(DeserializingStream& s) : Norm(s) {}