Add wrapping and tests

release/4.3a0
Fan Jiang 2021-10-08 16:06:09 -04:00
parent c2f7827748
commit 64bbc79bf6
5 changed files with 43 additions and 8 deletions

View File

@ -5,20 +5,37 @@
namespace gtsam { namespace gtsam {
// typedef pair<size_t, size_t> DiscreteKey; #include<gtsam/discrete/DiscreteKey.h>
class DiscreteKey {};
class DiscreteKeys {
DiscreteKeys();
size_t size() const;
bool empty() const;
gtsam::DiscreteKey at(size_t n) const;
void push_back(const gtsam::DiscreteKey& point_pair);
};
#include <gtsam/discrete/DiscreteFactor.h> #include <gtsam/discrete/DiscreteFactor.h>
class DiscreteFactor { class DiscreteFactor {
}; };
#include <gtsam/discrete/Signature.h>
class Signature {
Signature(gtsam::DiscreteKey key);
};
#include <gtsam/discrete/DecisionTreeFactor.h> #include <gtsam/discrete/DecisionTreeFactor.h>
class DecisionTreeFactor { class DecisionTreeFactor: gtsam::DiscreteFactor {
DecisionTreeFactor(); DecisionTreeFactor();
}; };
#include <gtsam/discrete/DiscreteFactorGraph.h> #include <gtsam/discrete/DiscreteFactorGraph.h>
class DiscreteFactorGraph { class DiscreteFactorGraph {
DiscreteFactorGraph(); DiscreteFactorGraph();
void add(const gtsam::DiscreteKey& j, string table);
void add(const gtsam::DiscreteKeys& j, string table);
void print(string s = "") const;
}; };
} // namespace gtsam } // namespace gtsam

View File

@ -49,6 +49,7 @@ set(ignore
gtsam::Pose3Vector gtsam::Pose3Vector
gtsam::KeyVector gtsam::KeyVector
gtsam::BinaryMeasurementsUnit3 gtsam::BinaryMeasurementsUnit3
gtsam::DiscreteKey
gtsam::KeyPairDoubleMap) gtsam::KeyPairDoubleMap)
set(interface_headers set(interface_headers

View File

@ -12,3 +12,5 @@
*/ */
#include <pybind11/stl.h> #include <pybind11/stl.h>
PYBIND11_MAKE_OPAQUE(gtsam::DiscreteKeys);

View File

@ -10,3 +10,6 @@
* with `PYBIND11_MAKE_OPAQUE` this allows the types to be modified with Python, * with `PYBIND11_MAKE_OPAQUE` this allows the types to be modified with Python,
* and saves one copy operation. * and saves one copy operation.
*/ */
// Seems this is not a good idea with inherited stl
//py::bind_vector<std::vector<gtsam::DiscreteKey>>(m_, "DiscreteKeys");

View File

@ -31,20 +31,32 @@ from gtsam.utils.test_case import GtsamTestCase
# using namespace std # using namespace std
# using namespace gtsam # using namespace gtsam
from gtsam import DiscreteKeys, DiscreteFactorGraph
class TestDiscreteFactorGraph(GtsamTestCase): class TestDiscreteFactorGraph(GtsamTestCase):
"""Tests for Discrete Factor Graphs.""" """Tests for Discrete Factor Graphs."""
def test_evaluation(self): def test_evaluation(self):
# Three keys P1 and P2 # Three keys P1 and P2
P1=DiscreteKey(0,2) P1 = (0, 2)
P2=DiscreteKey(1,2) P2 = (1, 2)
P3=DiscreteKey(2,3) P3 = (2, 3)
# Create the DiscreteFactorGraph # Create the DiscreteFactorGraph
graph = DiscreteFactorGraph() graph = DiscreteFactorGraph()
# graph.add(P1, "0.9 0.3") graph.add(P1, "0.9 0.3")
# graph.add(P2, "0.9 0.6") graph.add(P2, "0.9 0.6")
# graph.add(P1 & P2, "4 1 10 4")
# NOTE(fan): originally is an operator overload in C++ &
def discrete_and(a, b):
dks = DiscreteKeys()
dks.push_back(a)
dks.push_back(b)
return dks
graph.add(discrete_and(P1, P2), "4 1 10 4")
print(graph)
# # Instantiate Values # # Instantiate Values
# DiscreteFactor::Values values # DiscreteFactor::Values values