3#include "proxsuite-nlp/modelling/spaces/tangent-bundle.hpp" 
   11  out.head(base_.nx()) = base_.neutral();
 
 
   17  out.head(base_.nx()) = base_.rand();
 
   18  out.tail(base_.ndx()) = VectorXs::Random(base_.ndx());
 
 
   25                                            const ConstVectorRef &dx,
 
   26                                            VectorRef out)
 const {
 
   27  const int nv_ = base_.ndx();
 
   28  base_.integrate(
getBasePoint(x), getBaseTangent(dx), out.head(base_.nx()));
 
   29  out.tail(nv_) = x.tail(nv_) + dx.tail(nv_);
 
 
   34                                             const ConstVectorRef &x1,
 
   35                                             VectorRef out)
 const {
 
   36  const int nv_ = base_.ndx();
 
   39  out.tail(nv_) = x1.tail(nv_) - x0.tail(nv_);
 
   43void TangentBundleTpl<Base>::Jintegrate_impl(
const ConstVectorRef &x,
 
   44                                             const ConstVectorRef &dx,
 
   45                                             MatrixRef J_, 
int arg)
 const {
 
   46  const int nv_ = base_.ndx();
 
   49  base_.Jintegrate(
getBasePoint(x), getBaseTangent(dx), getBaseJacobian(J_),
 
   51  J_.bottomRightCorner(nv_, nv_).setIdentity();
 
   55void TangentBundleTpl<Base>::Jdifference_impl(
const ConstVectorRef &x0,
 
   56                                              const ConstVectorRef &x1,
 
   57                                              MatrixRef J_, 
int arg)
 const {
 
   58  const int nv_ = base_.ndx();
 
   64    J_.bottomRightCorner(nv_, nv_).diagonal().array() = Scalar(-1);
 
   65  } 
else if (arg == 1) {
 
   66    J_.bottomRightCorner(nv_, nv_).setIdentity();
 
   72                                                 const ConstVectorRef &v,
 
   75  const int nv_ = base_.ndx();
 
   76  base_.JintegrateTransport(
getBasePoint(x), getBaseTangent(v),
 
   77                            Jout.topRows(nv_), arg);
 
 
   82                                              const ConstVectorRef &x1,
 
   84                                              VectorRef out)
 const {
 
   86                    getBasePointWrite(out));
 
   87  out.tail(base_.ndx()) =
 
   88      (Scalar(1.) - u) * getBaseTangent(x0) + u * getBaseTangent(x1);
 
 
 
 
 
 
 
 
VectorXs rand() const
Sample a random point  on the manifold.
 
Point::ConstSegmentReturnType getBasePoint(const Point &x) 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.
 
void integrate_impl(const ConstVectorRef &x, const ConstVectorRef &dx, VectorRef out) const
Operators.
 
void JintegrateTransport(const ConstVectorRef &x, const ConstVectorRef &v, MatrixRef Jout, int arg) const
Perform the parallel transport operation.
 
VectorXs neutral() const
Get the neutral element  from the manifold (if this makes sense).
 
int nx() const
Declare implementations.