18 using Scalar =
typename Base::Scalar;
19 static constexpr int Options = Base::Options;
25 template <
typename... BaseCtorArgs>
31 inline int ndx()
const {
return 2 *
base_.ndx(); }
37 return base_.isNormalized(p);
51 MatrixRef Jout,
int arg)
const;
54 MatrixRef Jout,
int arg)
const;
57 MatrixRef Jout,
int arg)
const;
60 const Scalar &u, VectorRef out)
const;
64 template <
typename Po
int>
65 typename Point::ConstSegmentReturnType
getBasePoint(
const Point &x)
const {
66 return x.head(
base_.nx());
69 template <
typename Po
int>
74 template <
typename Tangent>
75 typename Tangent::ConstSegmentReturnType
77 return v.head(
base_.ndx());
80 template <
typename Tangent>
81 typename Tangent::SegmentReturnType
86 template <
typename Jac>
87 Eigen::Block<Jac, Eigen::Dynamic, Eigen::Dynamic>
97#include "proxsuite-nlp/modelling/spaces/tangent-bundle.hxx"
#define PROXSUITE_NLP_EIGEN_CONST_CAST(type, obj)
#define PROXSUITE_NLP_DYNAMIC_TYPEDEFS(Scalar)
Tangent bundle of a base manifold M.
TangentBundleTpl(Base base)
Constructor using base space instance.
Point::ConstSegmentReturnType getBasePoint(const Point &x) const
void Jdifference_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, MatrixRef Jout, int arg) const
void difference_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, VectorRef out) const
Implementation of the manifold retraction operation.
void interpolate_impl(const ConstVectorRef &x0, const ConstVectorRef &x1, const Scalar &u, VectorRef out) const
Interpolation operation.
VectorXs neutral() const
Get the neutral element from the manifold (if this makes sense).
bool isNormalized(const ConstVectorRef &x) const
Check if the input vector x is a viable element of the manifold.
void Jintegrate_impl(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const
Tangent::ConstSegmentReturnType getBaseTangent(const Tangent &v) const
Eigen::Block< Jac, Eigen::Dynamic, Eigen::Dynamic > getBaseJacobian(const Jac &J) const
Tangent::SegmentReturnType getTangentHeadWrite(const Tangent &v) const
typename Base::Scalar Scalar
VectorXs rand() const
Sample a random point on the manifold.
TangentBundleTpl(BaseCtorArgs... args)
Constructor using base space constructor.
void integrate_impl(const ConstVectorRef &x, const ConstVectorRef &dx, VectorRef out) const
Perform the manifold integration operation.
void JintegrateTransport(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const
Perform the parallel transport operation.
int ndx() const
Get manifold tangent space dimension.
const Base & getBaseSpace() const
int nx() const
Declare implementations.
static constexpr int Options
Point::SegmentReturnType getBasePointWrite(const Point &x) const