1
+ using Test
2
+ using IncrementalInference
3
+
4
+ @testset " Testing basic marginalization" begin
5
+ # linear hex
6
+ N= 6
7
+ fg = generateCanonicalFG_lineStep (N;
8
+ graphinit= false ,
9
+ poseEvery= 1 ,
10
+ landmarkEvery= N+ 1 ,
11
+ posePriorsAt= [0 ],
12
+ landmarkPriorsAt= [],
13
+ sightDistance= N+ 1 )
14
+
15
+ deleteFactor! .(fg, [Symbol (" x$(i) lm0f1" ) for i= 1 : (N- 1 )])
16
+
17
+ # tree = resetBuildTree!(fg, show=true, drawpdf=true)
18
+ tree, smtasks, hists = solveTree! (fg)
19
+
20
+ for var in sortDFG (ls (fg))
21
+ sppe = getVariable (fg,var) |> getPPE |> IIF. getSuggestedPPE
22
+ println (" Testing " , var," : " , sppe)
23
+ @test isapprox (sppe[1 ], parse (Int,string (var)[end ]), atol= 0.1 )
24
+ end
25
+
26
+
27
+ defaultFixedLagOnTree! (fg, 6 )
28
+ # Back up data from these two poses so we can compare them once we solve again.
29
+ lm0 = deepcopy (getVal (fg, :lm0 ))
30
+ X0 = deepcopy (getVal (fg, :x0 ))
31
+ X1 = deepcopy (getVal (fg, :x1 ))
32
+
33
+ fifoFreeze! (fg)
34
+
35
+ tree, smtasks, hists = solveTree! (fg)
36
+ for var in sortDFG (ls (fg))
37
+ sppe = getVariable (fg,var) |> getPPE |> IIF. getSuggestedPPE
38
+ println (" Testing " , var," : " , sppe)
39
+ @test isapprox (sppe[1 ], parse (Int,string (var)[end ]), atol= 0.15 )
40
+ end
41
+
42
+
43
+ lm0cmp = deepcopy (getVal (fg, :lm0 ))
44
+ X0cmp = deepcopy (getVal (fg, :x0 ))
45
+ X1cmp = deepcopy (getVal (fg, :x1 ))
46
+
47
+ @test X0 == X0cmp # Frozen
48
+ @test lm0 == lm0cmp # Frozen
49
+ @test X1 != X1cmp # Recalculated
50
+
51
+ deleteVariable! (fg, :x0 )
52
+
53
+ addVariable! .(fg, [Symbol (" x$i " ) for i = 7 : 9 ], ContinuousScalar)
54
+ addFactor! (fg, [:x6 ,:x7 ], LinearRelative (Normal (1.0 , 0.1 )))
55
+ addFactor! (fg, [:x7 ,:x8 ], LinearRelative (Normal (1.0 , 0.1 )))
56
+ addFactor! (fg, [:x8 ,:x9 ], LinearRelative (Normal (1.0 , 0.1 )))
57
+ addFactor! (fg, [:lm0 , :x9 ], LinearRelative (Normal (9 ,0.1 )))
58
+
59
+ tree, smtasks, hists = solveTree! (fg)
60
+
61
+ for var in sortDFG (ls (fg))
62
+ sppe = getVariable (fg,var) |> getPPE |> IIF. getSuggestedPPE
63
+ println (" Testing " , var," : " , sppe)
64
+ @test isapprox (sppe[1 ], parse (Int,string (var)[end ]), atol= 0.15 )
65
+ end
66
+
67
+ @test lm0 == getVal (fg, :lm0 ) # Still Frozen
68
+ @test X1cmp == getVal (fg, :x1 ) # also now Frozen
69
+
70
+ unfreezeVariablesAll! (fg)
71
+
72
+ # freeze again
73
+ defaultFixedLagOnTree! (fg, 9 )
74
+
75
+ tree, smtasks, hists = solveTree! (fg)
76
+
77
+ @test lm0 == getVal (fg, :lm0 ) # Still Frozen
78
+ @test X1cmp != getVal (fg, :x1 ) # not frozen
79
+
80
+ # freeze 2,4,6 to all marginalize clique 2
81
+ setfreeze! (fg, [:x2 , :x4 , :x6 ])
82
+ tree, smtasks, hists = solveTree! (fg)
83
+
84
+ @test areCliqVariablesAllMarginalized (fg, tree. cliques[2 ])
85
+
86
+ tree, smtasks, hists = solveTree! (fg, tree)# , recordcliqs=ls(fg));
87
+ for var in sortDFG (ls (fg))
88
+ sppe = getVariable (fg,var) |> getPPE |> IIF. getSuggestedPPE
89
+ println (" Testing " , var," : " , sppe)
90
+ @test isapprox (sppe[1 ], parse (Int,string (var)[end ]), atol= 0.15 )
91
+ end
92
+
93
+ X1 = deepcopy (getVal (fg, :x1 ))
94
+
95
+ setfreeze! (fg, [:x3 , :x5 ])
96
+ tree, smtasks, hists = solveTree! (fg, tree)# , recordcliqs=ls(fg));
97
+ # csmAnimate(tree, hists, frames=1)
98
+
99
+ @test lm0 == getVal (fg, :lm0 ) # Still Frozen
100
+ @test X1 != getVal (fg, :x1 ) # not frozen
101
+
102
+ for i = [2 ,4 ,6 ]
103
+ @test areCliqVariablesAllMarginalized (fg, tree. cliques[i])
104
+ end
105
+
106
+ end
0 commit comments