gtsam/python
kartik arcot ce847d4ff9 python bindings don't use boost 2023-01-22 08:40:02 -08:00
..
gtsam shared_ptr, make_shared, allocate_shared 2023-01-22 08:40:02 -08:00
gtsam_unstable added test for the wrapper 2022-04-06 09:27:57 +03:00
CMakeLists.txt python bindings don't use boost 2023-01-22 08:40:02 -08:00
CustomFactors.md Fix example in docs 2021-06-05 19:35:32 -04:00
MANIFEST.in updated python setup files so that example data is loaded correctly 2021-01-04 13:13:26 -05:00
README.md added wrapper for ProjectionFactorRollingShutter 2022-04-05 08:51:03 +03:00
requirements.txt Add supplimentary files used by the new pybind11 wrapper 2020-08-18 11:03:51 -04:00
setup.py.in updated python setup files so that example data is loaded correctly 2021-01-04 13:13:26 -05:00

README.md

README

Python Wrapper

This is the Python wrapper around the GTSAM C++ library. We use our custom wrap library to generate the bindings to the underlying C++ code.

For instructions on updating the version of the wrap library included in GTSAM to the latest version, please refer to the wrap README

Requirements

  • Cmake >= 3.15

  • If you want to build the GTSAM python library for a specific python version (eg 3.6), use the -DGTSAM_PYTHON_VERSION=3.6 option when running cmake otherwise the default interpreter will be used.

  • If the interpreter is inside an environment (such as an anaconda environment or virtualenv environment), then the environment should be active while building GTSAM.

  • This wrapper needs pyparsing(>=2.4.2), and numpy(>=1.11.0). These can be installed as follows:

    pip install -r <gtsam_folder>/python/requirements.txt
    

Install

  • Run cmake with the GTSAM_BUILD_PYTHON cmake flag enabled to configure building the wrapper. The wrapped module will be built and copied to the directory <PROJECT_BINARY_DIR>/python. For example, if your local Python version is 3.6.10, then you should run:

    cmake .. -DGTSAM_BUILD_PYTHON=1 -DGTSAM_PYTHON_VERSION=3.6.10
    

    If you do not have TBB installed, you should also provide the argument -DGTSAM_WITH_TBB=OFF.

  • Build GTSAM and the wrapper with make (or ninja if you use -GNinja).

  • To install, simply run make python-install (ninja python-install).

    • The same command can be used to install into a virtual environment if it is active.
    • NOTE: if you don't want GTSAM to install to a system directory such as /usr/local, pass -DCMAKE_INSTALL_PREFIX="./install" to cmake to install GTSAM to a subdirectory of the build directory.
  • You can also directly run make python-install without running make, and it will compile all the dependencies accordingly.

Unit Tests

The Python toolbox also has a small set of unit tests located in the test directory. To run them, use make python-test.

Utils

TODO

Examples

TODO

Writing Your Own Scripts

See the tests for examples.

Some Important Notes:

  • Vector/Matrix:

    • GTSAM expects double-precision floating point vectors and matrices. Hence, you should pass numpy matrices with dtype=float, or float64, to avoid any conversion needed.
    • Also, GTSAM expects column-major matrices, unlike the default storage scheme in numpy. But this is only performance-related as pybind11 should translate them when needed. However, this will result a copy if your matrix is not in the expected type and storage order.

Wrapping Custom GTSAM-based Project

Please refer to the template project and the corresponding tutorial available here.