Draw fysom defined state machines
If you have a finite state machine defined using the Python fysom library it is often useful to see how it looks in graphical form.
Take the following machine (from the fysom readme).
from fysom import Fysom
fsm = Fysom({
'initial': 'green',
'events': [
{'name': 'warn', 'src': 'green', 'dst': 'yellow'},
{'name': 'panic', 'src': 'yellow', 'dst': 'red'},
{'name': 'calm', 'src': 'red', 'dst': 'yellow'},
{'name': 'clear', 'src': 'yellow', 'dst': 'green'}
]
})
This can be displayed using networkx and nxpd
import networkx as nx
from nxpd import draw
G = nx.MultiDiGraph()
for event, transitions in fsm._map.items():
for from_state, to_state in transitions.items():
G.add_edges_from([(from_state, to_state)], label=event)
draw(G)
This will generate the image below:
This also works inside iPython/Jupyter notebooks – just call the draw function as
draw(G, show='ipynb')