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-function-ops.cpp
Go to the documentation of this file.
1
3
4
#include "
aligator/python/fwd.hpp
"
5
6
#include "
aligator/modelling/function-xpr-slice.hpp
"
7
#include "
aligator/modelling/linear-function-composition.hpp
"
8
9
namespace
aligator
{
10
namespace
python
{
11
12
using
context::MatrixXs;
13
using
context::Scalar
;
14
using
context::StageFunction
;
15
using
context::StageFunctionData
;
16
using
context::UnaryFunction
;
17
using
context::VectorXs;
18
19
const
PolymorphicMultiBaseVisitor<StageFunction>
func_visitor
;
20
const
PolymorphicMultiBaseVisitor<UnaryFunction, StageFunction>
unary_visitor
;
21
22
template
<
typename
Base>
void
exposeSliceExpression
(
const
char
*name) {
23
// FUNCTION SLICE
24
25
using
FunctionSliceXpr =
FunctionSliceXprTpl<Scalar, Base>
;
26
27
bp::class_<FunctionSliceXpr, bp::bases<Base>>(
28
name,
29
"Represents a slice of an expression according to either a single index "
30
"or an array of indices."
,
31
bp::init<xyz::polymorphic<Base>, std::vector<int>
const
&>(
32
bp::args(
"self"
,
"func"
,
"indices"
)))
33
.def(
func_visitor
)
34
.def(bp::init<xyz::polymorphic<Base>,
const
int
>(
35
"Constructor from a single index."
, bp::args(
"self"
,
"func"
,
"idx"
)))
36
.def_readonly(
"func"
, &FunctionSliceXpr::func,
"Underlying function."
)
37
.def_readonly(
"indices"
, &FunctionSliceXpr::indices,
38
"Indices of the slice."
);
39
}
40
41
template
<
typename
LFC>
42
struct
LinFunctionCompositionVisitor
43
: bp::def_visitor<LinFunctionCompositionVisitor<LFC>> {
44
using
FunType
=
typename
LFC::Base;
45
46
template
<
class
PyClass>
void
visit
(PyClass &cl)
const
{
47
cl.def(bp::init<xyz::polymorphic<FunType>,
const
MatrixXs,
const
VectorXs>(
48
"Construct a composition from the underlying function, weight "
49
"matrix "
50
":math:`A` and bias :math:`b`."
,
51
bp::args(
"self"
,
"func"
,
"A"
,
"b"
)))
52
.def(bp::init<xyz::polymorphic<FunType>,
const
context::MatrixXs>(
53
"Constructor where the bias :math:`b` is assumed to be zero."
,
54
bp::args(
"self"
,
"func"
,
"A"
)))
55
.def_readonly(
"func"
, &LFC::func,
"The underlying function."
)
56
.def_readonly(
"A"
, &LFC::A,
"Weight matrix."
)
57
.def_readonly(
"b"
, &LFC::b,
"Bias vector."
);
58
bp::class_<typename LFC::Data, bp::bases<StageFunctionData>,
59
boost::noncopyable>(
"LFC"
, bp::no_init)
60
.def_readonly(
"sub_data"
, &LFC::Data::sub_data);
61
62
bp::def(
63
"linear_compose"
,
64
+[](xyz::polymorphic<FunType> func,
const
MatrixXs &A,
65
const
VectorXs &b) {
return
linear_compose
(func, A, b); },
66
bp::args(
"func"
,
"A"
,
"b"
));
67
}
68
};
69
70
void
exposeFunctionExpressions
() {
71
72
exposeSliceExpression<StageFunction>
(
"StageFunctionSliceXpr"
);
73
exposeSliceExpression<UnaryFunction>
(
"UnaryFunctionSliceXpr"
);
74
75
using
FunctionSliceData =
FunctionSliceDataTpl<Scalar>
;
76
bp::class_<FunctionSliceData, bp::bases<StageFunctionData>,
77
boost::noncopyable>(
"FunctionSliceData"
, bp::no_init)
78
.def_readonly(
"sub_data"
, &FunctionSliceData::sub_data,
79
"Underlying function's data."
);
80
82
83
using
LinearFunctionComposition =
LinearFunctionCompositionTpl<Scalar>
;
84
using
LinearUnaryFunctionComposition =
85
LinearUnaryFunctionCompositionTpl<Scalar>
;
86
87
bp::class_<LinearFunctionComposition, bp::bases<StageFunction>>(
88
"LinearFunctionComposition"
,
89
"Function composition :math:`r(x) = Af(x, u, y) + b`."
, bp::no_init)
90
.def(
LinFunctionCompositionVisitor<LinearFunctionComposition>
())
91
.def(
func_visitor
);
92
93
bp::class_<LinearUnaryFunctionComposition, bp::bases<UnaryFunction>>(
94
"LinearUnaryFunctionComposition"
,
95
"Function composition for unary functions: :math:`r(x) = Af(x) + b`."
,
96
bp::no_init)
97
.def(
LinFunctionCompositionVisitor<LinearUnaryFunctionComposition>
())
98
.def(
unary_visitor
);
99
}
100
101
}
// namespace python
102
}
// namespace aligator
fwd.hpp
function-xpr-slice.hpp
linear-function-composition.hpp
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::exposeSliceExpression
void exposeSliceExpression(const char *name)
Definition
expose-function-ops.cpp:22
aligator::python::unary_visitor
const PolymorphicMultiBaseVisitor< UnaryFunction, StageFunction > unary_visitor
Definition
expose-function-ops.cpp:20
aligator::python::exposeFunctionExpressions
void exposeFunctionExpressions()
Definition
expose-function-ops.cpp:70
aligator::python::func_visitor
PolymorphicMultiBaseVisitor< StageFunction > func_visitor
Definition
expose-functions.cpp:26
aligator
Main package namespace.
Definition
action-model-wrap.hpp:14
aligator::linear_compose
auto linear_compose(xyz::polymorphic< StageFunctionTpl< Scalar > > func, const typename math_types< Scalar >::ConstMatrixRef A, const typename math_types< Scalar >::ConstVectorRef b)
Create a linear composition of the input function func.
Definition
linear-function-composition.hpp:100
aligator::FunctionSliceDataTpl
Definition
function-xpr-slice.hpp:104
aligator::FunctionSliceXprTpl
Represents a function of which the output is a subset of another function, for instance where is gi...
Definition
fwd.hpp:122
aligator::LinearFunctionCompositionTpl
Definition
linear-function-composition.hpp:57
aligator::LinearUnaryFunctionCompositionTpl
Definition
linear-function-composition.hpp:80
aligator::python::LinFunctionCompositionVisitor
Definition
expose-function-ops.cpp:43
aligator::python::LinFunctionCompositionVisitor::FunType
typename LFC::Base FunType
Definition
expose-function-ops.cpp:44
aligator::python::LinFunctionCompositionVisitor::visit
void visit(PyClass &cl) const
Definition
expose-function-ops.cpp:46
aligator::python::PolymorphicMultiBaseVisitor
Definition
polymorphic.hpp:107
bindings
python
src
modelling
expose-function-ops.cpp
Generated by
1.17.0