37 const auto &f =
functions.functions.at(
"f");
38 wrap(
"f", [&] { f_eval::validate_num_args(f); });
39 auto n = f.size1_in(0);
40 auto p = f.size1_in(1);
41 wrap(
"f", [&] { f_eval::validate_dimensions(f,
dims(n, p),
dims(1)); });
44 auto x = casadi::SX::sym(
"x", n);
45 auto param = casadi::SX::sym(
"param", p);
46 auto fx = f(std::vector{x, param})[0];
47 auto grad_f = casadi::SX::gradient(fx, x);
54 wrap(
"g", [&] { g_eval::validate_num_args(g); });
55 auto m = g.size1_out(0);
56 wrap(
"g", [&] { g_eval::validate_dimensions(g,
dims(n, p),
dims(m)); });
61 auto y = casadi::SX::sym(
"y", m);
62 auto gx = g(std::vector{x, param})[0];
63 auto grad_g_prod = casadi::SX::jtimes(gx, x, y,
true);
68 auto grad_L = grad_f + grad_g_prod;
75 complete_constraints(g->second);