bae34fac8 Merge pull request #82 from borglab/feature/templated-base-class 6fd4053dd Merge pull request #84 from borglab/feature/print_redirectstdout 349784a38 comment about redirecting stdout dc4fd9371 updated docs b43f7c6d7 Merge pull request #80 from borglab/feature/multiple_interface_files 7d8c3faa7 redirect std::out for print_() a812a6110 print redirect stdout unit test 97f3b6994 support for templated base class 3e16564e3 test cases for templated base class 7b9d080f5 Revert "unit test for printing with keyformatter" 45e203195 Revert "funcitonal print passes unit test" 8b5d66f03 Revert "include functional and iostream" 34bfbec21 Revert "delete debug statement" dbe661c93 Revert "add includes to the example tpl file." f47e23f1a Revert "Revert "function to concatenate multiple header files together"" e667e2095 Revert "function to concatenate multiple header files together" 600c77bf4 add includes to the example tpl file. d5caca20e delete debug statement 4a554edb8 include functional and iostream e8ad2c26f funcitonal print passes unit test 077d5c4e7 unit test for printing with keyformatter d5a1e6dff function to concatenate multiple header files together git-subtree-dir: wrap git-subtree-split: bae34fac828acb6b17bfe37ebe78f7c9a156ed5a |
||
---|---|---|
.github/workflows | ||
cmake | ||
docs | ||
gtwrap | ||
pybind11 | ||
scripts | ||
sphinx | ||
templates | ||
tests | ||
utilities | ||
.gitignore | ||
CMakeLists.txt | ||
DOCS.md | ||
LICENSE | ||
README.md | ||
matlab.h | ||
requirements.txt | ||
setup.py |
README.md
WRAP
The wrap library wraps the GTSAM library into a Python library or MATLAB toolbox.
It was designed to be more general than just wrapping GTSAM. For notes on creating a wrap interface, see gtsam.h
for what features can be wrapped into a toolbox, as well as the current state of the toolbox for GTSAM.
Prerequisites
Pybind11
and pyparsing
- This library uses
pybind11
, which is included as a subdirectory in GTSAM. - The
interface_parser.py
in this library usespyparsing
to parse the interface filegtsam.h
. Please install it first in your current Python environment before attempting the build.
python3 -m pip install pyparsing
Getting Started
Clone this repository to your local machine and perform the standard CMake install:
mkdir build && cd build
cmake ..
make install # use sudo if needed
Using wrap
in your project is straightforward from here. In your CMakeLists.txt
file, you just need to add the following:
find_package(gtwrap)
pybind_wrap(${PROJECT_NAME}_py # target
${PROJECT_SOURCE_DIR}/cpp/${PROJECT_NAME}.h # interface header file
"${PROJECT_NAME}.cpp" # the generated cpp
"${PROJECT_NAME}" # module_name
"${PROJECT_MODULE_NAME}" # top namespace in the cpp file e.g. gtsam
"${ignore}" # ignore classes
${PROJECT_BINARY_DIR}/${PROJECT_NAME}.tpl # the wrapping template file
${PROJECT_NAME} # libs
"${PROJECT_NAME}" # dependencies
ON # use boost
)
For more information, please follow our tutorial.
Documentation
Documentation for wrapping C++ code can be found here.
Python Wrapper
WARNING: On macOS, you have to statically build GTSAM to use the wrapper.
-
Set
GTSAM_BUILD_PYTHON=ON
while configuring the build withcmake
. -
What you can do in the
build
folder:-
Just run python then import GTSAM and play around:
import gtsam gtsam.__dir__()
-
Run the unittests:
python -m unittest discover
-
Edit the unittests in
python/gtsam/*.py
and simply rerun the test. They were symlinked to<build_folder>/gtsam/*.py
to facilitate fast development.python -m unittest gtsam/tests/test_Pose3.py
- NOTE: You might need to re-runcmake ..
if files are deleted or added.
-
-
Do
make install
andcd <gtsam_install_folder>/python
. Here, you can:- Run the unittests:
python setup.py test
- Install
gtsam
to your current Python environment.python setup.py install
- NOTE: It's a good idea to create a virtual environment otherwise it will be installed in your system Python's site-packages.
- Run the unittests:
Matlab Wrapper
In the CMake, simply include the MatlabWrap.cmake
file.
include(MatlabWrap)
This cmake file defines functions for generating MATLAB wrappers.
wrap_and_install_library(interfaceHeader linkLibraries extraIncludeDirs extraMexFlags)
Generates wrap code and compiles the wrapper.
Usage example:
`wrap_and_install_library("lba.h" "" "" "")`
Arguments:
interfaceHeader
: The relative or absolute path to the wrapper interface definition file.linkLibraries
: Any additional libraries to link. Your project library (e.g.lba
), libraries it depends on, and any necessary MATLAB libraries will be linked automatically. So normally, leave this empty.extraIncludeDirs
: Any additional include paths required by dependent libraries that have not already been added by include_directories. Again, normally, leave this empty.extraMexFlags
: Any additional flags to pass to the compiler when building the wrap code. Normally, leave this empty.