6 #ifndef __pinocchio_python_spatial_force_hpp__ 
    7 #define __pinocchio_python_spatial_force_hpp__ 
   11 #include <boost/python/tuple.hpp> 
   20 #if EIGENPY_VERSION_AT_MOST(2, 8, 1) 
   33     template<
typename Scalar, 
int Options>
 
   41         const Scalar & prec = Eigen::NumTraits<Scalar>::dummy_precision())
 
   43         return self.isApprox(other, prec);
 
   47       isZero(
const Force & 
self, 
const Scalar & prec = Eigen::NumTraits<Scalar>::dummy_precision())
 
   49         return self.isZero(prec);
 
   53     template<
typename Force>
 
   68       template<
class PyClass>
 
   71         static const Scalar dummy_precision = Eigen::NumTraits<Scalar>::dummy_precision();
 
   74         cl.def(bp::init<>(bp::arg(
"self"), 
"Default constructor"))
 
   75           .def(bp::init<const Vector3 &, const Vector3 &>(
 
   76             (bp::arg(
"self"), bp::arg(
"linear"), bp::arg(
"angular")),
 
   77             "Initialize from linear and angular components of a Wrench vector (don't mix the " 
   79           .def(bp::init<const Vector6 &>(
 
   80             (bp::args(
"self", 
"array")), 
"Init from a vector 6 [force,torque]"))
 
   81           .def(bp::init<const Force &>((bp::arg(
"self"), bp::arg(
"clone")), 
"Copy constructor"))
 
   88             "Linear part of a *this, corresponding to the linear velocity in case of a " 
   95             "Angular part of a *this, corresponding to the angular velocity in case of " 
   96             "a Spatial velocity.")
 
  100               (
typename Force::ToVectorReturnType(
Force::*)()) & Force::toVector,
 
  101               bp::return_internal_reference<>()),
 
  104             "np", bp::make_function(
 
  105                     (
typename Force::ToVectorReturnType(
Force::*)()) & Force::toVector,
 
  106                     bp::return_internal_reference<>()))
 
  109             "se3Action", &Force::template se3Action<Scalar, Options>, bp::args(
"self", 
"M"),
 
  110             "Returns the result of the dual action of M on *this.")
 
  112             "se3ActionInverse", &Force::template se3ActionInverse<Scalar, Options>,
 
  113             bp::args(
"self", 
"M"),
 
  114             "Returns the result of the dual action of the inverse of M on *this.")
 
  118             "Set the linear and angular components of *this to zero.")
 
  121             "Set the linear and angular components of *this to random values.")
 
  125             bp::args(
"self", 
"m"), 
"Dot product between *this and a Motion m.")
 
  127           .def(bp::self + bp::self)
 
  128           .def(bp::self += bp::self)
 
  129           .def(bp::self - bp::self)
 
  130           .def(bp::self -= bp::self)
 
  133 #ifndef PINOCCHIO_PYTHON_SKIP_COMPARISON_OPERATIONS 
  134           .def(bp::self == bp::self)
 
  135           .def(bp::self != bp::self)
 
  142 #ifndef PINOCCHIO_PYTHON_SKIP_COMPARISON_OPERATIONS 
  145             (bp::arg(
"self"), bp::arg(
"other"), bp::arg(
"prec") = dummy_precision),
 
  146             "Returns true if *this is approximately equal to other, within the precision given " 
  151             "Returns true if *this is approximately equal to the zero Force, within the " 
  152             "precision given by prec.")
 
  155           .def(
"Random", &Force::Random, 
"Returns a random Force.")
 
  156           .staticmethod(
"Random")
 
  157           .def(
"Zero", &Force::Zero, 
"Returns a zero Force.")
 
  158           .staticmethod(
"Zero")
 
  161             "__array__", bp::make_function(
 
  162                            (
typename Force::ToVectorReturnType(
Force::*)()) & Force::toVector,
 
  163                            bp::return_internal_reference<>()))
 
  166             (bp::arg(
"self"), bp::arg(
"dtype") = bp::object(), bp::arg(
"copy") = bp::object()),
 
  167             bp::return_internal_reference<>())
 
  168 #ifndef PINOCCHIO_PYTHON_NO_SERIALIZATION 
  178         bp::objects::register_dynamic_id<ForceBase>();
 
  179         bp::objects::register_conversion<Force, ForceBase>(
false);
 
  182         bp::objects::register_dynamic_id<ForceBase>();
 
  183         bp::objects::register_conversion<Force, ForceDense>(
false);
 
  185 #if PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 6 && EIGENPY_VERSION_AT_LEAST(2, 9, 0) 
  188         typedef ::boost::python::detail::not_specified HolderType;
 
  190         bp::class_<Force, HolderType>(
 
  192           "Force vectors, in se3* == F^6.\n\n" 
  193           "Supported operations ...",
 
  203       static typename Force::ToVectorConstReturnType
 
  206         return self.toVector();
 
  224         return self.linear();
 
  232         return self.angular();
 
  257 #endif // ifndef __pinocchio_python_spatial_force_hpp__