What is the pure Python equivalent to the IPython magic function call %matplotlib inline?
Question: In IPython Notebook, I defined a function that contains a call to the magic
function `%matplotlib`, like this:

    
    
    def foo(x):
        %matplotlib inline
        # ... some useful stuff happens in between here
        imshow(np.asarray(img))
    

I'd like to put that function into a Python module so that I can just import
and call it.

However, to do this, I'd need to remove the `%matplotlib inline` from my code
and replace it with its pure-Python equivalent.

What is the pure-Python equivalent?


Answer: `%matplotlib inline` directly hook into IPython instance. You can get the
equivalent by using `%hist -t` that show you the processed input as pure
python, which show that `%matplotlib inline` is equivalent to
`get_ipython().magic('matplotlib inline')` in which `get_ipython()` return the
current ipython shell object. It is pure python but will work only in an
IPython kernel.

For more in depth explanation, `%matplolib xxx` just set matplotlib backend to
xxx, the case od inline is a bit different and requires first a backend which
is shipped with IPython and not matplotlib. Even if this backend was in
matplotlib itself, it needs hooks in IPython itself to trigger the display and
GC of matplotlib figures after each cell execution.

