| 
									
										
										
										
											2015-11-20 01:31:38 +08:00
										 |  |  | /* ----------------------------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-11 22:39:48 +08:00
										 |  |  |  * GTSAM Copyright 2010, Georgia Tech Research Corporation, | 
					
						
							| 
									
										
										
										
											2015-11-20 01:31:38 +08:00
										 |  |  |  * Atlanta, Georgia 30332-0415 | 
					
						
							|  |  |  |  * All Rights Reserved | 
					
						
							|  |  |  |  * Authors: Frank Dellaert, et al. (see THANKS for the full author list) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * See LICENSE for the license information | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * -------------------------------------------------------------------------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * @brief exports virtual class NonlinearFactor to python | 
					
						
							|  |  |  |  * @author Ellon Paiva Mendes (LAAS-CNRS) | 
					
						
							|  |  |  |  **/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <boost/python.hpp>
 | 
					
						
							| 
									
										
										
										
											2015-11-21 04:40:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define NO_IMPORT_ARRAY
 | 
					
						
							|  |  |  | #include <numpy_eigen/NumpyEigenConverter.hpp>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-20 01:31:38 +08:00
										 |  |  | #include "gtsam/nonlinear/NonlinearFactor.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using namespace boost::python; | 
					
						
							|  |  |  | using namespace gtsam; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Wrap around pure virtual class NonlinearFactor.
 | 
					
						
							| 
									
										
										
										
											2019-02-11 22:39:48 +08:00
										 |  |  | // All pure virtual methods should be wrapped. Non-pure may be wrapped if we want to mimic the
 | 
					
						
							| 
									
										
										
										
											2015-11-20 01:31:38 +08:00
										 |  |  | // overloading through inheritance in Python.
 | 
					
						
							|  |  |  | // See: http://www.boost.org/doc/libs/1_59_0/libs/python/doc/tutorial/doc/html/python/exposing.html#python.class_virtual_functions
 | 
					
						
							| 
									
										
										
										
											2016-06-19 14:13:59 +08:00
										 |  |  | struct NonlinearFactorWrap : NonlinearFactor, wrapper<NonlinearFactor> | 
					
						
							| 
									
										
										
										
											2015-11-20 01:31:38 +08:00
										 |  |  | { | 
					
						
							|  |  |  |   double error (const Values & values) const { | 
					
						
							|  |  |  |     return this->get_override("error")(values); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   size_t dim () const { | 
					
						
							|  |  |  |     return this->get_override("dim")(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   boost::shared_ptr<GaussianFactor> linearize(const Values & values) const { | 
					
						
							|  |  |  |     return this->get_override("linearize")(values); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-19 14:13:59 +08:00
										 |  |  | // Similarly for NoiseModelFactor:
 | 
					
						
							|  |  |  | struct NoiseModelFactorWrap : NoiseModelFactor, wrapper<NoiseModelFactor> { | 
					
						
							|  |  |  |   // NOTE(frank): Add all these again as I can't figure out how to derive
 | 
					
						
							|  |  |  |   double error (const Values & values) const { | 
					
						
							|  |  |  |     return this->get_override("error")(values); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   size_t dim () const { | 
					
						
							|  |  |  |     return this->get_override("dim")(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   boost::shared_ptr<GaussianFactor> linearize(const Values & values) const { | 
					
						
							|  |  |  |     return this->get_override("linearize")(values); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   Vector unwhitenedError(const Values& x, | 
					
						
							|  |  |  |                          boost::optional<std::vector<Matrix>&> H = boost::none) const { | 
					
						
							|  |  |  |     return this->get_override("unwhitenedError")(x, H); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2015-11-20 01:31:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-19 14:13:59 +08:00
										 |  |  | void exportNonlinearFactor() { | 
					
						
							|  |  |  |   class_<NonlinearFactorWrap, boost::noncopyable>("NonlinearFactor") | 
					
						
							|  |  |  |       .def("error", pure_virtual(&NonlinearFactor::error)) | 
					
						
							|  |  |  |       .def("dim", pure_virtual(&NonlinearFactor::dim)) | 
					
						
							|  |  |  |       .def("linearize", pure_virtual(&NonlinearFactor::linearize)); | 
					
						
							|  |  |  |   register_ptr_to_python<boost::shared_ptr<NonlinearFactor> >(); | 
					
						
							| 
									
										
										
										
											2015-11-20 01:31:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-19 14:13:59 +08:00
										 |  |  |   class_<NoiseModelFactorWrap, boost::noncopyable>("NoiseModelFactor") | 
					
						
							|  |  |  |       .def("error", pure_virtual(&NoiseModelFactor::error)) | 
					
						
							|  |  |  |       .def("dim", pure_virtual(&NoiseModelFactor::dim)) | 
					
						
							|  |  |  |       .def("linearize", pure_virtual(&NoiseModelFactor::linearize)) | 
					
						
							|  |  |  |       .def("unwhitenedError", pure_virtual(&NoiseModelFactor::unwhitenedError)); | 
					
						
							|  |  |  |   register_ptr_to_python<boost::shared_ptr<NoiseModelFactor> >(); | 
					
						
							|  |  |  | } |