Fixed warnings due to discrete. GTSAM now Wall-safe?
parent
617bf071cb
commit
0fe2d527f9
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#include <CppUnitLite/TestHarness.h>
|
#include <CppUnitLite/TestHarness.h>
|
||||||
|
|
||||||
|
#undef NDEBUG
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#undef GTSAM_ENABLE_DEBUG
|
#undef GTSAM_ENABLE_DEBUG
|
||||||
#include <gtsam/base/debug.h>
|
#include <gtsam/base/debug.h>
|
||||||
|
|
|
@ -94,7 +94,7 @@ namespace gtsam {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convert into a decisiontree
|
/// Convert into a decisiontree
|
||||||
virtual operator DecisionTreeFactor() const {
|
virtual DecisionTreeFactor toDecisionTreeFactor() const {
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ namespace gtsam {
|
||||||
/// Multiply in a DecisionTreeFactor and return the result as DecisionTreeFactor
|
/// Multiply in a DecisionTreeFactor and return the result as DecisionTreeFactor
|
||||||
virtual DecisionTreeFactor operator*(const DecisionTreeFactor&) const = 0;
|
virtual DecisionTreeFactor operator*(const DecisionTreeFactor&) const = 0;
|
||||||
|
|
||||||
virtual operator DecisionTreeFactor() const = 0;
|
virtual DecisionTreeFactor toDecisionTreeFactor() const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Permutes the factor, but for efficiency requires the permutation
|
* Permutes the factor, but for efficiency requires the permutation
|
||||||
|
|
|
@ -39,14 +39,14 @@ namespace gtsam {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
AllDiff::operator DecisionTreeFactor() const {
|
DecisionTreeFactor AllDiff::toDecisionTreeFactor() const {
|
||||||
// We will do this by converting the allDif into many BinaryAllDiff constraints
|
// We will do this by converting the allDif into many BinaryAllDiff constraints
|
||||||
DecisionTreeFactor converted;
|
DecisionTreeFactor converted;
|
||||||
size_t nrKeys = keys_.size();
|
size_t nrKeys = keys_.size();
|
||||||
for (size_t i1 = 0; i1 < nrKeys; i1++)
|
for (size_t i1 = 0; i1 < nrKeys; i1++)
|
||||||
for (size_t i2 = i1 + 1; i2 < nrKeys; i2++) {
|
for (size_t i2 = i1 + 1; i2 < nrKeys; i2++) {
|
||||||
BinaryAllDiff binary12(discreteKey(i1),discreteKey(i2));
|
BinaryAllDiff binary12(discreteKey(i1),discreteKey(i2));
|
||||||
converted = converted * binary12;
|
converted = converted * binary12.toDecisionTreeFactor();
|
||||||
}
|
}
|
||||||
return converted;
|
return converted;
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ namespace gtsam {
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
DecisionTreeFactor AllDiff::operator*(const DecisionTreeFactor& f) const {
|
DecisionTreeFactor AllDiff::operator*(const DecisionTreeFactor& f) const {
|
||||||
// TODO: can we do this more efficiently?
|
// TODO: can we do this more efficiently?
|
||||||
return DecisionTreeFactor(*this) * f;
|
return toDecisionTreeFactor() * f;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
|
|
@ -40,7 +40,7 @@ namespace gtsam {
|
||||||
virtual double operator()(const Values& values) const;
|
virtual double operator()(const Values& values) const;
|
||||||
|
|
||||||
/// Convert into a decisiontree, can be *very* expensive !
|
/// Convert into a decisiontree, can be *very* expensive !
|
||||||
virtual operator DecisionTreeFactor() const;
|
virtual DecisionTreeFactor toDecisionTreeFactor() const;
|
||||||
|
|
||||||
/// Multiply into a decisiontree
|
/// Multiply into a decisiontree
|
||||||
virtual DecisionTreeFactor operator*(const DecisionTreeFactor& f) const;
|
virtual DecisionTreeFactor operator*(const DecisionTreeFactor& f) const;
|
||||||
|
|
|
@ -44,7 +44,7 @@ namespace gtsam {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Convert into a decisiontree
|
/// Convert into a decisiontree
|
||||||
virtual operator DecisionTreeFactor() const {
|
virtual DecisionTreeFactor toDecisionTreeFactor() const {
|
||||||
DiscreteKeys keys;
|
DiscreteKeys keys;
|
||||||
keys.push_back(DiscreteKey(keys_[0],cardinality0_));
|
keys.push_back(DiscreteKey(keys_[0],cardinality0_));
|
||||||
keys.push_back(DiscreteKey(keys_[1],cardinality1_));
|
keys.push_back(DiscreteKey(keys_[1],cardinality1_));
|
||||||
|
@ -59,7 +59,7 @@ namespace gtsam {
|
||||||
/// Multiply into a decisiontree
|
/// Multiply into a decisiontree
|
||||||
virtual DecisionTreeFactor operator*(const DecisionTreeFactor& f) const {
|
virtual DecisionTreeFactor operator*(const DecisionTreeFactor& f) const {
|
||||||
// TODO: can we do this more efficiently?
|
// TODO: can we do this more efficiently?
|
||||||
return DecisionTreeFactor(*this) * f;
|
return toDecisionTreeFactor() * f;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -29,7 +29,7 @@ namespace gtsam {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
Domain::operator DecisionTreeFactor() const {
|
DecisionTreeFactor Domain::toDecisionTreeFactor() const {
|
||||||
DiscreteKeys keys;
|
DiscreteKeys keys;
|
||||||
keys += DiscreteKey(keys_[0],cardinality_);
|
keys += DiscreteKey(keys_[0],cardinality_);
|
||||||
vector<double> table;
|
vector<double> table;
|
||||||
|
@ -42,7 +42,7 @@ namespace gtsam {
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
DecisionTreeFactor Domain::operator*(const DecisionTreeFactor& f) const {
|
DecisionTreeFactor Domain::operator*(const DecisionTreeFactor& f) const {
|
||||||
// TODO: can we do this more efficiently?
|
// TODO: can we do this more efficiently?
|
||||||
return DecisionTreeFactor(*this) * f;
|
return toDecisionTreeFactor() * f;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
|
|
@ -76,7 +76,7 @@ namespace gtsam {
|
||||||
virtual double operator()(const Values& values) const;
|
virtual double operator()(const Values& values) const;
|
||||||
|
|
||||||
/// Convert into a decisiontree
|
/// Convert into a decisiontree
|
||||||
virtual operator DecisionTreeFactor() const;
|
virtual DecisionTreeFactor toDecisionTreeFactor() const;
|
||||||
|
|
||||||
/// Multiply into a decisiontree
|
/// Multiply into a decisiontree
|
||||||
virtual DecisionTreeFactor operator*(const DecisionTreeFactor& f) const;
|
virtual DecisionTreeFactor operator*(const DecisionTreeFactor& f) const;
|
||||||
|
|
|
@ -27,7 +27,7 @@ namespace gtsam {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
SingleValue::operator DecisionTreeFactor() const {
|
DecisionTreeFactor SingleValue::toDecisionTreeFactor() const {
|
||||||
DiscreteKeys keys;
|
DiscreteKeys keys;
|
||||||
keys += DiscreteKey(keys_[0],cardinality_);
|
keys += DiscreteKey(keys_[0],cardinality_);
|
||||||
vector<double> table;
|
vector<double> table;
|
||||||
|
@ -40,7 +40,7 @@ namespace gtsam {
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
DecisionTreeFactor SingleValue::operator*(const DecisionTreeFactor& f) const {
|
DecisionTreeFactor SingleValue::operator*(const DecisionTreeFactor& f) const {
|
||||||
// TODO: can we do this more efficiently?
|
// TODO: can we do this more efficiently?
|
||||||
return DecisionTreeFactor(*this) * f;
|
return toDecisionTreeFactor() * f;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
|
|
@ -48,7 +48,7 @@ namespace gtsam {
|
||||||
virtual double operator()(const Values& values) const;
|
virtual double operator()(const Values& values) const;
|
||||||
|
|
||||||
/// Convert into a decisiontree
|
/// Convert into a decisiontree
|
||||||
virtual operator DecisionTreeFactor() const;
|
virtual DecisionTreeFactor toDecisionTreeFactor() const;
|
||||||
|
|
||||||
/// Multiply into a decisiontree
|
/// Multiply into a decisiontree
|
||||||
virtual DecisionTreeFactor operator*(const DecisionTreeFactor& f) const;
|
virtual DecisionTreeFactor operator*(const DecisionTreeFactor& f) const;
|
||||||
|
|
|
@ -27,12 +27,12 @@ TEST_UNSAFE( BinaryAllDif, allInOne)
|
||||||
// Check construction and conversion
|
// Check construction and conversion
|
||||||
BinaryAllDiff c1(ID, UT);
|
BinaryAllDiff c1(ID, UT);
|
||||||
DecisionTreeFactor f1(ID & UT, "0 1 1 0");
|
DecisionTreeFactor f1(ID & UT, "0 1 1 0");
|
||||||
EXPECT(assert_equal(f1,(DecisionTreeFactor)c1));
|
EXPECT(assert_equal(f1,c1.toDecisionTreeFactor()));
|
||||||
|
|
||||||
// Check construction and conversion
|
// Check construction and conversion
|
||||||
BinaryAllDiff c2(UT, AZ);
|
BinaryAllDiff c2(UT, AZ);
|
||||||
DecisionTreeFactor f2(UT & AZ, "0 1 1 0");
|
DecisionTreeFactor f2(UT & AZ, "0 1 1 0");
|
||||||
EXPECT(assert_equal(f2,(DecisionTreeFactor)c2));
|
EXPECT(assert_equal(f2,c2.toDecisionTreeFactor()));
|
||||||
|
|
||||||
DecisionTreeFactor f3 = f1*f2;
|
DecisionTreeFactor f3 = f1*f2;
|
||||||
EXPECT(assert_equal(f3,c1*f2));
|
EXPECT(assert_equal(f3,c1*f2));
|
||||||
|
@ -153,11 +153,11 @@ TEST_UNSAFE( CSP, AllDiff)
|
||||||
// Check construction and conversion
|
// Check construction and conversion
|
||||||
SingleValue s(AZ,2);
|
SingleValue s(AZ,2);
|
||||||
DecisionTreeFactor f1(AZ,"0 0 1");
|
DecisionTreeFactor f1(AZ,"0 0 1");
|
||||||
EXPECT(assert_equal(f1,(DecisionTreeFactor)s));
|
EXPECT(assert_equal(f1,s.toDecisionTreeFactor()));
|
||||||
|
|
||||||
// Check construction and conversion
|
// Check construction and conversion
|
||||||
AllDiff alldiff(dkeys);
|
AllDiff alldiff(dkeys);
|
||||||
DecisionTreeFactor actual = (DecisionTreeFactor)alldiff;
|
DecisionTreeFactor actual = alldiff.toDecisionTreeFactor();
|
||||||
// GTSAM_PRINT(actual);
|
// GTSAM_PRINT(actual);
|
||||||
// actual.dot("actual");
|
// actual.dot("actual");
|
||||||
DecisionTreeFactor f2(ID & AZ & UT,
|
DecisionTreeFactor f2(ID & AZ & UT,
|
||||||
|
@ -202,16 +202,16 @@ TEST_UNSAFE( CSP, AllDiff)
|
||||||
known[AZ.first] = 2;
|
known[AZ.first] = 2;
|
||||||
DiscreteFactor::shared_ptr reduced1 = alldiff.partiallyApply(known);
|
DiscreteFactor::shared_ptr reduced1 = alldiff.partiallyApply(known);
|
||||||
DecisionTreeFactor f3(ID & UT, "0 1 1 1 0 1 1 1 0");
|
DecisionTreeFactor f3(ID & UT, "0 1 1 1 0 1 1 1 0");
|
||||||
EXPECT(assert_equal(f3,reduced1->operator DecisionTreeFactor()));
|
EXPECT(assert_equal(f3,reduced1->toDecisionTreeFactor()));
|
||||||
DiscreteFactor::shared_ptr reduced2 = singleValue.partiallyApply(known);
|
DiscreteFactor::shared_ptr reduced2 = singleValue.partiallyApply(known);
|
||||||
DecisionTreeFactor f4(AZ, "0 0 1");
|
DecisionTreeFactor f4(AZ, "0 0 1");
|
||||||
EXPECT(assert_equal(f4,reduced2->operator DecisionTreeFactor()));
|
EXPECT(assert_equal(f4,reduced2->toDecisionTreeFactor()));
|
||||||
|
|
||||||
// Parial application, version 2
|
// Parial application, version 2
|
||||||
DiscreteFactor::shared_ptr reduced3 = alldiff.partiallyApply(domains);
|
DiscreteFactor::shared_ptr reduced3 = alldiff.partiallyApply(domains);
|
||||||
EXPECT(assert_equal(f3,reduced3->operator DecisionTreeFactor()));
|
EXPECT(assert_equal(f3,reduced3->toDecisionTreeFactor()));
|
||||||
DiscreteFactor::shared_ptr reduced4 = singleValue.partiallyApply(domains);
|
DiscreteFactor::shared_ptr reduced4 = singleValue.partiallyApply(domains);
|
||||||
EXPECT(assert_equal(f4,reduced4->operator DecisionTreeFactor()));
|
EXPECT(assert_equal(f4,reduced4->toDecisionTreeFactor()));
|
||||||
|
|
||||||
// full arc-consistency test
|
// full arc-consistency test
|
||||||
csp.runArcConsistency(nrColors);
|
csp.runArcConsistency(nrColors);
|
||||||
|
|
|
@ -139,7 +139,7 @@ bool LinearizedFactor::equals(const NonlinearFactor& other, double tol) const {
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
KeyMatrixMap::const_iterator map1 = matrices_.begin(), map2 = e->matrices_.begin();
|
KeyMatrixMap::const_iterator map1 = matrices_.begin(), map2 = e->matrices_.begin();
|
||||||
for (; map1 != matrices_.end(), map2 != e->matrices_.end(); ++map1, ++map2)
|
for (; map1 != matrices_.end() && map2 != e->matrices_.end(); ++map1, ++map2)
|
||||||
if ((map1->first != map2->first) || !equal_with_abs_tol(map1->second, map2->second, tol))
|
if ((map1->first != map2->first) || !equal_with_abs_tol(map1->second, map2->second, tol))
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -61,8 +61,8 @@ public:
|
||||||
throw runtime_error("operator * not implemented");
|
throw runtime_error("operator * not implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual operator DecisionTreeFactor() const{
|
virtual DecisionTreeFactor toDecisionTreeFactor() const{
|
||||||
throw runtime_error("operator DecisionTreeFactor not implemented");
|
throw runtime_error("DecisionTreeFactor toDecisionTreeFactor not implemented");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue