From b9d06a051cf05728c077d831f57f7c74ffe3db3d Mon Sep 17 00:00:00 2001 From: Rohan Budhiraja <budhiraja@laas.fr> Date: Tue, 24 Nov 2015 17:43:07 +0100 Subject: [PATCH] Fix dynamic-graph-python to use dynamic-graph3 with eigen --- .travis.yml | 3 ++- CMakeLists.txt | 2 ++ src/convert-dg-to-py.cc | 15 +++++++-------- src/entity-py.cc | 7 +------ 4 files changed, 12 insertions(+), 15 deletions(-) diff --git a/.travis.yml b/.travis.yml index ad3844c..cd20da5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,5 @@ language: cpp +sudo: required compiler: - gcc - clang @@ -6,7 +7,7 @@ env: global: - secure: ECiHIh0aT5ml/MdKifvFIM2UpDWiPsJPEZpafLYM8U0VAPYThSfUe8JWhMsky8amOwm38akbSbr6C7iBKVpzjAqpgNdOdufO1RUZ6pUvtlVXiXTw2KlqPqbDVlD3QroVDhnX/rIRcg5ezEHAIb594uEaHdf8tlikhjdTc3aAgMA= - APT_DEPENDENCIES="doxygen doxygen-latex libboost-all-dev libeigen3-dev liblapack-dev libblas-dev gfortran python-dev python-sphinx" - - GIT_DEPENDENCIES="jrl-umi3218/jrl-mathtools jrl-umi3218/jrl-mal stack-of-tasks/dynamic-graph" + - GIT_DEPENDENCIES="stack-of-tasks/dynamic-graph" - LCOV_IGNORE_RULES="*unitTesting*" allow_failures: - compiler: clang diff --git a/CMakeLists.txt b/CMakeLists.txt index cfb625d..32d0f41 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6) INCLUDE(cmake/base.cmake) INCLUDE(cmake/boost.cmake) +INCLUDE(cmake/eigen.cmake) INCLUDE(cmake/pthread.cmake) INCLUDE(cmake/cpack.cmake) include(cmake/header.cmake) @@ -47,6 +48,7 @@ PKG_CONFIG_APPEND_LIBS("dynamic-graph-python") # Search for Boost. SET(BOOST_COMPONENTS python filesystem system thread program_options unit_test_framework) SEARCH_FOR_BOOST() +SEARCH_FOR_EIGEN() ADD_SUBDIRECTORY(src) ADD_SUBDIRECTORY(include) diff --git a/src/convert-dg-to-py.cc b/src/convert-dg-to-py.cc index 92461e7..0c9cc61 100644 --- a/src/convert-dg-to-py.cc +++ b/src/convert-dg-to-py.cc @@ -33,11 +33,11 @@ namespace dynamicgraph { void fillMatrixRow(Matrix& m, unsigned iRow, PyObject* tuple) { - if (PyTuple_Size(tuple) != (int)m.nbCols()) { + if (PyTuple_Size(tuple) != (int)m.cols()) { throw ExceptionPython(ExceptionPython::MATRIX_PARSING, "lines of matrix have different sizes."); } - for (unsigned int iCol=0; iCol < m.nbCols(); iCol++) { + for (int iCol=0; iCol < m.cols(); iCol++) { PyObject* pyDouble = PyTuple_GetItem(tuple, iCol); if (PyFloat_Check(pyDouble)) m(iRow, iCol) = PyFloat_AsDouble(pyDouble); @@ -185,7 +185,7 @@ namespace dynamicgraph { PyObject* vectorToPython(const Vector& vector) { PyObject* tuple = PyTuple_New(vector.size()); - for (unsigned int index = 0; index < vector.size(); index++) { + for (int index = 0; index < vector.size() ; index++) { PyObject* pyDouble = PyFloat_FromDouble(vector(index)); PyTuple_SET_ITEM(tuple, index, pyDouble); } @@ -194,10 +194,10 @@ namespace dynamicgraph { PyObject* matrixToPython(const Matrix& matrix) { - PyObject* tuple = PyTuple_New(matrix.nbRows()); - for (unsigned int iRow = 0; iRow < matrix.nbRows(); iRow++) { - PyObject* row = PyTuple_New(matrix.nbCols()); - for (unsigned iCol=0; iCol < matrix.nbCols(); iCol++) { + PyObject* tuple = PyTuple_New(matrix.rows()); + for (int iRow = 0; iRow < matrix.rows(); iRow++) { + PyObject* row = PyTuple_New(matrix.cols()); + for (int iCol=0; iCol < matrix.cols(); iCol++) { PyObject* pyDouble = PyFloat_FromDouble(matrix(iRow, iCol)); PyTuple_SET_ITEM(row, iCol, pyDouble); } @@ -217,7 +217,6 @@ namespace dynamicgraph { std::string stringValue; Vector vectorValue; Matrix matrixValue; - switch(value.type()) { case (Value::BOOL) : boolValue = value.value(); diff --git a/src/entity-py.cc b/src/entity-py.cc index 24837f4..eef09a6 100644 --- a/src/entity-py.cc +++ b/src/entity-py.cc @@ -22,6 +22,7 @@ #include <dynamic-graph/command.h> #include <dynamic-graph/value.h> #include <dynamic-graph/pool.h> +#include <dynamic-graph/linear-algebra.h> #include "convert-dg-to-py.hh" #include "exception.hh" @@ -214,11 +215,9 @@ namespace dynamicgraph { PyObject* argTuple = NULL; char* commandName = NULL; void* pointer = NULL; - if (!PyArg_ParseTuple(args, "OsO", &object, &commandName, &argTuple)) { return NULL; } - // Retrieve the entity instance if (!PyCObject_Check(object)) { PyErr_SetString(PyExc_TypeError, "first argument is not an object"); @@ -226,17 +225,14 @@ namespace dynamicgraph { } pointer = PyCObject_AsVoidPtr(object); Entity* entity = (Entity*)pointer; - // Retrieve the argument tuple if (!PyTuple_Check(argTuple)) { PyErr_SetString(PyExc_TypeError, "third argument is not a tuple"); return NULL; } Py_ssize_t size = PyTuple_Size(argTuple); - std::map<const std::string, Command*> commandMap = entity->getNewStyleCommandMap(); - if (commandMap.count(std::string(commandName)) != 1) { std::ostringstream oss; oss << "'" << entity->getName() << "' entity has no command '" @@ -255,7 +251,6 @@ namespace dynamicgraph { PyErr_SetString(dgpyError, ss.str().c_str()); return NULL; } - std::vector<Value> valueVector; for (Py_ssize_t iParam=0; iParam<size; iParam++) { PyObject* PyValue = PyTuple_GetItem(argTuple, iParam); -- GitLab