[core] Graph: change default reverse direction in dfsOnDiscover()

This commit is contained in:
Julien-Haudegond 2020-09-04 12:42:05 +02:00
parent 208749d897
commit b567d8ff5c
5 changed files with 16 additions and 16 deletions

View file

@ -380,7 +380,7 @@ class Graph(BaseObject):
Returns:
OrderedDict[Node, Node]: the source->duplicate map
"""
srcNodes, srcEdges = self.dfsOnDiscover(startNodes=[fromNode])
srcNodes, srcEdges = self.dfsOnDiscover(startNodes=[fromNode], reverse=True)
# use OrderedDict to keep duplicated nodes creation order
duplicates = OrderedDict()
@ -714,9 +714,9 @@ class Graph(BaseObject):
self.dfs(visitor=visitor, startNodes=startNodes)
return nodes, edges
def dfsOnDiscover(self, startNodes, filterTypes=None, longestPathFirst=False, reverse=True):
def dfsOnDiscover(self, startNodes, filterTypes=None, longestPathFirst=False, reverse=False):
"""
Return the node chain from startNodes to the graph leaves.
Return the node chain from startNodes to the graph roots/leaves.
Args:
startNodes (Node list): the nodes to start the visit from.
@ -725,10 +725,10 @@ class Graph(BaseObject):
longestPathFirst (bool): (optional) if multiple paths, nodes belonging to
the longest one will be visited first.
reverse (bool): (optional) direction of visit.
True is for getting nodes depending on the startNode.
False is for getting nodes required for the startNode.
True is for getting nodes depending on the startNodes (to leaves).
False is for getting nodes required for the startNodes (to roots).
Returns:
The list of nodes and edges, from startNodes to the graph leaves following edges.
The list of nodes and edges, from startNodes to the graph roots/leaves following edges.
"""
nodes = []
edges = []
@ -1074,7 +1074,7 @@ class Graph(BaseObject):
See Also:
Graph.update, Graph.updateInternals, Graph.updateStatusFromCache
"""
nodes, edges = self.dfsOnDiscover(startNodes=[fromNode])
nodes, edges = self.dfsOnDiscover(startNodes=[fromNode], reverse=True)
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(startNodes=[startNode])[0]:
for node in self.dfsOnDiscover(startNodes=[startNode], reverse=True)[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(startNodes=[node])
nodesToRemove, _ = self._manager._graph.dfsOnDiscover(startNodes=[node], reverse=True)
# 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(startNodes=[startNode])[0])]
[self.removeNode(node) for node in reversed(self._graph.dfsOnDiscover(startNodes=[startNode], reverse=True)[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(startNodes=[self._cameraInit])[0]
nodes = self._graph.dfsOnDiscover(startNodes=[self._cameraInit], reverse=True)[0]
self.setActiveNodes(nodes)
@Slot()
@ -651,7 +651,7 @@ class Reconstruction(UIGraph):
"""
if not startNode:
return None
nodes = self._graph.dfsOnDiscover(startNodes=[startNode], filterTypes=nodeTypes)[0]
nodes = self._graph.dfsOnDiscover(startNodes=[startNode], filterTypes=nodeTypes, reverse=True)[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(startNodes=[A])[0]
nodes = graph.dfsOnDiscover(startNodes=[A], reverse=True)[0]
assert set(nodes) == {A, B, D, C, E, F}
# Get all nodes from B
nodes = graph.dfsOnDiscover(startNodes=[B])[0]
nodes = graph.dfsOnDiscover(startNodes=[B], reverse=True)[0]
assert set(nodes) == {B, D, C, E, F}
# Get all nodes of type AppendText from B
nodes = graph.dfsOnDiscover(startNodes=[B], filterTypes=['AppendText'])[0]
nodes = graph.dfsOnDiscover(startNodes=[B], filterTypes=['AppendText'], reverse=True)[0]
assert set(nodes) == {B, D, C, F}
# Get all nodes from C (order guaranteed)
nodes = graph.dfsOnDiscover(startNodes=[C])[0]
nodes = graph.dfsOnDiscover(startNodes=[C], reverse=True)[0]
assert nodes == [C, E, F]