[core] Graph: change signature of dfsOnDiscover()

This commit is contained in:
Julien-Haudegond 2020-09-04 12:22:20 +02:00
parent f8bd40ad38
commit 208749d897
5 changed files with 24 additions and 24 deletions

View file

@ -380,7 +380,7 @@ class Graph(BaseObject):
Returns:
OrderedDict[Node, Node]: the source->duplicate map
"""
srcNodes, srcEdges = self.dfsOnDiscover(fromNode)
srcNodes, srcEdges = self.dfsOnDiscover(startNodes=[fromNode])
# use OrderedDict to keep duplicated nodes creation order
duplicates = OrderedDict()
@ -714,12 +714,12 @@ class Graph(BaseObject):
self.dfs(visitor=visitor, startNodes=startNodes)
return nodes, edges
def dfsOnDiscover(self, startNode, filterTypes=None, longestPathFirst=False, reverse=True):
def dfsOnDiscover(self, startNodes, filterTypes=None, longestPathFirst=False, reverse=True):
"""
Return the node chain from startNode to the graph leaves.
Return the node chain from startNodes to the graph leaves.
Args:
startNode (Node): the node to start the visit from.
startNodes (Node list): the nodes to start the visit from.
filterTypes (str list): (optional) only return the nodes of the given types
(does not stop the visit, this is a post-process only)
longestPathFirst (bool): (optional) if multiple paths, nodes belonging to
@ -728,7 +728,7 @@ class Graph(BaseObject):
True is for getting nodes depending on the startNode.
False is for getting nodes required for the startNode.
Returns:
The list of nodes and edges, from startNode to the graph leaves following edges.
The list of nodes and edges, from startNodes to the graph leaves following edges.
"""
nodes = []
edges = []
@ -740,7 +740,7 @@ class Graph(BaseObject):
visitor.discoverVertex = discoverVertex
visitor.examineEdge = lambda edge, graph: edges.append(edge)
self.dfs(visitor=visitor, startNodes=[startNode], longestPathFirst=longestPathFirst, reverse=reverse)
self.dfs(visitor=visitor, startNodes=startNodes, longestPathFirst=longestPathFirst, reverse=reverse)
return nodes, edges
def dfsToProcess(self, startNodes=None):
@ -910,7 +910,7 @@ class Graph(BaseObject):
if not recursive:
return set([edge.src.node for edge in self.edges if edge.dst.node is node])
inputNodes, edges = self.dfsOnDiscover(node, filterTypes=None, reverse=False)
inputNodes, edges = self.dfsOnDiscover(startNodes=[node], filterTypes=None, reverse=False)
return inputNodes[1:] # exclude current node
def getOutputNodes(self, node, recursive=False):
@ -918,7 +918,7 @@ class Graph(BaseObject):
if not recursive:
return set([edge.dst.node for edge in self.edges if edge.src.node is node])
outputNodes, edges = self.dfsOnDiscover(node, filterTypes=None, reverse=True)
outputNodes, edges = self.dfsOnDiscover(startNodes=[node], filterTypes=None, reverse=True)
return outputNodes[1:] # exclude current node
@Slot(Node, result=int)
@ -1074,7 +1074,7 @@ class Graph(BaseObject):
See Also:
Graph.update, Graph.updateInternals, Graph.updateStatusFromCache
"""
nodes, edges = self.dfsOnDiscover(fromNode)
nodes, edges = self.dfsOnDiscover(startNodes=[fromNode])
for node in nodes:
node.dirty = True
@ -1098,7 +1098,7 @@ class Graph(BaseObject):
@Slot(Node)
def clearDataFrom(self, startNode):
for node in self.dfsOnDiscover(startNode)[0]:
for node in self.dfsOnDiscover(startNodes=[startNode])[0]:
node.clearData()
def iterChunksByStatus(self, status):

View file

@ -69,7 +69,7 @@ class TaskThread(Thread):
break
else:
logging.error("Error on node computation: {}".format(e))
nodesToRemove, _ = self._manager._graph.dfsOnDiscover(node)
nodesToRemove, _ = self._manager._graph.dfsOnDiscover(startNodes=[node])
# remove following nodes from the task queue
for n in nodesToRemove[1:]: # exclude current node
try:

View file

@ -526,7 +526,7 @@ class UIGraph(QObject):
with self.groupedGraphModification("Remove Nodes from {}".format(startNode.name)):
# Perform nodes removal from leaves to start node so that edges
# can be re-created in correct order on redo.
[self.removeNode(node) for node in reversed(self._graph.dfsOnDiscover(startNode)[0])]
[self.removeNode(node) for node in reversed(self._graph.dfsOnDiscover(startNodes=[startNode])[0])]
@Slot(Attribute, Attribute)
def addEdge(self, src, dst):

View file

@ -473,7 +473,7 @@ class Reconstruction(UIGraph):
def onCameraInitChanged(self):
# Update active nodes when CameraInit changes
nodes = self._graph.dfsOnDiscover(self._cameraInit)[0]
nodes = self._graph.dfsOnDiscover(startNodes=[self._cameraInit])[0]
self.setActiveNodes(nodes)
@Slot()
@ -651,7 +651,7 @@ class Reconstruction(UIGraph):
"""
if not startNode:
return None
nodes = self._graph.dfsOnDiscover(startNode, nodeTypes)[0]
nodes = self._graph.dfsOnDiscover(startNodes=[startNode], filterTypes=nodeTypes)[0]
if not nodes:
return None
node = nodes[-1]

View file

@ -174,16 +174,16 @@ def test_graph_reverse_dfsOnDiscover():
F = graph.addNewNode('AppendText', input=A.output, inputText=E.output)
# Get all nodes from A (use set, order not guaranteed)
nodes = graph.dfsOnDiscover(A)[0]
nodes = graph.dfsOnDiscover(startNodes=[A])[0]
assert set(nodes) == {A, B, D, C, E, F}
# Get all nodes from B
nodes = graph.dfsOnDiscover(B)[0]
nodes = graph.dfsOnDiscover(startNodes=[B])[0]
assert set(nodes) == {B, D, C, E, F}
# Get all nodes of type AppendText from B
nodes = graph.dfsOnDiscover(B, filterTypes=['AppendText'])[0]
nodes = graph.dfsOnDiscover(startNodes=[B], filterTypes=['AppendText'])[0]
assert set(nodes) == {B, D, C, F}
# Get all nodes from C (order guaranteed)
nodes = graph.dfsOnDiscover(C)[0]
nodes = graph.dfsOnDiscover(startNodes=[C])[0]
assert nodes == [C, E, F]
@ -205,22 +205,22 @@ def test_graph_dfsOnDiscover():
F = graph.addNewNode('AppendText', input=A.output, inputText=E.output)
# Get all nodes from A (use set, order not guaranteed)
nodes = graph.dfsOnDiscover(A, reverse=False)[0]
nodes = graph.dfsOnDiscover(startNodes=[A], reverse=False)[0]
assert set(nodes) == {A}
# Get all nodes from D
nodes = graph.dfsOnDiscover(D, reverse=False)[0]
nodes = graph.dfsOnDiscover(startNodes=[D], reverse=False)[0]
assert set(nodes) == {A, B, D, G}
# Get all nodes from E
nodes = graph.dfsOnDiscover(E, reverse=False)[0]
nodes = graph.dfsOnDiscover(startNodes=[E], reverse=False)[0]
assert set(nodes) == {A, B, C, E}
# Get all nodes from F
nodes = graph.dfsOnDiscover(F, reverse=False)[0]
nodes = graph.dfsOnDiscover(startNodes=[F], reverse=False)[0]
assert set(nodes) == {A, B, C, E, F}
# Get all nodes of type AppendText from C
nodes = graph.dfsOnDiscover(C, filterTypes=['AppendText'], reverse=False)[0]
nodes = graph.dfsOnDiscover(startNodes=[C], filterTypes=['AppendText'], reverse=False)[0]
assert set(nodes) == {B, C}
# Get all nodes from D (order guaranteed)
nodes = graph.dfsOnDiscover(D, longestPathFirst=True, reverse=False)[0]
nodes = graph.dfsOnDiscover(startNodes=[D], longestPathFirst=True, reverse=False)[0]
assert nodes == [D, B, A, G]