From e9d63196a0cd133fe3f7929380ba7df3c3e8488e Mon Sep 17 00:00:00 2001 From: dehann Date: Thu, 9 Sep 2021 14:49:32 -0400 Subject: [PATCH 01/12] solveTree! only returns tree, #1379 --- examples/BayesTreeIllustration.jl | 2 +- examples/FixedPointIllustrationsSquare.jl | 2 +- examples/IllustrateAutoInit.jl | 2 +- examples/MultiHypo2Door.jl | 2 +- examples/MultiHypo3Door.jl | 2 +- examples/squarefixedpoint.jl | 2 +- src/IncrementalInference.jl | 10 +++++--- src/SolverAPI.jl | 4 +-- src/TreeDebugTools.jl | 2 +- test/TestCSMMultihypo.jl | 2 +- test/priorusetest.jl | 4 +-- test/testBasicGraphs.jl | 24 +++++++++--------- test/testBasicRecycling.jl | 30 +++++++++++------------ test/testBasicTreeInit.jl | 8 +++--- test/testCommonConvWrapper.jl | 2 +- test/testCompareVariablesFactors.jl | 2 +- test/testDeadReckoningTether.jl | 2 +- test/testDefaultDeconv.jl | 2 +- test/testEuclidDistance.jl | 8 +++--- test/testHasPriors913.jl | 8 +++--- test/testJointEnforcement.jl | 4 +-- test/testMixtureLinearConditional.jl | 2 +- test/testMultiHypo2Door.jl | 2 +- test/testMultihypoAndChain.jl | 2 +- test/testMultimodal1D.jl | 6 ++--- test/testProductReproducable.jl | 2 +- test/testSkipUpDown.jl | 6 ++--- test/testSolveOrphanedFG.jl | 2 +- test/testSpecialEuclidean2Mani.jl | 4 +-- test/testSpecialSampler.jl | 2 +- test/testTreeFunctions.jl | 4 +-- test/testTreeMessageUtils.jl | 2 +- test/testVariousNSolveSize.jl | 6 ++--- test/testlocalconstraintexamples.jl | 2 +- test/testpartialconstraint.jl | 4 +-- 35 files changed, 87 insertions(+), 83 deletions(-) diff --git a/examples/BayesTreeIllustration.jl b/examples/BayesTreeIllustration.jl index f8157a9bd..f41a0349a 100644 --- a/examples/BayesTreeIllustration.jl +++ b/examples/BayesTreeIllustration.jl @@ -25,7 +25,7 @@ tree = buildTreeReset!(fg, drawpdf=true, show=true) # solve the factor graph and show solving progress on tree in src/JunctionTree.jl fg.solverParams.showtree = true fg.solverParams.drawtree = true -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) ## building a new tree -- as per IIF.prepBatchTree(...) diff --git a/examples/FixedPointIllustrationsSquare.jl b/examples/FixedPointIllustrationsSquare.jl index fb95b41eb..0a9a7dcc8 100644 --- a/examples/FixedPointIllustrationsSquare.jl +++ b/examples/FixedPointIllustrationsSquare.jl @@ -106,7 +106,7 @@ function runFullBatchIterations(;N=100, iters=50) FG = deepcopy(fg) for i in 1:iters - tree, smt, hist = solveTree!(fg) + tree = solveTree!(fg) push!(FG, deepcopy(fg)) end return FG diff --git a/examples/IllustrateAutoInit.jl b/examples/IllustrateAutoInit.jl index e5f55e9ce..7abd89cde 100644 --- a/examples/IllustrateAutoInit.jl +++ b/examples/IllustrateAutoInit.jl @@ -93,7 +93,7 @@ plotKDE(fg, [:x0, :x1, :x2, :x3]) # Find global best likelihood solution (posterior belief) # After defining the problem, we can find the 'minimum free energy' solution -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) # and look at the posterior belief, and notice which consensus modes stand out in the posterior plotKDE(fg, [:x0, :x1, :x2, :x3]) diff --git a/examples/MultiHypo2Door.jl b/examples/MultiHypo2Door.jl index 2504545e7..9b01dbf63 100644 --- a/examples/MultiHypo2Door.jl +++ b/examples/MultiHypo2Door.jl @@ -74,7 +74,7 @@ drawGraph(fg, show=true) tree = buildTreeReset!(fg, drawpdf=true, show=true) ## Solve graph -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) # tree = buildTreeReset!(fg, drawpdf=true, show=true) diff --git a/examples/MultiHypo3Door.jl b/examples/MultiHypo3Door.jl index 50d244267..16f43dbff 100644 --- a/examples/MultiHypo3Door.jl +++ b/examples/MultiHypo3Door.jl @@ -75,7 +75,7 @@ tree = buildTreeReset!(fg, drawpdf=true, show=true) ## Solve graph -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) ## Plotting functions below diff --git a/examples/squarefixedpoint.jl b/examples/squarefixedpoint.jl index 68feb62b9..56381722a 100644 --- a/examples/squarefixedpoint.jl +++ b/examples/squarefixedpoint.jl @@ -38,7 +38,7 @@ doautoinit!(fg, :xy) initManual!(fg, :x, randn(1,100)) # find solution -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) ## plot the result plotKDE(map(x->getKDE(fg,x), [:x; :xy])) diff --git a/src/IncrementalInference.jl b/src/IncrementalInference.jl index 11d11a778..8b85b163a 100644 --- a/src/IncrementalInference.jl +++ b/src/IncrementalInference.jl @@ -14,7 +14,11 @@ using Reexport using Manifolds -export ℝ, AbstractManifold, Euclidean, Circle +export ℝ, AbstractManifold +# common groups -- preferred defaults at this time. +export TranslationGroup, CircleGroup +# common non-groups -- TODO still teething problems to sort out in IIF v0.25-v0.26. +export Euclidean, Circle import NLsolve import NLSolversBase @@ -119,9 +123,9 @@ export FunctorInferenceType, PackedInferenceType export AbstractPrior, AbstractRelative, AbstractRelativeRoots, AbstractRelativeMinimize # not sure if this is necessary -export convert +export convert, * -export *, +export CSMHistory, # getTreeCliqsSolverHistories, diff --git a/src/SolverAPI.jl b/src/SolverAPI.jl index dc34a37cc..27ce186e5 100644 --- a/src/SolverAPI.jl +++ b/src/SolverAPI.jl @@ -254,7 +254,7 @@ DevNotes Example ```julia # pass in old `tree` to enable compute recycling -- see online Documentation for more details -tree, smt, hist = solveTree!(fg [,tree]) +tree = solveTree!(fg [,tree]) ``` Related @@ -386,7 +386,7 @@ function solveTree!(dfgl::AbstractDFG, printCSMHistorySequential(hist, joinLogPath(dfgl,"HistoryCSMAll.txt") ) end - return oldtree, smtasks, hist + return oldtree end """ diff --git a/src/TreeDebugTools.jl b/src/TreeDebugTools.jl index 3d3c703be..51c378601 100644 --- a/src/TreeDebugTools.jl +++ b/src/TreeDebugTools.jl @@ -688,7 +688,7 @@ fg = initfg() fsy = getTreeAllFrontalSyms(fg, tree) # for later use # perform inference to find the factor graph marginal posterior estimates -tree, smt, hist = solveTree!(fg, recordcliqs=fsy) +tree = solveTree!(fg, recordcliqs=fsy) # generate frames in standard location /tmp/caesar/csmCompound/ # requires: sudo apt-get install graphviz diff --git a/test/TestCSMMultihypo.jl b/test/TestCSMMultihypo.jl index ba36da614..47489679b 100644 --- a/test/TestCSMMultihypo.jl +++ b/test/TestCSMMultihypo.jl @@ -72,7 +72,7 @@ getSolverParams(fg).limititers = 30 # previous runaway CSM issue due to excessiv # getSolverParams(fg).drawtree = false # getSolverParams(fg).showtree = false -tree, smt, hist = solveTree!(fg, recordcliqs=ls(fg)) +tree = solveTree!(fg, recordcliqs=ls(fg)) # drawGraph(fg) diff --git a/test/priorusetest.jl b/test/priorusetest.jl index 4cbe4756e..0f943ac82 100644 --- a/test/priorusetest.jl +++ b/test/priorusetest.jl @@ -35,7 +35,7 @@ addFactor!(fg, [:x0; :x1], LinearRelative(Normal(0.0, 0.01))) addFactor!(fg, [:x1; :x2], LinearRelative(Normal(0.0, 0.01))) #solve -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) x0_m = getKDEMean(getKDE(getVariable(fg, :x0)))[1] x1_m = getKDEMean(getKDE(getVariable(fg, :x1)))[1] x2_m = getKDEMean(getKDE(getVariable(fg, :x2)))[1] @@ -88,7 +88,7 @@ addFactor!(fg, [:x2; :l0], LinearRelative(Normal(0, 0.01))) addFactor!(fg, [:x2; :l1], LinearRelative(Normal(0, 0.01))) #solve -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) x0_m = getKDEMean(getKDE(getVariable(fg, :x0)))[1] x1_m = getKDEMean(getKDE(getVariable(fg, :x1)))[1] diff --git a/test/testBasicGraphs.jl b/test/testBasicGraphs.jl index 14a89c31f..e5739fb32 100644 --- a/test/testBasicGraphs.jl +++ b/test/testBasicGraphs.jl @@ -28,12 +28,12 @@ addFactor!(fg, [:x0;], Prior(Normal(0.0,1.0))) @test !isSolved(getVariable(fg, :x0)) # run solver once -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) @test getSolvedCount(fg, :x0) == 1 @test isSolved(fg, :x0) -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) @test getSolvedCount(fg, :x0) == 2 @test isSolved(fg, :x0) @@ -61,7 +61,7 @@ fg = initfg() addVariable!(fg, :x0, ContinuousScalar) addFactor!(fg, [:x0;], Prior(Normal(1000.0,1.0))) -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) # check mean and covariance @test abs((getBelief(fg, :x0) |> getKDEMean)[1]-1000) < 0.5 @@ -80,7 +80,7 @@ addVariable!(fg, :x0, ContinuousScalar) addFactor!(fg, [:x0;], Prior(Normal(0.0,1.0))) addFactor!(fg, [:x0;], Prior(Normal(0.0,1.0))) -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) # check mean and covariance @test (getBelief(fg, :x0) |> getKDEMean .|> abs)[1] < 0.4 @@ -101,7 +101,7 @@ addFactor!(fg, [:x0;], Prior(Normal(0.0,1.0))) addFactor!(fg, [:x0;], Prior(Normal(0.0,1.0))) addFactor!(fg, [:x0;], Prior(Normal(0.0,1.0))) -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) # check mean and covariance @test (getBelief(fg, :x0) |> getKDEMean .|> abs)[1] < 0.4 @@ -122,7 +122,7 @@ addVariable!(fg, :x0, ContinuousScalar) addFactor!(fg, [:x0;], Prior(Normal(-1.0,1.0))) addFactor!(fg, [:x0;], Prior(Normal(+1.0,1.0))) -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) # check mean and covariance -- should be zero @test (getBelief(fg, :x0) |> getKDEMean .|> abs)[1] < 0.8 @@ -142,7 +142,7 @@ addVariable!(fg, :x0, ContinuousScalar) addFactor!(fg, [:x0;], Prior(Normal(-1.0-1000,1.0))) addFactor!(fg, [:x0;], Prior(Normal(+1.0-1000,1.0))) -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) # check mean and covariance -- should be zero @test abs((getBelief(fg, :x0) |> getKDEMean)[1] + 1000) < 0.6 @@ -165,7 +165,7 @@ addFactor!(fg, [:x0;], Prior(Normal(0.0,1.0))) addFactor!(fg, [:x1;], Prior(Normal(0.0,1.0))) addFactor!(fg, [:x0;:x1;], LinearRelative(Normal(0.0,10.0))) -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) # check mean and covariance -- should be zero @test (getBelief(fg, :x0) |> getKDEMean .|> abs)[1] < 0.6 @@ -191,7 +191,7 @@ addFactor!(fg, [:x0;], Prior(Normal(-1.0,1.0))) addFactor!(fg, [:x1;], Prior(Normal(+1.0,1.0))) addFactor!(fg, [:x0;:x1;], LinearRelative(Normal(0.0,10.0))) -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) # check mean and covariance -- should be near each prior @test abs((getBelief(fg, :x0) |> getKDEMean)[1]+1) < 0.75 @@ -220,7 +220,7 @@ addFactor!(fg, [:x2;], Prior(Normal(+1.0,1.0))) addFactor!(fg, [:x0;:x1;], LinearRelative(Normal(0.0,1.0))) addFactor!(fg, [:x1;:x2;], LinearRelative(Normal(0.0,1.0))) -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) @@ -264,7 +264,7 @@ addFactor!(fg, [:x3;:x4;], LinearRelative(Normal(0.0,1.0))) # #1196 drawGraph(fg, filepath="testgraphplot/myfg.dot", show=false) -tree, smt, hist = solveTree!(fg, storeOld=true) +tree = solveTree!(fg, storeOld=true) # using KernelDensityEstimatePlotting # plotKDE((x->getBelief(fg,x)).([:x0;:x1;:x2;:x3;:x4])) @@ -331,7 +331,7 @@ pts_ = getPoints(getBelief(fg, :x0)) TensorCast.@cast pts[i,j] := pts_[j][i] X0 = pts |> deepcopy -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) # values after solve pts_ = getPoints(getBelief(fg, :x0)) diff --git a/test/testBasicRecycling.jl b/test/testBasicRecycling.jl index 26044e493..9f112756f 100644 --- a/test/testBasicRecycling.jl +++ b/test/testBasicRecycling.jl @@ -18,7 +18,7 @@ fg = generateCanonicalFG_lineStep(N; deleteFactor!.(fg, [Symbol("x$(i)lm0f1") for i=1:(N-1)]) # tree = buildTreeReset!(fg, show=true, drawpdf=true) -tree, smtasks, hists = solveTree!(fg) +tree = solveTree!(fg) for var in sortDFG(ls(fg)) sppe = getVariable(fg,var) |> getPPE |> IIF.getPPESuggested @@ -37,7 +37,7 @@ fifoFreeze!(fg) ## -tree, smtasks, hists = solveTree!(fg; recordcliqs=ls(fg)); +tree = solveTree!(fg; recordcliqs=ls(fg)); for var in sortDFG(ls(fg)) sppe = getVariable(fg,var) |> getPPE |> IIF.getPPESuggested println("Testing ", var,": ", sppe) @@ -63,7 +63,7 @@ addFactor!(fg, [:x7,:x8], LinearRelative(Normal(1.0, 0.1))) addFactor!(fg, [:x8,:x9], LinearRelative(Normal(1.0, 0.1))) addFactor!(fg, [:lm0, :x9], LinearRelative(Normal(9,0.1))) -tree, smtasks, hists = solveTree!(fg; recordcliqs=ls(fg)); +tree = solveTree!(fg; recordcliqs=ls(fg)); #clique 7 should be marginalized and therefor not do up or downsolve @test calcCliquesRecycled(tree) == (7,1,0,0) @@ -84,14 +84,14 @@ unfreezeVariablesAll!(fg) # freeze again defaultFixedLagOnTree!(fg, 9) -tree, smtasks, hists = solveTree!(fg) +tree = solveTree!(fg) @test lm0 == getVal(fg, :lm0) #Still Frozen @test X1cmp != getVal(fg, :x1) #not frozen # freeze 2,4,6 to all marginalize clique 2 setfreeze!(fg, [:x2, :x4, :x6]) -tree, smtasks, hists = solveTree!(fg; recordcliqs=ls(fg)); +tree = solveTree!(fg; recordcliqs=ls(fg)); #clique 2 should be marginalized and therefor not do up or downsolve @test calcCliquesRecycled(tree) == (7,1,0,0) @@ -99,7 +99,7 @@ tree, smtasks, hists = solveTree!(fg; recordcliqs=ls(fg)); @test !(IIF.solveUp_StateMachine in getindex.(hists[2], 3)) @test areCliqVariablesAllMarginalized(fg, tree.cliques[2]) -tree, smtasks, hists = solveTree!(fg, tree; recordcliqs=ls(fg)); +tree = solveTree!(fg, tree; recordcliqs=ls(fg)); for var in sortDFG(ls(fg)) sppe = getVariable(fg,var) |> getPPE |> IIF.getPPESuggested println("Testing ", var,": ", sppe) @@ -111,7 +111,7 @@ end X1 = deepcopy(getVal(fg, :x1)) setfreeze!(fg, [:x3, :x5]) -tree, smtasks, hists = solveTree!(fg, tree; recordcliqs=ls(fg)); +tree = solveTree!(fg, tree; recordcliqs=ls(fg)); # csmAnimate(tree, hists, frames=1) @test calcCliquesRecycled(tree) == (7,3,4,0) @@ -143,10 +143,10 @@ getSolverParams(fg).treeinit = true # tree = buildTreeReset!(fg, drawpdf=true, show=true) smtasks = Task[] -tree, smt, hists = solveTree!(fg; smtasks=smtasks, recordcliqs=ls(fg)); +tree = solveTree!(fg; smtasks=smtasks, recordcliqs=ls(fg)); addFactor!(fg, [:lm3], Prior(Normal(3, 0.1)), graphinit=false) -_, _, hists = solveTree!(fg, tree; smtasks=smtasks, recordcliqs=ls(fg)); +tree = solveTree!(fg, tree; smtasks=smtasks, recordcliqs=ls(fg)); @test !(IIF.solveUp_StateMachine in getindex.(hists[4], 3)) @@ -187,7 +187,7 @@ getSolverParams(fg).useMsgLikelihoods = true tree = buildTreeReset!(fg)#, drawpdf=true, show=true) smtasks = Task[] -_,_,hists = solveTree!(fg, tree; smtasks=smtasks, recordcliqs=ls(fg)); +tree = solveTree!(fg, tree; smtasks=smtasks, recordcliqs=ls(fg)); for var in sortDFG(ls(fg)) sppe = getVariable(fg,var) |> getPPE |> IIF.getPPESuggested @@ -198,7 +198,7 @@ end # add some more deepcopyGraph!(fg, sfg, vsyms[4:6], fsyms[4:6]) -_,_,hists = solveTree!(fg, tree; smtasks=smtasks, recordcliqs=ls(fg)); +tree = solveTree!(fg, tree; smtasks=smtasks, recordcliqs=ls(fg)); for var in sortDFG(ls(fg)) sppe = getVariable(fg,var) |> getPPE |> IIF.getPPESuggested @@ -209,7 +209,7 @@ end # add some more deepcopyGraph!(fg, sfg, vsyms[7:8], fsyms[7:8]) -_,_,hists = solveTree!(fg, tree; smtasks=smtasks, recordcliqs=ls(fg)); +tree = solveTree!(fg, tree; smtasks=smtasks, recordcliqs=ls(fg)); for var in sortDFG(ls(fg)) sppe = getVariable(fg,var) |> getPPE |> IIF.getPPESuggested @@ -220,7 +220,7 @@ end # add some more,close the loop deepcopyGraph!(fg, sfg, Symbol[], [fsyms[9]]) -_,_,hists = solveTree!(fg, tree; smtasks=smtasks, recordcliqs=ls(fg)); +tree = solveTree!(fg, tree; smtasks=smtasks, recordcliqs=ls(fg)); for var in sortDFG(ls(fg)) sppe = getVariable(fg,var) |> getPPE |> IIF.getPPESuggested @@ -230,7 +230,7 @@ end # force a reshuffle addFactor!(fg, [:x4], Prior(Normal(4.1,0.1))) -_,_,hists = solveTree!(fg, tree; smtasks=smtasks, recordcliqs=ls(fg)); +tree = solveTree!(fg, tree; smtasks=smtasks, recordcliqs=ls(fg)); for var in sortDFG(ls(fg)) sppe = getVariable(fg,var) |> getPPE |> IIF.getPPESuggested @@ -241,7 +241,7 @@ end # and another reuse addFactor!(fg, [:x4], Prior(Normal(3.9,0.1))) -_,_,hists = solveTree!(fg, tree; smtasks=smtasks, recordcliqs=ls(fg)); +tree = solveTree!(fg, tree; smtasks=smtasks, recordcliqs=ls(fg)); for var in sortDFG(ls(fg)) sppe = getVariable(fg,var) |> getPPE |> IIF.getPPESuggested diff --git a/test/testBasicTreeInit.jl b/test/testBasicTreeInit.jl index 9f5a75893..c8bd8cb58 100644 --- a/test/testBasicTreeInit.jl +++ b/test/testBasicTreeInit.jl @@ -5,7 +5,7 @@ using IncrementalInference @testset "basic per clique stopping criteria" begin fg = generateCanonicalFG_lineStep(1) -tree, smt, hist = solveTree!(fg, recordcliqs=[:x0;], limititercliqs=[(:x0=>2);]) +tree = solveTree!(fg, recordcliqs=[:x0;], limititercliqs=[(:x0=>2);]) @test haskey(hist, 1) @@ -13,7 +13,7 @@ tree, smt, hist = solveTree!(fg, recordcliqs=[:x0;], limititercliqs=[(:x0=>2);]) #normal solve should have 11 states, update when more are added. fg = generateCanonicalFG_lineStep(1) -tree, smt, hist = solveTree!(fg, recordcliqs=[:x0;]); +tree = solveTree!(fg, recordcliqs=[:x0;]); @test haskey(hist, 1) @@ -37,7 +37,7 @@ getSolverParams(fg).graphinit = false getSolverParams(fg).treeinit = true getSolverParams(fg).limititers = 50 smtasks = Task[] -tree, smt, hist = solveTree!(fg; smtasks=smtasks, verbose=true, timeout=50, recordcliqs=ls(fg)); +tree = solveTree!(fg; smtasks=smtasks, verbose=true, timeout=50, recordcliqs=ls(fg)); end @@ -60,7 +60,7 @@ getSolverParams(fg).treeinit = true # mkpath(getLogPath(fg)) # verbosefid = open(joinLogPath(fg, "csmVerbose.log"),"w") -tree, smt, hist = solveTree!(fg, timeout=70) # , verbose=true, verbosefid=verbosefid) +tree = solveTree!(fg, timeout=70) # , verbose=true, verbosefid=verbosefid) # flush(verbosefid) # close(verbosefid) diff --git a/test/testCommonConvWrapper.jl b/test/testCommonConvWrapper.jl index e41ae5f70..e63f4f961 100644 --- a/test/testCommonConvWrapper.jl +++ b/test/testCommonConvWrapper.jl @@ -182,7 +182,7 @@ pts_ = getBelief(fg,:x2) |> getPoints ## -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) ## diff --git a/test/testCompareVariablesFactors.jl b/test/testCompareVariablesFactors.jl index 9ee6a7137..37140bd3b 100644 --- a/test/testCompareVariablesFactors.jl +++ b/test/testCompareVariablesFactors.jl @@ -51,7 +51,7 @@ fg2 = deepcopy(fg) # easier error messages getSolverParams(fg).multiproc = false -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) x1a = getVariable(fg, :x0) x1b = getVariable(fg2, :x0) diff --git a/test/testDeadReckoningTether.jl b/test/testDeadReckoningTether.jl index 97ab8beed..d22dbaea6 100644 --- a/test/testDeadReckoningTether.jl +++ b/test/testDeadReckoningTether.jl @@ -92,7 +92,7 @@ vo = getEliminationOrder(fg) tree = buildTreeFromOrdering!(fg,vo) -tree2, smt, hists = solveTree!(fg); +tree2 = solveTree!(fg); @test !isInitialized(fg, :deadreckon_x0) diff --git a/test/testDefaultDeconv.jl b/test/testDefaultDeconv.jl index 660e4b310..48b2aaec7 100644 --- a/test/testDefaultDeconv.jl +++ b/test/testDefaultDeconv.jl @@ -92,7 +92,7 @@ getSolverParams(fg).useMsgLikelihoods = true vo = [:x3,:x5,:x1,:l1,:x4,:x2,:x6,:x0] mkpath(getLogPath(fg)) -tree, smt, hists = solveTree!(fg, eliminationOrder=vo, timeout=40, verbose=true) +tree = solveTree!(fg, eliminationOrder=vo, timeout=40, verbose=true) # msg = getMsgUpThis(tree.cliques[2]) msg = IIF.getMessageBuffer(tree.cliques[2]).upRx diff --git a/test/testEuclidDistance.jl b/test/testEuclidDistance.jl index e2c430eb0..52ca3d78a 100644 --- a/test/testEuclidDistance.jl +++ b/test/testEuclidDistance.jl @@ -22,7 +22,7 @@ addFactor!(fg, [:x0;:x1], eud) ## -tree, _, = solveTree!(fg) +tree = solveTree!(fg) ## @@ -55,7 +55,7 @@ addVariable!(fg, :x1, ContinuousEuclid{2}) eud = EuclidDistance(Normal(10,1)) addFactor!(fg, [:x0;:x1], eud) -tree, _, = solveTree!(fg) +tree = solveTree!(fg) @test isapprox(getPPE(fg, :x0).suggested[1], 0, atol=1) @test isapprox(getPPE(fg, :x0).suggested[1], 0, atol=1) @@ -119,7 +119,7 @@ fg = IIF.generateCanonicalFG_EuclidDistance(points) for i in 1:1 # global TP, N - tree, _, = solveTree!(fg, eliminationOrder=eo); + tree = solveTree!(fg, eliminationOrder=eo); L1_ = getBelief(fg, :l1) |> getPoints @cast L1[i,j] := L1_[j][i] @@ -219,7 +219,7 @@ initManual!(fg, :l1, [rand(init) for _ in 1:N]) eliminationOrder = [:l1; :x2; :x1] # one clique eliminationOrder eliminationOrder = [:l1; :x2; :x1] -tree,_ = solveTree!(fg; eliminationOrder) +tree = solveTree!(fg; eliminationOrder) ## diff --git a/test/testHasPriors913.jl b/test/testHasPriors913.jl index 9f389f389..ee8651bdd 100644 --- a/test/testHasPriors913.jl +++ b/test/testHasPriors913.jl @@ -32,12 +32,12 @@ addFactor!(fg, [:x0], prpo) fg.solverParams.useMsgLikelihoods = true smtasks = Task[] -tree, smt, hists = solveTree!(fg; smtasks=smtasks, verbose=true, timeout=30); +tree = solveTree!(fg; smtasks=smtasks, verbose=true, timeout=30); @warn("hasPriors test needs multiple solves") -tree, smt, hists = solveTree!(fg); -tree, smt, hists = solveTree!(fg); -# tree, smt, hists = solveTree!(fg; smtasks, verbose=true, timeout=20, recordcliqs=ls(fg)); +tree = solveTree!(fg); +tree = solveTree!(fg); +# tree = solveTree!(fg; smtasks, verbose=true, timeout=20, recordcliqs=ls(fg)); for i = 0:4 ppe = getPPE(getVariable(fg, Symbol("x$i"))).suggested[1] diff --git a/test/testJointEnforcement.jl b/test/testJointEnforcement.jl index b96fa76f0..5ff41d8f6 100644 --- a/test/testJointEnforcement.jl +++ b/test/testJointEnforcement.jl @@ -101,7 +101,7 @@ jointmsg = IIF._generateMsgJointRelativesPriors(cfg2, :default, cliq2) ## getSolverParams(fg).useMsgLikelihoods = true -tree, _, = solveTree!(fg, eliminationOrder=vo); +tree = solveTree!(fg, eliminationOrder=vo); ## get up message from child clique @@ -201,7 +201,7 @@ jointmsg = IIF._generateMsgJointRelativesPriors(cfg2, :default, cliq2) ## similar during solving getSolverParams(fg).useMsgLikelihoods = true -tree, _, = solveTree!(fg, eliminationOrder=vo); +tree = solveTree!(fg, eliminationOrder=vo); ## get up message from child clique diff --git a/test/testMixtureLinearConditional.jl b/test/testMixtureLinearConditional.jl index 6b204301c..63b70f35c 100644 --- a/test/testMixtureLinearConditional.jl +++ b/test/testMixtureLinearConditional.jl @@ -166,7 +166,7 @@ addFactor!(fg, [:x0,:x1], mlr) # dfgplot(fg) # end -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) ## diff --git a/test/testMultiHypo2Door.jl b/test/testMultiHypo2Door.jl index 777499ab6..f24f6d065 100644 --- a/test/testMultiHypo2Door.jl +++ b/test/testMultiHypo2Door.jl @@ -62,7 +62,7 @@ addFactor!(fg, [:x1; :x2], LinearRelative(Normal(x2-x1, odom_noise))) ## Solve graph -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) # drawGraph(fg) # drawTree(tree, show=true) diff --git a/test/testMultihypoAndChain.jl b/test/testMultihypoAndChain.jl index 77cb62f52..56dedf565 100644 --- a/test/testMultihypoAndChain.jl +++ b/test/testMultihypoAndChain.jl @@ -117,7 +117,7 @@ addFactor!(fg, [:x1;:l1;:l1_0], LinearRelative(Normal(l1-x1, lnoise)), multihypo addFactor!(fg, [:x2;:l2;:l2_0], LinearRelative(Normal(l2-x2, lnoise)), multihypo=[1;1/2;1/2]) addFactor!(fg, [:x1;:x2], LinearRelative(Normal(0, Onoise))) -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) # drawTree(tree, show=true) diff --git a/test/testMultimodal1D.jl b/test/testMultimodal1D.jl index 4ef5b897b..47d24c2bc 100644 --- a/test/testMultimodal1D.jl +++ b/test/testMultimodal1D.jl @@ -75,8 +75,8 @@ addFactor!(fg, [:x1; :lm1; :lp1], LinearRelative(Normal(-20., meas_noise)), mult varor = [:x1, :lm1, :lm2, :lp1, :lp2] # tree = buildTreeReset!(fg, varor) -tree, smt, hist = solveTree!(fg, eliminationOrder = varor); -# tree, smt, hist = solveTree!(fg, eliminationOrder = varor); +tree = solveTree!(fg, eliminationOrder = varor); +# tree = solveTree!(fg, eliminationOrder = varor); # plotKDE(fg, ls(fg)) @@ -119,7 +119,7 @@ end # Gadfly.set_default_plot_size(35cm, 20cm) # # -# # tree, smt, hist = solveTree!(fg) +# # tree = solveTree!(fg) # varIds = [ :x1, :lp1, :lp2, :lm1, :lm2] # pkde = plotKDE(fg, varIds) # diff --git a/test/testProductReproducable.jl b/test/testProductReproducable.jl index 7be8a1a58..24dcdffff 100644 --- a/test/testProductReproducable.jl +++ b/test/testProductReproducable.jl @@ -25,7 +25,7 @@ addFactor!(fg, [:d;:e], LinearRelative(Normal(10, 1))) ensureAllInitialized!(fg) -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) @test (Statistics.mean(getPoints(getKDE(fg, :a)))- 0 |> abs) < 3 diff --git a/test/testSkipUpDown.jl b/test/testSkipUpDown.jl index 6d1d8f753..0d9bb8bc5 100644 --- a/test/testSkipUpDown.jl +++ b/test/testSkipUpDown.jl @@ -18,7 +18,7 @@ getSolverParams(fg).useMsgLikelihoods = true getSolverParams(fg).downsolve = false smtasks = Task[] -tree, smt, hists = solveTree!(fg; smtasks=smtasks, recordcliqs=[:x4]); +tree = solveTree!(fg; smtasks=smtasks, recordcliqs=[:x4]); # See if downsolve was called @test !(IIF.solveDown_StateMachine in getindex.(hists[2], 3)) @@ -34,7 +34,7 @@ end getSolverParams(fg).upsolve = false getSolverParams(fg).downsolve = true -tree, smt, hists = solveTree!(fg; smtasks=smtasks, recordcliqs=[:x4]); +tree = solveTree!(fg; smtasks=smtasks, recordcliqs=[:x4]); # See if upsolved was called @test !(IIF.solveUp_StateMachine in getindex.(hists[2], 3)) @@ -45,7 +45,7 @@ for var in sortDFG(ls(fg)) end # recycled downsolve only -tree, smt, hists = solveTree!(fg, tree; smtasks=smtasks, recordcliqs=[:x4]); +tree = solveTree!(fg, tree; smtasks=smtasks, recordcliqs=[:x4]); @test !(IIF.solveUp_StateMachine in getindex.(hists[2], 3)) diff --git a/test/testSolveOrphanedFG.jl b/test/testSolveOrphanedFG.jl index 154619e47..7849fbf23 100644 --- a/test/testSolveOrphanedFG.jl +++ b/test/testSolveOrphanedFG.jl @@ -28,7 +28,7 @@ addFactor!(fg, [:x11;:x12], LinearRelative(Normal(-10,1.0))) # getSolverParams(fg).showtree = true # solve factor graph with two orphaned components vo = Symbol[:x12, :x2, :x0, :x11, :x1, :x10] -tree, smt, hist = solveTree!(fg, eliminationOrder=vo) +tree = solveTree!(fg, eliminationOrder=vo) # test tree will have two different root nodes @test getEliminationOrder(tree) == vo diff --git a/test/testSpecialEuclidean2Mani.jl b/test/testSpecialEuclidean2Mani.jl index ae79a2a52..9d3aa6cf8 100644 --- a/test/testSpecialEuclidean2Mani.jl +++ b/test/testSpecialEuclidean2Mani.jl @@ -85,7 +85,7 @@ f = addFactor!(fg, [:x1, :x2], mf) #test new error from solvetree # smtasks = Task[] -@test solveTree!(fg; smtasks, verbose=true) isa Tuple +@test solveTree!(fg; smtasks, verbose=true) isa AbstractBayesTree ## test partial prior issue @@ -165,7 +165,7 @@ solveTree!(fg; smtasks); #FIXME this may show some bug in propagateBelief caused by empty factors fg.solverParams.useMsgLikelihoods = true -@test_broken solveTree!(fg; smtasks) isa Tuple +@test_broken solveTree!(fg; smtasks) isa AbstractBayesTree end diff --git a/test/testSpecialSampler.jl b/test/testSpecialSampler.jl index fba86ee25..36877cb77 100644 --- a/test/testSpecialSampler.jl +++ b/test/testSpecialSampler.jl @@ -43,7 +43,7 @@ addFactor!(fg, [:x0], SpecialPrior(Normal())) addVariable!(fg, :x1, ContinuousScalar) addFactor!(fg, [:x0;:x1], SpecialLinearOffset(Normal(10,1))) -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) @test getPPE(fg, :x0).suggested[1] |> abs < 1.0 diff --git a/test/testTreeFunctions.jl b/test/testTreeFunctions.jl index f4283d504..2b55050cd 100644 --- a/test/testTreeFunctions.jl +++ b/test/testTreeFunctions.jl @@ -20,7 +20,7 @@ fg = generateCanonicalFG_lineStep(3; # getSolverParams(fg).showtree = true smtasks = Task[] -oldtree, smt, hists = solveTree!(fg; smtasks=smtasks, verbose=false, recordcliqs=ls(fg)); +oldtree = solveTree!(fg; smtasks=smtasks, verbose=false, recordcliqs=ls(fg)); @test IIF.isRoot(oldtree, IIF.CliqueId(1)) @test IIF.isRoot(oldtree, IIF.getClique(oldtree,1)) @@ -37,7 +37,7 @@ IIF.deleteClique!(oldtree, IIF.CliqueId(1)) # drawTree(oldtree, show=true) -tree, smt, hists = solveTree!(fg, oldtree; smtasks=smtasks, verbose=false, recordcliqs=ls(fg)); +tree = solveTree!(fg, oldtree; smtasks=smtasks, verbose=false, recordcliqs=ls(fg)); # csmAnimate(tree, hists, frames=1) diff --git a/test/testTreeMessageUtils.jl b/test/testTreeMessageUtils.jl index 52042eec5..8ada368e0 100644 --- a/test/testTreeMessageUtils.jl +++ b/test/testTreeMessageUtils.jl @@ -18,7 +18,7 @@ deleteFactor!.(fg, [Symbol("x$(i)lm0f1") for i=1:(N-1)]) # fixed eliminationOrder for repeatability eliminationOrder = [:x3, :x8, :x5, :x1, :x6, :lm0, :x7, :x4, :x2, :x0] smtasks = Task[] -tree, smt, hists = solveTree!(fg; smtasks=smtasks, eliminationOrder=eliminationOrder) +tree = solveTree!(fg; smtasks=smtasks, eliminationOrder=eliminationOrder) allmsgs = getTreeCliqUpMsgsAll(tree) #TODO better test but for now spot check a few keys diff --git a/test/testVariousNSolveSize.jl b/test/testVariousNSolveSize.jl index 700e40f49..f35641c4f 100644 --- a/test/testVariousNSolveSize.jl +++ b/test/testVariousNSolveSize.jl @@ -26,7 +26,7 @@ getSolverParams(fg).N = 150 # getSolverParams(fg).multiproc = false # getSolverParams(fg).async = false smtasks = Task[] -tree, smt, hist = solveTree!(fg; smtasks, recordcliqs=ls(fg)); +tree = solveTree!(fg; smtasks, recordcliqs=ls(fg)); ## @@ -38,7 +38,7 @@ pts_ = getBelief(fg, :x1) |> getPoints # test with change for second solve getSolverParams(fg).N = 200 -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) pts_ = getBelief(fg, :x1) |> getPoints @test length(pts_) == 200 @@ -46,7 +46,7 @@ pts_ = getBelief(fg, :x1) |> getPoints println("test making N smaller than current") getSolverParams(fg).N = 99 -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) pts_ = getBelief(fg, :x1) |> getPoints @warn "removing older solve N size test, likely to be reviewed and updated to new workflow in the future" diff --git a/test/testlocalconstraintexamples.jl b/test/testlocalconstraintexamples.jl index 3e58a679b..222870b37 100644 --- a/test/testlocalconstraintexamples.jl +++ b/test/testlocalconstraintexamples.jl @@ -37,7 +37,7 @@ pts_ = approxConv(fg, :x1x2f1, :x2) @show Statistics.mean(pts,dims=2) @test norm(Statistics.mean(pts,dims=2)-[50.0]) < 15.0 -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) # ensureAllInitialized!(fg) # tree = buildTreeReset!(fg, drawpdf=false) # inferOverTree!(fg, tree) diff --git a/test/testpartialconstraint.jl b/test/testpartialconstraint.jl index 99ab70195..6316d643d 100644 --- a/test/testpartialconstraint.jl +++ b/test/testpartialconstraint.jl @@ -112,7 +112,7 @@ end ## getSolverParams(fg).N = N -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) pts_ = getVal(fg, :x1) @cast pts[i,j] := pts_[j][i] @@ -292,7 +292,7 @@ val_, = predictbelief(fg, v2, [f3;f4], N=N) ## getSolverParams(fg).N = N -tree, smt, hist = solveTree!(fg) +tree = solveTree!(fg) pts_ = getVal(fg, :x1) From 0835edacde8812757653a5d03bfe3ba8e4e14a6d Mon Sep 17 00:00:00 2001 From: dehann Date: Thu, 9 Sep 2021 14:49:46 -0400 Subject: [PATCH 02/12] update news for solveTree! --- NEWS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS.md b/NEWS.md index 6ca5dba04..953fc783c 100644 --- a/NEWS.md +++ b/NEWS.md @@ -24,6 +24,7 @@ The list below highlights major breaking changes, and please note that significa - Deprecating `approxConvBinary`, use `approxConvBelief` instead. - Removing obsolete `approxConvCircular`, use `approxConvBelief` instead. - `getSample` should return a single sample and no longer takes the N(number of samples) parameter. +- `solveTree!` / `solveGraph!` now returns just one value `tree<:AbstractBayesTree`. Previous version returned three values, `tree, smt, hist` (#1379). # Major changes in v0.24 From 23d523ad064b617ac31929debabe255bb92844da Mon Sep 17 00:00:00 2001 From: dehann Date: Thu, 9 Sep 2021 14:51:57 -0400 Subject: [PATCH 03/12] bug fix test --- test/testBasicCSM.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testBasicCSM.jl b/test/testBasicCSM.jl index e4555b1e3..1480b552c 100644 --- a/test/testBasicCSM.jl +++ b/test/testBasicCSM.jl @@ -55,7 +55,7 @@ getSolverParams(dfg).limititers = 50 ## getSolverParams(dfg).async = true -tree, smtasks, hist = solveTree!(dfg) #, recordcliqs=ls(dfg)) +tree = solveTree!(dfg) #, recordcliqs=ls(dfg)) pts_ = getBelief(dfg, :c) |> getPoints TensorCast.@cast pts[i,j] := pts_[j][i] From 874c7bb30c3f67a4db596354aa3e8af0f5fe8730 Mon Sep 17 00:00:00 2001 From: dehann Date: Thu, 9 Sep 2021 15:07:57 -0400 Subject: [PATCH 04/12] fix tests --- examples/RobotFourDoor.jl | 2 +- src/services/HeatmapSampler.jl | 8 ++++++++ test/fourdoortest.jl | 2 +- test/testCSMMonitor.jl | 2 +- test/testExpXstroke.jl | 6 +++--- 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/examples/RobotFourDoor.jl b/examples/RobotFourDoor.jl index 5c26f4b8c..2a34220bc 100644 --- a/examples/RobotFourDoor.jl +++ b/examples/RobotFourDoor.jl @@ -62,7 +62,7 @@ plotKDE(fg, :x4) addFactor!(fg,[:x4], doorPrior) # solve over all data -tree, smt, hists = solveTree!(fg) +tree = solveTree!(fg) # list variables and factors in fg @show ls(fg) # |> sortDFG diff --git a/src/services/HeatmapSampler.jl b/src/services/HeatmapSampler.jl index 1212adfab..409fbecb1 100644 --- a/src/services/HeatmapSampler.jl +++ b/src/services/HeatmapSampler.jl @@ -59,6 +59,10 @@ function fitKDE(support, kde!(support, kernel_bw, weights) end + +global allthres = Dict{Int, Any}() + + function HeatmapDensityRegular( data::AbstractMatrix{<:Real}, domain::Tuple{<:AbstractVector{<:Real},<:AbstractVector{<:Real}}, level::Real, @@ -68,8 +72,12 @@ function HeatmapDensityRegular( data::AbstractMatrix{<:Real}, bw_factor::Real=0.7, # kde spread between domain points N::Int=10000 ) # + global allthres + # select the support from raw data support_, weights_, roi = getLevelSetSigma(data, level, sigma, domain...; sigma_scale=sigma_scale) + allthres[length(allthres)+1] = roi + # constuct a pre-density from which to draw intermediate samples density_ = fitKDE(support_, weights_, domain...; bw_factor=bw_factor) pts_preIS, = sample(density_, N) diff --git a/test/fourdoortest.jl b/test/fourdoortest.jl index c4c32f9e0..a9ef5983c 100644 --- a/test/fourdoortest.jl +++ b/test/fourdoortest.jl @@ -51,7 +51,7 @@ addFactor!(fg,[:x3;:x4], LinearRelative( Normal(200.0,4.0))) addFactor!(fg,[:x4], doorPrior) # solve over all data -tree, smt, hists = solveTree!(fg) +tree = solveTree!(fg) ## diff --git a/test/testCSMMonitor.jl b/test/testCSMMonitor.jl index 378224c29..9a7c78175 100644 --- a/test/testCSMMonitor.jl +++ b/test/testCSMMonitor.jl @@ -47,7 +47,7 @@ initAll!(fg) # add a broken factor - mid addFactor!(fg, [:x9, :lm10], BrokenFactor(Normal()); graphinit=false) smtasks = Task[] -@test_throws CompositeException tree, smt, hist = IIF.solveTree!(fg; smtasks=smtasks); +@test_throws CompositeException tree = IIF.solveTree!(fg; smtasks=smtasks); sleep(0.1) ## Test parametric solve also diff --git a/test/testExpXstroke.jl b/test/testExpXstroke.jl index a856ea433..f8062eb62 100644 --- a/test/testExpXstroke.jl +++ b/test/testExpXstroke.jl @@ -33,7 +33,7 @@ getSolverParams(fg).useMsgLikelihoods = true # ENV["JULIA_DEBUG"] = :csm_4 smtasks = Task[] -tree, smt, hist = IIF.solveTree!(fg; smtasks=smtasks); #, recordcliqs=ls(fg)); +hist = IIF.solveTree!(fg; smtasks=smtasks); #, recordcliqs=ls(fg)); ## @@ -77,7 +77,7 @@ getSolverParams(fg).treeinit = true getSolverParams(fg).useMsgLikelihoods = true smtasks = Task[] -tree, smt, hists = IIF.solveTree!(fg; smtasks=smtasks); +tree = IIF.solveTree!(fg; smtasks=smtasks); ## @@ -115,7 +115,7 @@ getSolverParams(fg).treeinit = true getSolverParams(fg).useMsgLikelihoods = true smtasks = Task[] -tree, smt, hists = IIF.solveTree!(fg; smtasks=smtasks); +tree = IIF.solveTree!(fg; smtasks=smtasks); for var in sortDFG(ls(fg)) sppe = getVariable(fg,var) |> getPPE |> IIF.getPPESuggested From e21583de62ef42c0fae3eefe261b98dba3abb2d1 Mon Sep 17 00:00:00 2001 From: dehann Date: Thu, 9 Sep 2021 15:32:44 -0400 Subject: [PATCH 05/12] fix tests --- src/SolverAPI.jl | 8 ++++---- test/testBasicRecycling.jl | 5 ++++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/SolverAPI.jl b/src/SolverAPI.jl index 27ce186e5..85975609a 100644 --- a/src/SolverAPI.jl +++ b/src/SolverAPI.jl @@ -372,8 +372,7 @@ function solveTree!(dfgl::AbstractDFG, oldtree.eliminationOrder = tree.eliminationOrder oldtree.buildTime = tree.buildTime - hist = !opt.async ? fetchCliqHistoryAll!(smtasks) : hist - + if opt.drawtree && opt.async @warn "due to async=true, only keeping task pointer, not stopping the drawtreerate task! Consider not using .async together with .drawtreerate != 0" push!(smtasks, treetask) @@ -383,9 +382,10 @@ function solveTree!(dfgl::AbstractDFG, # if debugging and not async then also print the CSMHistory if opt.dbg && !opt.async - printCSMHistorySequential(hist, joinLogPath(dfgl,"HistoryCSMAll.txt") ) + hists = !opt.async ? fetchCliqHistoryAll!(smtasks) : hist + printCSMHistorySequential(hists, joinLogPath(dfgl,"HistoryCSMAll.txt") ) end - + return oldtree end diff --git a/test/testBasicRecycling.jl b/test/testBasicRecycling.jl index 9f112756f..2ec8afb49 100644 --- a/test/testBasicRecycling.jl +++ b/test/testBasicRecycling.jl @@ -91,7 +91,10 @@ tree = solveTree!(fg) # freeze 2,4,6 to all marginalize clique 2 setfreeze!(fg, [:x2, :x4, :x6]) -tree = solveTree!(fg; recordcliqs=ls(fg)); +smtasks = Task[]; +tree = solveTree!(fg; recordcliqs=ls(fg); smtasks=smtasks); + +hists = fetchCliqHistoryAll!(smtasks) #clique 2 should be marginalized and therefor not do up or downsolve @test calcCliquesRecycled(tree) == (7,1,0,0) From c3e5d1dbb55ad4550c82ecc14f99febb33ef0899 Mon Sep 17 00:00:00 2001 From: dehann Date: Thu, 9 Sep 2021 16:01:29 -0400 Subject: [PATCH 06/12] bug fix --- test/testBasicRecycling.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testBasicRecycling.jl b/test/testBasicRecycling.jl index 2ec8afb49..1254d9002 100644 --- a/test/testBasicRecycling.jl +++ b/test/testBasicRecycling.jl @@ -92,7 +92,7 @@ tree = solveTree!(fg) # freeze 2,4,6 to all marginalize clique 2 setfreeze!(fg, [:x2, :x4, :x6]) smtasks = Task[]; -tree = solveTree!(fg; recordcliqs=ls(fg); smtasks=smtasks); +tree = solveTree!(fg; recordcliqs=ls(fg), smtasks=smtasks); hists = fetchCliqHistoryAll!(smtasks) From 48b8b0b328c950808f0d1c4f707e69c3377e34c0 Mon Sep 17 00:00:00 2001 From: dehann Date: Thu, 9 Sep 2021 16:19:33 -0400 Subject: [PATCH 07/12] more smtasks fixes --- test/testBasicRecycling.jl | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/test/testBasicRecycling.jl b/test/testBasicRecycling.jl index 1254d9002..9a0c00feb 100644 --- a/test/testBasicRecycling.jl +++ b/test/testBasicRecycling.jl @@ -63,7 +63,9 @@ addFactor!(fg, [:x7,:x8], LinearRelative(Normal(1.0, 0.1))) addFactor!(fg, [:x8,:x9], LinearRelative(Normal(1.0, 0.1))) addFactor!(fg, [:lm0, :x9], LinearRelative(Normal(9,0.1))) -tree = solveTree!(fg; recordcliqs=ls(fg)); +smtasks = Task[]; +tree = solveTree!(fg; recordcliqs=ls(fg), smtasks=smtasks); +hists = fetchCliqHistoryAll!(smtasks) #clique 7 should be marginalized and therefor not do up or downsolve @test calcCliquesRecycled(tree) == (7,1,0,0) @@ -145,11 +147,12 @@ getSolverParams(fg).treeinit = true # tree = buildTreeReset!(fg, drawpdf=true, show=true) -smtasks = Task[] -tree = solveTree!(fg; smtasks=smtasks, recordcliqs=ls(fg)); +tree = solveTree!(fg; recordcliqs=ls(fg)); # , smtasks=smtasks addFactor!(fg, [:lm3], Prior(Normal(3, 0.1)), graphinit=false) +smtasks = Task[] tree = solveTree!(fg, tree; smtasks=smtasks, recordcliqs=ls(fg)); +hists = fetchCliqHistoryAll!(smtasks) @test !(IIF.solveUp_StateMachine in getindex.(hists[4], 3)) From 695158278d6a4e72586fa5dbdd3d7bd342e4d4b8 Mon Sep 17 00:00:00 2001 From: dehann Date: Thu, 9 Sep 2021 16:44:40 -0400 Subject: [PATCH 08/12] fix test hists --- test/testSkipUpDown.jl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/testSkipUpDown.jl b/test/testSkipUpDown.jl index 0d9bb8bc5..8ee6cacf0 100644 --- a/test/testSkipUpDown.jl +++ b/test/testSkipUpDown.jl @@ -34,7 +34,9 @@ end getSolverParams(fg).upsolve = false getSolverParams(fg).downsolve = true +smtasks = Task[] tree = solveTree!(fg; smtasks=smtasks, recordcliqs=[:x4]); +hists = fetchCliqHistoryAll!(smtasks); # See if upsolved was called @test !(IIF.solveUp_StateMachine in getindex.(hists[2], 3)) From 1924adc4fd866010162efc42ecfd98499fa00aa8 Mon Sep 17 00:00:00 2001 From: dehann Date: Thu, 9 Sep 2021 17:11:53 -0400 Subject: [PATCH 09/12] fix test bug --- test/testSkipUpDown.jl | 1 + 1 file changed, 1 insertion(+) diff --git a/test/testSkipUpDown.jl b/test/testSkipUpDown.jl index 8ee6cacf0..eddf08dbd 100644 --- a/test/testSkipUpDown.jl +++ b/test/testSkipUpDown.jl @@ -19,6 +19,7 @@ getSolverParams(fg).downsolve = false smtasks = Task[] tree = solveTree!(fg; smtasks=smtasks, recordcliqs=[:x4]); +hists = fetchCliqHistoryAll!(smtasks) # See if downsolve was called @test !(IIF.solveDown_StateMachine in getindex.(hists[2], 3)) From fe4bf56e0ba54a37ca5712bfd1b304d400a1a9fc Mon Sep 17 00:00:00 2001 From: dehann Date: Thu, 9 Sep 2021 17:37:38 -0400 Subject: [PATCH 10/12] more fixes --- test/testBasicTreeInit.jl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/testBasicTreeInit.jl b/test/testBasicTreeInit.jl index c8bd8cb58..7c188f16e 100644 --- a/test/testBasicTreeInit.jl +++ b/test/testBasicTreeInit.jl @@ -5,7 +5,9 @@ using IncrementalInference @testset "basic per clique stopping criteria" begin fg = generateCanonicalFG_lineStep(1) -tree = solveTree!(fg, recordcliqs=[:x0;], limititercliqs=[(:x0=>2);]) +smtasks = Task[] +tree = solveTree!(fg, smtasks=smtasks, recordcliqs=[:x0;], limititercliqs=[(:x0=>2);]) +hist = fetchCliqHistoryAll!(smtasks) @test haskey(hist, 1) @@ -13,7 +15,9 @@ tree = solveTree!(fg, recordcliqs=[:x0;], limititercliqs=[(:x0=>2);]) #normal solve should have 11 states, update when more are added. fg = generateCanonicalFG_lineStep(1) -tree = solveTree!(fg, recordcliqs=[:x0;]); +smtasks = Task[] +tree = solveTree!(fg, smtasks=smtasks, recordcliqs=[:x0;]); +hist = fetchCliqHistoryAll!(smtasks) @test haskey(hist, 1) From 23ca037c692a2bd6effa9af62374792b85b8acb8 Mon Sep 17 00:00:00 2001 From: dehann Date: Thu, 9 Sep 2021 20:50:01 -0400 Subject: [PATCH 11/12] fix test for new solveTree! api --- test/testMultihypoAndChain.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testMultihypoAndChain.jl b/test/testMultihypoAndChain.jl index 56dedf565..c14b14b9a 100644 --- a/test/testMultihypoAndChain.jl +++ b/test/testMultihypoAndChain.jl @@ -62,7 +62,7 @@ addFactor!(fg, [:x1; :l2; :l1], p2p, multihypo = [1, pRight, pWrong]) eo = [:l2,:x1,:x0,:l1] # fg.solverParams.graphinit=true smtasks = Task[] -tree, _, = solveTree!(fg, eliminationOrder=eo) #, smtasks=smtasks, recordcliqs=ls(fg)); +tree = solveTree!(fg, eliminationOrder=eo) #, smtasks=smtasks, recordcliqs=ls(fg)); # hists = fetchCliqHistoryAll!(smtasks) From d720baad80e991a0ef865f7a31ef03cf9521a633 Mon Sep 17 00:00:00 2001 From: dehann Date: Thu, 9 Sep 2021 21:35:57 -0400 Subject: [PATCH 12/12] more test fixes --- test/testBasicParametric.jl | 6 +++--- test/testCSMMonitor.jl | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/test/testBasicParametric.jl b/test/testBasicParametric.jl index a7a6f8859..aa95e5e38 100644 --- a/test/testBasicParametric.jl +++ b/test/testBasicParametric.jl @@ -84,7 +84,7 @@ foreach(x->getSolverData(getVariable(fg,x.first),:parametric).val[1] .= x.second # getSolverParams(fg).async = true getSolverParams(fg).graphinit = false -tree2, smt, hist = IIF.solveTree!(fg; algorithm = :parametric) #, recordcliqs=ls(fg)) +tree2 = IIF.solveTree!(fg; algorithm = :parametric) #, recordcliqs=ls(fg)) for i in 0:10 @@ -150,7 +150,7 @@ foreach(x->getSolverData(getVariable(fg,x.first),:parametric).val[1] .= x.second # global smt # global hist #force message passing with manual variable order -tree2, smt, hist = solveTree!(fg; algorithm=:parametric, eliminationOrder=[:x0, :x2, :x1]) +tree2 = solveTree!(fg; algorithm=:parametric, eliminationOrder=[:x0, :x2, :x1]) # end foreach(v->println(v.label, ": ", DFG.getSolverData(v, :parametric).val), getVariables(fg)) @@ -189,7 +189,7 @@ foreach(x->getSolverData(getVariable(fg,x.first),:parametric).val[1] .= x.second # fg.solverParams.drawtree = true # fg.solverParams.dbg = false getSolverParams(fg).graphinit = false -tree2, smt, hist = IIF.solveTree!(fg; algorithm=:parametric) +tree2 = IIF.solveTree!(fg; algorithm=:parametric) # print results if false diff --git a/test/testCSMMonitor.jl b/test/testCSMMonitor.jl index 9a7c78175..f3d7c0618 100644 --- a/test/testCSMMonitor.jl +++ b/test/testCSMMonitor.jl @@ -58,7 +58,7 @@ addFactor!(fg, [:x9, :lm10], BrokenFactor(Normal()); graphinit=false) ## # IIF.solveTree!(fg; smtasks=smtasks, algorithm = :parametric) ## -@test_throws CompositeException tree2, smt, hist = IIF.solveTree!(fg; smtasks=smtasks, algorithm = :parametric) +@test_throws CompositeException tree2 = IIF.solveTree!(fg; smtasks=smtasks, algorithm = :parametric) sleep(0.1) deleteFactor!(fg, :x9lm10f2) @@ -66,14 +66,14 @@ deleteFactor!(fg, :x9lm10f2) ## add a broken factor - leave addFactor!(fg, [:x10, :lm10], BrokenFactor(Normal()); graphinit=false) -@test_throws CompositeException tree2, smt, hist = IIF.solveTree!(fg; smtasks=smtasks, algorithm = :parametric) +@test_throws CompositeException tree2 = IIF.solveTree!(fg; smtasks=smtasks, algorithm = :parametric) sleep(0.1) deleteFactor!(fg, :x10lm10f2) ## add a broken factor - root addFactor!(fg, [:x7, :lm10], BrokenFactor(Normal()); graphinit=false) -@test_throws CompositeException tree2, smt, hist = IIF.solveTree!(fg; smtasks=smtasks, algorithm = :parametric) +@test_throws CompositeException tree2 = IIF.solveTree!(fg; smtasks=smtasks, algorithm = :parametric) ##