Skip to content

Commit 8ae0b9b

Browse files
authored
VariableState label required and more VariableState related cleanup (#1155)
1 parent 5dbe1e1 commit 8ae0b9b

File tree

9 files changed

+84
-194
lines changed

9 files changed

+84
-194
lines changed

src/Deprecated.jl

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,37 @@ 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!(
38+
args...;
39+
kwargs...,
40+
)
41+
42+
export mergeVariableData!, mergeGraphVariableData!
43+
function mergeVariableData!(args...)
44+
return error(
45+
"mergeVariableData! is obsolete, use mergeVariableState! for state, PPEs are obsolete",
46+
)
47+
end
48+
function mergeGraphVariableData!(args...)
49+
return error(
50+
"mergeGraphVariableData! is obsolete, use mergeVariableState! for state, PPEs are obsolete",
51+
)
52+
end
53+
2354
## ================================================================================
2455
## Deprecated in v0.27
2556
##=================================================================================

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: 35 additions & 75 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
##------------------------------------------------------------------------------
@@ -682,49 +671,36 @@ end
682671
$(SIGNATURES)
683672
Get variable solverdata for a given solve key.
684673
"""
685-
function getVariableState(
686-
dfg::AbstractDFG,
687-
variablekey::Symbol,
688-
solvekey::Symbol = :default,
689-
)
690-
v = getVariable(dfg, variablekey)
691-
!haskey(v.solverDataDict, solvekey) && throw(LabelNotFoundError("State", solvekey))
692-
return v.solverDataDict[solvekey]
674+
function getVariableState(dfg::AbstractDFG, variableLabel::Symbol, label::Symbol)
675+
v = getVariable(dfg, variableLabel)
676+
!haskey(v.solverDataDict, label) && throw(LabelNotFoundError("State", label))
677+
return v.solverDataDict[label]
693678
end
694679

695-
function getVariableStates(dfg::AbstractDFG, variablekey::Symbol)
696-
v = getVariable(dfg, variablekey)
680+
function getVariableStates(dfg::AbstractDFG, variableLabel::Symbol)
681+
v = getVariable(dfg, variableLabel)
697682
return collect(values(v.solverDataDict))
698683
end
699684

700685
"""
701686
$(SIGNATURES)
702687
Add variable solver data, errors if it already exists.
703688
"""
704-
function addVariableState!(dfg::AbstractDFG, variablekey::Symbol, vnd::VariableState)
689+
function addVariableState!(dfg::AbstractDFG, variablekey::Symbol, state::VariableState)
705690
var = getVariable(dfg, variablekey)
706-
if haskey(var.solverDataDict, vnd.solveKey)
707-
throw(LabelExistsError("VariableState", vnd.solveKey))
691+
if haskey(var.solverDataDict, state.solveKey)
692+
throw(LabelExistsError("VariableState", state.solveKey))
708693
end
709-
var.solverDataDict[vnd.solveKey] = vnd
710-
return vnd
694+
var.solverDataDict[state.solveKey] = state
695+
return state
711696
end
712697

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-
)
698+
function addVariableState!(v, state::VariableState)
699+
if haskey(v.solverDataDict, state.solveKey)
700+
throw(LabelExistsError("VariableState", state.solveKey))
701+
end
702+
v.solverDataDict[state.solveKey] = state
703+
return state
728704
end
729705

730706
"""
@@ -747,6 +723,16 @@ function mergeVariableState!(dfg::AbstractDFG, variablekey::Symbol, vnd::Variabl
747723
return 1
748724
end
749725

726+
function mergeVariableState!(v::VariableCompute, vnd::VariableState)
727+
if !haskey(v.solverDataDict, vnd.solveKey)
728+
addVariableState!(v, vnd)
729+
else
730+
v.solverDataDict[vnd.solveKey] = vnd
731+
end
732+
733+
return 1
734+
end
735+
750736
function copytoVariableState!(
751737
dfg::AbstractDFG,
752738
variableLabel::Symbol,
@@ -797,13 +783,9 @@ end
797783

798784
"""
799785
$(SIGNATURES)
800-
Delete variable solver data, returns the deleted element.
786+
Delete variable solver data, returns the number of deleted elements.
801787
"""
802-
function deleteVariableState!(
803-
dfg::AbstractDFG,
804-
variablekey::Symbol,
805-
solveKey::Symbol = :default,
806-
)
788+
function deleteVariableState!(dfg::AbstractDFG, variablekey::Symbol, solveKey::Symbol)
807789
var = getVariable(dfg, variablekey)
808790

809791
if !haskey(var.solverDataDict, solveKey)
@@ -815,12 +797,12 @@ end
815797

816798
"""
817799
$(SIGNATURES)
818-
Delete variable solver data, returns the deleted element.
800+
Delete variable solver data, returns the number of deleted elements.
819801
"""
820802
function deleteVariableState!(
821803
dfg::AbstractDFG,
822804
sourceVariable::VariableCompute,
823-
solveKey::Symbol = :default,
805+
solveKey::Symbol,
824806
)
825807
return deleteVariableState!(dfg, sourceVariable.label, solveKey)
826808
end
@@ -838,28 +820,6 @@ function listVariableStates(dfg::AbstractDFG, variablekey::Symbol)
838820
return collect(keys(v.solverDataDict))
839821
end
840822

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-
863823
##==============================================================================
864824
## Point Parametric Estimates
865825
##==============================================================================

test/fileDFGTests.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ 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(
23+
v -> getVariableState(verts[4], :default).solveInProgress = Int(round(rand())),
24+
verts,
25+
)
2326
map(v -> setSolvedCount!(v, Int(round(10 * rand()))), verts)
2427

2528
# Add some data entries

0 commit comments

Comments
 (0)