Skip to content

Commit 6068d90

Browse files
committed
VariableState label required and more VariableState related cleanup
1 parent 5dbe1e1 commit 6068d90

File tree

9 files changed

+72
-187
lines changed

9 files changed

+72
-187
lines changed

src/Deprecated.jl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,26 @@ const InferenceType = AbstractPackedFactorObservation
2020

2121
const PackedSamplableBelief = PackedBelief
2222

23+
export setSolverData!
24+
"""
25+
$SIGNATURES
26+
Set solver data structure stored in a variable.
27+
"""
28+
function setSolverData!(v::VariableCompute, data::VariableState, key::Symbol = :default)
29+
Base.depwarn(
30+
"setSolverData!(v::VariableCompute, data::VariableState, key::Symbol = :default) is deprecated, use mergeVariableState! instead.",
31+
:setSolverData!,
32+
)
33+
@assert key == data.solveKey "VariableState.solveKey=:$(data.solveKey) does not match requested :$(key)"
34+
return v.solverDataDict[key] = data
35+
end
36+
37+
@deprecate mergeVariableSolverData!(args...; kwargs...) mergeVariableState!(args...; kwargs...)
38+
39+
export mergeVariableData!, mergeGraphVariableData!
40+
mergeVariableData!(args...) = error("mergeVariableData! is obsolete, use mergeVariableState! for state, PPEs are obsolete")
41+
mergeGraphVariableData!(args...) = error("mergeGraphVariableData! is obsolete, use mergeVariableState! for state, PPEs are obsolete")
42+
2343
## ================================================================================
2444
## Deprecated in v0.27
2545
##=================================================================================

src/DistributedFactorGraphs.jl

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ using InteractiveUtils: subtypes
5858
##==============================================================================
5959

6060
# v1 name, signiture, return, and error checked
61+
export getFactor, getBlobentry, getGraphBlobentry
6162

6263
# v1 name, signiture, and return
63-
export getFactor, getBlobentry, getGraphBlobentry, getVariableState, getFactorState
6464

6565
# v1 name only
6666
export getVariable, getBlob, addBlob!
@@ -71,6 +71,9 @@ export DFG
7171

7272
export GraphsDFGs, GraphsDFG
7373

74+
##
75+
export getVariableState, getFactorState # FIXME these were questioned and being reviewed again for name, other than that they are checked.
76+
7477
##------------------------------------------------------------------------------
7578
## DFG
7679
##------------------------------------------------------------------------------
@@ -174,7 +177,7 @@ export listTags, mergeTags!, removeTags!, emptyTags!
174177
export VariableStateType
175178

176179
# accessors
177-
export getSolverDataDict, setSolverData!
180+
export getSolverDataDict
178181
export getVariableType, getVariableTypeName
179182

180183
export getObservation
@@ -201,7 +204,6 @@ export getVariableStates,
201204
mergeVariableState!,
202205
deleteVariableState!,
203206
listVariableStates,
204-
mergeVariableSolverData!,
205207
cloneSolveKey!
206208

207209
# PPE
@@ -264,9 +266,6 @@ export FactorSolverCache
264266
export getVariableOrder
265267
export getFactorType, getFactorFunction
266268

267-
# Node Data
268-
export mergeVariableData!, mergeGraphVariableData!
269-
270269
# Serialization type conversion
271270
export convertPackedType, convertStructType
272271

src/GraphsDFG/services/GraphsDFG.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,9 @@ end
512512

513513
# FG blob entries
514514
function getGraphBlobentry(fg::GraphsDFG, label::Symbol)
515+
if !haskey(fg.graphBlobEntries, label)
516+
throw(LabelNotFoundError("GraphBlobentry", label))
517+
end
515518
return fg.graphBlobEntries[label]
516519
end
517520

src/services/AbstractDFG.jl

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1418,52 +1418,6 @@ function mergeGraph!(
14181418
return destDFG
14191419
end
14201420

1421-
##==============================================================================
1422-
## Variable Data: VND and PPE
1423-
##==============================================================================
1424-
1425-
#TODO API
1426-
"""
1427-
$(SIGNATURES)
1428-
Merges and updates solver and estimate data for a variable (variable can be from another graph).
1429-
Note: Makes a copy of the estimates and solver data so that there is no coupling between graphs.
1430-
"""
1431-
function mergeVariableData!(dfg::AbstractDFG, sourceVariable::AbstractDFGVariable)
1432-
var = getVariable(dfg, sourceVariable.label)
1433-
1434-
mergePPEs!(var, sourceVariable)
1435-
# If this variable has solverDataDict (summaries do not)
1436-
:solverDataDict in fieldnames(typeof(var)) &&
1437-
mergeVariableSolverData!(var, sourceVariable)
1438-
1439-
#update if its not a InMemoryDFGTypes, otherwise it was a reference
1440-
# if satelite nodes are used it can be updated separately
1441-
# !(isa(dfg, InMemoryDFGTypes)) && mergeVariable!(dfg, var)
1442-
1443-
return var
1444-
end
1445-
1446-
#TODO API
1447-
"""
1448-
$(SIGNATURES)
1449-
Common function to update all solver data and estimates from one graph to another.
1450-
This should be used to push local solve data back into a cloud graph, for example.
1451-
1452-
Notes
1453-
- Returns `::Nothing`
1454-
"""
1455-
function mergeGraphVariableData!(
1456-
destDFG::H,
1457-
sourceDFG::G,
1458-
varSyms::Vector{Symbol},
1459-
) where {G <: AbstractDFG, H <: AbstractDFG}
1460-
# Update all variables in the destination
1461-
# (For now... we may change this soon)
1462-
for variableId in varSyms
1463-
mergeVariableData!(destDFG, getVariable(sourceDFG, variableId))
1464-
end
1465-
end
1466-
14671421
##==============================================================================
14681422
## Graphs Structures (Abstract, overwrite for performance)
14691423
##==============================================================================

src/services/CompareUtils.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,8 +253,8 @@ function compareVariable(
253253
union!(skiplist, skip)
254254
TP = TP && compareAll(A.solverDataDict, B.solverDataDict; skip = skiplist, show = show)
255255

256-
Ad = getVariableState(A)
257-
Bd = getVariableState(B)
256+
Ad = getVariableState(A, :default) #FIXME why onlly comparing default?
257+
Bd = getVariableState(B, :default)
258258

259259
# TP = TP && compareAll(A.attributes, B.attributes, skip=[:variableType;], show=show)
260260
varskiplist = union(varskiplist, [:variableType])

src/services/DFGVariable.jl

Lines changed: 37 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -538,26 +538,15 @@ getSolverDataDict(v::VariableCompute) = v.solverDataDict
538538
539539
Retrieve solver data structure stored in a variable.
540540
"""
541-
function getVariableState(v::VariableCompute, key::Symbol = :default)
542-
#TODO this does not fit in with some of the other error behaviour. but its used so added @error
543-
vnd = if haskey(getSolverDataDict(v), key)
544-
return getSolverDataDict(v)[key]
541+
function getVariableState(v::VariableCompute, label::Symbol)
542+
vnd = if haskey(getSolverDataDict(v), label)
543+
return getSolverDataDict(v)[label]
545544
else
546-
throw(LabelNotFoundError("State", key))
545+
throw(LabelNotFoundError("State", label))
547546
end
548547
return vnd
549548
end
550549

551-
#TODO Repeated functionality? same as update
552-
"""
553-
$SIGNATURES
554-
Set solver data structure stored in a variable.
555-
"""
556-
function setSolverData!(v::VariableCompute, data::VariableState, key::Symbol = :default)
557-
@assert key == data.solveKey "VariableState.solveKey=:$(data.solveKey) does not match requested :$(key)"
558-
return v.solverDataDict[key] = data
559-
end
560-
561550
##------------------------------------------------------------------------------
562551
## Variable Metadata
563552
##------------------------------------------------------------------------------
@@ -684,47 +673,38 @@ Get variable solverdata for a given solve key.
684673
"""
685674
function getVariableState(
686675
dfg::AbstractDFG,
687-
variablekey::Symbol,
688-
solvekey::Symbol = :default,
676+
variableLabel::Symbol,
677+
label::Symbol,
689678
)
690-
v = getVariable(dfg, variablekey)
691-
!haskey(v.solverDataDict, solvekey) && throw(LabelNotFoundError("State", solvekey))
692-
return v.solverDataDict[solvekey]
679+
v = getVariable(dfg, variableLabel)
680+
!haskey(v.solverDataDict, label) && throw(LabelNotFoundError("State", label))
681+
return v.solverDataDict[label]
693682
end
694683

695-
function getVariableStates(dfg::AbstractDFG, variablekey::Symbol)
696-
v = getVariable(dfg, variablekey)
684+
function getVariableStates(dfg::AbstractDFG, variableLabel::Symbol)
685+
v = getVariable(dfg, variableLabel)
697686
return collect(values(v.solverDataDict))
698687
end
699688

700689
"""
701690
$(SIGNATURES)
702691
Add variable solver data, errors if it already exists.
703692
"""
704-
function addVariableState!(dfg::AbstractDFG, variablekey::Symbol, vnd::VariableState)
693+
function addVariableState!(dfg::AbstractDFG, variablekey::Symbol, state::VariableState)
705694
var = getVariable(dfg, variablekey)
706-
if haskey(var.solverDataDict, vnd.solveKey)
707-
throw(LabelExistsError("VariableState", vnd.solveKey))
695+
if haskey(var.solverDataDict, state.solveKey)
696+
throw(LabelExistsError("VariableState", state.solveKey))
708697
end
709-
var.solverDataDict[vnd.solveKey] = vnd
710-
return vnd
698+
var.solverDataDict[state.solveKey] = state
699+
return state
711700
end
712701

713-
"""
714-
$(SIGNATURES)
715-
Add a new solver data entry from a deepcopy of the source variable solver data.
716-
NOTE: Copies the solver data.
717-
"""
718-
function addVariableState!(
719-
dfg::AbstractDFG,
720-
sourceVariable::VariableCompute,
721-
solveKey::Symbol = :default,
722-
)
723-
return addVariableState!(
724-
dfg,
725-
sourceVariable.label,
726-
deepcopy(getVariableState(sourceVariable, solveKey)),
727-
)
702+
function addVariableState!(v, state::VariableState)
703+
if haskey(v.solverDataDict, state.solveKey)
704+
throw(LabelExistsError("VariableState", state.solveKey))
705+
end
706+
v.solverDataDict[state.solveKey] = state
707+
return state
728708
end
729709

730710
"""
@@ -747,6 +727,17 @@ function mergeVariableState!(dfg::AbstractDFG, variablekey::Symbol, vnd::Variabl
747727
return 1
748728
end
749729

730+
function mergeVariableState!(v::VariableCompute, vnd::VariableState)
731+
732+
if !haskey(v.solverDataDict, vnd.solveKey)
733+
addVariableState!(v, vnd)
734+
else
735+
v.solverDataDict[vnd.solveKey] = vnd
736+
end
737+
738+
return 1
739+
end
740+
750741
function copytoVariableState!(
751742
dfg::AbstractDFG,
752743
variableLabel::Symbol,
@@ -797,12 +788,12 @@ end
797788

798789
"""
799790
$(SIGNATURES)
800-
Delete variable solver data, returns the deleted element.
791+
Delete variable solver data, returns the number of deleted elements.
801792
"""
802793
function deleteVariableState!(
803794
dfg::AbstractDFG,
804795
variablekey::Symbol,
805-
solveKey::Symbol = :default,
796+
solveKey::Symbol,
806797
)
807798
var = getVariable(dfg, variablekey)
808799

@@ -815,12 +806,12 @@ end
815806

816807
"""
817808
$(SIGNATURES)
818-
Delete variable solver data, returns the deleted element.
809+
Delete variable solver data, returns the number of deleted elements.
819810
"""
820811
function deleteVariableState!(
821812
dfg::AbstractDFG,
822813
sourceVariable::VariableCompute,
823-
solveKey::Symbol = :default,
814+
solveKey::Symbol,
824815
)
825816
return deleteVariableState!(dfg, sourceVariable.label, solveKey)
826817
end
@@ -838,28 +829,6 @@ function listVariableStates(dfg::AbstractDFG, variablekey::Symbol)
838829
return collect(keys(v.solverDataDict))
839830
end
840831

841-
"""
842-
$(SIGNATURES)
843-
Merges and updates solver and estimate data for a variable (variable can be from another graph).
844-
If the same key is present in another collection, the value for that key will be the value it has in the last collection listed (updated).
845-
Note: Makes a copy of the estimates and solver data so that there is no coupling between graphs.
846-
"""
847-
function mergeVariableSolverData!(
848-
destVariable::VariableCompute,
849-
sourceVariable::VariableCompute,
850-
)
851-
# We don't know which graph this came from, must be copied!
852-
merge!(destVariable.solverDataDict, deepcopy(sourceVariable.solverDataDict))
853-
return destVariable
854-
end
855-
856-
function mergeVariableSolverData!(dfg::AbstractDFG, sourceVariable::VariableCompute)
857-
return mergeVariableSolverData!(
858-
getVariable(dfg, getLabel(sourceVariable)),
859-
sourceVariable,
860-
)
861-
end
862-
863832
##==============================================================================
864833
## Point Parametric Estimates
865834
##==============================================================================

test/fileDFGTests.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ using UUIDs
1919
1:numNodes,
2020
)
2121
map(v -> setSolvable!(v, Int(round(rand()))), verts)
22-
map(v -> getVariableState(verts[4]).solveInProgress = Int(round(rand())), verts)
22+
map(v -> getVariableState(verts[4], :default).solveInProgress = Int(round(rand())), verts)
2323
map(v -> setSolvedCount!(v, Int(round(10 * rand()))), verts)
2424

2525
# Add some data entries

0 commit comments

Comments
 (0)