fix printing and key bug in MixtureFactor linearize

release/4.3a0
Varun Agrawal 2022-08-08 18:02:59 -04:00
parent f5e046fd10
commit 51d2f07709
4 changed files with 12 additions and 23 deletions

View File

@ -51,7 +51,7 @@ GaussianMixtureFactor GaussianMixtureFactor::FromFactors(
void GaussianMixtureFactor::print(const std::string &s,
const KeyFormatter &formatter) const {
HybridFactor::print(s, formatter);
std::cout << "]{\n";
std::cout << "{\n";
factors_.print(
"", [&](Key k) { return formatter(k); },
[&](const GaussianFactor::shared_ptr &gf) -> std::string {

View File

@ -89,17 +89,19 @@ void HybridFactor::print(const std::string &s,
if (isContinuous_) std::cout << "Continuous ";
if (isDiscrete_) std::cout << "Discrete ";
if (isHybrid_) std::cout << "Hybrid ";
std::cout << "[";
for (size_t c = 0; c < continuousKeys_.size(); c++) {
std::cout << formatter(continuousKeys_.at(c));
if (c < continuousKeys_.size() - 1) {
std::cout << " ";
} else {
std::cout << "; ";
std::cout << (discreteKeys_.size() > 0 ? ";" : "");
}
}
for (auto &&discreteKey : discreteKeys_) {
std::cout << formatter(discreteKey.first) << " ";
std::cout << " " << formatter(discreteKey.first);
}
std::cout << "]";
}
} // namespace gtsam

View File

@ -35,7 +35,7 @@ bool HybridNonlinearFactor::equals(const HybridFactor &lf, double tol) const {
void HybridNonlinearFactor::print(const std::string &s,
const KeyFormatter &formatter) const {
HybridFactor::print(s, formatter);
inner_->print("inner: ", formatter);
inner_->print("\n", formatter);
};
} // namespace gtsam

View File

@ -131,21 +131,8 @@ class MixtureFactor : public HybridFactor {
const std::string& s = "MixtureFactor",
const KeyFormatter& keyFormatter = DefaultKeyFormatter) const override {
std::cout << (s.empty() ? "" : s + " ");
std::cout << "(";
auto contKeys = keys();
auto dKeys = discreteKeys();
for (DiscreteKey key : dKeys) {
auto it = std::find(contKeys.begin(), contKeys.end(), key.first);
contKeys.erase(it);
}
for (Key key : contKeys) {
std::cout << " " << keyFormatter(key);
}
std::cout << ";";
for (DiscreteKey key : dKeys) {
std::cout << " " << keyFormatter(key.first);
}
std::cout << " ) \n";
Base::print("", keyFormatter);
std::cout << "\nMixtureFactor\n";
auto valueFormatter = [](const sharedFactor& v) {
if (v) {
return (boost::format("Nonlinear factor on %d keys") % v->size()).str();
@ -200,8 +187,8 @@ class MixtureFactor : public HybridFactor {
DecisionTree<Key, GaussianFactor::shared_ptr> linearized_factors(
factors_, linearizeDT);
return boost::make_shared<GaussianMixtureFactor>(keys_, discreteKeys_,
linearized_factors);
return boost::make_shared<GaussianMixtureFactor>(
continuousKeys_, discreteKeys_, linearized_factors);
}
/**