Skip to content

Commit a2e85ec

Browse files
committed
Merging master
2 parents dbc4ec7 + 10ab05b commit a2e85ec

File tree

22 files changed

+655
-205
lines changed

22 files changed

+655
-205
lines changed

.travis.yml

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,30 @@ julia:
1515
- 1.3
1616
- nightly
1717

18+
env:
19+
- IIF_TEST=false
20+
21+
jobs:
22+
include:
23+
- julia: 1.2
24+
env: IIF_TEST=true
25+
- stage: "Documentation"
26+
julia: 1.0
27+
os: linux
28+
script:
29+
- julia -e 'import Pkg; Pkg.add("Documenter"); Pkg.add("Neo4j"); Pkg.add("GraphPlot")'
30+
- julia --project=docs/ -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd()));
31+
Pkg.instantiate()'
32+
- julia --project=docs/ docs/make.jl
33+
after_success: skip
34+
1835
notifications:
1936
email: false
2037

2138
matrix:
2239
allow_failures:
23-
- julia: nightly
40+
- julia: nightly
41+
- env: IIF_TEST=true
2442

2543
# Set the password for Neo4j to neo4j:test
2644
before_script:
@@ -29,22 +47,3 @@ before_script:
2947

3048
after_success:
3149
- julia -e 'using Pkg; cd(Pkg.dir("DistributedFactorGraphs")); Pkg.add("Coverage"); using Coverage; Codecov.submit(process_folder()); Coveralls.submit(process_folder())'
32-
33-
jobs:
34-
include:
35-
- stage: "Documentation"
36-
julia: 1.0
37-
os: linux
38-
script:
39-
- julia -e 'import Pkg; Pkg.add("Documenter"); Pkg.add("DataFrames")'
40-
- julia --project=docs/ -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd()));
41-
Pkg.instantiate()'
42-
- julia --project=docs/ docs/make.jl
43-
after_success: skip
44-
45-
- stage: "IIF Driver Tests"
46-
julia: 1.2
47-
os: linux
48-
script:
49-
- julia -e 'import Pkg; Pkg.add("IncrementalInference"); Pkg.test("DistributedFactorGraphs")'
50-
after_success: skip

src/BigData.jl

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
2+
# TODO move to ...
3+
4+
5+
# """
6+
# $(TYPEDEF)
7+
# Abstract parent struct for big data entry.
8+
# """
9+
# abstract type AbstractBigDataEntry end
10+
11+
# --- AbstractBigData Interfaces ---
12+
# fields to implement:
13+
# - key::Symbol
14+
# available methods:
15+
# - addBigDataEntry!
16+
# - getBigDataEntry
17+
# - updateBigDataEntry!
18+
# - deleteBigDataEntry!
19+
# - getBigDataEntries
20+
# - getBigDataKeys
21+
22+
export addBigDataEntry!,
23+
getBigDataEntry,
24+
updateBigDataEntry!,
25+
deleteBigDataEntry!,
26+
getBigDataEntries,
27+
getBigDataKeys,
28+
MongodbBigDataEntry,
29+
FileBigDataEntry
30+
31+
# Methods
32+
33+
#TODO should this return Bool or the modified Variable?
34+
"""
35+
$(SIGNATURES)
36+
Add Big Data Entry to a DFG variable
37+
"""
38+
function addBigDataEntry!(var::AbstractDFGVariable, bde::AbstractBigDataEntry)::Bool
39+
haskey(var.bigData,bde.key) && @warn "$(bde.key) already exists in variable, overwriting!"
40+
var.bigData[bde.key] = bde
41+
return true
42+
end
43+
44+
"""
45+
$(SIGNATURES)
46+
Add Big Data Entry to distrubuted factor graph.
47+
Should be extended if DFG variable is not returned by by reference.
48+
"""
49+
function addBigDataEntry!(dfg::AbstractDFG, label::Symbol, bde::AbstractBigDataEntry)::Bool
50+
return addBigDataEntry!(getVariable(dfg, label), bde)
51+
end
52+
53+
"""
54+
$(SIGNATURES)
55+
Get big data entry
56+
"""
57+
function getBigDataEntry(var::AbstractDFGVariable, key::Symbol)::AbstractBigDataEntry
58+
return var.bigData[key]
59+
end
60+
function getBigDataEntry(dfg::AbstractDFG, label::Symbol, key::Symbol)::AbstractBigDataEntry
61+
return getBigDataEntry(getVariable(dfg, label), key)
62+
end
63+
64+
"""
65+
$(SIGNATURES)
66+
Update big data entry
67+
"""
68+
function updateBigDataEntry!(var::AbstractDFGVariable, bde::AbstractBigDataEntry)::Bool#TODO should this return Bool?
69+
!haskey(var.bigData,bde.key) && (@error "$(bde.key) does not exist in variable!"; return false)
70+
var.bigData[bde.key] = bde
71+
return true
72+
end
73+
function updateBigDataEntry!(dfg::AbstractDFG, label::Symbol, bde::AbstractBigDataEntry)::Bool
74+
updateBigDataEntry!(getVariable(dfg, label), bde)
75+
end
76+
77+
"""
78+
$(SIGNATURES)
79+
Delete big data entry
80+
"""
81+
function deleteBigDataEntry!(var::AbstractDFGVariable, key::Symbol)::AbstractBigDataEntry #users responsibility to delete big data in db before deleting entry
82+
bde = getBigDataEntry(var, key)
83+
delete!(var.bigData, key)
84+
return bde
85+
end
86+
87+
function deleteBigDataEntry!(dfg::AbstractDFG, label::Symbol, key::Symbol)::AbstractBigDataEntry #users responsibility to delete big data in db before deleting entry
88+
deleteBigDataEntry!(getVariable(dfg, label), key)
89+
end
90+
91+
"""
92+
$(SIGNATURES)
93+
Get big data entries, Vector{AbstractBigDataEntry}
94+
"""
95+
function getBigDataEntries(var::AbstractDFGVariable)::Vector{AbstractBigDataEntry}
96+
#or should we return the iterator, Base.ValueIterator{Dict{Symbol,AbstractBigDataEntry}}?
97+
collect(values(var.bigData))
98+
end
99+
function getBigDataEntries(dfg::AbstractDFG, label::Symbol)::Vector{AbstractBigDataEntry}
100+
#or should we return the iterator, Base.ValueIterator{Dict{Symbol,AbstractBigDataEntry}}?
101+
getBigDataEntries(getVariable(dfg, label))
102+
end
103+
104+
105+
"""
106+
$(SIGNATURES)
107+
getBigDataKeys
108+
"""
109+
function getBigDataKeys(var::AbstractDFGVariable)::Vector{Symbol}
110+
collect(keys(var.bigData))
111+
end
112+
function getBigDataKeys(dfg::AbstractDFG, label::Symbol)::Vector{Symbol}
113+
getBigDataKeys(getVariable(dfg, label))
114+
end
115+
116+
117+
118+
# Types <: AbstractBigDataEntry
119+
"""
120+
$(TYPEDEF)
121+
BigDataEntry in MongoDB.
122+
"""
123+
struct MongodbBigDataEntry <: AbstractBigDataEntry
124+
key::Symbol
125+
oid::NTuple{12, UInt8} #mongodb object id
126+
#maybe other fields such as:
127+
#flags::Bool ready, valid, locked, permissions
128+
#MIMEType::Symbol
129+
end
130+
131+
132+
"""
133+
$(TYPEDEF)
134+
BigDataEntry in a file.
135+
"""
136+
struct FileBigDataEntry <: AbstractBigDataEntry
137+
key::Symbol
138+
filename::String
139+
end

src/Common.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ function getfnctype(data::GenericFunctionNodeData)
129129
return data.fnc.usrfnc!
130130
end
131131
function getfnctype(fact::DFGFactor; solveKey::Symbol=:default)
132-
data = getData(fact) # TODO , solveKey=solveKey)
132+
data = solverData(fact) # TODO , solveKey=solveKey)
133133
return getfnctype(data)
134134
end
135135
function getfnctype(dfg::T, lbl::Symbol; solveKey::Symbol=:default) where T <: AbstractDFG
@@ -145,7 +145,7 @@ Notes
145145
- Replaces older `getfnctype`.
146146
"""
147147
getFactorType(data::GenericFunctionNodeData) = data.fnc.usrfnc!
148-
getFactorType(fct::DFGFactor) = getFactorType(getData(fct))
148+
getFactorType(fct::DFGFactor) = getFactorType(solverData(fct))
149149
function getFactorType(dfg::G, lbl::Symbol) where G <: AbstractDFG
150150
getFactorType(getFactor(dfg, lbl))
151151
end
@@ -190,7 +190,7 @@ function getSofttype(vnd::VariableNodeData)
190190
return vnd.softtype
191191
end
192192
function getSofttype(v::DFGVariable; solveKey::Symbol=:default)
193-
return getSofttype(getData(v, solveKey=solveKey))
193+
return getSofttype(solverData(v, solveKey))
194194
end
195195

196196
"""

src/DistributedFactorGraphs.jl

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,13 @@ export AbstractParams, NoSolverParams
2121
export DFGNode, DFGVariable, DFGFactor
2222
export InferenceType, PackedInferenceType, FunctorInferenceType, InferenceVariable, ConvolutionObject
2323
export FunctorSingleton, FunctorPairwise, FunctorPairwiseMinimize
24-
export label, timestamp, tags, estimates, estimate, data, solverData, getData, solverDataDict, setSolverData, internalId, smallData, bigData
24+
export label, timestamp, tags, estimates, estimate, data, softtype, solverData, getData, solverDataDict, setSolverData, internalId, smallData, bigData
2525
export DFGVariableSummary, DFGFactorSummary, AbstractDFGSummary
2626

27+
#graph small data
28+
export getUserData, setUserData, getRobotData, setRobotData, getSessionData, setSessionData
29+
export pushUserData!, pushRobotData!, pushSessionData!, popUserData!, popRobotData!, popSessionData!
30+
2731
# Services/AbstractDFG Exports
2832
export hasFactor, hasVariable, isInitialized, getFactorFunction, isVariable, isFactor
2933
export updateGraphSolverData!
@@ -36,7 +40,6 @@ export pack, unpack
3640
# Resolve with above
3741
export packVariable, unpackVariable, packFactor, unpackFactor
3842

39-
4043
#Interfaces
4144
export getAdjacencyMatrixSparse
4245

@@ -51,6 +54,8 @@ include("services/AbstractDFG.jl")
5154
include("services/DFGVariable.jl")
5255
include("services/DFGFactor.jl")
5356

57+
include("BigData.jl")
58+
5459
# Include the Graphs.jl API.
5560
include("GraphsDFG/GraphsDFG.jl")
5661

@@ -61,24 +66,32 @@ include("FileDFG/FileDFG.jl")
6166
include("MetaGraphsDFG/MetaGraphsDFG.jl")
6267

6368
include("SymbolDFG/SymbolDFG.jl")
64-
# @reexport using .SymbolDFGs
69+
using .SymbolDFGs
6570

6671
include("LightDFG/LightDFG.jl")
6772
@reexport using .LightDFGs
6873

6974
function __init__()
70-
@require Neo4j="d2adbeaf-5838-5367-8a2f-e46d570981db" begin
71-
# Include the Cloudgraphs API
72-
include("CloudGraphsDFG/CloudGraphsDFG.jl")
73-
end
75+
@info "Looking for @require modules"
76+
#FIXME still can't figure @require out
77+
# @require Neo4j="d2adbeaf-5838-5367-8a2f-e46d570981db" begin
78+
# @info "Including CloudGraphsDFG"
79+
# # Include the Cloudgraphs API
80+
# include("CloudGraphsDFG/CloudGraphsDFG.jl")
81+
# end
7482

7583
@require GraphPlot = "a2cc645c-3eea-5389-862e-a155d0052231" begin
84+
@info "Including Plots"
7685
include("DFGPlots/DFGPlots.jl")
7786
@reexport using .DFGPlots
7887
end
7988

8089
end
8190

91+
#FIXME still can't figure @require out
92+
# Include the Cloudgraphs API
93+
include("CloudGraphsDFG/CloudGraphsDFG.jl")
94+
8295
# To be moved as necessary.
8396
include("Common.jl")
8497

src/GraphsDFG/entities/GraphsDFG.jl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ mutable struct GraphsDFG{T <: AbstractParams} <: AbstractDFG
1414
userId::String
1515
robotId::String
1616
sessionId::String
17+
userData::Dict{Symbol, String}
18+
robotData::Dict{Symbol, String}
19+
sessionData::Dict{Symbol, String}
1720
nodeCounter::Int64
1821
labelDict::Dict{Symbol, Int64}
1922
addHistory::Vector{Symbol} #TODO: Discuss more - is this an audit trail?
@@ -28,4 +31,7 @@ GraphsDFG{T}( g::FGType=Graphs.incdict(GraphsNode,is_directed=false),
2831
userId::String = "UserID",
2932
robotId::String = "robotID",
3033
sessionId::String = "sessionID",
31-
params::T=NoSolverParams()) where T <: AbstractParams = GraphsDFG{T}(g, d, userId, robotId, sessionId, n, l, a, params)
34+
userData::Dict{Symbol, String} = Dict{Symbol, String}(),
35+
robotData::Dict{Symbol, String} = Dict{Symbol, String}(),
36+
sessionData::Dict{Symbol, String} = Dict{Symbol, String}(),
37+
params::T=NoSolverParams()) where T <: AbstractParams = GraphsDFG{T}(g, d, userId, robotId, sessionId, userData, robotData, sessionData, n, l, a, params)

src/GraphsDFG/services/GraphsDFG.jl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,23 @@ function setSolverParams(dfg::GraphsDFG, solverParams::T) where T <: AbstractPar
2626
dfg.solverParams = solverParams
2727
end
2828

29+
# Get user, robot, and session "small" data.
30+
getUserData(dfg::GraphsDFG)::Dict{Symbol, String} = return dfg.userData
31+
function setUserData(dfg::GraphsDFG, data::Dict{Symbol, String})::Bool
32+
dfg.userData = data
33+
return true
34+
end
35+
getRobotData(dfg::GraphsDFG)::Dict{Symbol, String} = return dfg.robotData
36+
function setRobotData(dfg::GraphsDFG, data::Dict{Symbol, String})::Bool
37+
dfg.robotData = data
38+
return true
39+
end
40+
getSessionData(dfg::GraphsDFG)::Dict{Symbol, String} = return dfg.sessionData
41+
function setSessionData(dfg::GraphsDFG, data::Dict{Symbol, String})::Bool
42+
dfg.sessionData = data
43+
return true
44+
end
45+
2946
"""
3047
$(SIGNATURES)
3148
Gets an empty and unique CloudGraphsDFG derived from an existing DFG.

src/LightDFG/LightDFG.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ import ...DistributedFactorGraphs: setSolverParams,
1111
getFactor,
1212
setDescription,
1313
getLabelDict,
14+
getUserData,
15+
setUserData,
16+
getRobotData,
17+
setRobotData,
18+
getSessionData,
19+
setSessionData,
1420
addVariable!,
1521
getVariable,
1622
getAddHistory,

src/LightDFG/entities/LightDFG.jl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ mutable struct LightDFG{T <: AbstractParams, V <: AbstractDFGVariable, F <:Abstr
1313
userId::String
1414
robotId::String
1515
sessionId::String
16+
userData::Dict{Symbol, String}
17+
robotData::Dict{Symbol, String}
18+
sessionData::Dict{Symbol, String}
1619
addHistory::Vector{Symbol} #TODO: Discuss more - is this an audit trail?
1720
solverParams::T # Solver parameters
1821
end
@@ -30,9 +33,12 @@ function LightDFG{T,V,F}(g::FactorGraph{Int,V,F}=FactorGraph{Int,V,F}();
3033
userId::String="User ID",
3134
robotId::String="Robot ID",
3235
sessionId::String="Session ID",
36+
userData::Dict{Symbol, String} = Dict{Symbol, String}(),
37+
robotData::Dict{Symbol, String} = Dict{Symbol, String}(),
38+
sessionData::Dict{Symbol, String} = Dict{Symbol, String}(),
3339
params::T=NoSolverParams()) where {T <: AbstractParams, V <:AbstractDFGVariable, F<:AbstractDFGFactor}
3440

35-
LightDFG{T,V,F}(g, description, userId, robotId, sessionId, Symbol[], params)
41+
LightDFG{T,V,F}(g, description, userId, robotId, sessionId, userData, robotData, sessionData, Symbol[], params)
3642
end
3743

3844
# LightDFG{T}(; kwargs...) where T <: AbstractParams = LightDFG{T,DFGVariable,DFGFactor}(;kwargs...)

src/LightDFG/services/LightDFG.jl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,23 @@ function setSolverParams(dfg::LightDFG, solverParams::P) where P <: AbstractPara
1313
dfg.solverParams = solverParams
1414
end
1515

16+
# Get user, robot, and session "small" data.
17+
getUserData(dfg::LightDFG)::Dict{Symbol, String} = return dfg.userData
18+
function setUserData(dfg::LightDFG, data::Dict{Symbol, String})::Bool
19+
dfg.userData = data
20+
return true
21+
end
22+
getRobotData(dfg::LightDFG)::Dict{Symbol, String} = return dfg.robotData
23+
function setRobotData(dfg::LightDFG, data::Dict{Symbol, String})::Bool
24+
dfg.robotData = data
25+
return true
26+
end
27+
getSessionData(dfg::LightDFG)::Dict{Symbol, String} = return dfg.sessionData
28+
function setSessionData(dfg::LightDFG, data::Dict{Symbol, String})::Bool
29+
dfg.sessionData = data
30+
return true
31+
end
32+
1633
"""
1734
$(SIGNATURES)
1835
True if the variable or factor exists in the graph.

0 commit comments

Comments
 (0)