From 30aba4b16742eaba394f5b1839ae2ba174c1a290 Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Mon, 23 Aug 2021 13:21:35 +0200 Subject: [PATCH 1/4] cmake: install package.xml --- CMakeLists.txt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 998b689..355d3d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,7 +46,7 @@ EXPORT_BOOST_DEFAULT_OPTIONS() IF(BUILD_WITH_CPPAD_CODEGEN_BINDINGS) ADD_PROJECT_DEPENDENCY(cppadcg 2.4.1 REQUIRED PKG_CONFIG_REQUIRES "cppadcg >= 2.4.1") # CppADCodeGen 2.4.1 is the first version to check the minimal version of CppAD - ADD_DEFINITIONS(-DPYCPPAD_WITH_CPPAD_CODEGEN_BINDINGS) + ADD_DEFINITIONS(-DPYCPPAD_WITH_CPPAD_CODEGEN_BINDINGS) ENDIF(BUILD_WITH_CPPAD_CODEGEN_BINDINGS) ADD_PROJECT_DEPENDENCY(cppad 20180000.0 REQUIRED PKG_CONFIG_REQUIRES "cppad >= 20180000.0") @@ -89,18 +89,18 @@ ENDIF(SUFFIX_SO_VERSION) TARGET_LINK_BOOST_PYTHON(${PROJECT_NAME} PUBLIC) TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC ${cppad_LIBRARY} eigenpy::eigenpy) IF(BUILD_WITH_CPPAD_CODEGEN_BINDINGS) - TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} + TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} SYSTEM PUBLIC ${cppadcg_INCLUDE_DIR} ) TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC ${CMAKE_DL_LIBS}) ENDIF(BUILD_WITH_CPPAD_CODEGEN_BINDINGS) -TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} SYSTEM PUBLIC ${Boost_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIR} - ${PYTHON_INCLUDE_DIRS} + ${PYTHON_INCLUDE_DIRS} $) TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PUBLIC $) @@ -120,3 +120,6 @@ ADD_SUBDIRECTORY(python) PKG_CONFIG_APPEND_LIBS(${PROJECT_NAME}) PKG_CONFIG_APPEND_CFLAGS("-I${PYTHON_INCLUDE_DIRS}") PKG_CONFIG_APPEND_BOOST_LIBS(${BOOST_COMPONENTS}) + +# Install catkin package.xml +INSTALL(FILES package.xml DESTINATION share/${PROJECT_NAME}) From 918d1e6d7fefe9f28e31c080d311eed5e3b08a1b Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Mon, 23 Aug 2021 13:26:07 +0200 Subject: [PATCH 2/4] cmake: check examples --- CMakeLists.txt | 1 + example/CMakeLists.txt | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 example/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 355d3d7..a838ac0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -116,6 +116,7 @@ ADD_HEADER_GROUP(${PROJECT_NAME}_HEADERS) ADD_SOURCE_GROUP(${PROJECT_NAME}_SOURCES) ADD_SUBDIRECTORY(python) +ADD_SUBDIRECTORY(example) PKG_CONFIG_APPEND_LIBS(${PROJECT_NAME}) PKG_CONFIG_APPEND_CFLAGS("-I${PYTHON_INCLUDE_DIRS}") diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt new file mode 100644 index 0000000..b7678c2 --- /dev/null +++ b/example/CMakeLists.txt @@ -0,0 +1,2 @@ +ADD_PYTHON_UNIT_TEST("add_eq" "example/add_eq.py" "python") +ADD_PYTHON_UNIT_TEST("cppad_type" "example/cppad_type.py" "python") From 946d66dc5c2c5853757eedf1dc4f300f529c87fe Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Mon, 23 Aug 2021 13:27:10 +0200 Subject: [PATCH 3/4] cmake: set INSTALL_RPATH for python on linux ref. https://github.com/stack-of-tasks/eigenpy/pull/241 --- python/CMakeLists.txt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 6adb789..57182f7 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -3,7 +3,7 @@ # # --- LIBRARY --- # -SET(PYWRAP ${PROJECT_NAME}_pywrap) +SET(PYWRAP ${PROJECT_NAME}_pywrap) SET(PYWRAP ${PYWRAP} PARENT_SCOPE) MAKE_DIRECTORY("${${PROJECT_NAME}_BINARY_DIR}/python/${PROJECT_NAME}") @@ -27,16 +27,20 @@ ELSE() ENDIF() SET_TARGET_PROPERTIES(${PYWRAP} - PROPERTIES + PROPERTIES PREFIX "" SUFFIX ${PYTHON_EXT_SUFFIX} OUTPUT_NAME "${PROJECT_NAME}" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/python/${PROJECT_NAME}" ) +IF(UNIX AND NOT APPLE) + SET_TARGET_PROPERTIES(${PYWRAP} PROPERTIES INSTALL_RPATH "\$ORIGIN/../../..") +ENDIF() + INSTALL(TARGETS ${PYWRAP} DESTINATION ${${PYWRAP}_INSTALL_DIR}) -# --- INSTALL SCRIPTS +# --- INSTALL SCRIPTS SET(PYTHON_FILES __init__.py ) @@ -47,4 +51,3 @@ FOREACH(python ${PYTHON_FILES}) "${CMAKE_CURRENT_SOURCE_DIR}/pycppad/${python}" DESTINATION ${${PYWRAP}_INSTALL_DIR}) ENDFOREACH(python) - From a063dcc4c0925a9c389053cbe327a32c912c1e11 Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Mon, 23 Aug 2021 13:33:45 +0200 Subject: [PATCH 4/4] example: remove input Otherwise the test won't finish. While here, fix style --- example/add_eq.py | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/example/add_eq.py b/example/add_eq.py index 652c4d5..2b594ea 100644 --- a/example/add_eq.py +++ b/example/add_eq.py @@ -3,48 +3,51 @@ from pycppad import AD, Independent, ADFun, Value import numpy as np - # domain space vector -n = 1; +n = 1 x0 = 0.5 -x = np.array([AD(x0),]*n) +x = np.array([AD(x0)] * n) # declare independent variables and start tape recording Independent(x) # range space vector -m = 2; -y = np.zeros((m,),dtype=AD) -y[0] = x[0]; # initial value -y[0] += AD(2); # AD += int -y[0] += AD(4.); # AD += double +m = 2 +y = np.zeros(m, dtype=AD) +y[0] = x[0] +# initial value +y[0] += AD(2) +# AD += int +y[0] += AD(4.) +# AD += double y[0] += x[0] -y[1] = y[0]; # use the result of a compound assignment +y[1] = y[0] +# use the result of a compound assignment # create f: x -> y and stop tape recording -f = ADFun(x,y); -input("raw_input") +f = ADFun(x, y) +# input("raw_input") -#f.optimize("no_compare_op") +# f.optimize("no_compare_op") -assert(Value(y[0]) == x0+2.+4.+x0) -assert(Value(y[1]) == Value(y[0])) +assert Value(y[0]) == x0 + 2. + 4. + x0 +assert Value(y[1]) == Value(y[0]) dx = np.zeros(n) dy = np.zeros(m) dx[0] = 1. -dy = f.Forward(1 ,dx) -assert(dy[0] == 2.) -assert(dy[1] == 2.) +dy = f.Forward(1, dx) +assert dy[0] == 2. +assert dy[1] == 2. # reverse computation of derivative of y[0] -w = np.zeros((m,)) -dw = np.zeros((n),) +w = np.zeros(m) +dw = np.zeros(n) w[0] = 1. w[1] = 0. dw = f.Reverse(1, w) -assert(dw[0] == 2.) +assert dw[0] == 2.