From 40e5a1a6abb6cc4e937dc8e876d627835d7b2313 Mon Sep 17 00:00:00 2001 From: Frank Dellaert Date: Sun, 4 Jun 2023 22:38:56 +0100 Subject: [PATCH] Derive factors from gtsam::Factor --- gtsam/discrete/discrete.i | 6 +++--- gtsam/hybrid/hybrid.i | 5 +---- gtsam/inference/inference.i | 11 +++++++++++ gtsam/linear/linear.i | 10 +--------- gtsam/nonlinear/nonlinear.i | 5 +---- gtsam/symbolic/symbolic.i | 7 ++++--- 6 files changed, 21 insertions(+), 23 deletions(-) diff --git a/gtsam/discrete/discrete.i b/gtsam/discrete/discrete.i index a89d71b24..b6c6ee2cd 100644 --- a/gtsam/discrete/discrete.i +++ b/gtsam/discrete/discrete.i @@ -31,13 +31,11 @@ string html(const gtsam::DiscreteValues& values, std::map> names); #include -class DiscreteFactor { +virtual class DiscreteFactor : gtsam::Factor { void print(string s = "DiscreteFactor\n", const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const; bool equals(const gtsam::DiscreteFactor& other, double tol = 1e-9) const; - bool empty() const; - size_t size() const; double operator()(const gtsam::DiscreteValues& values) const; }; @@ -225,6 +223,8 @@ class DiscreteBayesTree { bool empty() const; const DiscreteBayesTreeClique* operator[](size_t j) const; + double evaluate(const gtsam::DiscreteValues& values) const; + string dot(const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const; void saveGraph(string s, diff --git a/gtsam/hybrid/hybrid.i b/gtsam/hybrid/hybrid.i index 7cc93d4b0..2855dfb5e 100644 --- a/gtsam/hybrid/hybrid.i +++ b/gtsam/hybrid/hybrid.i @@ -35,14 +35,11 @@ class HybridValues { }; #include -virtual class HybridFactor { +virtual class HybridFactor : gtsam::Factor { void print(string s = "HybridFactor\n", const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const; bool equals(const gtsam::HybridFactor& other, double tol = 1e-9) const; - bool empty() const; - size_t size() const; - gtsam::KeyVector keys() const; // Standard interface: double error(const gtsam::HybridValues &values) const; diff --git a/gtsam/inference/inference.i b/gtsam/inference/inference.i index d4c90e356..1f4f88e2b 100644 --- a/gtsam/inference/inference.i +++ b/gtsam/inference/inference.i @@ -197,4 +197,15 @@ class VariableIndex { size_t nEntries() const; }; +#include +virtual class Factor { + void print(string s = "Factor\n", const gtsam::KeyFormatter& keyFormatter = + gtsam::DefaultKeyFormatter) const; + void printKeys(string s = "") const; + bool equals(const gtsam::Factor& other, double tol = 1e-9) const; + bool empty() const; + size_t size() const; + gtsam::KeyVector keys() const; +}; + } // namespace gtsam diff --git a/gtsam/linear/linear.i b/gtsam/linear/linear.i index c0230f1c2..cd5000d9f 100644 --- a/gtsam/linear/linear.i +++ b/gtsam/linear/linear.i @@ -261,8 +261,7 @@ class VectorValues { }; #include -virtual class GaussianFactor { - gtsam::KeyVector keys() const; +virtual class GaussianFactor : gtsam::Factor { void print(string s = "", const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const; bool equals(const gtsam::GaussianFactor& lf, double tol) const; @@ -273,8 +272,6 @@ virtual class GaussianFactor { Matrix information() const; Matrix augmentedJacobian() const; pair jacobian() const; - size_t size() const; - bool empty() const; }; #include @@ -301,10 +298,7 @@ virtual class JacobianFactor : gtsam::GaussianFactor { //Testable void print(string s = "", const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const; - void printKeys(string s) const; - gtsam::KeyVector& keys() const; bool equals(const gtsam::GaussianFactor& lf, double tol) const; - size_t size() const; Vector unweighted_error(const gtsam::VectorValues& c) const; Vector error_vector(const gtsam::VectorValues& c) const; double error(const gtsam::VectorValues& c) const; @@ -346,10 +340,8 @@ virtual class HessianFactor : gtsam::GaussianFactor { HessianFactor(const gtsam::GaussianFactorGraph& factors); //Testable - size_t size() const; void print(string s = "", const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const; - void printKeys(string s) const; bool equals(const gtsam::GaussianFactor& lf, double tol) const; double error(const gtsam::VectorValues& c) const; diff --git a/gtsam/nonlinear/nonlinear.i b/gtsam/nonlinear/nonlinear.i index 80e87a5fa..2fea0f9fd 100644 --- a/gtsam/nonlinear/nonlinear.i +++ b/gtsam/nonlinear/nonlinear.i @@ -110,13 +110,10 @@ class NonlinearFactorGraph { }; #include -virtual class NonlinearFactor { +virtual class NonlinearFactor : gtsam::Factor { // Factor base class - size_t size() const; - gtsam::KeyVector keys() const; void print(string s = "", const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const; - void printKeys(string s) const; // NonlinearFactor bool equals(const gtsam::NonlinearFactor& other, double tol) const; double error(const gtsam::Values& c) const; diff --git a/gtsam/symbolic/symbolic.i b/gtsam/symbolic/symbolic.i index 1f1d4b48f..839e75672 100644 --- a/gtsam/symbolic/symbolic.i +++ b/gtsam/symbolic/symbolic.i @@ -4,7 +4,7 @@ namespace gtsam { #include -virtual class SymbolicFactor { +virtual class SymbolicFactor : gtsam::Factor { // Standard Constructors and Named Constructors SymbolicFactor(const gtsam::SymbolicFactor& f); SymbolicFactor(); @@ -18,12 +18,10 @@ virtual class SymbolicFactor { static gtsam::SymbolicFactor FromKeys(const gtsam::KeyVector& js); // From Factor - size_t size() const; void print(string s = "SymbolicFactor", const gtsam::KeyFormatter& keyFormatter = gtsam::DefaultKeyFormatter) const; bool equals(const gtsam::SymbolicFactor& other, double tol) const; - gtsam::KeyVector keys(); }; #include @@ -161,6 +159,9 @@ class SymbolicBayesTree { gtsam::SymbolicConditional* marginalFactor(size_t key) const; gtsam::SymbolicFactorGraph* joint(size_t key1, size_t key2) const; gtsam::SymbolicBayesNet* jointBayesNet(size_t key1, size_t key2) const; + + string dot(const gtsam::KeyFormatter& keyFormatter = + gtsam::DefaultKeyFormatter) const; }; class SymbolicBayesTreeClique {