@@ -682,8 +682,11 @@ TEST(HybridGaussianFactorGraph, ErrorTreeWithConditional) {
682
682
x0, -I_1x1, model0),
683
683
c1 = make_shared<GaussianConditional>(f01, Vector1 (mu), I_1x1, x1, I_1x1,
684
684
x0, -I_1x1, model1);
685
+ DiscreteKeys discreteParents{m1};
685
686
hbn.emplace_shared <HybridGaussianConditional>(
686
- KeyVector{f01}, KeyVector{x0, x1}, DiscreteKeys{m1}, std::vector{c0, c1});
687
+ KeyVector{f01}, KeyVector{x0, x1}, discreteParents,
688
+ HybridGaussianConditional::Conditionals (discreteParents,
689
+ std::vector{c0, c1}));
687
690
688
691
// Discrete uniform prior.
689
692
hbn.emplace_shared <DiscreteConditional>(m1, " 0.5/0.5" );
@@ -806,9 +809,11 @@ TEST(HybridGaussianFactorGraph, EliminateTiny1) {
806
809
X (0 ), Vector1 (14.1421 ), I_1x1 * 2.82843 ),
807
810
conditional1 = std::make_shared<GaussianConditional>(
808
811
X (0 ), Vector1 (10.1379 ), I_1x1 * 2.02759 );
812
+ DiscreteKeys discreteParents{mode};
809
813
expectedBayesNet.emplace_shared <HybridGaussianConditional>(
810
- KeyVector{X (0 )}, KeyVector{}, DiscreteKeys{mode},
811
- std::vector{conditional0, conditional1});
814
+ KeyVector{X (0 )}, KeyVector{}, discreteParents,
815
+ HybridGaussianConditional::Conditionals (
816
+ discreteParents, std::vector{conditional0, conditional1}));
812
817
813
818
// Add prior on mode.
814
819
expectedBayesNet.emplace_shared <DiscreteConditional>(mode, " 74/26" );
@@ -831,12 +836,13 @@ TEST(HybridGaussianFactorGraph, EliminateTiny1Swapped) {
831
836
HybridBayesNet bn;
832
837
833
838
// Create Gaussian mixture z_0 = x0 + noise for each measurement.
839
+ std::vector<GaussianConditional::shared_ptr> conditionals{
840
+ GaussianConditional::sharedMeanAndStddev (Z (0 ), I_1x1, X (0 ), Z_1x1, 3 ),
841
+ GaussianConditional::sharedMeanAndStddev (Z (0 ), I_1x1, X (0 ), Z_1x1, 0.5 )};
834
842
auto gm = std::make_shared<HybridGaussianConditional>(
835
843
KeyVector{Z (0 )}, KeyVector{X (0 )}, DiscreteKeys{mode},
836
- std::vector{
837
- GaussianConditional::sharedMeanAndStddev (Z (0 ), I_1x1, X (0 ), Z_1x1, 3 ),
838
- GaussianConditional::sharedMeanAndStddev (Z (0 ), I_1x1, X (0 ), Z_1x1,
839
- 0.5 )});
844
+ HybridGaussianConditional::Conditionals (DiscreteKeys{mode},
845
+ conditionals));
840
846
bn.push_back (gm);
841
847
842
848
// Create prior on X(0).
@@ -865,7 +871,8 @@ TEST(HybridGaussianFactorGraph, EliminateTiny1Swapped) {
865
871
X (0 ), Vector1 (14.1421 ), I_1x1 * 2.82843 );
866
872
expectedBayesNet.emplace_shared <HybridGaussianConditional>(
867
873
KeyVector{X (0 )}, KeyVector{}, DiscreteKeys{mode},
868
- std::vector{conditional0, conditional1});
874
+ HybridGaussianConditional::Conditionals (
875
+ DiscreteKeys{mode}, std::vector{conditional0, conditional1}));
869
876
870
877
// Add prior on mode.
871
878
expectedBayesNet.emplace_shared <DiscreteConditional>(mode, " 1/1" );
@@ -902,7 +909,8 @@ TEST(HybridGaussianFactorGraph, EliminateTiny2) {
902
909
X (0 ), Vector1 (10.274 ), I_1x1 * 2.0548 );
903
910
expectedBayesNet.emplace_shared <HybridGaussianConditional>(
904
911
KeyVector{X (0 )}, KeyVector{}, DiscreteKeys{mode},
905
- std::vector{conditional0, conditional1});
912
+ HybridGaussianConditional::Conditionals (
913
+ DiscreteKeys{mode}, std::vector{conditional0, conditional1}));
906
914
907
915
// Add prior on mode.
908
916
expectedBayesNet.emplace_shared <DiscreteConditional>(mode, " 23/77" );
@@ -947,12 +955,14 @@ TEST(HybridGaussianFactorGraph, EliminateSwitchingNetwork) {
947
955
for (size_t t : {0 , 1 , 2 }) {
948
956
// Create Gaussian mixture on Z(t) conditioned on X(t) and mode N(t):
949
957
const auto noise_mode_t = DiscreteKey{N (t), 2 };
958
+ std::vector<GaussianConditional::shared_ptr> conditionals{
959
+ GaussianConditional::sharedMeanAndStddev (Z (t), I_1x1, X (t), Z_1x1, 0.5 ),
960
+ GaussianConditional::sharedMeanAndStddev (Z (t), I_1x1, X (t), Z_1x1,
961
+ 3.0 )};
950
962
bn.emplace_shared <HybridGaussianConditional>(
951
963
KeyVector{Z (t)}, KeyVector{X (t)}, DiscreteKeys{noise_mode_t },
952
- std::vector{GaussianConditional::sharedMeanAndStddev (Z (t), I_1x1, X (t),
953
- Z_1x1, 0.5 ),
954
- GaussianConditional::sharedMeanAndStddev (Z (t), I_1x1, X (t),
955
- Z_1x1, 3.0 )});
964
+ HybridGaussianConditional::Conditionals (DiscreteKeys{noise_mode_t },
965
+ conditionals));
956
966
957
967
// Create prior on discrete mode N(t):
958
968
bn.emplace_shared <DiscreteConditional>(noise_mode_t , " 20/80" );
@@ -962,12 +972,15 @@ TEST(HybridGaussianFactorGraph, EliminateSwitchingNetwork) {
962
972
for (size_t t : {2 , 1 }) {
963
973
// Create Gaussian mixture on X(t) conditioned on X(t-1) and mode M(t-1):
964
974
const auto motion_model_t = DiscreteKey{M (t), 2 };
975
+ std::vector<GaussianConditional::shared_ptr> conditionals{
976
+ GaussianConditional::sharedMeanAndStddev (X (t), I_1x1, X (t - 1 ), Z_1x1,
977
+ 0.2 ),
978
+ GaussianConditional::sharedMeanAndStddev (X (t), I_1x1, X (t - 1 ), I_1x1,
979
+ 0.2 )};
965
980
auto gm = std::make_shared<HybridGaussianConditional>(
966
981
KeyVector{X (t)}, KeyVector{X (t - 1 )}, DiscreteKeys{motion_model_t },
967
- std::vector{GaussianConditional::sharedMeanAndStddev (
968
- X (t), I_1x1, X (t - 1 ), Z_1x1, 0.2 ),
969
- GaussianConditional::sharedMeanAndStddev (
970
- X (t), I_1x1, X (t - 1 ), I_1x1, 0.2 )});
982
+ HybridGaussianConditional::Conditionals (DiscreteKeys{motion_model_t },
983
+ conditionals));
971
984
bn.push_back (gm);
972
985
973
986
// Create prior on motion model M(t):
0 commit comments