From 63867ad1598a7f59eded277c810082d1b2b49a95 Mon Sep 17 00:00:00 2001 From: Johannes Terblanche Date: Wed, 25 Jun 2025 17:51:35 +0200 Subject: [PATCH 1/4] implement mergeVariableStates --- src/services/DFGVariable.jl | 7 +++++++ test/testBlocks.jl | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/services/DFGVariable.jl b/src/services/DFGVariable.jl index 9ca42c2e..a090fbe3 100644 --- a/src/services/DFGVariable.jl +++ b/src/services/DFGVariable.jl @@ -733,6 +733,13 @@ function mergeVariableState!(v::VariableCompute, vnd::VariableState) return 1 end +function mergeVariableStates!(dfg::AbstractDFG, varLabel_state_pairs::Vector{Pair{Symbol, VariableState}}) + cnt = asyncmap(varLabel_state_pairs) do (varLabel, state) + return mergeVariableState!(dfg, varLabel, state) + end + return sum(cnt) +end + function copytoVariableState!( dfg::AbstractDFG, variableLabel::Symbol, diff --git a/test/testBlocks.jl b/test/testBlocks.jl index ba484c80..49c12c31 100644 --- a/test/testBlocks.jl +++ b/test/testBlocks.jl @@ -792,8 +792,8 @@ function VSDTestBlock!(fg, v1) @test mergeVariableState!(fg, :a, vnd) == 1 # Bulk copy update x0 - @test updateVariableSolverData!(fg, [v1], :default) == nothing - + @test DFG.mergeVariableStates!(fg, Vector{Pair{Symbol, VariableState}}([:a=>vnd])) == 1 + altVnd = vnd |> deepcopy keepVnd = getVariableState(getVariable(fg, :a), :parametric) |> deepcopy altVnd.infoPerCoord .= [-99.0;] From bd1dabdfec98ac00daec796da4e86a580d1a091a Mon Sep 17 00:00:00 2001 From: Johannes Terblanche <6612981+Affie@users.noreply.github.com> Date: Wed, 25 Jun 2025 17:59:15 +0200 Subject: [PATCH 2/4] Apply suggestions from code review Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- src/services/DFGVariable.jl | 5 ++++- test/testBlocks.jl | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/services/DFGVariable.jl b/src/services/DFGVariable.jl index a090fbe3..e9b64951 100644 --- a/src/services/DFGVariable.jl +++ b/src/services/DFGVariable.jl @@ -733,7 +733,10 @@ function mergeVariableState!(v::VariableCompute, vnd::VariableState) return 1 end -function mergeVariableStates!(dfg::AbstractDFG, varLabel_state_pairs::Vector{Pair{Symbol, VariableState}}) +function mergeVariableStates!( + dfg::AbstractDFG, + varLabel_state_pairs::Vector{Pair{Symbol, VariableState}}, +) cnt = asyncmap(varLabel_state_pairs) do (varLabel, state) return mergeVariableState!(dfg, varLabel, state) end diff --git a/test/testBlocks.jl b/test/testBlocks.jl index 49c12c31..0d6978e0 100644 --- a/test/testBlocks.jl +++ b/test/testBlocks.jl @@ -793,7 +793,6 @@ function VSDTestBlock!(fg, v1) # Bulk copy update x0 @test DFG.mergeVariableStates!(fg, Vector{Pair{Symbol, VariableState}}([:a=>vnd])) == 1 - altVnd = vnd |> deepcopy keepVnd = getVariableState(getVariable(fg, :a), :parametric) |> deepcopy altVnd.infoPerCoord .= [-99.0;] From 72a90e3c7959ee564aa8430d8735274b2de356c2 Mon Sep 17 00:00:00 2001 From: Johannes Terblanche Date: Thu, 26 Jun 2025 08:46:39 +0200 Subject: [PATCH 3/4] mergeVariableStates!(::AbstractDFG, ::Symbol,::Vector{<:VariableState}) --- src/services/DFGVariable.jl | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/services/DFGVariable.jl b/src/services/DFGVariable.jl index e9b64951..c04a491f 100644 --- a/src/services/DFGVariable.jl +++ b/src/services/DFGVariable.jl @@ -735,7 +735,7 @@ end function mergeVariableStates!( dfg::AbstractDFG, - varLabel_state_pairs::Vector{Pair{Symbol, VariableState}}, + varLabel_state_pairs::Vector{<:Pair{Symbol, <:VariableState}}, ) cnt = asyncmap(varLabel_state_pairs) do (varLabel, state) return mergeVariableState!(dfg, varLabel, state) @@ -743,6 +743,17 @@ function mergeVariableStates!( return sum(cnt) end +function mergeVariableStates!( + dfg::AbstractDFG, + variableLabel::Symbol, + states::Vector{<:VariableState}, +) + cnt = asyncmap(states) do state + return mergeVariableState!(dfg, variableLabel, state) + end + return sum(cnt) +end + function copytoVariableState!( dfg::AbstractDFG, variableLabel::Symbol, From 09e3417ebb41422f360c64f0ca75548286bd6881 Mon Sep 17 00:00:00 2001 From: Johannes Terblanche Date: Thu, 26 Jun 2025 17:33:37 +0200 Subject: [PATCH 4/4] add test for mergeVariableStates! --- test/testBlocks.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/testBlocks.jl b/test/testBlocks.jl index 0d6978e0..957705da 100644 --- a/test/testBlocks.jl +++ b/test/testBlocks.jl @@ -792,7 +792,8 @@ function VSDTestBlock!(fg, v1) @test mergeVariableState!(fg, :a, vnd) == 1 # Bulk copy update x0 - @test DFG.mergeVariableStates!(fg, Vector{Pair{Symbol, VariableState}}([:a=>vnd])) == 1 + @test DFG.mergeVariableStates!(fg, [:a=>vnd]) == 1 + @test DFG.mergeVariableStates!(fg, :a, [vnd]) == 1 altVnd = vnd |> deepcopy keepVnd = getVariableState(getVariable(fg, :a), :parametric) |> deepcopy altVnd.infoPerCoord .= [-99.0;]