pinocchio  3.7.0
A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives
 
Loading...
Searching...
No Matches
list.hpp
1//
2// Copyright (c) 2019 INRIA
3//
4
5#ifndef __pinocchio_python_utils_list_hpp__
6#define __pinocchio_python_utils_list_hpp__
7
8#include "pinocchio/bindings/python/fwd.hpp"
9#include "pinocchio/bindings/python/utils/path.hpp"
10
11#include <eigenpy/exception.hpp>
12
13#include <boost/python.hpp>
14#include <boost/python/type_id.hpp>
15#include <vector>
16#include <sstream>
17#include <string>
18
19namespace pinocchio
20{
21 namespace python
22 {
23
24 template<typename T, class Allocator>
25 void extract(const boost::python::list & list, std::vector<T, Allocator> & vec)
26 {
27 namespace bp = boost::python;
28
29 size_t size_list = (size_t)bp::len(list);
30 vec.resize(size_list);
31 for (size_t i = 0; i < size_list; ++i)
32 {
33 bp::extract<T> input_T(list[i]);
34 if (input_T.check())
35 vec[i] = input_T();
36 else
37 {
38 const std::string classname =
39 bp::extract<std::string>(list[i].attr("__class__").attr("__name__"));
40 std::stringstream ss;
41 ss << "The conversion from " << classname << " to " << bp::type_id<T>().name()
42 << " has failed." << std::endl;
43 throw eigenpy::Exception(ss.str());
44 }
45 }
46 }
47
48 template<typename T>
49 std::vector<T, std::allocator<T>> extract(const boost::python::list & list)
50 {
51 std::vector<T, std::allocator<T>> vec;
52 extract(list, vec);
53 return vec;
54 }
55
56 template<typename T, class Allocator>
57 std::vector<T, Allocator> extract(const boost::python::list & list)
58 {
59 std::vector<T, Allocator> vec;
60 extract(list, vec);
61 return vec;
62 }
63
64 } // namespace python
65} // namespace pinocchio
66
67#endif // ifndef __pinocchio_python_utils_list_hpp__
Main pinocchio namespace.
Definition treeview.dox:11