Skip to content

Commit fa75fd6

Browse files
committed
Adding a getVariable with a specific solvekey function
1 parent a04a9e2 commit fa75fd6

File tree

6 files changed

+34
-29
lines changed

6 files changed

+34
-29
lines changed

src/CommonAccessors.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,4 @@ $SIGNATURES
5757
5858
Return the internal ID for a variable.
5959
"""
60-
getInternalId(v::DataLevel1) = v._internalId
60+
getInternalId(v::DataLevel1) = v._dfgNodeParams._internalId

src/DistributedFactorGraphs.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export getLabel, getTimestamp, setTimestamp!, getTags, setTags!
5252
export getEstimates, getEstimate, getSofttype
5353
export getMaxPPE, getMeanPPE, getSuggestedPPE
5454
# Level 2
55-
export getSolverData, solverData, getData, solverDataDict, setSolverData, setSolverData!, getInternalId, smallData, setSmallData!, bigData
55+
export getSolverData, solverData, getData, getSolverDataDict, setSolverData!, getInternalId, smallData, setSmallData!, bigData
5656
export addBigDataEntry!, getBigDataEntry, updateBigDataEntry!, deleteBigDataEntry!, getBigDataEntries, getBigDataKeys
5757

5858
# Find a home

src/LightDFG/services/LightDFG.jl

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,17 @@ function addFactor!(dfg::LightDFG{<:AbstractParams, <:AbstractDFGVariable, F}, f
113113
return FactorGraphs.addFactor!(dfg.g, variableLabels, factor)
114114
end
115115

116-
function getVariable(dfg::LightDFG, label::Symbol)::AbstractDFGVariable
117-
return dfg.g.variables[label]
116+
function getVariable(dfg::LightDFG, label::Symbol; solveKey::Union{Nothing, Symbol})::Union{Nothing, AbstractDFGVariable}
117+
!(label in dfg.g.variables) && return nothing
118+
solveKey == nothing && return dfg.g.variables[label]
119+
# Requesting a single solvekey
120+
if solveKey in dfg.g.variables[label]
121+
v = copy(dfg.g.variables[label]) # Shallow copy
122+
v.solverDataDict = [solveKey=>v.solverDataDict[solveKey]]
123+
return v
124+
else
125+
return nothing
126+
end
118127
end
119128

120129
function getFactor(dfg::LightDFG, label::Symbol)::AbstractDFGFactor

src/entities/DFGVariable.jl

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,6 @@ struct DFGVariable{T<:InferenceVariable} <: AbstractDFGVariable
3333
"""Dictionary of large data associated with this variable.
3434
Accessors: `addBigDataEntry!`, `getBigDataEntry`, `updateBigDataEntry!`, and `deleteBigDataEntry!`"""
3535
bigData::Dict{Symbol, AbstractBigDataEntry}
36-
"""Solvable flag for the variable.
37-
Accessors: `getSolvable`, `setSolvable!`
38-
TODO: Switch to `DFGNodeParams`"""
39-
solvable::Int
4036
"""Mutable parameters for the variable. We suggest using accessors to get to this data.
4137
Accessors: `getSolvable`, `setSolvable!`"""
4238
_dfgNodeParams::DFGNodeParams
@@ -54,4 +50,10 @@ DFGVariable(label::Symbol, softtype::T;
5450
bigData::Dict{Symbol, AbstractBigDataEntry}=Dict{Symbol,AbstractBigDataEntry}(),
5551
solvable::Int=1,
5652
_internalId::Int64=0) where {T <: InferenceVariable} =
57-
DFGVariable{T}(label, now(), tags, estimateDict, solverDataDict, smallData, bigData, solvable, DFGNodeParams(solvable, _internalId))
53+
DFGVariable{T}(label, now(), tags, estimateDict, solverDataDict, smallData, bigData, DFGNodeParams(solvable, _internalId))
54+
55+
function Base.copy(o::DFGVariable)::DFGVariable
56+
return DFGVariable(o.label, getSofttype(o)(), tags=copy(o.tags), estimateDict=copy(o.estimateDict),
57+
solverDataDict=copy(o.solverDataDict), smallData=copy(o.smallData),
58+
bigData=copy(o.bigData), solvable=getSolvable(o), _internalId=getInternalId(o))
59+
end

src/services/AbstractDFG.jl

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"""
66
$(SIGNATURES)
77
8-
De-serialization of IncrementalInference objects require discovery of foreign types.
8+
Deserialization of IncrementalInference objects require discovery of foreign types.
99
1010
Example:
1111
@@ -138,16 +138,16 @@ end
138138
$(SIGNATURES)
139139
Get a DFGVariable from a DFG using its underlying integer ID.
140140
"""
141-
function getVariable(dfg::G, variableId::Int64)::AbstractDFGVariable where G <: AbstractDFG
141+
function getVariable(dfg::G, variableId::Int64)::Union{Nothing, AbstractDFGVariable} where G <: AbstractDFG
142142
error("getVariable not implemented for $(typeof(dfg))")
143143
end
144144

145145
"""
146146
$(SIGNATURES)
147147
Get a DFGVariable from a DFG using its label.
148148
"""
149-
function getVariable(dfg::G, label::Union{Symbol, String})::AbstractDFGVariable where G <: AbstractDFG
150-
return getVariable(dfg, Symbol(label))
149+
function getVariable(dfg::G, label::Union{Symbol, String}; solveKey::Union{Nothing, Symbol})::Union{Nothing, AbstractDFGVariable} where G <: AbstractDFG
150+
return getVariable(dfg, Symbol(label); solveKey=solveKey)
151151
end
152152

153153
"""
@@ -543,7 +543,7 @@ Related
543543
544544
isSolveInProgress
545545
"""
546-
isSolvable(var::Union{DFGVariable, DFGFactor})::Int = var.solvable
546+
isSolvable(var::Union{DFGVariable, DFGFactor})::Int = var._dfgNodeParams.solvable
547547

548548
"""
549549
$SIGNATURES
@@ -553,7 +553,7 @@ Variables or factors may or may not be 'solvable', depending on a user definitio
553553
Related:
554554
- isSolveInProgress
555555
"""
556-
getSolvable(var::Union{DFGVariable, DFGFactor})::Int = var.solvable
556+
getSolvable(var::Union{DFGVariable, DFGFactor})::Int = var._dfgNodeParams.solvable
557557

558558
"""
559559
$SIGNATURES
@@ -562,9 +562,9 @@ Get 'solvable' parameter for either a variable or factor.
562562
"""
563563
function getSolvable(dfg::AbstractDFG, sym::Symbol)
564564
if isVariable(dfg, sym)
565-
return getVariable(dfg, sym).solvable
565+
return getVariable(dfg, sym)._dfgNodeParams.solvable
566566
elseif isFactor(dfg, sym)
567-
return getFactor(dfg, sym).solvable
567+
return getFactor(dfg, sym)._dfgNodeParams.solvable
568568
end
569569
end
570570

@@ -594,9 +594,9 @@ Set the `solvable` parameter for either a variable or factor.
594594
"""
595595
function setSolvable!(dfg::AbstractDFG, sym::Symbol, solvable::Int)::Int
596596
if isVariable(dfg, sym)
597-
getVariable(dfg, sym).solvable = solvable
597+
getVariable(dfg, sym)._dfgNodeParams.solvable = solvable
598598
elseif isFactor(dfg, sym)
599-
getFactor(dfg, sym).solvable = solvable
599+
getFactor(dfg, sym)._dfgNodeParams.solvable = solvable
600600
end
601601
return solvable
602602
end
@@ -607,7 +607,7 @@ end
607607
Set the `solvable` parameter for either a variable or factor.
608608
"""
609609
function setSolvable!(node::N, solvable::Int)::Int where N <: DFGNode
610-
node.solvable = solvable
610+
node._dfgNodeParams.solvable = solvable
611611
return solvable
612612
end
613613

src/services/DFGVariable.jl

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -282,8 +282,8 @@ getVariableType
282282
function getSofttype(vnd::VariableNodeData)
283283
return vnd.softtype
284284
end
285-
function getSofttype(v::DFGVariable; solveKey::Symbol=:default)
286-
return getSofttype(solverData(v, solveKey))
285+
function getSofttype(v::DFGVariable)
286+
return typeof(v).parameters[1] # Get the parameter of the DFGVariable
287287
end
288288

289289
"""
@@ -316,12 +316,6 @@ end
316316
"""
317317
$SIGNATURES
318318
319-
Set solver data structure stored in a variable.
320-
"""
321-
setSolverData(v::DFGVariable, data::VariableNodeData, key::Symbol=:default) = v.solverDataDict[key] = data
322-
"""
323-
$SIGNATURES
324-
325319
Set solver data structure stored in a variable.
326320
"""
327321
setSolverData!(v::DFGVariable, data::VariableNodeData, key::Symbol=:default) = setSolverData(v, data, key)
@@ -331,7 +325,7 @@ setSolverData!(v::DFGVariable, data::VariableNodeData, key::Symbol=:default) = s
331325
332326
Get solver data dictionary for a variable.
333327
"""
334-
solverDataDict(v::DFGVariable) = v.solverDataDict
328+
getSolverDataDict(v::DFGVariable) = v.solverDataDict
335329

336330
"""
337331
$SIGNATURES

0 commit comments

Comments
 (0)