18struct PinocchioLieGroup
 
   22  using LieGroup = _LieGroup;
 
   23  using Scalar = 
typename LieGroup::Scalar;
 
   24  static constexpr int Options = LieGroup::Options;
 
   27  static_assert(std::is_base_of_v<pin::LieGroupBase<LieGroup>, LieGroup>,
 
   28                "LieGroup template argument should be a subclass of " 
   29                "pinocchio::LieGroupBase.");
 
   32  PinocchioLieGroup() {}
 
   33  PinocchioLieGroup(
const LieGroup &lg) : lg_(lg) {}
 
   34  PinocchioLieGroup(LieGroup &&lg) : lg_(std::move(lg)) {}
 
   35  PinocchioLieGroup(
const PinocchioLieGroup &lg) = 
default;
 
   36  PinocchioLieGroup(PinocchioLieGroup &&lg) = 
default;
 
   38  template <
typename... Args>
 
   39  PinocchioLieGroup(Args &&...args) : lg_(std::forward<Args>(args)...) {}
 
   41  operator LieGroup() { 
return lg_; }
 
   43  inline int nx()
 const { 
return lg_.nq(); }
 
   44  inline int ndx()
 const { 
return lg_.nv(); }
 
   49                      VectorRef out)
 const {
 
   50    lg_.integrate(x, v, out);
 
 
   54                       VectorRef vout)
 const {
 
   55    lg_.difference(x0, x1, vout);
 
 
   58  void Jintegrate_impl(
const ConstVectorRef &x, 
const ConstVectorRef &v,
 
   59                       MatrixRef Jout, 
int arg)
 const {
 
   62      lg_.dIntegrate_dq(x, v, Jout);
 
   65      lg_.dIntegrate_dv(x, v, Jout);
 
   71                           MatrixRef Jout, 
int arg)
 const {
 
   72    lg_.dIntegrateTransport(x, v, Jout, pin::ArgumentPosition(arg));
 
 
   75  void Jdifference_impl(
const ConstVectorRef &x0, 
const ConstVectorRef &x1,
 
   76                        MatrixRef Jout, 
int arg)
 const {
 
   79      lg_.dDifference(x0, x1, Jout, pin::ARG0);
 
   82      lg_.dDifference(x0, x1, Jout, pin::ARG1);
 
   87  virtual void interpolate_impl(
const ConstVectorRef &x0,
 
   88                                const ConstVectorRef &x1, 
const Scalar &u,
 
   89                                VectorRef out)
 const {
 
   90    lg_.interpolate(x0, x1, u, out);
 
   93  VectorXs 
neutral()
 const { 
return lg_.neutral(); }
 
   95  VectorXs 
rand()
 const { 
return lg_.random(); }
 
   99    return lg_.isNormalized(x);