mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-05-10 15:46:54 +02:00
[core] Graph: change signature of dfsOnDiscover()
This commit is contained in:
parent
f8bd40ad38
commit
208749d897
5 changed files with 24 additions and 24 deletions
|
@ -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):
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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]
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue