def prune(self):
"""TODO:
Note: Does not update the final data structure, because it is dependent
on the automaton type.
"""
# set of allowed symbols, i.e. singletons and emptyset
symbols = set([0] + self.props.values())
# update transitions and mark for deletion
del_transitions = deque()
for u, v, d in self.g.edges_iter(data=True):
sym = d['input'] & symbols
if sym:
d['input'] = sym
else:
del_transitions.append((u, v))
self.g.remove_edges_from(del_transitions)
# delete states unreachable from the initial state
init = next(self.init.iterkeys())
reachable_states = nx.shortest_path_length(self.g, source=init).keys()
del_states = [n for n in self.g.nodes_iter() if n not in reachable_states]
self.g.remove_nodes_from(del_states)
return del_states, del_transitions
评论列表
文章目录