@@ -799,19 +799,15 @@ Dev Note:
799
799
"""
800
800
function copyGraph! (destDFG:: AbstractDFG ,
801
801
sourceDFG:: AbstractDFG ,
802
- variableFactorLabels:: Vector{Symbol} ;
802
+ variableLabels:: Vector{Symbol} ,
803
+ factorLabels:: Vector{Symbol} ;
803
804
copyGraphMetadata:: Bool = false ,
804
805
overwriteDest:: Bool = false ,
805
806
deepcopyNodes:: Bool = false ,
806
807
verbose:: Bool = true )
807
808
# Split into variables and factors
808
- sourceVariables = map (vId-> getVariable (sourceDFG, vId), intersect (listVariables (sourceDFG), variableFactorLabels))
809
- sourceFactors = map (fId-> getFactor (sourceDFG, fId), intersect (listFactors (sourceDFG), variableFactorLabels))
810
- if length (sourceVariables) + length (sourceFactors) != length (variableFactorLabels)
811
- remv = setdiff (map (v-> v. label, sourceVariables), variableFactorLabels)
812
- remf = setdiff (map (f-> f. label, sourceFactors), variableFactorLabels)
813
- error (" Cannot copy because cannot find the following nodes in the source graph: $remv , $remf " )
814
- end
809
+ sourceVariables = map (vId-> getVariable (sourceDFG, vId), variableLabels)
810
+ sourceFactors = map (fId-> getFactor (sourceDFG, fId), factorLabels)
815
811
816
812
# Now we have to add all variables first,
817
813
for variable in sourceVariables
@@ -861,18 +857,20 @@ end
861
857
862
858
function deepcopyGraph! (destDFG:: AbstractDFG ,
863
859
sourceDFG:: AbstractDFG ,
864
- variableFactorLabels:: Vector{Symbol} = union (ls (sourceDFG), lsf (sourceDFG));
860
+ variableLabels:: Vector{Symbol} = ls (sourceDFG),
861
+ factorLabels:: Vector{Symbol} = lsf (sourceDFG);
865
862
kwargs... )
866
- copyGraph! (destDFG, sourceDFG, variableFactorLabels ; deepcopyNodes= true , kwargs... )
863
+ copyGraph! (destDFG, sourceDFG, variableLabels, factorLabels ; deepcopyNodes= true , kwargs... )
867
864
end
868
865
869
866
870
- function deepcopyGraph ( :: Type{T} ,
871
- sourceDFG:: AbstractDFG ,
872
- variableFactorLabels:: Vector{Symbol} = union (ls (sourceDFG), lsf (sourceDFG));
873
- kwargs... ) where T <: AbstractDFG
867
+ function deepcopyGraph (:: Type{T} ,
868
+ sourceDFG:: AbstractDFG ,
869
+ variableLabels:: Vector{Symbol} = ls (sourceDFG),
870
+ factorLabels:: Vector{Symbol} = lsf (sourceDFG);
871
+ kwargs... ) where T <: AbstractDFG
874
872
destDFG = T (getDFGInfo (sourceDFG)... )
875
- copyGraph! (destDFG, sourceDFG, variableFactorLabels ; deepcopyNodes= true , kwargs... )
873
+ copyGraph! (destDFG, sourceDFG, variableLabels, factorLabels ; deepcopyNodes= true , kwargs... )
876
874
return destDFG
877
875
end
878
876
@@ -946,8 +944,10 @@ function buildSubgraph(::Type{G},
946
944
# build up the neighborhood from variableFactorLabels
947
945
allvarfacs = getNeighborhood (dfg, variableFactorLabels, distance; solvable= solvable)
948
946
947
+ variableLabels = intersect (listVariables (dfg), allvarfacs)
948
+ factorLabels = intersect (listFactors (dfg), allvarfacs)
949
949
# Copy the section of graph we want
950
- destDFG = deepcopyGraph (G, dfg, allvarfacs ; kwargs... )
950
+ destDFG = deepcopyGraph (G, dfg, variableLabels, factorLabels ; kwargs... )
951
951
return destDFG
952
952
end
953
953
@@ -965,15 +965,19 @@ Related:
965
965
"""
966
966
function mergeGraph! (destDFG:: AbstractDFG ,
967
967
sourceDFG:: AbstractDFG ,
968
- variableFactorLabels:: Vector{Symbol} = union (ls (sourceDFG), lsf (sourceDFG)),
968
+ variableLabels:: Vector{Symbol} = ls (sourceDFG),
969
+ factorLabels:: Vector{Symbol} = lsf (sourceDFG),
969
970
distance:: Int = 0 ;
970
971
solvable:: Int = 0 ,
971
972
kwargs... )
972
973
973
974
# find neighbors at distance to add
974
- allvarfacs = getNeighborhood (sourceDFG, variableFactorLabels, distance; solvable= solvable)
975
+ allvarfacs = getNeighborhood (sourceDFG, union (variableLabels, factorLabels), distance; solvable= solvable)
976
+
977
+ sourceVariables = map (vId-> getVariable (sourceDFG, vId), intersect (listVariables (sourceDFG), variableFactorLabels))
978
+ sourceFactors = map (fId-> getFactor (sourceDFG, fId), intersect (listFactors (sourceDFG), variableFactorLabels))
975
979
976
- copyGraph! (destDFG, sourceDFG, allvarfacs ; deepcopyNodes= true , overwriteDest= true , kwargs... )
980
+ copyGraph! (destDFG, sourceDFG, sourceVariables, sourceFactors ; deepcopyNodes= true , overwriteDest= true , kwargs... )
977
981
978
982
return destDFG
979
983
end
@@ -1082,7 +1086,7 @@ Produces a dot-format of the graph for visualization.
1082
1086
function toDot (dfg:: AbstractDFG ):: String
1083
1087
# TODO implement convert
1084
1088
graphsdfg = GraphsDFG {NoSolverParams} ()
1085
- copyGraph! (graphsdfg, dfg, union ( listVariables (dfg), listFactors (dfg) ))
1089
+ copyGraph! (graphsdfg, dfg, listVariables (dfg), listFactors (dfg))
1086
1090
# Calls down to GraphsDFG.toDot
1087
1091
return toDot (graphsdfg)
1088
1092
end
@@ -1103,7 +1107,7 @@ function toDotFile(dfg::AbstractDFG, fileName::String="/tmp/dfg.dot")::Nothing
1103
1107
graphsdfg = dfg
1104
1108
else
1105
1109
graphsdfg = GraphsDFG {NoSolverParams} ()
1106
- copyGraph! (graphsdfg, dfg, union ( listVariables (dfg), listFactors (dfg) ))
1110
+ copyGraph! (graphsdfg, dfg, listVariables (dfg), listFactors (dfg))
1107
1111
end
1108
1112
1109
1113
open (fileName, " w" ) do fid
0 commit comments