37 using namespace gtsam;
99 auto discreteConditional_m0 =
isam[
M(0)]->conditional()->asDiscrete();
111 const auto [expectedHybridBayesTree, expectedRemainingGraph] =
115 auto x0_conditional = dynamic_pointer_cast<HybridGaussianConditional>(
116 isam[
X(0)]->conditional()->inner());
117 auto expected_x0_conditional =
118 dynamic_pointer_cast<HybridGaussianConditional>(
119 (*expectedHybridBayesTree)[
X(0)]->conditional()->inner());
123 auto x1_conditional = dynamic_pointer_cast<HybridGaussianConditional>(
124 isam[
X(1)]->conditional()->inner());
125 auto expected_x1_conditional =
126 dynamic_pointer_cast<HybridGaussianConditional>(
127 (*expectedHybridBayesTree)[
X(1)]->conditional()->inner());
131 auto x2_conditional = dynamic_pointer_cast<HybridGaussianConditional>(
132 isam[
X(2)]->conditional()->inner());
133 auto expected_x2_conditional =
134 dynamic_pointer_cast<HybridGaussianConditional>(
135 (*expectedHybridBayesTree)[
X(2)]->conditional()->inner());
142 expectedRemainingGraph->eliminateMultifrontal(discreteOrdering);
153 auto expectedConditional = (*discreteBayesTree)[
M(1)]->conditional();
154 auto actualConditional =
isam[
M(1)]->conditional();
166 for (
size_t i = 0;
i < 3;
i++) {
172 for (
size_t i = 0;
i <= 3;
i++) {
178 for (
size_t j = 0;
j < 4;
j++) {
183 const auto [unPrunedHybridBayesTree, unPrunedRemainingGraph] =
186 size_t maxNrLeaves = 5;
189 incrementalHybrid.
prune(maxNrLeaves);
225 auto discreteConditional_m0 = *dynamic_pointer_cast<TableDistribution>(
226 incrementalHybrid[
M(0)]->conditional()->inner());
234 auto &unPrunedLastDensity = *dynamic_pointer_cast<HybridGaussianConditional>(
235 unPrunedHybridBayesTree->clique(
X(3))->conditional()->inner());
236 auto &lastDensity = *dynamic_pointer_cast<HybridGaussianConditional>(
237 incrementalHybrid[
X(3)]->conditional()->inner());
239 std::vector<std::pair<DiscreteValues, double>> assignments =
240 discreteConditional_m0.enumerate();
242 for (
auto &&av : assignments) {
244 const double value = av.second;
247 EXPECT(lastDensity(assignment) ==
nullptr);
249 CHECK(lastDensity(assignment));
251 *lastDensity(assignment)));
265 for (
size_t i = 0;
i < 3;
i++) {
271 for (
size_t i = 0;
i <= 3;
i++) {
276 size_t maxComponents = 5;
283 2, incrementalHybrid[
X(0)]->conditional()->asHybrid()->nrComponents());
285 3, incrementalHybrid[
X(1)]->conditional()->asHybrid()->nrComponents());
287 5, incrementalHybrid[
X(2)]->conditional()->asHybrid()->nrComponents());
289 5, incrementalHybrid[
X(3)]->conditional()->asHybrid()->nrComponents());
303 5, incrementalHybrid[
X(3)]->conditional()->asHybrid()->nrComponents());
305 5, incrementalHybrid[
X(4)]->conditional()->asHybrid()->nrComponents());
321 auto priorNoise = noiseModel::Diagonal::Sigmas(
326 auto poseNoise = noiseModel::Isotropic::Sigma(3, 0.1);
363 auto noise_model = noiseModel::Isotropic::Sigma(3, 1.0);
364 std::vector<NoiseModelFactor::shared_ptr>
components;
472 auto discreteTree = inc[
M(3)]->conditional()->asDiscrete();
479 discreteGraph.
push_back(discreteTree->toDecisionTreeFactor());
483 expected_assignment[
M(1)] = 1;
484 expected_assignment[
M(2)] = 1;
485 expected_assignment[
M(3)] = 1;
491 auto lastConditional = inc[
X(3)]->conditional()->asHybrid();