37 using namespace gtsam;
81 for (
size_t mode : {0, 1}) {
103 for (
size_t mode : {0, 1}) {
128 std::vector<DiscreteKey> discrete_keys = {
mode};
135 std::vector<double>
ratio(2);
136 for (
size_t mode : {0, 1}) {
162 EXPECT(continuousParentKeys.size() == 1);
163 EXPECT(continuousParentKeys[0] ==
X(0));
177 double negLogConstant0 =
conditionals[0]->negLogConstant();
178 double negLogConstant1 =
conditionals[1]->negLogConstant();
179 double minErrorConstant =
std::min(negLogConstant0, negLogConstant1);
184 std::vector<double> leaves = {
192 for (
size_t mode : {0, 1}) {
221 const auto jf1 = std::dynamic_pointer_cast<JacobianFactor>(gf1);
233 std::vector<double>
ratio(2);
234 for (
size_t mode : {0, 1}) {
246 const std::vector<GaussianConditional::shared_ptr>
gcs = {
263 keys.push_back({
M(3), 2});
265 for (
size_t i = 0;
i < 8;
i++) {
266 std::vector<double> potentials{0, 0, 0, 0, 0, 0, 0, 0};
277 const std::vector<double> potentials{0, 0, 0.5, 0,
289 hgc->conditionals()({{M(1), 0}, {M(2), 1}})->negLogConstant(),
290 pruned->negLogConstant(), 1
e-9);
293 const std::vector<double> potentials{0.2, 0, 0.3, 0,
322 std::dynamic_pointer_cast<HybridConditional>(
hc->restrict({}));
325 EXPECT(same->asHybrid()->nrComponents() == 4);
327 const auto oneParent =
328 std::dynamic_pointer_cast<HybridConditional>(
hc->restrict({{M(1), 0}}));
330 EXPECT(oneParent->isHybrid());
331 EXPECT(oneParent->asHybrid()->nrComponents() == 2);
333 const auto oneParent2 = std::dynamic_pointer_cast<HybridConditional>(
334 hc->restrict({{M(7), 0}, {M(1), 0}}));
336 EXPECT(oneParent2->isHybrid());
337 EXPECT(oneParent2->asHybrid()->nrComponents() == 2);
339 const auto gaussian = std::dynamic_pointer_cast<HybridConditional>(
340 hc->restrict({{M(1), 0}, {M(2), 1}}));
342 EXPECT(gaussian->asGaussian());