39 using namespace gtsam;
128 auto discreteConditional_m0 =
bayesTree[
M(0)]->conditional()->asDiscrete();
150 const auto [expectedHybridBayesTree, expectedRemainingGraph] =
152 .BaseEliminateable::eliminatePartialMultifrontal(
ordering);
155 auto x0_conditional = dynamic_pointer_cast<HybridGaussianConditional>(
157 auto expected_x0_conditional =
158 dynamic_pointer_cast<HybridGaussianConditional>(
159 (*expectedHybridBayesTree)[
X(0)]->conditional()->inner());
163 auto x1_conditional = dynamic_pointer_cast<HybridGaussianConditional>(
165 auto expected_x1_conditional =
166 dynamic_pointer_cast<HybridGaussianConditional>(
167 (*expectedHybridBayesTree)[
X(1)]->conditional()->inner());
171 auto x2_conditional = dynamic_pointer_cast<HybridGaussianConditional>(
173 auto expected_x2_conditional =
174 dynamic_pointer_cast<HybridGaussianConditional>(
175 (*expectedHybridBayesTree)[
X(2)]->conditional()->inner());
182 expectedRemainingGraph->eliminateMultifrontal(discreteOrdering);
185 auto discrete =
bayesTree[
M(1)]->conditional()->asDiscrete();
193 auto expectedConditional = (*discreteBayesTree)[
M(1)]->conditional();
194 auto actualConditional =
bayesTree[
M(1)]->conditional();
207 for (
size_t i = 0;
i < 3;
i++) {
213 for (
size_t i = 0;
i < 4;
i++) {
220 for (
size_t j = 0;
j < 4;
j++) {
225 const auto [unPrunedHybridBayesTree, unPrunedRemainingGraph] =
227 .BaseEliminateable::eliminatePartialMultifrontal(
ordering);
229 size_t maxNrLeaves = 5;
269 auto discreteConditional_m0 = *dynamic_pointer_cast<TableDistribution>(
278 auto &unPrunedLastDensity = *dynamic_pointer_cast<HybridGaussianConditional>(
279 unPrunedHybridBayesTree->clique(
X(3))->conditional()->inner());
280 auto &lastDensity = *dynamic_pointer_cast<HybridGaussianConditional>(
283 std::vector<std::pair<DiscreteValues, double>> assignments =
284 discreteConditional_m0.enumerate();
286 for (
auto &&av : assignments) {
288 const double value = av.second;
291 EXPECT(lastDensity(assignment) ==
nullptr);
293 CHECK(lastDensity(assignment));
295 *lastDensity(assignment)));
310 for (
size_t i = 0;
i < 3;
i++) {
316 for (
size_t i = 0;
i < 4;
i++) {
324 size_t maxComponents = 5;
326 incrementalHybrid.
prune(maxComponents);
333 2,
bayesTree[
X(0)]->conditional()->asHybrid()->nrComponents());
335 3,
bayesTree[
X(1)]->conditional()->asHybrid()->nrComponents());
337 5,
bayesTree[
X(2)]->conditional()->asHybrid()->nrComponents());
339 5,
bayesTree[
X(3)]->conditional()->asHybrid()->nrComponents());
350 incrementalHybrid.
prune(maxComponents);
357 5,
bayesTree[
X(3)]->conditional()->asHybrid()->nrComponents());
359 5,
bayesTree[
X(4)]->conditional()->asHybrid()->nrComponents());
376 auto priorNoise = noiseModel::Diagonal::Sigmas(
381 auto poseNoise = noiseModel::Isotropic::Sigma(3, 0.1);
408 auto noise_model = noiseModel::Isotropic::Sigma(3, 1.0);
409 auto still = std::make_shared<PlanarMotionModel>(
W(0),
W(1),
Pose2(0, 0, 0),
411 moving = std::make_shared<PlanarMotionModel>(
W(0),
W(1),
odometry,
413 std::vector<NoiseModelFactor::shared_ptr>
components{moving, still};
446 still = std::make_shared<PlanarMotionModel>(
W(1),
W(2),
Pose2(0, 0, 0),
486 still = std::make_shared<PlanarMotionModel>(
W(2),
W(3),
Pose2(0, 0, 0),
526 discreteGraph.
push_back(discreteTree->toDecisionTreeFactor());
530 expected_assignment[
M(1)] = 1;
531 expected_assignment[
M(2)] = 1;
532 expected_assignment[
M(3)] = 1;
538 auto lastConditional =
bayesTree[
X(3)]->conditional()->asHybrid();