{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Customizing IPython - Extensions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Extensions are just Python modules with a special function:\n", "\n", "```python\n", "def load_ipython_extension(ip):\n", " do_anything()\n", "```\n", "\n", "`%load_ext module` imports the module, and calls `module.load_ipython_extension(ip)`\n", "with the IPython instance.\n", "\n", "This allows modules or standalone extensions to manipulate IPython.\n", "Most often, extensions define new magics or work with the interactive namespace.\n", "\n", "Cython is an example of a package that can be used as an IPython extension.\n", "This defines a few magics for executing Cython code interactively." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "ERROR: Cell magic `%%cython` not found.\n" ] } ], "source": [ "%%cython\n", "\n", "cpdef noop():\n", " pass" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%load_ext Cython" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%%cython\n", "cimport numpy\n", "\n", "cpdef cysum(numpy.ndarray[double] A):\n", " \"\"\"Compute the sum of an array\"\"\"\n", " cdef double a=0\n", " for i in range(A.shape[0]):\n", " a += A[i]\n", " return a\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def pysum(A):\n", " \"\"\"Compute the sum of an array\"\"\"\n", " a = 0\n", " for i in range(A.shape[0]):\n", " a += A[i]\n", " return a\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Python 100 10000 loops, best of 3: 24.8 µs per loop\n", "np.sum 100 The slowest run took 15.82 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 5.38 µs per loop\n", "Cython 100 The slowest run took 10.16 times longer than the fastest. This could mean that an intermediate result is being cached \n", "1000000 loops, best of 3: 1.4 µs per loop\n", "Python 1000 1000 loops, best of 3: 242 µs per loop\n", "np.sum 1000 The slowest run took 9.22 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 6.81 µs per loop\n", "Cython 1000 The slowest run took 5.86 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 2.96 µs per loop\n", "Python 10000 100 loops, best of 3: 2.44 ms per loop\n", "np.sum 10000 The slowest run took 5.32 times longer than the fastest. This could mean that an intermediate result is being cached \n", "100000 loops, best of 3: 14.8 µs per loop\n", "Cython 10000 100000 loops, best of 3: 18.7 µs per loop\n" ] } ], "source": [ "for sz in (100, 1000, 10000):\n", " A = np.random.random(sz)\n", " print(\"Python %i\" % sz, end=' ')\n", " %timeit pysum(A)\n", " print(\"np.sum %i\" % sz, end=' ')\n", " %timeit A.sum()\n", " print(\"Cython %i\" % sz, end=' ')\n", " %timeit cysum(A)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see what Cython's `load_ipython_extension` function looks like" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import Cython" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "Cython.load_ipython_extension??" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from Cython.Build.IpythonMagic import CythonMagics\n", "CythonMagics??" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Our own extension" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Loading an extension can do as much or as little as you want.\n", "\n", "Since we have been defining our timer magics, let's create an extension to make them available in any IPython session." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%pycat soln/mymagics.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`%install_ext` is a function that can take any file path or URL, and puts the target into IPYTHONDIR/extensions" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Installed mymagics.py. To use it, type:\n", " %load_ext mymagics\n" ] } ], "source": [ "%install_ext soln/mymagics.py" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%load_ext mymagics" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "101 ms\n" ] } ], "source": [ "import time\n", "%tic\n", "time.sleep(0.1)\n", "%toc" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "hello\n" ] }, { "data": { "image/png": [ "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\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%nbrun _Sample" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For some example extensions, see [this repository](http://github.com/minrk/ipython_extensions).\n", "\n", "Now we can get our magics with a single `%load_ext` call.\n", "Let's move on to [Configuring IPython](Customizing%20IPython%20-%20Config.ipynb),\n", "so we can see how to load our extension at startup." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.3" } }, "nbformat": 4, "nbformat_minor": 0 }