Skip to content

Commit 2f46e4a

Browse files
committed
GraphsDFG summary function
1 parent e56eda7 commit 2f46e4a

File tree

6 files changed

+61
-5
lines changed

6 files changed

+61
-5
lines changed

src/DistributedFactorGraphs.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,13 @@ export getAdjacencyMatrixSparse
4040
# File import and export
4141
export saveDFG, loadDFG
4242

43+
# Summary functions
44+
export getSummary, getSummaryGraph
45+
4346
# Common includes
4447
include("services/AbstractDFG.jl")
4548
include("services/DFGVariable.jl")
49+
include("services/DFGFactor.jl")
4650

4751
# Include the Graphs.jl API.
4852
include("GraphsDFG/GraphsDFG.jl")

src/GraphsDFG/services/GraphsDFG.jl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,3 +431,18 @@ function toDotFile(dfg::GraphsDFG, fileName::String="/tmp/dfg.dot")::Nothing
431431
end
432432
return nothing
433433
end
434+
435+
function getSummary(dfg::GraphsDFG)::AbstractDFGSummary
436+
vars = map(v -> convert(DFGVariableSummary, v), getVariables(dfg))
437+
facts = map(f -> convert(DFGFactorSummary, f), getFactors(dfg))
438+
return AbstractDFGSummary(
439+
Dict(map(v->v.label, vars) .=> vars),
440+
Dict(map(f->f.label, facts) .=> facts),
441+
"userId",
442+
"robotId",
443+
"sessionId")
444+
end
445+
446+
function getSummaryGraph(dfg::GraphsDFG)
447+
error("getSummaryGraph not implemented for $(typeof(dfg))")
448+
end

src/services/DFGFactor.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1+
import Base: convert
12

2-
function convert(::DFGFactorSummary, v::DFGFactor)
3-
return DFGFactorSummary(v.label, deepcopy(v.tags), v._internalId, deepcopy(_variableOrderSymbols))
3+
function convert(::Type{DFGFactorSummary}, f::DFGFactor)
4+
return DFGFactorSummary(f.label, deepcopy(f.tags), f._internalId, deepcopy(f._variableOrderSymbols))
45
end

src/services/DFGVariable.jl

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using Base
2-
import Base.==
1+
import Base: ==, convert
32

43
function pack(dfg::G, d::VariableNodeData)::PackedVariableNodeData where G <: AbstractDFG
54
@debug "Dispatching conversion variable -> packed variable for type $(string(d.softtype))"
@@ -66,6 +65,6 @@ function ==(a::VariableNodeData,b::VariableNodeData, nt::Symbol=:var)
6665
return DistributedFactorGraphs.compare(a,b)
6766
end
6867

69-
function convert(::DFGVariableSummary, v::DFGVariable)
68+
function convert(::Type{DFGVariableSummary}, v::DFGVariable)
7069
return DFGVariableSummary(v.label, v.timestamp, deepcopy(v.tags), deepcopy(v.estimateDict), v._internalId)
7170
end

test/interfaceTests.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,13 @@ end
261261
end
262262
end
263263

264+
@testset "Summary Graphs" begin
265+
summary = getSummary(dfg)
266+
@test summary != nothing
267+
# summaryGraph = getSummaryGraph(dfg)
268+
# @test summaryGraph != nothing
269+
end
270+
264271
@testset "Producing Dot Files" begin
265272
if testDFGAPI != GraphsDFG
266273
@warn "Skipping non Graphs.jl toDot functions"

test/sandbox.jl

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using Revise
2+
using DistributedFactorGraphs
3+
4+
dfg = GraphsDFG{NoSolverParams}()
5+
v1 = DFGVariable(:a)
6+
v2 = DFGVariable(:b)
7+
v3 = DFGVariable(:c)
8+
f1 = DFGFactor{Int, :Symbol}(:f1)
9+
f2 = DFGFactor{Int, :Symbol}(:f2)
10+
addVariable!(dfg, v1)
11+
addVariable!(dfg, v2)
12+
addVariable!(dfg, v3)
13+
addFactor!(dfg, [v1, v2], f1)
14+
addFactor!(dfg, [:b, :c], f2)
15+
16+
getSummary(dfg)
17+
# getSummaryGraph(dfg)
18+
19+
import Base: convert
20+
function convert(::Type{DFGVariableSummary}, v::DFGVariable)
21+
return DFGVariableSummary(v.label, v.timestamp, deepcopy(v.tags), deepcopy(v.estimateDict), v._internalId)
22+
end
23+
24+
function convert(::Type{DFGFactorSummary}, f::DFGFactor)
25+
return DFGFactorSummary(f.label, deepcopy(f.tags), f._internalId, deepcopy(f._variableOrderSymbols))
26+
end
27+
28+
29+
v = convert(DFGVariableSummary, v1)
30+
convert(DFGFactorSummary, f1)

0 commit comments

Comments
 (0)