@@ -180,11 +180,22 @@ function getNeighbors(dfg::GraphsDFG, node::T)::Vector{Symbol} where T <: DFGNo
180
180
neighbors = in_neighbors (vert, dfg. g) # Don't use out_neighbors! It enforces directiveness even if we don't want it
181
181
return map (n -> n. dfgNode. label, neighbors)
182
182
end
183
+ function getNeighbors (dfg:: GraphsDFG , label:: Symbol ):: Vector{Symbol} where T <: DFGNode
184
+ if ! haskey (dfg. labelDict, label)
185
+ error (" Variable/factor with label '$(label) ' does not exist in the factor graph" )
186
+ end
187
+ vert = dfg. g. vertices[dfg. labelDict[label]]
188
+ neighbors = in_neighbors (vert, dfg. g) # Don't use out_neighbors! It enforces directiveness even if we don't want it
189
+ return map (n -> n. dfgNode. label, neighbors)
190
+ end
183
191
184
- # Alias
192
+ # Aliases
185
193
function ls (dfg:: GraphsDFG , node:: T ):: Vector{Symbol} where T <: DFGNode
186
194
return getNeighbors (dfg, node)
187
195
end
196
+ function ls (dfg:: GraphsDFG , label:: Symbol ):: Vector{Symbol} where T <: DFGNode
197
+ return getNeighbors (dfg, label)
198
+ end
188
199
189
200
function _copyIntoGraph! (sourceDFG:: GraphsDFG , destDFG:: GraphsDFG , variableFactorLabels:: Vector{Symbol} , includeOrphanFactors:: Bool = false ):: Nothing
190
201
# Split into variables and factors
@@ -267,9 +278,18 @@ function __init__()
267
278
if isdefined (Main, :DataFrames )
268
279
export getAdjacencyMatrixDataFrame
269
280
function getAdjacencyMatrixDataFrame (dfg:: GraphsDFG ):: Main.DataFrames.DataFrame
270
- colNames = map (n -> n. dfgNode. label, vertices (dfg. g))
271
- adjMat = adjacency_matrix (dfg. g)
272
- return Main. DataFrames. DataFrame (adjMat, colNames)
281
+ varLabels = sort (map (v-> v. label, getVariables (dfg)))
282
+ factLabels = sort (map (f-> f. label, getFactors (dfg)))
283
+ adjDf = DataFrames. DataFrame (:Factor => Union{Missing, Symbol}[])
284
+ for varLabel in varLabels
285
+ adjDf[varLabel] = Union{Missing, Symbol}[]
286
+ end
287
+ for (i, factLabel) in enumerate (factLabels)
288
+ push! (adjDf, [factLabel, DataFrames. missings (length (varLabels))... ])
289
+ factVars = getNeighbors (dfg, getFactor (dfg, factLabel))
290
+ map (vLabel -> adjDf[vLabel][i] = factLabel, factVars)
291
+ end
292
+ return adjDf
273
293
end
274
294
end
275
295
end
0 commit comments