16template <
typename _Scalar, 
unsigned int arg>
 
   17struct StateOrControlErrorResidual;
 
   20template <
typename _Scalar>
 
   21struct StateOrControlErrorResidual<_Scalar, 0> : UnaryFunctionTpl<_Scalar> {
 
   22  using Scalar = _Scalar;
 
   25  using Data = StageFunctionDataTpl<Scalar>;
 
   26  using Manifold = ManifoldAbstractTpl<Scalar>;
 
   27  using VectorSpace = VectorSpaceTpl<Scalar, Eigen::Dynamic>;
 
   33  StateOrControlErrorResidual(
const PolyManifold &xspace, 
const int nu,
 
   34                              const ConstVectorRef &target)
 
   35      : Base(xspace->ndx(), 
nu, xspace->ndx())
 
   41  template <
typename U, 
typename std::enable_if_t<
 
   43  StateOrControlErrorResidual(U &&xspace, 
const int nu,
 
   44                              const ConstVectorRef &target)
 
   45      : Base(xspace.ndx(), 
nu, xspace.ndx())
 
   46      , space_{std::forward<U>(xspace)}
 
   51  void evaluate(
const ConstVectorRef &x, Data &data)
 const override {
 
   52    space_->difference(target_, x, data.value_);
 
   55  void computeJacobians(
const ConstVectorRef &x, Data &data)
 const override {
 
   56    space_->Jdifference(target_, x, data.Jx_, 1);
 
   60  void validate()
 const {
 
   61    if (!space_->isNormalized(target_)) {
 
   63          "Target parameter invalid (not a viable element of state manifold.)");
 
   68template <
typename _Scalar, 
unsigned int arg>
 
   69struct StateOrControlErrorResidual : StageFunctionTpl<_Scalar> {
 
   70  static_assert(arg == 1, 
"arg value must be 1");
 
   71  using Scalar = _Scalar;
 
   74  using Data = StageFunctionDataTpl<Scalar>;
 
   75  using Manifold = ManifoldAbstractTpl<Scalar>;
 
   76  using VectorSpace = VectorSpaceTpl<Scalar, Eigen::Dynamic>;
 
   78  xyz::polymorphic<Manifold> space_;
 
   84            typename = std::enable_if_t<!is_polymorphic_of_v<Manifold, U>>>
 
   85  StateOrControlErrorResidual(
const int ndx, U &&uspace,
 
   86                              const ConstVectorRef &target)
 
   87      : Base(ndx, uspace.nx(), uspace.ndx())
 
   88      , space_(std::forward<U>(uspace))
 
   93  StateOrControlErrorResidual(
const int ndx,
 
   94                              const xyz::polymorphic<Manifold> &uspace,
 
   95                              const ConstVectorRef &target)
 
   96      : Base(ndx, uspace->nx(), uspace->ndx())
 
  102  StateOrControlErrorResidual(
const int ndx, 
const int nu)
 
  104      , space_(VectorSpace(
nu))
 
  105      , target_(space_->neutral()) {}
 
  109  StateOrControlErrorResidual(
const int ndx, 
const ConstVectorRef &target)
 
  110      : StateOrControlErrorResidual(ndx, (int)target.size()) {
 
  114  void evaluate(
const ConstVectorRef &, 
const ConstVectorRef &u,
 
  115                Data &data)
 const override {
 
  118      space_->difference(target_, u, data.value_);
 
  125  void computeJacobians(
const ConstVectorRef &, 
const ConstVectorRef &u,
 
  126                        Data &data)
 const override {
 
  129      space_->Jdifference(target_, u, data.Ju_, 1);
 
  137  void validate()
 const {
 
  138    if (!space_->isNormalized(target_)) {
 
  140          "Target parameter invalid (not a viable element of state manifold.)");
 
  151template <
typename Scalar>
 
  153  using Base = detail::StateOrControlErrorResidual<Scalar, 0>;
 
 
  157template <
typename Scalar>
 
  159    : detail::StateOrControlErrorResidual<Scalar, 1> {
 
  160  using Base = detail::StateOrControlErrorResidual<Scalar, 1>;
 
 
  166#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION 
  167#include "aligator/modelling/state-error.txx" 
#define ALIGATOR_RUNTIME_ERROR(...)
 
Base definitions for ternary functions.
 
#define ALIGATOR_DYNAMIC_TYPEDEFS(Scalar)
 
xyz::polymorphic< Manifold > PolyManifold
 
constexpr bool is_polymorphic_of_v
 
detail::StateOrControlErrorResidual< Scalar, 1 > Base
 
const int nu
Control dimension.
 
StageFunctionTpl(const int ndx, const int nu, const int nr)
 
detail::StateOrControlErrorResidual< Scalar, 0 > Base
 
#define ALIGATOR_UNARY_FUNCTION_INTERFACE(Scalar)