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)
|
|
;
|
|
|
|
} |