aligator  0.14.0
A primal-dual augmented Lagrangian-type solver for nonlinear trajectory optimization.
Loading...
Searching...
No Matches
solvers.hpp
Go to the documentation of this file.
1
3#pragma once
4
5#include <eigenpy/fwd.hpp>
6#include <fmt/format.h>
7
8namespace aligator::python {
9namespace bp = boost::python;
10
11// fwd-declaration
12bp::arg operator""_a(const char *argname, std::size_t);
13
14template <typename SolverType>
15struct SolverVisitor : bp::def_visitor<SolverVisitor<SolverType>> {
16 using CallbackPtr = typename SolverType::CallbackPtr;
17 static auto getCallback(const SolverType &obj, const std::string &name)
18 -> CallbackPtr {
19 const CallbackPtr &cb = obj.getCallback(name);
20 if (!cb) {
21 PyErr_SetString(PyExc_KeyError,
22 fmt::format("Key {} not found.", name).c_str());
23 bp::throw_error_already_set();
24 }
25 return cb;
26 }
27
28 template <typename... Args> void visit(bp::class_<Args...> &obj) const {
29 obj.def_readwrite("verbose", &SolverType::verbose_,
30 "Verbosity level of the solver.")
31 .def_readwrite("max_iters", &SolverType::max_iters,
32 "Maximum number of iterations.")
33 .def_readwrite("ls_params", &SolverType::ls_params,
34 "Linesearch parameters.")
35 .def_readwrite("target_tol", &SolverType::target_tol_,
36 "Target tolerance.")
37 .def_readwrite("reg_init", &SolverType::reg_init)
38 .def_readwrite("preg", &SolverType::preg_)
39 .def_readwrite("force_initial_condition",
40 &SolverType::force_initial_condition_,
41 "Set x0 to be fixed to the initial condition.")
42 .add_property("num_threads", &SolverType::getNumThreads)
43 .def("setNumThreads", &SolverType::setNumThreads,
44 ("self"_a, "num_threads"))
45 .def_readonly("results", &SolverType::results_, "Solver results.")
46 .def_readonly("workspace", &SolverType::workspace_, "Solver workspace.")
47 .def("setup", &SolverType::setup, ("self"_a, "problem"),
48 "Allocate solver workspace and results data for the problem.")
49 .def("registerCallback", &SolverType::registerCallback,
50 ("self"_a, "name", "cb"), "Add a callback to the solver.")
51 .def("getCallbackNames", &SolverType::getCallbackNames, "self"_a,
52 "Get names of registered callbacks.")
53 .def("removeCallback", &SolverType::removeCallback, ("self"_a, "key"),
54 "Remove a callback.")
55 .def("getCallback", getCallback, ("self"_a, "key"))
56 .def("clearCallbacks", &SolverType::clearCallbacks, ("self"_a),
57 "Clear callbacks.");
58 }
59};
60
61} // namespace aligator::python
The Python bindings.
Definition blk-matrix.hpp:5
typename SolverType::CallbackPtr CallbackPtr
Definition solvers.hpp:16
void visit(bp::class_< Args... > &obj) const
Definition solvers.hpp:28
static auto getCallback(const SolverType &obj, const std::string &name) -> CallbackPtr
Definition solvers.hpp:17