Lines Matching refs:self
12 def __init__(self, node):
14 self.node = node
19 self.npredecessors = 0
23 self.successors = []
44 def __init__(self, graph=None):
45 self._node2info = {}
46 self._ready_nodes = None
47 self._npassedout = 0
48 self._nfinished = 0
52 self.add(node, *predecessors)
54 def _get_nodeinfo(self, node):
55 if (result := self._node2info.get(node)) is None:
56 self._node2info[node] = result = _NodeInfo(node)
59 def add(self, node, *predecessors):
74 if self._ready_nodes is not None:
78 nodeinfo = self._get_nodeinfo(node)
83 pred_info = self._get_nodeinfo(pred)
86 def prepare(self):
94 if self._ready_nodes is not None:
97 self._ready_nodes = [
98 i.node for i in self._node2info.values() if i.npredecessors == 0
104 cycle = self._find_cycle()
108 def get_ready(self):
118 if self._ready_nodes is None:
122 result = tuple(self._ready_nodes)
123 n2i = self._node2info
129 self._ready_nodes.clear()
130 self._npassedout += len(result)
134 def is_active(self):
144 if self._ready_nodes is None:
146 return self._nfinished < self._npassedout or bool(self._ready_nodes)
148 def __bool__(self):
149 return self.is_active()
151 def done(self, *nodes):
163 if self._ready_nodes is None:
166 n2i = self._node2info
195 self._ready_nodes.append(successor)
196 self._nfinished += 1
198 def _find_cycle(self):
199 n2i = self._node2info
235 def static_order(self):
244 self.prepare()
245 while self.is_active():
246 node_group = self.get_ready()
248 self.done(*node_group)