77 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
| 
 | |
| # 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
 | |
| 
 | |
| 1. This library uses `pybind11`, which is included as a subdirectory in GTSAM.
 | |
| 2. The `interface_parser.py` in this library uses `pyparsing` to parse the interface file `gtsam.h`. Please install it first in your current Python environment before attempting the build.
 | |
|     ```
 | |
|     python3 -m pip install pyparsing
 | |
|     ```
 | |
| 
 | |
| ## GTSAM Python wrapper
 | |
| 
 | |
| **WARNING: On macOS, you have to statically build GTSAM to use the wrapper.**
 | |
| 
 | |
| 1. Set `GTSAM_BUILD_PYTHON=ON` while configuring the build with `cmake`.
 | |
| 1. What you can do in the `build` folder:
 | |
|     1. Just run python then import GTSAM and play around:
 | |
|         ```
 | |
| 
 | |
|         import gtsam
 | |
|         gtsam.__dir__()
 | |
|         ```
 | |
| 
 | |
|     1. Run the unittests:
 | |
|         ```
 | |
|         python -m unittest discover
 | |
|         ```
 | |
|     1. 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-run `cmake ..` if files are deleted or added.
 | |
| 1. Do `make install` and `cd <gtsam_install_folder>/python`. Here, you can:
 | |
|     1. Run the unittests:
 | |
|         ```
 | |
|         python setup.py test
 | |
|         ```
 | |
|     2. 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.
 | |
| 
 | |
| 
 | |
| ## Old GTSAM Wrapper
 | |
| 
 | |
| *Outdated note from the original wrap.*
 | |
| 
 | |
| TODO: Update this.
 | |
| 
 | |
| It was designed to be more general than just wrapping GTSAM, but a small amount of GTSAM specific code exists in `matlab.h`, the include file that is included by the `mex` files. The GTSAM-specific functionality consists primarily of handling of Eigen Matrix and Vector classes.
 | |
| 
 | |
| 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. For more technical details on the interface, please read comments in `matlab.h`
 | |
| 
 | |
| Some good things to know:
 | |
| 
 | |
| OBJECT CREATION
 | |
| 
 | |
| - Classes are created by special constructors, e.g., `new_GaussianFactorGraph_.cpp`.
 | |
| 	These constructors are called from the MATLAB class `@GaussianFactorGraph`.
 | |
| 	`new_GaussianFactorGraph_` calls wrap_constructed in `matlab.h`, see documentation there
 | |
| 
 | |
| METHOD (AND CONSTRUCTOR) ARGUMENTS
 | |
| 
 | |
| - Simple argument types of methods, such as "double", will be converted in the
 | |
|   `mex` wrappers by calling unwrap<double>, defined in matlab.h
 | |
| - Vector and Matrix arguments are normally passed by reference in GTSAM, but
 | |
|   in `gtsam.h` you need to pretend they are passed by value, to trigger the
 | |
|   generation of the correct conversion routines `unwrap<Vector>` and `unwrap<Matrix>`
 | |
| - passing classes as arguments works, provided they are passed by reference.
 | |
| 	This triggers a call to unwrap_shared_ptr
 |