{ "metadata": { "name": "Part 1 - Running Code" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Running Code in the IPython Notebook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First and foremost, the IPython Notebook is an interactive environment for writing and running Python code." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Code cells allow you to enter and run Python code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run a code cell using `Shift-Enter` or pressing the \"Play\" button in the toolbar above:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a = 10" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "print(a)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10\n" ] } ], "prompt_number": 11 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Managing the IPython Kernel" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Code is run in a separate process called the IPython Kernel. The Kernel can be interrupted or restarted. Try running the following cell and then hit the \"Stop\" button in the toolbar above." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import time\n", "time.sleep(10)" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "KeyboardInterrupt", "evalue": "", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msleep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mKeyboardInterrupt\u001b[0m: " ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If the Kernel dies you will be prompted to restart it. Here we call the low-level system libc.time routine with the wrong argument via\n", "ctypes to segfault the Python interpreter:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import sys\n", "from ctypes import CDLL\n", "# This will crash a Linux or Mac system; equivalent calls can be made on Windows\n", "dll = 'dylib' if sys.platform == 'darwin' else 'so.6'\n", "libc = CDLL(\"libc.%s\" % dll) \n", "libc.time(-1) # BOOM!!" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": "*" }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "All of the goodness of IPython works" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here are two system aliases:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "pwd" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 4, "text": [ "u'/Users/bgranger/Documents/Computation/IPython/code/ipython/examples/notebooks'" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "ls" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "01_notebook_introduction.ipynb Octave Magic.ipynb\r\n", "Animations Using clear_output.ipynb PyLab and Matplotlib.ipynb\r\n", "Basic Output.ipynb R Magics.ipynb\r\n", "Custom Display Logic.ipynb Running Code.ipynb\r\n", "Cython Magics.ipynb Script Magics.ipynb\r\n", "Data Publication API.ipynb SymPy Examples.ipynb\r\n", "Display System.ipynb Trapezoid Rule.ipynb\r\n", "JS Progress Bar.ipynb Typesetting Math Using MathJax.ipynb\r\n", "Local Files.ipynb animation.m4v\r\n", "Markdown Cells.ipynb python-logo.svg\r\n", "Notebook Tour.ipynb\r\n" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Any command line program can be run using `!` with string interpolation from Python variables:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "message = 'The IPython notebook is great!'\n", "# note: the echo command does not run on Windows, it's a unix command.\n", "!echo $message" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tab completion works:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy\n", "numpy.random." ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tab completion after `(` brings up a tooltip with the docstring:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "numpy.random.rand(" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Adding `?` opens the docstring in the pager below:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "magic?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Exceptions are formatted nicely:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = 1\n", "y = 4\n", "z = y/(1-x)" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "ZeroDivisionError", "evalue": "integer division or modulo by zero", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mz\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mZeroDivisionError\u001b[0m: integer division or modulo by zero" ] } ], "prompt_number": 15 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Working with external code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are a number of ways of getting external code into code cells." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pasting code with `>>>` prompts works as expected:" ] }, { "cell_type": "code", "collapsed": false, "input": [ ">>> the_world_is_flat = 1\n", ">>> if the_world_is_flat:\n", "... print(\"Be careful not to fall off!\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Be careful not to fall off!\n" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `%load` magic lets you load code from URLs or local files:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%load?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "%pylab inline" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.kernel.zmq.pylab.backend_inline].\n", "For more information, type 'help(pylab)'.\n" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "%load http://matplotlib.sourceforge.net/mpl_examples/pylab_examples/integral_demo.py" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "#!/usr/bin/env python\n", "\n", "# implement the example graphs/integral from pyx\n", "from pylab import *\n", "from matplotlib.patches import Polygon\n", "\n", "def func(x):\n", " return (x-3)*(x-5)*(x-7)+85\n", "\n", "ax = subplot(111)\n", "\n", "a, b = 2, 9 # integral area\n", "x = arange(0, 10, 0.01)\n", "y = func(x)\n", "plot(x, y, linewidth=1)\n", "\n", "# make the shaded region\n", "ix = arange(a, b, 0.01)\n", "iy = func(ix)\n", "verts = [(a,0)] + zip(ix,iy) + [(b,0)]\n", "poly = Polygon(verts, facecolor='0.8', edgecolor='k')\n", "ax.add_patch(poly)\n", "\n", "text(0.5 * (a + b), 30,\n", " r\"$\\int_a^b f(x)\\mathrm{d}x$\", horizontalalignment='center',\n", " fontsize=20)\n", "\n", "axis([0,10, 0, 180])\n", "figtext(0.9, 0.05, 'x')\n", "figtext(0.1, 0.9, 'y')\n", "ax.set_xticks((a,b))\n", "ax.set_xticklabels(('a','b'))\n", "ax.set_yticks([])\n", "show()\n" ], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }