83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
 /* ----------------------------------------------------------------------------
 | 
						|
 | 
						|
 * GTSAM Copyright 2010, Georgia Tech Research Corporation, 
 | 
						|
 * 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 wraps Symbol class to python
 | 
						|
 * @author Ellon Paiva Mendes (LAAS-CNRS)
 | 
						|
 **/
 | 
						|
 | 
						|
#include <boost/python.hpp>
 | 
						|
#include <boost/make_shared.hpp>
 | 
						|
 | 
						|
#define NO_IMPORT_ARRAY
 | 
						|
#include <numpy_eigen/NumpyEigenConverter.hpp>
 | 
						|
 | 
						|
#include <sstream> // for stringstream
 | 
						|
 | 
						|
#include "gtsam/inference/Symbol.h"
 | 
						|
 | 
						|
using namespace boost::python;
 | 
						|
using namespace gtsam;
 | 
						|
 | 
						|
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(print_overloads, Symbol::print, 0, 1)
 | 
						|
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(equals_overloads, Symbol::equals, 1, 2)
 | 
						|
 | 
						|
// Helper function to allow building a symbol from a python string and a index.
 | 
						|
static boost::shared_ptr<Symbol> makeSymbol(const std::string &str, size_t j)
 | 
						|
{
 | 
						|
  if(str.size() > 1)
 | 
						|
  	throw std::runtime_error("string argument must have one character only");
 | 
						|
 | 
						|
  return boost::make_shared<Symbol>(str.at(0),j);
 | 
						|
}
 | 
						|
 | 
						|
// Helper function to print the symbol as "char-and-index" in python
 | 
						|
std::string selfToString(const Symbol & self)
 | 
						|
{
 | 
						|
	return (std::string)self;
 | 
						|
}
 | 
						|
 | 
						|
// Helper function to convert a Symbol to int using int() cast in python
 | 
						|
size_t selfToKey(const Symbol & self)
 | 
						|
{
 | 
						|
	return self.key();
 | 
						|
}
 | 
						|
 | 
						|
// Helper function to recover symbol's unsigned char as string
 | 
						|
std::string chrFromSelf(const Symbol & self)
 | 
						|
{
 | 
						|
	std::stringstream ss;
 | 
						|
	ss << self.chr();
 | 
						|
	return ss.str();
 | 
						|
}
 | 
						|
 | 
						|
void exportSymbol(){
 | 
						|
 | 
						|
class_<Symbol, boost::shared_ptr<Symbol> >("Symbol")
 | 
						|
  .def(init<>())
 | 
						|
  .def(init<const Symbol &>())
 | 
						|
  .def("__init__", make_constructor(makeSymbol))
 | 
						|
  .def(init<Key>())
 | 
						|
  .def("print", &Symbol::print, print_overloads(args("s")))
 | 
						|
  .def("equals", &Symbol::equals, equals_overloads(args("q","tol")))
 | 
						|
  .def("key", &Symbol::key)
 | 
						|
  .def("index", &Symbol::index)
 | 
						|
  .def(self < self)
 | 
						|
  .def(self == self)
 | 
						|
  .def(self == other<Key>())
 | 
						|
  .def(self != self)
 | 
						|
  .def(self != other<Key>())
 | 
						|
  .def("__repr__", &selfToString)
 | 
						|
  .def("__int__", &selfToKey)
 | 
						|
  .def("chr", &chrFromSelf)
 | 
						|
;
 | 
						|
 | 
						|
} |