make None the default HybridCategory

release/4.3a0
Varun Agrawal 2024-09-16 13:30:07 -04:00
parent 97eb6bc8b9
commit 4302ee33c9
2 changed files with 22 additions and 11 deletions

View File

@ -54,20 +54,28 @@ HybridFactor::HybridFactor(const KeyVector &keys)
category_(HybridCategory::Continuous), category_(HybridCategory::Continuous),
continuousKeys_(keys) {} continuousKeys_(keys) {}
/* ************************************************************************ */
HybridCategory GetCategory(const KeyVector &continuousKeys,
const DiscreteKeys &discreteKeys) {
if ((continuousKeys.size() == 0) && (discreteKeys.size() != 0)) {
return HybridCategory::Discrete;
} else if ((continuousKeys.size() != 0) && (discreteKeys.size() == 0)) {
return HybridCategory::Continuous;
} else if ((continuousKeys.size() != 0) && (discreteKeys.size() != 0)) {
return HybridCategory::Hybrid;
} else {
// Case where we have no keys. Should never happen.
return HybridCategory::None;
}
}
/* ************************************************************************ */ /* ************************************************************************ */
HybridFactor::HybridFactor(const KeyVector &continuousKeys, HybridFactor::HybridFactor(const KeyVector &continuousKeys,
const DiscreteKeys &discreteKeys) const DiscreteKeys &discreteKeys)
: Base(CollectKeys(continuousKeys, discreteKeys)), : Base(CollectKeys(continuousKeys, discreteKeys)),
category_(GetCategory(continuousKeys, discreteKeys)),
discreteKeys_(discreteKeys), discreteKeys_(discreteKeys),
continuousKeys_(continuousKeys) { continuousKeys_(continuousKeys) {}
if ((continuousKeys.size() == 0) && (discreteKeys.size() != 0)) {
category_ = HybridCategory::Discrete;
} else if ((continuousKeys.size() != 0) && (discreteKeys.size() == 0)) {
category_ = HybridCategory::Continuous;
} else {
category_ = HybridCategory::Hybrid;
}
}
/* ************************************************************************ */ /* ************************************************************************ */
HybridFactor::HybridFactor(const DiscreteKeys &discreteKeys) HybridFactor::HybridFactor(const DiscreteKeys &discreteKeys)
@ -98,6 +106,9 @@ void HybridFactor::print(const std::string &s,
case HybridCategory::Hybrid: case HybridCategory::Hybrid:
std::cout << "Hybrid "; std::cout << "Hybrid ";
break; break;
case HybridCategory::None:
std::cout << "None ";
break;
} }
std::cout << "["; std::cout << "[";

View File

@ -42,7 +42,7 @@ DiscreteKeys CollectDiscreteKeys(const DiscreteKeys &key1,
const DiscreteKeys &key2); const DiscreteKeys &key2);
/// Enum to help with categorizing hybrid factors. /// Enum to help with categorizing hybrid factors.
enum class HybridCategory { Discrete, Continuous, Hybrid }; enum class HybridCategory { None, Discrete, Continuous, Hybrid };
/** /**
* Base class for *truly* hybrid probabilistic factors * Base class for *truly* hybrid probabilistic factors
@ -57,7 +57,7 @@ enum class HybridCategory { Discrete, Continuous, Hybrid };
class GTSAM_EXPORT HybridFactor : public Factor { class GTSAM_EXPORT HybridFactor : public Factor {
private: private:
/// Record what category of HybridFactor this is. /// Record what category of HybridFactor this is.
HybridCategory category_; HybridCategory category_ = HybridCategory::None;
protected: protected:
// Set of DiscreteKeys for this factor. // Set of DiscreteKeys for this factor.