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

View file

@ -69,7 +69,7 @@ class TaskThread(Thread):
break break
else: else:
logging.error("Error on node computation: {}".format(e)) 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 # remove following nodes from the task queue
for n in nodesToRemove[1:]: # exclude current node for n in nodesToRemove[1:]: # exclude current node
try: try:

View file

@ -526,7 +526,7 @@ class UIGraph(QObject):
with self.groupedGraphModification("Remove Nodes from {}".format(startNode.name)): with self.groupedGraphModification("Remove Nodes from {}".format(startNode.name)):
# Perform nodes removal from leaves to start node so that edges # Perform nodes removal from leaves to start node so that edges
# can be re-created in correct order on redo. # 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) @Slot(Attribute, Attribute)
def addEdge(self, src, dst): def addEdge(self, src, dst):

View file

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

View file

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