Skip to content

Commit eab5ebd

Browse files
committed
Don't create :default => empty VND with constructor #202
1 parent f32ea2a commit eab5ebd

File tree

5 files changed

+32
-17
lines changed

5 files changed

+32
-17
lines changed

src/entities/DFGVariable.jl

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,14 +177,27 @@ end
177177
The default DFGVariable constructor.
178178
"""
179179
DFGVariable(label::Symbol, softtype::T;
180+
timestamp::DateTime=now(),
180181
tags::Set{Symbol}=Set{Symbol}(),
181182
estimateDict::Dict{Symbol, <: AbstractPointParametricEst}=Dict{Symbol, MeanMaxPPE}(),
182-
solverDataDict::Dict{Symbol, VariableNodeData{T}}=Dict{Symbol, VariableNodeData{T}}(:default => VariableNodeData{T}()),
183+
solverDataDict::Dict{Symbol, VariableNodeData{T}}=Dict{Symbol, VariableNodeData{T}}(),
183184
smallData::Dict{String, String}=Dict{String, String}(),
184185
bigData::Dict{Symbol, AbstractBigDataEntry}=Dict{Symbol,AbstractBigDataEntry}(),
185186
solvable::Int=1,
186187
_internalId::Int64=0) where {T <: InferenceVariable} =
187-
DFGVariable{T}(label, now(), tags, estimateDict, solverDataDict, smallData, bigData, DFGNodeParams(solvable, _internalId))
188+
DFGVariable{T}(label, timestamp, tags, estimateDict, solverDataDict, smallData, bigData, DFGNodeParams(solvable, _internalId))
189+
190+
191+
DFGVariable(label::Symbol,
192+
solverData::VariableNodeData{T};
193+
timestamp::DateTime=now(),
194+
tags::Set{Symbol}=Set{Symbol}(),
195+
estimateDict::Dict{Symbol, <: AbstractPointParametricEst}=Dict{Symbol, MeanMaxPPE}(),
196+
smallData::Dict{String, String}=Dict{String, String}(),
197+
bigData::Dict{Symbol, AbstractBigDataEntry}=Dict{Symbol,AbstractBigDataEntry}(),
198+
solvable::Int=1,
199+
_internalId::Int64=0) where {T <: InferenceVariable} =
200+
DFGVariable{T}(label, timestamp, tags, estimateDict, Dict{Symbol, VariableNodeData{T}}(:default=>solverData), smallData, bigData, DFGNodeParams(solvable, _internalId))
188201

189202
function Base.copy(o::DFGVariable)::DFGVariable
190203
return DFGVariable(o.label, getSofttype(o)(), tags=copy(o.tags), estimateDict=copy(o.estimateDict),

src/services/AbstractDFG.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1012,7 +1012,7 @@ Notes:
10121012
function isInitialized(var::DFGVariable, key::Symbol=:default)::Bool
10131013
data = getSolverData(var, key)
10141014
if data == nothing
1015-
@error "Variable does not have solver data $(key)"
1015+
#TODO we still have a mixture of 2 error behaviours
10161016
return false
10171017
else
10181018
return data.initialized

src/services/DFGVariable.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,9 @@ getSofttype(v::DFGVariableSummary)::Symbol = v.softtypename
307307
Retrieve solver data structure stored in a variable.
308308
"""
309309
function getSolverData(v::DFGVariable, key::Symbol=:default)
310-
return haskey(v.solverDataDict, key) ? v.solverDataDict[key] : nothing
310+
#TODO this does not fit in with some of the other error behaviour. but its used so added @error
311+
vnd = haskey(v.solverDataDict, key) ? v.solverDataDict[key] : (@error "Variable does not have solver data $(key)"; nothing)
312+
return vnd
311313
end
312314

313315
"""

test/LightDFGSummaryTypes.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ dfg = LightDFG{NoSolverParams, VARTYPE, FACTYPE}()
66
DistributedFactorGraphs.DFGVariableSummary(label::Symbol) = DFGVariableSummary(label, DistributedFactorGraphs.now(), Set{Symbol}(), Dict{Symbol, MeanMaxPPE}(), :Pose2, Dict{Symbol,AbstractBigDataEntry}(), 0)
77
DistributedFactorGraphs.DFGFactorSummary(label::Symbol) = DFGFactorSummary(label, DistributedFactorGraphs.now(), Set{Symbol}(), 0, Symbol[])
88

9-
DistributedFactorGraphs.DFGVariableSummary(label::Symbol, soft::InferenceVariable) = DFGVariableSummary(label, DistributedFactorGraphs.now(), Set{Symbol}(), Dict{Symbol, MeanMaxPPE}(), Symbol(typeof(soft)), Dict{Symbol,AbstractBigDataEntry}(), 0)
10-
DistributedFactorGraphs.SkeletonDFGVariable(label::Symbol, soft::InferenceVariable) = SkeletonDFGVariable(label)
9+
DistributedFactorGraphs.DFGVariableSummary(label::Symbol, ::VariableNodeData{T}) where T = DFGVariableSummary(label, DistributedFactorGraphs.now(), Set{Symbol}(), Dict{Symbol, MeanMaxPPE}(), Symbol(T), Dict{Symbol,AbstractBigDataEntry}(), 0)
10+
DistributedFactorGraphs.SkeletonDFGVariable(label::Symbol, params...) = SkeletonDFGVariable(label)
1111

1212

1313
dfg = LightDFG{NoSolverParams, VARTYPE, FACTYPE}()
@@ -70,10 +70,10 @@ end
7070

7171
@testset "Adjacency Matrices" begin
7272
fg = LightDFG{NoSolverParams, VARTYPE, FACTYPE}()
73-
addVariable!(fg, VARTYPE(:a, TestSofttype1()))
74-
addVariable!(fg, VARTYPE(:b, TestSofttype1()))
73+
addVariable!(fg, VARTYPE(:a))
74+
addVariable!(fg, VARTYPE(:b))
7575
addFactor!(fg, [:a,:b], FACTYPE(:abf1))
76-
addVariable!(fg, VARTYPE(:orphan, TestSofttype1()))
76+
addVariable!(fg, VARTYPE(:orphan))
7777

7878
AdjacencyMatricesTestBlock(fg)
7979
end

test/testBlocks.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,9 @@ function DFGVariableSCA()
167167
small = Dict("small"=>"data")
168168
testTimestamp = now()
169169
# Constructors
170-
v1 = DFGVariable(v1_lbl, TestSofttype1(), tags=v1_tags, solvable=0)
171-
v2 = DFGVariable(:b, TestSofttype2(), tags=Set([:VARIABLE, :LANDMARK]))
172-
v3 = DFGVariable(:c, TestSofttype2())
170+
v1 = DFGVariable(v1_lbl, TestSofttype1(), tags=v1_tags, solvable=0, solverDataDict=Dict(:default=>VariableNodeData{TestSofttype1}()))
171+
v2 = DFGVariable(:b, VariableNodeData{TestSofttype2}(), tags=Set([:VARIABLE, :LANDMARK]))
172+
v3 = DFGVariable(:c, VariableNodeData{TestSofttype2}())
173173

174174

175175
getSolverData(v1).solveInProgress = 1
@@ -885,8 +885,8 @@ function connectivityTestGraph(::Type{T}; VARTYPE=DFGVariable, FACTYPE=DFGFactor
885885

886886
dfg = T()
887887

888-
vars = vcat(map(n -> VARTYPE(Symbol("x$n"), TestSofttype1()), 1:numNodesType1),
889-
map(n -> VARTYPE(Symbol("x$(numNodesType1+n)"), TestSofttype2()), 1:numNodesType2))
888+
vars = vcat(map(n -> VARTYPE(Symbol("x$n"), VariableNodeData{TestSofttype1}()), 1:numNodesType1),
889+
map(n -> VARTYPE(Symbol("x$(numNodesType1+n)"), VariableNodeData{TestSofttype2}()), 1:numNodesType2))
890890

891891
foreach(v -> addVariable!(dfg, v), vars)
892892

@@ -900,7 +900,7 @@ function connectivityTestGraph(::Type{T}; VARTYPE=DFGVariable, FACTYPE=DFGFactor
900900
setSolvable!(dfg, :x7x8f1, 0)
901901

902902
else
903-
facs = map(n -> addFactor!(dfg, [vars[n], vars[n+1]], FACTYPE(Symbol("x$(n)x$(n+1)f1"))), 1:length(vars)-1)
903+
facs = map(n -> addFactor!(dfg, [vars[n], vars[n+1]], FACTYPE(Symbol("x$(n)x$(n+1)f1"))), 1:length(vars)-1)
904904
end
905905

906906
return (dfg=dfg, variables=vars, factors=facs)
@@ -1021,8 +1021,8 @@ function ProducingDotFiles(testDFGAPI; VARTYPE=DFGVariable, FACTYPE=DFGFactor)
10211021
# "Producing Dot Files"
10221022
# create a simpler graph for dot testing
10231023
dotdfg = testDFGAPI()
1024-
v1 = VARTYPE(:a, TestSofttype1())
1025-
v2 = VARTYPE(:b, TestSofttype1())
1024+
v1 = VARTYPE(:a, VariableNodeData{TestSofttype1}())
1025+
v2 = VARTYPE(:b, VariableNodeData{TestSofttype1}())
10261026
if FACTYPE==DFGFactor
10271027
f1 = DFGFactor{Int, :Symbol}(:abf1)
10281028
else

0 commit comments

Comments
 (0)