aligator
0.19.0
A versatile and efficient C++ library for real-time constrained trajectory optimization.
Toggle main menu visibility
Loading...
Searching...
No Matches
expose-functions.cpp
Go to the documentation of this file.
1
3
#include "
aligator/python/functions.hpp
"
4
#include "
aligator/python/eigen-member.hpp
"
5
6
#include "
aligator/modelling/state-error.hpp
"
7
#include "
aligator/modelling/linear-function.hpp
"
8
#include "
aligator/modelling/control-box-function.hpp
"
9
#include "
aligator/modelling/function-xpr-slice.hpp
"
10
11
namespace
aligator
{
12
namespace
python
{
13
14
using
context::ConstMatrixRef;
15
using
context::ConstVectorRef;
16
using
context::DynamicsModel
;
17
using
context::MatrixXs;
18
using
context::Scalar
;
19
using
context::StageFunction
;
20
using
context::StageFunctionData
;
21
using
context::UnaryFunction
;
22
using
context::VectorXs;
23
using
PolyFunction
= xyz::polymorphic<StageFunction>;
24
using
StateErrorResidual
=
StateErrorResidualTpl<Scalar>
;
25
using
ControlErrorResidual
=
ControlErrorResidualTpl<Scalar>
;
26
PolymorphicMultiBaseVisitor<StageFunction>
func_visitor
;
27
29
struct
FunctionDataWrapper
:
StageFunctionData
, bp::wrapper<StageFunctionData> {
30
using
StageFunctionData::StageFunctionData;
31
};
32
33
void
exposeFunctionBase
() {
34
register_polymorphic_to_python<PolyFunction>
();
35
bp::class_<PyStageFunction<>, boost::noncopyable>(
36
"StageFunction"
,
37
"Base class for ternary functions f(x,u,x') on a stage of the problem."
,
38
bp::no_init)
39
.def(bp::init<const int, const int, const int>(
40
(
"self"
_a,
"ndx"
,
"nu"
,
"nr"
)))
41
.def(
"evaluate"
, bp::pure_virtual(&
StageFunction::evaluate
),
42
(
"self"
_a,
"x"
,
"u"
,
"data"
))
43
.def(
"computeJacobians"
,
44
bp::pure_virtual(&
StageFunction::computeJacobians
),
45
(
"self"
_a,
"x"
,
"u"
,
"data"
))
46
.def(
"computeVectorHessianProducts"
,
47
&
StageFunction::computeVectorHessianProducts
,
48
(
"self"
_a,
"x"
,
"u"
,
"lbda"
,
"data"
))
49
.def_readonly(
"ndx1"
, &
StageFunction::ndx1
,
"Current state space."
)
50
.def_readonly(
"nu"
, &
StageFunction::nu
,
"Control dimension."
)
51
.def_readonly(
"nr"
, &
StageFunction::nr
,
"Function codimension."
)
52
.def(
SlicingVisitor<StageFunction>
())
53
.def(
func_visitor
)
54
.def(
CreateDataPolymorphicPythonVisitor
<
StageFunction
,
55
PyStageFunction<>
>())
56
.enable_pickling_(
true
);
57
58
bp::register_ptr_to_python<shared_ptr<StageFunctionData>>();
59
60
bp::class_<FunctionDataWrapper, boost::noncopyable>(
61
"StageFunctionData"
,
"Data struct for holding data about functions."
,
62
bp::no_init)
63
.def(bp::init<const StageFunction &>((
"self"
_a,
"model"
)))
64
.def(bp::init<int, int, int>(bp::args(
"self"
,
"ndx"
,
"nu"
,
"nr"
)))
65
.add_property(
66
"value"
,
67
bp::make_getter(&
StageFunctionData::valref_
,
68
bp::return_value_policy<bp::return_by_value>()),
69
"Function value."
)
70
.add_property(
"jac_buffer"
,
71
make_getter_eigen_matrix
(&
StageFunctionData::jac_buffer_
),
72
"Buffer of the full function Jacobian wrt (x,u,y)."
)
73
.add_property(
74
"vhp_buffer"
,
75
make_getter_eigen_matrix
(&
StageFunctionData::vhp_buffer_
),
76
"Buffer of the full function vector-Hessian product wrt (x,u,y)."
)
77
.add_property(
78
"Jx"
,
79
bp::make_getter(&
StageFunctionData::Jx_
,
80
bp::return_value_policy<bp::return_by_value>()),
81
"Jacobian with respect to $x$."
)
82
.add_property(
83
"Ju"
,
84
bp::make_getter(&
StageFunctionData::Ju_
,
85
bp::return_value_policy<bp::return_by_value>()),
86
"Jacobian with respect to $u$."
)
87
.add_property(
88
"Hxx"
,
89
bp::make_getter(&
StageFunctionData::Hxx_
,
90
bp::return_value_policy<bp::return_by_value>()),
91
"Hessian with respect to $(x, x)$."
)
92
.add_property(
93
"Hxu"
,
94
bp::make_getter(&
StageFunctionData::Hxu_
,
95
bp::return_value_policy<bp::return_by_value>()),
96
"Hessian with respect to $(x, u)$."
)
97
.add_property(
98
"Huu"
,
99
bp::make_getter(&
StageFunctionData::Huu_
,
100
bp::return_value_policy<bp::return_by_value>()),
101
"Hessian with respect to $(u, u)$."
)
102
.def(
PrintableVisitor<StageFunctionData>
())
103
.def(
PrintAddressVisitor<StageFunctionData>
());
104
105
StdVectorPythonVisitor<std::vector<PolyFunction>,
true
>::expose(
106
"StdVec_StageFunction"
,
107
eigenpy::details::overload_base_get_item_for_std_vector<
108
std::vector<PolyFunction>>{});
109
StdVectorPythonVisitor<std::vector<shared_ptr<StageFunctionData>>,
110
true
>::expose(
"StdVec_StageFunctionData"
);
111
}
112
113
// fwd-decl exposeUnaryFunctions()
114
void
exposeUnaryFunctions
();
115
116
// fwd-decl exposeFunctionExpressions()
117
void
exposeFunctionExpressions
();
118
119
void
exposeFunctions
() {
120
exposeFunctionBase
();
121
exposeUnaryFunctions
();
122
exposeFunctionExpressions
();
123
124
bp::class_<StateErrorResidual, bp::bases<UnaryFunction>>(
125
"StateErrorResidual"
,
126
bp::init<const xyz::polymorphic<context::Manifold> &,
const
int,
127
const
context::VectorXs &>((
"self"
_a,
"space"
,
"nu"
,
"target"
)))
128
.def_readonly(
"space"
, &StateErrorResidual::space_)
129
.def_readwrite(
"target"
, &StateErrorResidual::target_)
130
.def(
PolymorphicMultiBaseVisitor<UnaryFunction, StageFunction>
());
131
132
bp::class_<ControlErrorResidual, bp::bases<StageFunction>>(
133
"ControlErrorResidual"
,
134
bp::init<const int, const xyz::polymorphic<context::Manifold> &,
135
const
context::VectorXs &>(
136
(
"self"
_a,
"ndx"
,
"uspace"
,
"target"
)))
137
.def(bp::init<const int, const context::VectorXs &>(
138
(
"self"
_a,
"ndx"
,
"target"
)))
139
.def(bp::init<int, int>((
"self"
_a,
"ndx"
,
"nu"
)))
140
.def_readonly(
"space"
, &ControlErrorResidual::space_)
141
.def_readwrite(
"target"
, &ControlErrorResidual::target_)
142
.def(
func_visitor
);
143
144
using
LinearFunction =
LinearFunctionTpl<Scalar>
;
145
bp::class_<LinearFunction, bp::bases<StageFunction>>(
146
"LinearFunction"
,
147
bp::init<const int, const int, const int>((
"self"
_a,
"ndx"
,
"nu"
,
"nr"
)))
148
.def(bp::init<
const
ConstMatrixRef &,
const
ConstMatrixRef &,
149
const
ConstVectorRef &>(
"Constructor with C=0."
,
150
(
"self"
_a,
"A"
,
"B"
,
"d"
)))
151
.def_readonly(
"A"
, &LinearFunction::A_)
152
.def_readonly(
"B"
, &LinearFunction::B_)
153
.def_readonly(
"d"
, &LinearFunction::d_)
154
.def(
func_visitor
);
155
156
bp::class_<ControlBoxFunctionTpl<Scalar>, bp::bases<StageFunction>>(
157
"ControlBoxFunction"
,
158
bp::init<const int, const VectorXs &, const VectorXs &>(
159
bp::args(
"self"
,
"ndx"
,
"umin"
,
"umax"
)))
160
.def(bp::init<const int, const int, const Scalar, const Scalar>(
161
bp::args(
"self"
,
"ndx"
,
"nu"
,
"umin"
,
"umax"
)))
162
.def(
func_visitor
);
163
}
164
165
}
// namespace python
166
}
// namespace aligator
control-box-function.hpp
eigen-member.hpp
function-xpr-slice.hpp
functions.hpp
linear-function.hpp
aligator::context::DynamicsModel
DynamicsModelTpl< Scalar > DynamicsModel
Definition
context.hpp:27
aligator::context::StageFunction
StageFunctionTpl< Scalar > StageFunction
Definition
context.hpp:17
aligator::context::Scalar
double Scalar
Definition
context.hpp:9
aligator::context::UnaryFunction
UnaryFunctionTpl< Scalar > UnaryFunction
Definition
context.hpp:18
aligator::context::StageFunctionData
StageFunctionDataTpl< Scalar > StageFunctionData
Definition
context.hpp:19
aligator::python
The Python bindings.
Definition
blk-matrix.hpp:7
aligator::python::exposeFunctionBase
void exposeFunctionBase()
Definition
expose-functions.cpp:33
aligator::python::PolyFunction
xyz::polymorphic< StageFunction > PolyFunction
Definition
expose-functions.cpp:23
aligator::python::ControlErrorResidual
ControlErrorResidualTpl< Scalar > ControlErrorResidual
Definition
expose-functions.cpp:25
aligator::python::StateErrorResidual
StateErrorResidualTpl< Scalar > StateErrorResidual
Definition
expose-functions.cpp:24
aligator::python::register_polymorphic_to_python
void register_polymorphic_to_python()
Expose a polymorphic value type, e.g. xyz::polymorphic<T, A>.
Definition
polymorphic.hpp:23
aligator::python::exposeFunctionExpressions
void exposeFunctionExpressions()
Definition
expose-function-ops.cpp:70
aligator::python::make_getter_eigen_matrix
bp::object make_getter_eigen_matrix(MatrixType C::*v)
Create a getter for Eigen::Matrix type objects which returns an Eigen::Ref.
Definition
eigen-member.hpp:46
aligator::python::exposeUnaryFunctions
void exposeUnaryFunctions()
Expose the UnaryFunction type and its member function overloads.
Definition
expose-unary-functions.cpp:17
aligator::python::exposeFunctions
void exposeFunctions()
Expose stagewise function classes.
Definition
expose-functions.cpp:119
aligator::python::func_visitor
PolymorphicMultiBaseVisitor< StageFunction > func_visitor
Definition
expose-functions.cpp:26
aligator
Main package namespace.
Definition
action-model-wrap.hpp:14
state-error.hpp
aligator::ControlErrorResidualTpl
Definition
state-error.hpp:159
aligator::LinearFunctionTpl
Linear function .
Definition
linear-function.hpp:9
aligator::StageFunctionDataTpl< Scalar >::Jx_
MatrixRef Jx_
Definition
function-abstract.hpp:91
aligator::StageFunctionDataTpl< Scalar >::jac_buffer_
MatrixXs jac_buffer_
Definition
function-abstract.hpp:87
aligator::StageFunctionDataTpl< Scalar >::vhp_buffer_
MatrixXs vhp_buffer_
Definition
function-abstract.hpp:89
aligator::StageFunctionDataTpl< Scalar >::Hxx_
MatrixRef Hxx_
Definition
function-abstract.hpp:102
aligator::StageFunctionDataTpl< Scalar >::Huu_
MatrixRef Huu_
Definition
function-abstract.hpp:104
aligator::StageFunctionDataTpl< Scalar >::Ju_
MatrixRef Ju_
Definition
function-abstract.hpp:93
aligator::StageFunctionDataTpl< Scalar >::valref_
VectorRef valref_
Definition
function-abstract.hpp:85
aligator::StageFunctionDataTpl< Scalar >::Hxu_
MatrixRef Hxu_
Definition
function-abstract.hpp:103
aligator::StageFunctionTpl< Scalar >::computeVectorHessianProducts
virtual void computeVectorHessianProducts(const ConstVectorRef &x, const ConstVectorRef &u, const ConstVectorRef &lbda, Data &data) const
aligator::StageFunctionTpl< Scalar >::computeJacobians
virtual void computeJacobians(const ConstVectorRef &x, const ConstVectorRef &u, Data &data) const=0
aligator::StageFunctionTpl< Scalar >::nu
const int nu
Definition
function-abstract.hpp:21
aligator::StageFunctionTpl< Scalar >::evaluate
virtual void evaluate(const ConstVectorRef &x, const ConstVectorRef &u, Data &data) const=0
aligator::StageFunctionTpl< Scalar >::ndx1
const int ndx1
Definition
function-abstract.hpp:19
aligator::StageFunctionTpl< Scalar >::nr
const int nr
Definition
function-abstract.hpp:23
aligator::StateErrorResidualTpl
State error .
Definition
state-error.hpp:152
aligator::python::CreateDataPolymorphicPythonVisitor
Definition
visitors.hpp:30
aligator::python::FunctionDataWrapper
Required trampoline class.
Definition
expose-functions.cpp:29
aligator::python::PolymorphicMultiBaseVisitor
Definition
polymorphic.hpp:107
aligator::python::PrintAddressVisitor
Definition
visitors.hpp:56
aligator::python::PrintableVisitor
Definition
visitors.hpp:49
aligator::python::PyStageFunction
Definition
functions.hpp:25
aligator::python::SlicingVisitor
Definition
functions.hpp:105
bindings
python
src
expose-functions.cpp
Generated by
1.17.0