{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# A brief tour of the IPython notebook\n", "\n", "This document will give you a brief tour of the capabilities of the IPython notebook. \n", "You can view its contents by scrolling around, or execute each cell by typing `Shift-Enter`.\n", "\n", "The rest of the notebooks in this directory illustrate various other aspects and \n", "capabilities of the IPython notebook; some of them may require additional libraries to be executed.\n", "\n", "**NOTE:** This notebook *must* be run from its own directory, so you must ``cd``\n", "to this directory and then start the notebook, but do *not* use the ``--notebook-dir``\n", "option to run it from another location.\n", "\n", "The first thing you need to know is that you are still controlling the same old IPython you're used to,\n", "so things like shell aliases and magic commands still work:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "pwd" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 1, "text": [ "u'/home/fperez/ipython/tutorial/notebooks'" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "ls" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\u001b[0m\u001b[00manimation.m4v\u001b[0m \u001b[00mP10 Basic Interface.ipynb\u001b[0m\r\n", "\u001b[00margv.py\u001b[0m \u001b[00mP15 Parallel Magics.ipynb\u001b[0m\r\n", "\u001b[01;32mcat.py\u001b[0m* \u001b[00mP20 Multiplexing.ipynb\u001b[0m\r\n", "\u001b[00mCell Magics.ipynb\u001b[0m \u001b[00mP21 LoadBalancing.ipynb\u001b[0m\r\n", "\u001b[00mDisplay control.ipynb\u001b[0m \u001b[00mP30 Working with MPI.ipynb\u001b[0m\r\n", "\u001b[01;36mfigs\u001b[0m/ \u001b[00mP99 Summary.ipynb\u001b[0m\r\n", "\u001b[00mfoo.py\u001b[0m \u001b[00mPX01 Example - Remote Iteration.ipynb\u001b[0m\r\n", "\u001b[01;32mlnum.py\u001b[0m* \u001b[00mpython-logo.svg\u001b[0m\r\n", "\u001b[00mmyscript.py\u001b[0m \u001b[00mPZ Performance.ipynb\u001b[0m\r\n", "\u001b[01;34mnb\u001b[0m@ \u001b[01;36msoln\u001b[0m/\r\n", "\u001b[00mnbtour.ipynb\u001b[0m \u001b[01;32mtext_analysis.py\u001b[0m*\r\n", "\u001b[00mP01 Overview and Architecture.ipynb\u001b[0m\r\n" ] } ], "prompt_number": 2 }, { "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": [ { "output_type": "stream", "stream": "stdout", "text": [ "The IPython notebook is great!\r\n" ] } ], "prompt_number": 3 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Plots with matplotlib" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "IPython adds an 'inline' matplotlib backend,\n", "which embeds any matplotlib figures into the notebook." ] }, { "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.zmq.pylab.backend_inline].\n", "For more information, type 'help(pylab)'.\n" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "x = linspace(0, 3*pi, 500)\n", "plot(x, sin(x**2))\n", "title('A simple chirp');" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n" } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can paste blocks of input with prompt markers, such as those from\n", "[the official Python tutorial](http://docs.python.org/tutorial/interpreter.html#interactive-mode)" ] }, { "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": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Errors are shown in informative ways:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%run non_existent_file" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "ERROR: File `u'non_existent_file.py'` not found." ] } ], "prompt_number": 7 }, { "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[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m4\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mz\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m/\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m-\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mZeroDivisionError\u001b[0m: integer division or modulo by zero" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "When IPython needs to display additional information (such as providing details on an object via `x?`\n", "it will automatically invoke a pager at the bottom of the screen:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "magic" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Non-blocking output of kernel\n", "\n", "If you execute the next cell, you will see the output arriving as it is generated, not all at the end." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import time, sys\n", "for i in range(8):\n", " print i,\n", " time.sleep(0.5)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "1 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "3 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "4 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "5 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "6 " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "7\n" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Clean crash and restart\n", "\n", "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": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Markdown cells can contain formatted text and code\n", "\n", "You can *italicize*, **boldface**\n", "\n", "* build\n", "* lists\n", "\n", "and embed code meant for illustration instead of execution in Python:\n", "\n", " def f(x):\n", " \"\"\"a docstring\"\"\"\n", " return x**2\n", "\n", "or other languages:\n", "\n", " if (i=0; i" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "An image can also be displayed from raw data or a url" ] }, { "cell_type": "code", "collapsed": false, "input": [ "Image(url='http://python.org/images/python-logo.gif')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 2, "text": [ "" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "SVG images are also supported out of the box (since modern browsers do a good job of rendering them):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.display import SVG\n", "SVG(filename='figs/python-logo.svg')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 3, "svg": [ "\n", " \n", " \n", " \n", " image/svg+xml\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "" ], "text": [ "" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Video" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And more exotic objects can also be displayed, as long as their representation supports \n", "the IPython display protocol.\n", "\n", "For example, videos hosted externally on YouTube are easy to load (and writing a similar wrapper for other\n", "hosted content is trivial):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.display import YouTubeVideo\n", "# a talk about IPython at Sage Days at U. Washington, Seattle.\n", "# Video credit: William Stein.\n", "YouTubeVideo('1j_HxD4iLn8')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", " \n", " " ], "metadata": {}, "output_type": "pyout", "prompt_number": 1, "text": [ "" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the nascent video capabilities of modern browsers, you may also be able to display local\n", "videos. At the moment this doesn't work very well in all browsers, so it may or may not work for you;\n", "we will continue testing this and looking for ways to make it more robust. \n", "\n", "The following cell loads a local file called `animation.m4v`, encodes the raw video as base64 for http\n", "transport, and uses the HTML5 video tag to load it. On Chrome 15 it works correctly, displaying a control\n", "bar at the bottom with a play/pause button and a location slider." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.display import HTML\n", "video = open(\"figs/animation.m4v\", \"rb\").read()\n", "video_encoded = video.encode(\"base64\")\n", "video_tag = '