bindings/python/context/casadi.hpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2020 INRIA
3 //
4 
5 #ifndef __pinocchio_python_context_casadi_hpp__
6 #define __pinocchio_python_context_casadi_hpp__
7 
9 
10 #define PINOCCHIO_PYTHON_SCALAR_TYPE ::casadi::SX
12 #undef PINOCCHIO_PYTHON_SCALAR_TYPE
13 
14 #define PINOCCHIO_PYTHON_SKIP_COMPARISON_OPERATIONS
15 #define PINOCCHIO_PYTHON_NO_SERIALIZATION
16 #define PINOCCHIO_PYTHON_SKIP_REACHABLE_WORKSPACE
17 #define PINOCCHIO_PYTHON_SKIP_ALGORITHM_CONSTRAINED_DYNAMICS
18 
19 #define PINOCCHIO_PYTHON_SKIP_CASADI_UNSUPPORTED
20 
21 #include <eigenpy/eigenpy.hpp>
22 #include <eigenpy/user-type.hpp>
23 #include <eigenpy/ufunc.hpp>
24 #include <eigenpy/swig.hpp>
25 
26 namespace eigenpy
27 {
28 
29  namespace bp = boost::python;
30 
31  namespace casadi
32  {
33 
34  struct CasadiType
35  {
36  static PyTypeObject * getSXType()
37  {
38  return reinterpret_cast<PyTypeObject *>(getInstance().casadi_SX_type.ptr());
39  }
40 
41  private:
42  static const CasadiType & getInstance()
43  {
44  static CasadiType elt;
45  return elt;
46  }
47 
49  {
50  casadi_module = bp::import("casadi");
51  casadi_SX_type = casadi_module.attr("SX");
52  Py_INCREF(casadi_module.ptr());
53  }
54 
56  {
57  casadi_SX_type.~object();
58  // casadi_module.~object();
59  }
60 
61  bp::object casadi_module;
62  bp::object casadi_SX_type;
63  };
64 
65  } // namespace casadi
66 
67  template<typename CasadiScalar, int Rows, int Cols, int Options, int MaxRows, int MaxCols>
69  Eigen::Matrix<::casadi::Matrix<CasadiScalar>, Rows, Cols, Options, MaxRows, MaxCols>,
70  Eigen::MatrixBase<
71  Eigen::Matrix<::casadi::Matrix<CasadiScalar>, Rows, Cols, Options, MaxRows, MaxCols>>>
72  {
73  static PyTypeObject const * get_pytype()
74  {
75  return ::eigenpy::casadi::CasadiType::getSXType();
76  }
77  };
78 
79  template<typename CasadiScalar, int Rows, int Cols, int Options, int MaxRows, int MaxCols>
80  struct EigenFromPy<
81  Eigen::Matrix<::casadi::Matrix<CasadiScalar>, Rows, Cols, Options, MaxRows, MaxCols>>
82  {
83  typedef ::casadi::Matrix<CasadiScalar> CasadiMatrix;
84  typedef Eigen::Matrix<::casadi::Matrix<CasadiScalar>, Rows, Cols, Options, MaxRows, MaxCols>
86 
88  static void * convertible(PyObject * pyObj);
89 
91  static void construct(PyObject * pyObj, bp::converter::rvalue_from_python_stage1_data * memory);
92 
93  static void registration();
94  };
95 
96  template<typename CasadiScalar, int Rows, int Cols, int Options, int MaxRows, int MaxCols>
97  void * EigenFromPy<
98  Eigen::Matrix<::casadi::Matrix<CasadiScalar>, Rows, Cols, Options, MaxRows, MaxCols>>::
99  convertible(PyObject * pyObj)
100  {
101  if (std::strcmp(pyObj->ob_type->tp_name, CasadiMatrix::type_name().c_str()) != 0)
102  return 0;
103 
104 #define RETURN_VALUE(value) \
105  { \
106  Py_DECREF(reinterpret_cast<PyObject *>(casadi_matrix_swig_obj)); \
107  return value; \
108  }
109 
110  eigenpy::PySwigObject * casadi_matrix_swig_obj = eigenpy::get_PySwigObject(pyObj);
111  if (casadi_matrix_swig_obj == NULL)
112  RETURN_VALUE(0);
113 
114  CasadiMatrix * casadi_matrix_ptr =
115  reinterpret_cast<CasadiMatrix *>(casadi_matrix_swig_obj->ptr);
116  const CasadiMatrix & casadi_matrix = *casadi_matrix_ptr;
117 
118  const casadi_int R = casadi_matrix.rows(), C = casadi_matrix.columns(),
119  size = casadi_matrix.numel();
120 
121  const int ndim = (R == 0 || C == 0) ? 0 : (R == 1 || C == 1) ? 1 : 2;
122 
123  if (MatType::IsVectorAtCompileTime)
124  {
125  const Eigen::DenseIndex size_at_compile_time =
126  MatType::IsRowMajor ? MatType::ColsAtCompileTime : MatType::RowsAtCompileTime;
127 
128  switch (ndim)
129  {
130  case 0:
131  RETURN_VALUE(0);
132  case 1: {
133  if (size_at_compile_time != Eigen::Dynamic)
134  {
135  // check that the sizes at compile time matche
136  if (size == size_at_compile_time)
137  {
138  if (MatType::ColsAtCompileTime != C || MatType::RowsAtCompileTime != R)
139  {
140  RETURN_VALUE(0);
141  }
142  else
143  {
144  RETURN_VALUE(pyObj);
145  }
146  }
147  else
148  RETURN_VALUE(0);
149  }
150  else // This is a dynamic MatType
151  RETURN_VALUE(pyObj);
152  }
153  case 2: {
154  assert(R > 1 && C > 1);
155  RETURN_VALUE(0);
156  }
157  default:
158  RETURN_VALUE(0);
159  }
160  }
161  else // this is a matrix
162  {
163  if (ndim == 1) // We can always convert a vector into a matrix
164  RETURN_VALUE(pyObj);
165 
166  if (ndim == 2)
167  {
168  if ((MatType::RowsAtCompileTime != R) && (MatType::RowsAtCompileTime != Eigen::Dynamic))
169  RETURN_VALUE(0);
170  if ((MatType::ColsAtCompileTime != C) && (MatType::ColsAtCompileTime != Eigen::Dynamic))
171  RETURN_VALUE(0);
172  }
173  }
174 
175  RETURN_VALUE(pyObj);
176 #undef RETURN_VALUE
177  }
178 
179  template<typename CasadiScalar, int Rows, int Cols, int Options, int MaxRows, int MaxCols>
180  void EigenFromPy<
181  Eigen::Matrix<::casadi::Matrix<CasadiScalar>, Rows, Cols, Options, MaxRows, MaxCols>>::
182  construct(PyObject * pyObj, bp::converter::rvalue_from_python_stage1_data * memory)
183  {
184  eigenpy::PySwigObject * casadi_matrix_swig_obj = eigenpy::get_PySwigObject(pyObj);
185  assert(casadi_matrix_swig_obj != NULL);
186 
187  CasadiMatrix * casadi_matrix_ptr =
188  reinterpret_cast<CasadiMatrix *>(casadi_matrix_swig_obj->ptr);
189  const CasadiMatrix & casadi_matrix = *casadi_matrix_ptr;
190 
191  const casadi_int R = casadi_matrix.rows(), C = casadi_matrix.columns();
192 
193  bp::converter::rvalue_from_python_storage<MatType> * storage =
194  reinterpret_cast<bp::converter::rvalue_from_python_storage<MatType> *>(
195  reinterpret_cast<void *>(memory));
196 
197  // Allocate memory
198  void * storage_ptr = storage->storage.bytes;
199  MatType * eigen_matrix_ptr =
201 
202  // Copy element to matrix
203  pinocchio::casadi::copy(casadi_matrix, *eigen_matrix_ptr);
204 
205  memory->convertible = storage->storage.bytes;
206  Py_DECREF(reinterpret_cast<PyObject *>(casadi_matrix_swig_obj));
207  }
208 
209  template<typename CasadiScalar, int Rows, int Cols, int Options, int MaxRows, int MaxCols>
210  void EigenFromPy<
211  Eigen::Matrix<::casadi::Matrix<CasadiScalar>, Rows, Cols, Options, MaxRows, MaxCols>>::
212  registration()
213  {
214  bp::converter::registry::push_back(
215  reinterpret_cast<void * (*)(_object *)>(&EigenFromPy::convertible), &EigenFromPy::construct,
216  bp::type_id<MatType>()
217 #ifndef BOOST_PYTHON_NO_PY_SIGNATURES
218  ,
220 #endif
221  );
222  }
223 
224  template<typename MatType>
225  struct EigenToPy<MatType, ::casadi::Matrix<::casadi::SXElem>>
226  {
227  typedef ::casadi::Matrix<::casadi::SXElem> CasadiMatrix;
228 
229  static PyObject *
230  convert(typename boost::add_reference<typename boost::add_const<MatType>::type>::type mat)
231  {
232  assert(
233  (mat.rows() < INT_MAX) && (mat.cols() < INT_MAX)
234  && "Matrix range larger than int ... should never happen.");
235 
236  PyObject * casadi_matrix_py_ptr =
237  PyObject_CallObject(reinterpret_cast<PyObject *>(casadi::CasadiType::getSXType()), NULL);
238 
239  eigenpy::PySwigObject * casadi_matrix_swig_obj =
240  eigenpy::get_PySwigObject(casadi_matrix_py_ptr);
241  assert(casadi_matrix_swig_obj != NULL);
242 
243  CasadiMatrix * casadi_matrix_obj_ptr =
244  reinterpret_cast<CasadiMatrix *>(casadi_matrix_swig_obj->ptr);
245  pinocchio::casadi::copy(mat, *casadi_matrix_obj_ptr);
246 
247  Py_DECREF(reinterpret_cast<PyObject *>(casadi_matrix_swig_obj));
248  return casadi_matrix_py_ptr;
249  }
250 
251  static PyTypeObject const * get_pytype()
252  {
253  return ::eigenpy::casadi::CasadiType::getSXType();
254  }
255  };
256 
257  template<typename TensorType, typename _Scalar>
259  TensorType,
260  Eigen::TensorBase<TensorType>,
261  ::casadi::Matrix<_Scalar>>
262  {
263  static void run()
264  {
265  }
266  };
267 
268  template<typename SparseType, typename _Scalar>
270  SparseType,
271  Eigen::SparseMatrixBase<SparseType>,
272  ::casadi::Matrix<_Scalar>>
273  {
274  static void run()
275  {
276  }
277  };
278 
279  template<typename MatType, int Options, typename Stride>
280  struct EigenToPy<Eigen::Ref<MatType, Options, Stride>, ::casadi::Matrix<::casadi::SXElem>>
281  {
282  typedef ::casadi::Matrix<::casadi::SXElem> CasadiMatrix;
283 
284  static PyObject * convert(const Eigen::Ref<MatType, Options, Stride> & mat)
285  {
286  assert(
287  (mat.rows() < INT_MAX) && (mat.cols() < INT_MAX)
288  && "Matrix range larger than int ... should never happen.");
289  PyObject * casadi_matrix_py_ptr =
290  PyObject_CallObject(reinterpret_cast<PyObject *>(casadi::CasadiType::getSXType()), NULL);
291 
292  eigenpy::PySwigObject * casadi_matrix_swig_obj =
293  eigenpy::get_PySwigObject(casadi_matrix_py_ptr);
294  assert(casadi_matrix_swig_obj != NULL);
295 
296  CasadiMatrix * casadi_matrix_obj_ptr =
297  reinterpret_cast<CasadiMatrix *>(casadi_matrix_swig_obj->ptr);
298  pinocchio::casadi::copy(mat.derived(), *casadi_matrix_obj_ptr);
299 
300  Py_DECREF(reinterpret_cast<PyObject *>(casadi_matrix_swig_obj));
301  return casadi_matrix_py_ptr;
302  }
303 
304  static PyTypeObject const * get_pytype()
305  {
306  return ::eigenpy::casadi::CasadiType::getSXType();
307  }
308  };
309 
310  namespace internal
311  {
312 
313  template<>
315  void * ip, void * array)
316  {
317 
319  PyArrayObject * py_array = static_cast<PyArrayObject *>(array);
320  if (py_array == NULL || PyArray_ISBEHAVED_RO(py_array))
321  {
322  const Scalar & value = *static_cast<Scalar *>(ip);
323  return (npy_bool)(value.is_zero());
324  }
325  else
326  {
327  Scalar tmp_value;
328  PyArray_DESCR(py_array)->f->copyswap(
329  &tmp_value, ip, PyArray_ISBYTESWAPPED(py_array), array);
330  return (npy_bool)(tmp_value.is_zero());
331  }
332  }
333 
334  } // namespace internal
335 
336 } // namespace eigenpy
337 
338 namespace pinocchio
339 {
340  namespace python
341  {
342 
343  template<typename CasadiMatrix>
345  {
346 
347  static PyObject * convert(CasadiMatrix const & x)
348  {
349  PyObject * casadi_matrix_py_ptr = PyObject_CallObject(
350  reinterpret_cast<PyObject *>(eigenpy::casadi::CasadiType::getSXType()), NULL);
351  eigenpy::PySwigObject * casadi_matrix_swig_obj =
352  eigenpy::get_PySwigObject(casadi_matrix_py_ptr);
353  assert(casadi_matrix_swig_obj != NULL);
354 
355  CasadiMatrix * casadi_matrix_obj_ptr =
356  reinterpret_cast<CasadiMatrix *>(casadi_matrix_swig_obj->ptr);
357  *casadi_matrix_obj_ptr = x;
358 
359  Py_DECREF(reinterpret_cast<PyObject *>(casadi_matrix_swig_obj));
360  return casadi_matrix_py_ptr;
361  }
362 
363  static PyTypeObject const * get_pytype()
364  {
365  return ::eigenpy::casadi::CasadiType::getSXType();
366  }
367 
368  static void registration()
369  {
370  boost::python::to_python_converter<CasadiMatrix, CasadiMatrixToPython, true>();
371  }
372  };
373 
374  template<typename CasadiMatrix>
376  {
377  struct Extractor
378  {
379  static CasadiMatrix & execute(PyObject * /*pyObj*/)
380  {
381  throw std::runtime_error("Should never be called");
382  }
383  };
384 
385  static void registration()
386  {
387  boost::python::converter::registry::insert(
388  &extract, boost::python::detail::extractor_type_id(&Extractor::execute)
389 #ifndef BOOST_PYTHON_NO_PY_SIGNATURES
390  ,
391  &get_pytype
392 #endif
393  );
394  }
395 
396  private:
397  static void * extract(PyObject * pyObj)
398  {
399  if (!PyObject_TypeCheck(pyObj, ::eigenpy::casadi::CasadiType::getSXType()))
400  return 0;
401 
402  eigenpy::PySwigObject * casadi_matrix_swig_obj = eigenpy::get_PySwigObject(pyObj);
403  return casadi_matrix_swig_obj->ptr;
404  }
405 #ifndef BOOST_PYTHON_NO_PY_SIGNATURES
406  static PyTypeObject const * get_pytype()
407  {
408  return ::eigenpy::casadi::CasadiType::getSXType();
409  }
410 #endif
411  };
412 
413  // template<typename CasadiMatrix>
414  // struct CasadiMatrixFromPython
415  // {
416  // static void* convertible(PyObject * pyObj)
417  // {
418  // if(PyFloat_Check(pyObj))
419  // return pyObj;
420  // if(std::strcmp(pyObj->ob_type->tp_name,CasadiMatrix::type_name().c_str()) != 0)
421  // return 0;
422  //
423  // return pyObj;
424  // }
425  // static void construct(PyObject * pyObj,
426  // boost::python::converter::rvalue_from_python_stage1_data * memory)
427  // {
428  // eigenpy::PySwigObject * casadi_matrix_swig_obj = eigenpy::get_PySwigObject(pyObj);
429  // assert(casadi_matrix_swig_obj != NULL);
430  //
431  // CasadiMatrix * casadi_matrix_ptr =
432  // reinterpret_cast<CasadiMatrix*>(casadi_matrix_swig_obj->ptr); const CasadiMatrix &
433  // casadi_matrix = *casadi_matrix_ptr;
434  //
435  // bp::converter::rvalue_from_python_storage<CasadiMatrix>* storage =
436  // reinterpret_cast<bp::converter::rvalue_from_python_storage<CasadiMatrix>*>
437  // (reinterpret_cast<void*>(memory));
438  //
439  // // Allocate memory
440  // void * storage_ptr = storage->storage.bytes;
441  // CasadiMatrix * casadi_matrix_cpp = new (storage_ptr) CasadiMatrix(casadi_matrix);
442  //
443  // memory->convertible = storage->storage.bytes;
444  // Py_DECREF(reinterpret_cast<PyObject *>(casadi_matrix_swig_obj));
445  // }
446  // };
447 
448  inline boost::python::object getScalarType()
449  {
450  namespace bp = boost::python;
451 
452  PyObject * pyObj = reinterpret_cast<PyObject *>(::eigenpy::casadi::CasadiType::getSXType());
453  bp::object scalar_type(bp::handle<>(bp::borrowed(pyObj)));
454 
455  return scalar_type;
456  }
457 
458  inline void exposeSpecificTypeFeatures()
459  {
463  boost::python::implicitly_convertible<double, Scalar>();
464  boost::python::implicitly_convertible<float, Scalar>();
465  boost::python::implicitly_convertible<int, Scalar>();
466  boost::python::implicitly_convertible<long, Scalar>();
467  boost::python::implicitly_convertible<bool, Scalar>();
468  };
469 
470  } // namespace python
471 } // namespace pinocchio
472 
473 namespace eigenpy
474 {
475 
476  template<typename Scalar>
477  struct has_operator_equal<::casadi::Matrix<Scalar>> : boost::false_type
478  {
479  };
480 
481 } // namespace eigenpy
482 
483 #endif // #ifndef __pinocchio_python_context_casadi_hpp__
eigenpy::EigenToPy< MatType, ::casadi::Matrix<::casadi::SXElem > >::get_pytype
static const PyTypeObject * get_pytype()
Definition: bindings/python/context/casadi.hpp:251
boost::python
Eigen
pinocchio::python::CasadiMatrixToPython::registration
static void registration()
Definition: bindings/python/context/casadi.hpp:368
eigenpy::casadi::CasadiType::getSXType
static PyTypeObject * getSXType()
Definition: bindings/python/context/casadi.hpp:36
eigen_from_py_impl< EigenType >::registration
static void registration()
eigenpy.hpp
eigenpy::casadi::CasadiType::CasadiType
CasadiType()
Definition: bindings/python/context/casadi.hpp:48
pinocchio::python::CasadiMatrixFromPython::Extractor
Definition: bindings/python/context/casadi.hpp:377
pinocchio::python::CasadiMatrixFromPython::registration
static void registration()
Definition: bindings/python/context/casadi.hpp:385
eigenpy::EigenFromPy
eigenpy::EigenToPy
eigen_from_py_impl< EigenType >::convertible
static void * convertible(PyObject *pyObj)
eigenpy::EigenToPy< Eigen::Ref< MatType, Options, Stride >, ::casadi::Matrix<::casadi::SXElem > >::get_pytype
static const PyTypeObject * get_pytype()
Definition: bindings/python/context/casadi.hpp:304
pinocchio::python::Scalar
context::Scalar Scalar
Definition: admm-solver.cpp:29
R
R
eigenpy::EigenToPy< Eigen::Ref< MatType, Options, Stride >, ::casadi::Matrix<::casadi::SXElem > >::convert
static PyObject * convert(const Eigen::Ref< MatType, Options, Stride > &mat)
Definition: bindings/python/context/casadi.hpp:284
eigenpy::get_PySwigObject
PySwigObject * get_PySwigObject(PyObject *pyObj)
eigenpy::EigenToPy< Eigen::Ref< MatType, Options, Stride >, ::casadi::Matrix<::casadi::SXElem > >::CasadiMatrix
::casadi::Matrix<::casadi::SXElem > CasadiMatrix
Definition: bindings/python/context/casadi.hpp:282
simulation-pendulum.type
type
Definition: simulation-pendulum.py:18
eigenpy::expose_eigen_type_impl
eigenpy
pinocchio::python::Options
@ Options
Definition: expose-contact-inverse-dynamics.cpp:22
casadi
Definition: autodiff/casadi.hpp:39
pinocchio::python::getScalarType
boost::python::object getScalarType()
Definition: boost_number.cpp:19
pinocchio::python::CasadiMatrixToPython
Definition: bindings/python/context/casadi.hpp:344
eigenpy::expected_pytype_for_arg
eigenpy::EigenToPy< MatType, ::casadi::Matrix<::casadi::SXElem > >::CasadiMatrix
::casadi::Matrix<::casadi::SXElem > CasadiMatrix
Definition: bindings/python/context/casadi.hpp:227
dcrba.C
C
Definition: dcrba.py:469
pinocchio::python::exposeSpecificTypeFeatures
void exposeSpecificTypeFeatures()
Definition: boost_number.cpp:14
eigenpy::PySwigObject
pinocchio::Dynamic
const int Dynamic
Definition: fwd.hpp:140
python
eigenpy::EigenToPy< MatType, ::casadi::Matrix<::casadi::SXElem > >::convert
static PyObject * convert(typename boost::add_reference< typename boost::add_const< MatType >::type >::type mat)
Definition: bindings/python/context/casadi.hpp:230
mat
mat
pinocchio::python::CasadiMatrixFromPython::get_pytype
static const PyTypeObject * get_pytype()
Definition: bindings/python/context/casadi.hpp:406
eigenpy::casadi::CasadiType::casadi_SX_type
bp::object casadi_SX_type
Definition: bindings/python/context/casadi.hpp:62
size
FCL_REAL size() const
value
float value
eigenpy::details::init_matrix_or_array::run
static MatType * run(int rows, int cols, void *storage)
x
x
eigenpy::PySwigObject::ptr
PyObject_HEAD void * ptr
pinocchio::python::CasadiMatrixFromPython::Extractor::execute
static CasadiMatrix & execute(PyObject *)
Definition: bindings/python/context/casadi.hpp:379
user-type.hpp
eigen_from_py_impl< EigenType >::construct
static void construct(PyObject *pyObj, bp::converter::rvalue_from_python_stage1_data *memory)
eigenpy::casadi::CasadiType::getInstance
static const CasadiType & getInstance()
Definition: bindings/python/context/casadi.hpp:42
pinocchio::python::CasadiMatrixToPython::get_pytype
static const PyTypeObject * get_pytype()
Definition: bindings/python/context/casadi.hpp:363
pinocchio::python::CasadiMatrixFromPython
Definition: bindings/python/context/casadi.hpp:375
eigenpy::expose_eigen_type_impl< TensorType, Eigen::TensorBase< TensorType >, ::casadi::Matrix< _Scalar > >::run
static void run()
Definition: bindings/python/context/casadi.hpp:263
eigenpy::EigenFromPy< Eigen::Matrix<::casadi::Matrix< CasadiScalar >, Rows, Cols, Options, MaxRows, MaxCols > >::CasadiMatrix
::casadi::Matrix< CasadiScalar > CasadiMatrix
Definition: bindings/python/context/casadi.hpp:83
RETURN_VALUE
#define RETURN_VALUE(value)
eigenpy::expected_pytype_for_arg< Eigen::Matrix<::casadi::Matrix< CasadiScalar >, Rows, Cols, Options, MaxRows, MaxCols >, Eigen::MatrixBase< Eigen::Matrix<::casadi::Matrix< CasadiScalar >, Rows, Cols, Options, MaxRows, MaxCols > > >::get_pytype
static const PyTypeObject * get_pytype()
Definition: bindings/python/context/casadi.hpp:73
pinocchio::python::CasadiMatrixToPython::convert
static PyObject * convert(CasadiMatrix const &x)
Definition: bindings/python/context/casadi.hpp:347
eigenpy::EigenFromPy< Eigen::Matrix<::casadi::Matrix< CasadiScalar >, Rows, Cols, Options, MaxRows, MaxCols > >::MatType
Eigen::Matrix<::casadi::Matrix< CasadiScalar >, Rows, Cols, Options, MaxRows, MaxCols > MatType
Definition: bindings/python/context/casadi.hpp:85
eigenpy::casadi::CasadiType
Definition: bindings/python/context/casadi.hpp:34
pinocchio.casadi::copy
void copy(::casadi::Matrix< Scalar > const &src, Eigen::MatrixBase< MT > &dst)
Definition: autodiff/casadi.hpp:154
eigenpy::casadi::CasadiType::casadi_module
bp::object casadi_module
Definition: bindings/python/context/casadi.hpp:61
ufunc.hpp
swig.hpp
casadi.hpp
generic.hpp
eigenpy::internal::SpecialMethods::nonzero
static npy_bool nonzero(void *, void *)
pinocchio::python::CasadiMatrixFromPython::extract
static void * extract(PyObject *pyObj)
Definition: bindings/python/context/casadi.hpp:397
eigenpy::has_operator_equal
eigenpy::expose_eigen_type_impl< SparseType, Eigen::SparseMatrixBase< SparseType >, ::casadi::Matrix< _Scalar > >::run
static void run()
Definition: bindings/python/context/casadi.hpp:274
pinocchio::python::context::Scalar
PINOCCHIO_PYTHON_SCALAR_TYPE Scalar
Definition: bindings/python/context/generic.hpp:37
pinocchio
Main pinocchio namespace.
Definition: timings.cpp:27
eigenpy::casadi::CasadiType::~CasadiType
~CasadiType()
Definition: bindings/python/context/casadi.hpp:55


pinocchio
Author(s):
autogenerated on Tue Jun 25 2024 02:42:34