def ipython_cell_executed(self):
user_ns = self.kernel.shell.user_ns
ip_keys = set(['In', 'Out', '_', '__', '___',
'__builtin__',
'_dh', '_ih', '_oh', '_sh', '_i', '_ii', '_iii',
'exit', 'get_ipython', 'quit'])
# '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__',
clean_ns_keys = set([k for k, v in user_ns.items() if not history_vars_pattern.match(k)]) - ip_keys
clean_ns = {k: v for k, v in user_ns.items() if k in clean_ns_keys}
# user_ns['_i'] is not updated yet (refers to the -2 item)
# 'In' and '_ih' point to the same object (but '_ih' is supposed to be the non-overridden one)
cur_input_num = len(user_ns['_ih']) - 1
last_input = user_ns['_ih'][-1]
if setitem_pattern.match(last_input):
m = setitem_pattern.match(last_input)
varname = m.group(1)
# otherwise it should have failed at this point, but let us be sure
if varname in clean_ns:
if self._display_in_grid(varname, clean_ns[varname]):
# XXX: this completely refreshes the array, including detecting scientific & ndigits, which might
# not be what we want in this case
self.select_list_item(varname)
else:
# not setitem => assume expr or normal assignment
if last_input in clean_ns:
# the name exists in the session (variable)
if self._display_in_grid('', self.data[last_input]):
# select and display it
self.select_list_item(last_input)
else:
# any statement can contain a call to a function which updates globals
# this will select (or refresh) the "first" changed array
self.update_mapping(clean_ns)
# if the statement produced any output (probably because it is a simple expression), display it.
# _oh and Out are supposed to be synonyms but "_ih" is supposed to be the non-overridden one.
# It would be easier to use '_' instead but that refers to the last output, not the output of the
# last command. Which means that if the last command did not produce any output, _ is not modified.
cur_output = user_ns['_oh'].get(cur_input_num)
if cur_output is not None:
if self._display_in_grid('_', cur_output):
self.view_expr(cur_output)
if isinstance(cur_output, matplotlib.axes.Subplot) and 'inline' not in matplotlib.get_backend():
show_figure(self, cur_output.figure)
评论列表
文章目录