From 208749d8972440e643f37fb3fd4876260244fd2b Mon Sep 17 00:00:00 2001 From: Julien-Haudegond <44610840+Julien-Haudegond@users.noreply.github.com> Date: Fri, 4 Sep 2020 12:22:20 +0200 Subject: [PATCH] [core] Graph: change signature of dfsOnDiscover() --- meshroom/core/graph.py | 20 ++++++++++---------- meshroom/core/taskManager.py | 2 +- meshroom/ui/graph.py | 2 +- meshroom/ui/reconstruction.py | 4 ++-- tests/test_graph.py | 20 ++++++++++---------- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/meshroom/core/graph.py b/meshroom/core/graph.py index e8528861..05f90aba 100644 --- a/meshroom/core/graph.py +++ b/meshroom/core/graph.py @@ -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): diff --git a/meshroom/core/taskManager.py b/meshroom/core/taskManager.py index 7cb382c5..78296235 100644 --- a/meshroom/core/taskManager.py +++ b/meshroom/core/taskManager.py @@ -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: diff --git a/meshroom/ui/graph.py b/meshroom/ui/graph.py index bdc152fe..a3334ca6 100644 --- a/meshroom/ui/graph.py +++ b/meshroom/ui/graph.py @@ -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): diff --git a/meshroom/ui/reconstruction.py b/meshroom/ui/reconstruction.py index 1bd5f39c..2d3cd677 100755 --- a/meshroom/ui/reconstruction.py +++ b/meshroom/ui/reconstruction.py @@ -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] diff --git a/tests/test_graph.py b/tests/test_graph.py index 7502576e..6e0024b1 100644 --- a/tests/test_graph.py +++ b/tests/test_graph.py @@ -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]