10#include <eigenpy/std-array.hpp>
20using context::MatrixXs;
22using context::VectorXs;
34 eigenpy::StdArrayPythonVisitor<std::array<long, 1>,
true>::expose(
36 eigenpy::StdArrayPythonVisitor<std::array<long, 2>,
true>::expose(
38 eigenpy::StdArrayPythonVisitor<std::array<long, 4>,
true>::expose(
42#ifdef ALIGATOR_WITH_CHOLMOD
44void exposeCholmodSolver();
61 bp::class_<knot_t>(
"LqrKnot", bp::no_init)
62 .def(bp::init<uint, uint, uint>((
"self"_a,
"nx",
"nu",
"nc")))
63 .def(bp::init<uint, uint, uint, uint, uint>(
64 (
"self"_a,
"nx"_a,
"nu",
"nc",
"nx2",
"nth"_a = 0)))
92 (
"self"_a,
"prec"_a = std::numeric_limits<Scalar>::epsilon()))
97 StdVectorPythonVisitor<knot_vec_t, false>::expose(
"StdVec_LqrKnot");
99 bp::class_<lqr_t, boost::noncopyable>(
"LqrProblem", bp::no_init)
100 .def(bp::init<const knot_vec_t &, long>((
"self"_a,
"stages",
"nc0")))
106 "Whether the problem is initialized.")
108 "Whether the problem is parameterized.")
113 (
"self"_a,
"xs",
"us",
"theta"_a = std::nullopt),
114 "Evaluate the problem objective.");
116 bp::class_<riccati_base_t, boost::noncopyable>(
"RiccatiSolverBase",
120 (
"self"_a,
"xs",
"us",
"vs",
"lbdas",
"theta"_a = std::nullopt));
124#ifdef ALIGATOR_WITH_CHOLMOD
125 exposeCholmodSolver();
virtual bool backward(const Scalar mudyn, const Scalar mueq)=0
virtual bool forward(std::vector< VectorXs > &xs, std::vector< VectorXs > &us, std::vector< VectorXs > &vs, std::vector< VectorXs > &lbdas, const std::optional< ConstVectorRef > &theta_=std::nullopt) const=0
Eigen::Transpose< MatrixXs >::PlainMatrix RowMatrixXs
LqrKnotTpl< context::Scalar > knot_t
void exposeGAR()
Expose GAR module.
RiccatiSolverBase< Scalar > riccati_base_t
bp::object get_namespace(const std::string &name)
Create or retrieve a Python scope (that is, a class or module namespace).
LqrProblemTpl< context::Scalar > lqr_t
lqr_t::KnotVector knot_vec_t
void exposeParallelSolver()
static void exposeBlockMatrices()
Struct describing a stage of a constrained LQ problem.
bool isApprox(const LqrKnotTpl &other, Scalar prec=std::numeric_limits< Scalar >::epsilon()) const
std::pmr::vector< KnotType > KnotVector
void addParameterization(uint nth)
bool isInitialized() const
Scalar evaluate(const VectorOfVectors &xs, const VectorOfVectors &us, const std::optional< ConstVectorRef > &theta_) const
bool isParameterized() const
int horizon() const noexcept