|
|
====================================================
|
|
|
Notes on code execution in :class:`InteractiveShell`
|
|
|
====================================================
|
|
|
|
|
|
Overview
|
|
|
========
|
|
|
|
|
|
This section contains information and notes about the code execution
|
|
|
system in :class:`InteractiveShell`. This system needs to be refactored
|
|
|
and we are keeping notes about this process here.
|
|
|
|
|
|
Current design
|
|
|
==============
|
|
|
|
|
|
Here is a script that shows the relationships between the various
|
|
|
methods in :class:`InteractiveShell` that manage code execution::
|
|
|
|
|
|
import networkx as nx
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
|
exec_init_cmd = 'exec_init_cmd'
|
|
|
interact = 'interact'
|
|
|
runlines = 'runlines'
|
|
|
runsource = 'runsource'
|
|
|
runcode = 'runcode'
|
|
|
push_line = 'push_line'
|
|
|
mainloop = 'mainloop'
|
|
|
embed_mainloop = 'embed_mainloop'
|
|
|
ri = 'raw_input'
|
|
|
prefilter = 'prefilter'
|
|
|
|
|
|
g = nx.DiGraph()
|
|
|
|
|
|
g.add_node(exec_init_cmd)
|
|
|
g.add_node(interact)
|
|
|
g.add_node(runlines)
|
|
|
g.add_node(runsource)
|
|
|
g.add_node(push_line)
|
|
|
g.add_node(mainloop)
|
|
|
g.add_node(embed_mainloop)
|
|
|
g.add_node(ri)
|
|
|
g.add_node(prefilter)
|
|
|
|
|
|
g.add_edge(exec_init_cmd, push_line)
|
|
|
g.add_edge(exec_init_cmd, prefilter)
|
|
|
g.add_edge(mainloop, exec_init_cmd)
|
|
|
g.add_edge(mainloop, interact)
|
|
|
g.add_edge(embed_mainloop, interact)
|
|
|
g.add_edge(interact, ri)
|
|
|
g.add_edge(interact, push_line)
|
|
|
g.add_edge(push_line, runsource)
|
|
|
g.add_edge(runlines, push_line)
|
|
|
g.add_edge(runlines, prefilter)
|
|
|
g.add_edge(runsource, runcode)
|
|
|
g.add_edge(ri, prefilter)
|
|
|
|
|
|
nx.draw_spectral(g, node_size=100, alpha=0.6, node_color='r',
|
|
|
font_size=10, node_shape='o')
|
|
|
plt.show()
|
|
|
|