1
1
# Accessors
2
- getLabelDict (dfg:: LightGraphsDFG ) = dfg. labelDict
2
+ getLabelDict (dfg:: LightGraphsDFG ) = dfg. g . metaindex[ :label ]
3
3
getDescription (dfg:: LightGraphsDFG ) = dfg. description
4
4
setDescription (dfg:: LightGraphsDFG , description:: String ) = dfg. description = description
5
5
getInnerGraph (dfg:: LightGraphsDFG ) = dfg. g
16
16
True if the variable or factor exists in the graph.
17
17
"""
18
18
function exists (dfg:: LightGraphsDFG , node:: N ) where N <: DFGNode
19
- return haskey (dfg. labelDict , node. label)
19
+ return haskey (dfg. g . metaindex[ :label ] , node. label)
20
20
end
21
- exists (dfg:: LightGraphsDFG , nId:: Symbol ) = haskey (dfg. labelDict , nId)
21
+ exists (dfg:: LightGraphsDFG , nId:: Symbol ) = haskey (dfg. g . metaindex[ :label ] , nId)
22
22
23
23
24
24
"""
25
25
$(SIGNATURES)
26
26
Add a DFGVariable to a DFG.
27
27
"""
28
28
function addVariable! (dfg:: LightGraphsDFG , variable:: DFGVariable ):: Bool
29
- if haskey (dfg. labelDict , variable. label)
29
+ if haskey (dfg. g . metaindex[ :label ] , variable. label)
30
30
error (" Variable '$(variable. label) ' already exists in the factor graph" )
31
31
end
32
- dfg. nodeCounter += 1
33
32
34
33
# NOTE Internal ID always set to zero as it is not needed?
35
34
variable. _internalId = 0
@@ -43,8 +42,6 @@ function addVariable!(dfg::LightGraphsDFG, variable::DFGVariable)::Bool
43
42
MetaGraphs. add_vertex! (dfg. g, :label , variable. label) || return false
44
43
MetaGraphs. set_props! (dfg. g, nv (dfg. g), props) || return false
45
44
46
- # TODO die ID gaan heeltyd verander, ek dink sover gebruik label direk as index
47
- push! (dfg. labelDict, variable. label=> variable. _internalId)
48
45
# Track insertion
49
46
push! (dfg. addHistory, variable. label)
50
47
56
53
Add a DFGFactor to a DFG.
57
54
"""
58
55
function addFactor! (dfg:: LightGraphsDFG , variables:: Vector{DFGVariable} , factor:: DFGFactor ):: Bool
59
- if haskey (dfg. labelDict , factor. label)
56
+ if haskey (dfg. g . metaindex[ :label ] , factor. label)
60
57
error (" Factor '$(factor. label) ' already exists in the factor graph" )
61
58
end
62
59
for v in variables
63
- if ! (v. label in keys (dfg. labelDict ))
60
+ if ! (v. label in keys (dfg. g . metaindex[ :label ] ))
64
61
error (" Variable '$(v. label) ' not found in graph when creating Factor '$(factor. label) '" )
65
62
end
66
63
end
67
- dfg. nodeCounter += 1
68
- factor. _internalId = dfg. nodeCounter
64
+
65
+ # NOTE Internal ID always set to zero as it is not needed?
66
+ factor. _internalId = 0
69
67
factor. _variableOrderSymbols = map (v-> v. label, variables)
70
- # fNode = LightGraphsNode(dfg.nodeCounter, factor)
71
- # f = Graphs.add_vertex!(dfg.g, fNode)
72
68
73
- # TODO something like this or the next props definition
69
+ # NOTE something like this or the next props definition
74
70
# props = Dict{:Symbol, Any}()
75
71
# props[:tags] = factor.tags
76
72
# props[:factor] = factor
77
73
78
74
props = Dict (:factor => factor)
79
75
80
- retval = MetaGraphs. add_vertex! (dfg. g, :label , factor. label)
81
- retval && set_props! (dfg. g, nv (dfg. g), props)
76
+ MetaGraphs. add_vertex! (dfg. g, :label , factor. label) || return false
77
+ set_props! (dfg. g, nv (dfg. g), props) || return false
82
78
83
79
# Add index
84
- push! (dfg. labelDict , factor. label=> factor . _internalId )
80
+ # push!(dfg.labels , factor.label)
85
81
# Add the edges...
86
82
for variable in variables
87
- # v = dfg.g.vertices[variable._internalId]
88
- # edge = Graphs.make_edge(dfg.g, v, f)
89
- # Graphs.add_edge!(dfg.g, edge)
90
- retval && MetaGraphs. add_edge! (dfg. g, dfg. g[variable. label,:label ], dfg. g[factor. label,:label ])
83
+ MetaGraphs. add_edge! (dfg. g, dfg. g[variable. label,:label ], dfg. g[factor. label,:label ]) || return false
91
84
end
92
- # Track insertion
93
- # push!(dfg.addHistory, factor.label)
94
85
95
- return retval
86
+ return true
96
87
end
97
88
98
89
"""
@@ -124,7 +115,7 @@ function getVariable(dfg::LightGraphsDFG, label::Union{Symbol, String})::DFGVari
124
115
if typeof (label) == String
125
116
label = Symbol (label)
126
117
end
127
- if ! haskey (dfg. labelDict , label)
118
+ if ! haskey (dfg. g . metaindex[ :label ] , label)
128
119
error (" Variable label '$(label) ' does not exist in the factor graph" )
129
120
end
130
121
return get_prop (dfg. g, dfg. g[label,:label ], :variable )
@@ -135,14 +126,14 @@ end
135
126
Get a DFGFactor from a DFG using its underlying integer ID.
136
127
"""
137
128
function getFactor (dfg:: LightGraphsDFG , factorId:: Int64 ):: DFGFactor
138
- # if !(factorId in values(dfg.labelDict ))
129
+ # if !(factorId in values(dfg.g.metaindex[:label] ))
139
130
# error("Factor ID '$(factorId)' does not exist in the factor graph")
140
131
# end
141
132
return get_prop (dfg. g, factorId, :factor )
142
133
end
143
134
144
135
function getFactor (g:: MetaGraph , factorId:: Int64 ):: DFGFactor
145
- # if !(factorId in values(dfg.labelDict ))
136
+ # if !(factorId in values(dfg.g.metaindex[:label] ))
146
137
# error("Factor ID '$(factorId)' does not exist in the factor graph")
147
138
# end
148
139
return get_prop (g, factorId, :factor )
@@ -156,7 +147,7 @@ function getFactor(dfg::LightGraphsDFG, label::Union{Symbol, String})::DFGFactor
156
147
if typeof (label) == String
157
148
label = Symbol (label)
158
149
end
159
- if ! haskey (dfg. labelDict , label)
150
+ if ! haskey (dfg. g . metaindex[ :label ] , label)
160
151
error (" Factor label '$(label) ' does not exist in the factor graph" )
161
152
end
162
153
return get_prop (dfg. g, dfg. g[label,:label ], :factor )
167
158
Update a complete DFGVariable in the DFG.
168
159
"""
169
160
function updateVariable! (dfg:: LightGraphsDFG , variable:: DFGVariable ):: DFGVariable
170
- if ! haskey (dfg. labelDict , variable. label)
161
+ if ! haskey (dfg. g . metaindex[ :label ] , variable. label)
171
162
error (" Variable label '$(variable. label) ' does not exist in the factor graph" )
172
163
end
173
- # dfg.g.vertices[dfg.labelDict[variable.label]].dfgNode = variable
174
164
set_prop! (dfg. g, dfg. g[variable. label,:label ], :variable , variable)
175
165
return variable
176
166
end
180
170
Update a complete DFGFactor in the DFG.
181
171
"""
182
172
function updateFactor! (dfg:: LightGraphsDFG , factor:: DFGFactor ):: DFGFactor
183
- if ! haskey (dfg. labelDict , factor. label)
173
+ if ! haskey (dfg. g . metaindex[ :label ] , factor. label)
184
174
error (" Factor label '$(factor. label) ' does not exist in the factor graph" )
185
175
end
186
- # dfg.g.vertices[dfg.labelDict[factor.label]].dfgNode = factor
187
176
set_prop! (dfg. g, dfg. g[factor. label,:label ], :factor , factor)
188
177
return factor
189
178
end
@@ -193,14 +182,12 @@ end
193
182
Delete a DFGVariable from the DFG using its label.
194
183
"""
195
184
function deleteVariable! (dfg:: LightGraphsDFG , label:: Symbol ):: DFGVariable
196
- if ! haskey (dfg. labelDict , label)
185
+ if ! haskey (dfg. g . metaindex[ :label ] , label)
197
186
error (" Variable label '$(label) ' does not exist in the factor graph" )
198
187
end
199
- # variable = dfg.g.vertices[dfg.labelDict[label]].dfgNode
200
- # delete_vertex!(dfg.g.vertices[dfg.labelDict[label]], dfg.g)
201
188
variable = get_prop (dfg. g, dfg. g[label,:label ], :variable )
202
189
rem_vertex! (dfg. g, dfg. g[label,:label ])
203
- delete! (dfg . labelDict, label)
190
+
204
191
return variable
205
192
end
206
193
@@ -216,14 +203,11 @@ deleteVariable!(dfg::LightGraphsDFG, variable::DFGVariable)::DFGVariable = delet
216
203
Delete a DFGFactor from the DFG using its label.
217
204
"""
218
205
function deleteFactor! (dfg:: LightGraphsDFG , label:: Symbol ):: DFGFactor
219
- if ! haskey (dfg. labelDict , label)
206
+ if ! haskey (dfg. g . metaindex[ :label ] , label)
220
207
error (" Factor label '$(label) ' does not exist in the factor graph" )
221
208
end
222
- # factor = dfg.g.vertices[dfg.labelDict[label]].dfgNode
223
- # delete_vertex!(dfg.g.vertices[dfg.labelDict[label]], dfg.g)
224
209
factor = get_prop (dfg. g, dfg. g[label,:label ], :factor )
225
210
MetaGraphs. rem_vertex! (dfg. g, dfg. g[label,:label ])
226
- delete! (dfg. labelDict, label)
227
211
return factor
228
212
end
229
213
@@ -359,11 +343,10 @@ end
359
343
Retrieve a list of labels of the immediate neighbors around a given variable or factor.
360
344
"""
361
345
function getNeighbors (dfg:: LightGraphsDFG , node:: T ; ready:: Union{Nothing, Int} = nothing , backendset:: Union{Nothing, Int} = nothing ):: Vector{Symbol} where T <: DFGNode
362
- if ! haskey (dfg. labelDict , node. label)
346
+ if ! haskey (dfg. g . metaindex[ :label ] , node. label)
363
347
error (" Variable/factor with label '$(node. label) ' does not exist in the factor graph" )
364
348
end
365
- # vert = dfg.g.vertices[dfg.labelDict[node.label]]
366
- # neighbors = in_neighbors(vert, dfg.g) #Don't use out_neighbors! It enforces directiveness even if we don't want it
349
+
367
350
neighbors = map (idx-> get_prop (dfg. g, idx, :label ), LightGraphs. neighbors (dfg. g, dfg. g[node. label,:label ]))
368
351
# Additional filtering
369
352
neighbors = ready != nothing ? filter (lbl -> _isready (dfg, dfg. g[lbl,:label ], ready), neighbors) : neighbors
@@ -375,14 +358,14 @@ function getNeighbors(dfg::LightGraphsDFG, node::T; ready::Union{Nothing, Int}=n
375
358
return order
376
359
end
377
360
378
- return neighbors# map(n -> n.dfgNode.label, neighbors)
361
+ return neighbors
379
362
end
380
363
"""
381
364
$(SIGNATURES)
382
365
Retrieve a list of labels of the immediate neighbors around a given variable or factor specified by its label.
383
366
"""
384
367
function getNeighbors (dfg:: LightGraphsDFG , label:: Symbol ; ready:: Union{Nothing, Int} = nothing , backendset:: Union{Nothing, Int} = nothing ):: Vector{Symbol} where T <: DFGNode
385
- if ! haskey (dfg. labelDict , label)
368
+ if ! haskey (dfg. g . metaindex[ :label ] , label)
386
369
error (" Variable/factor with label '$(label) ' does not exist in the factor graph" )
387
370
end
388
371
@@ -433,14 +416,14 @@ function _copyIntoGraph!(sourceDFG::LightGraphsDFG, destDFG::LightGraphsDFG, ns:
433
416
434
417
# Now we have to add all variables first,
435
418
for v in variables
436
- if ! haskey (destDFG. labelDict , v. label)
419
+ if ! haskey (destDFG. g . metaindex[ :label ] , v. label)
437
420
addVariable! (destDFG, deepcopy (v))
438
421
end
439
422
end
440
423
441
424
# And then all factors to the destDFG.
442
425
for f in factors
443
- if ! haskey (destDFG. labelDict , f. label)
426
+ if ! haskey (destDFG. g . metaindex[ :label ] , f. label)
444
427
# Get the original factor variables (we need them to create it)
445
428
# variables = in_neighbors(factor, sourceDFG.g)
446
429
# variables = getNeighbors(sourceDFG, f)
@@ -450,7 +433,7 @@ function _copyIntoGraph!(sourceDFG::LightGraphsDFG, destDFG::LightGraphsDFG, ns:
450
433
# Find the labels and associated variables in our new subgraph
451
434
factVariables = DFGVariable[]
452
435
for v in variables
453
- if haskey (destDFG. labelDict , v. label)
436
+ if haskey (destDFG. g . metaindex[ :label ] , v. label)
454
437
push! (factVariables, getVariable (destDFG, v. label))
455
438
# otherwise ignore
456
439
end
@@ -474,7 +457,7 @@ Optionally provide an existing subgraph addToDFG, the extracted nodes will be co
474
457
Note: By default orphaned factors (where the subgraph does not contain all the related variables) are not returned. Set includeOrphanFactors to return the orphans irrespective of whether the subgraph contains all the variables.
475
458
"""
476
459
function getSubgraphAroundNode (dfg:: LightGraphsDFG{P} , node:: T , distance:: Int64 = 1 , includeOrphanFactors:: Bool = false , addToDFG:: LightGraphsDFG = LightGraphsDFG {P} ()):: LightGraphsDFG where {P <: AbstractParams , T <: DFGNode }
477
- if ! haskey (dfg. labelDict , node. label)
460
+ if ! haskey (dfg. g . metaindex[ :label ] , node. label)
478
461
error (" Variable/factor with label '$(node. label) ' does not exist in the factor graph" )
479
462
end
480
463
@@ -495,7 +478,7 @@ Note: By default orphaned factors (where the subgraph does not contain all the r
495
478
"""
496
479
function getSubgraph (dfg:: LightGraphsDFG , variableFactorLabels:: Vector{Symbol} , includeOrphanFactors:: Bool = false , addToDFG:: LightGraphsDFG = LightGraphsDFG ()):: LightGraphsDFG
497
480
for label in variableFactorLabels
498
- if ! haskey (dfg. labelDict , label)
481
+ if ! haskey (dfg. g . metaindex[ :label ] , label)
499
482
error (" Variable/factor with label '$(label) ' does not exist in the factor graph" )
500
483
end
501
484
end
0 commit comments