{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "# A Crash Course in Python for Scientists\n", "\n", "[Rick Muller](http://www.cs.sandia.gov/~rmuller/), Sandia National Laboratories\n", "\n", "http://nbviewer.jupyter.org/gist/rpmuller/5920182 (version 0.6)\n", "\n", "This work is licensed under a [Creative Commons Attribution-ShareAlike 3.0 Unported License](http://creativecommons.org/licenses/by-sa/3.0/deed.en_US).\n", "\n", "Adapted to Python 3 by [Mauro Silberberg](mailto:maurosilber@df.uba.ar)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Why Python?\n", "Python is the programming language of choice for many scientists to a large degree because it offers a great deal of power to analyze and model scientific data with relatively little overhead in terms of learning, installation or development time. It is a language you can pick up in a weekend, and use for the rest of one's life.\n", "\n", "The [Python Tutorial](http://docs.python.org/2/tutorial/) is a great place to start getting a feel for the language. To complement this material, I taught a [Python Short Course](http://www.wag.caltech.edu/home/rpm/python_course/) years ago to a group of computational chemists during a time that I was worried the field was moving too much in the direction of using canned software rather than developing one's own methods. I wanted to focus on what working scientists needed to be more productive: parsing output of other programs, building simple models, experimenting with object oriented programming, extending the language with C, and simple GUIs. \n", "\n", "I'm trying to do something very similar here, to cut to the chase and focus on what scientists need. In the last year or so, the [IPython Project](http://ipython.org) has put together a notebook interface that I have found incredibly valuable. A large number of people have released very good IPython Notebooks that I have taken a huge amount of pleasure reading through. Some ones that I particularly like include:\n", "\n", "* Rob Johansson's [excellent notebooks](http://jrjohansson.github.io/), including [Scientific Computing with Python](https://github.com/jrjohansson/scientific-python-lectures) and [Computational Quantum Physics with QuTiP](https://github.com/jrjohansson/qutip-lectures) lectures;\n", "* [XKCD style graphs in matplotlib](http://nbviewer.ipython.org/url/jakevdp.github.com/downloads/notebooks/XKCD_plots.ipynb);\n", "* [A collection of Notebooks for using IPython effectively](https://github.com/ipython/ipython/tree/master/examples/notebooks#a-collection-of-notebooks-for-using-ipython-effectively)\n", "* [A gallery of interesting IPython Notebooks](https://github.com/ipython/ipython/wiki/A-gallery-of-interesting-IPython-Notebooks)\n", "\n", "I find IPython notebooks an easy way both to get important work done in my everyday job, as well as to communicate what I've done, how I've done it, and why it matters to my coworkers. I find myself endlessly sweeping the [IPython subreddit](http://ipython.reddit.com) hoping someone will post a new notebook. In the interest of putting more notebooks out into the wild for other people to use and enjoy, I thought I would try to recreate some of what I was trying to get across in the original Python Short Course, updated by 15 years of Python, Numpy, Scipy, Matplotlib, and IPython development, as well as my own experience in using Python almost every day of this time." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## What You Need to Install\n", "\n", "There are two branches of current releases in Python: the older-syntax Python 2, and the newer-syntax Python 3. This schizophrenia is largely intentional: when it became clear that some non-backwards-compatible changes to the language were necessary, the Python dev-team decided to go through a five-year (or so) transition, during which the new language features would be introduced and the old language was still actively maintained, to make such a transition as easy as possible. We're now (2013) past the halfway point, and, IMHO, at the first time when I'm considering making the change to Python 3.\n", "\n", "Nonetheless, I'm going to write these notes with Python 2 in mind, since this is the version of the language that I use in my day-to-day job, and am most comfortable with. If these notes are important and are valuable to people, I'll be happy to rewrite the notes using Python 3.\n", "\n", "With this in mind, these notes assume you have a Python distribution that includes:\n", "\n", "* [Python](http://www.python.org) ~~version 2.7~~ version 3.x;\n", "* [Numpy](http://www.numpy.org), the core numerical extensions for linear algebra and multidimensional arrays;\n", "* [Scipy](http://www.scipy.org), additional libraries for scientific programming;\n", "* [Matplotlib](http://matplotlib.org), excellent plotting and graphing libraries;\n", "* ~~[IPython](http://ipython.org)~~ [Jupyter](http://jupyter.org), with the additional libraries required for the notebook interface.\n", "\n", "A good, easy to install option that supports Mac, Windows, and Linux, and that has all of these packages (and much more) is the [Entought Python Distribution](https://www.enthought.com/products/epd), also known as EPD, which appears to be changing its name to Enthought Canopy. Enthought is a commercial company that supports a lot of very good work in scientific Python development and application. You can either purchase a license to use EPD, or there is also a [free version](https://www.enthought.com/products/epd/free/) that you can download and install.\n", "\n", "Here are some other alternatives, should you not want to use EPD:\n", "\n", "**Linux** Most distributions have an installation manager. Redhat has yum, Ubuntu has apt-get. To my knowledge, all of these packages should be available through those installers.\n", "\n", "**Mac** I use [Macports](http://www.macports.org/), which has up-to-date versions of all of these packages.\n", "\n", "**Windows** The [PythonXY](https://code.google.com/p/pythonxy/) package has everything you need: install the package, then go to Start > PythonXY > Command Prompts > IPython notebook server.\n", "\n", "**Cloud** This notebook is currently not running on the [IPython notebook viewer](http://nbviewer.ipython.org/), but will be shortly, which will allow the notebook to be viewed but not interactively. I'm keeping an eye on [Wakari](http://www.wakari.io), from [Continuum Analytics](http://continuum.io/), which is a cloud-based IPython notebook. Wakari appears to support free accounts as well. Continuum is a company started by some of the core Enthought Numpy/Scipy people focusing on big data. \n", "\n", "Continuum also supports a bundled, multiplatform Python package called [Anaconda](https://store.continuum.io/) that I'll also keep an eye on." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "# I. Python Overview\n", "This is a quick introduction to Python. There are lots of other places to learn the language more thoroughly. I have collected a list of useful links, including ones to other learning resources, at the end of this notebook. If you want a little more depth, [Python Tutorial](http://docs.python.org/2/tutorial/) is a great place to start, as is Zed Shaw's [Learn Python the Hard Way](http://learnpythonthehardway.org/book/).\n", "\n", "The lessons that follow make use of the IPython notebooks. There's a good introduction to notebooks [in the IPython notebook documentation](http://ipython.org/notebook.html) that even has a [nice video](http://www.youtube.com/watch?v=H6dLGQw9yFQ#!) on how to use the notebooks. You should probably also flip through the [IPython tutorial](http://ipython.org/ipython-doc/dev/interactive/tutorial.html) in your copious free time.\n", "\n", "Briefly, notebooks have code cells (that are generally followed by result cells) and text cells. The text cells are the stuff that you're reading now. The code cells start with \"In []:\" with some number generally in the brackets. If you put your cursor in the code cell and hit Shift-Enter, the code will run in the Python interpreter and the result will print out in the output cell. You can then change things around and see whether you understand what's going on. If you need to know more, see the [IPython notebook documentation](http://ipython.org/notebook.html) or the [IPython tutorial](http://ipython.org/ipython-doc/dev/interactive/tutorial.html)." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Using Python as a Calculator" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Many of the things I used to use a calculator for, I now use Python for:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "2+2" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "(If you're typing this into an IPython notebook, or otherwise using notebook file, you hit shift-Enter to evaluate a cell.)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "5.0" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(50-5*6)/4" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "9.0" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from math import sqrt\n", "sqrt(81)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We've just seen the first instance of an **import** statement. Python has a huge number of libraries included with the distribution. To keep things simple, most of these variables and functions are not accessible from a normal Python interactive session. Instead, you have to import the name. For example, there is a **math** module containing many useful functions. To access, say, the square root function, you can either first\n", "\n", " from math import sqrt\n", "\n", "and then use the function or you can simply import the math library itself" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "9.0" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import math\n", "math.sqrt(81)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "You can define variables using the equals (=) sign:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "600" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "width = 20\n", "length = 30\n", "area = length*width\n", "area" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "If you try to access a variable that you haven't yet defined, you get an error:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "ename": "NameError", "evalue": "name 'volume' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mvolume\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mNameError\u001b[0m: name 'volume' is not defined" ] } ], "source": [ "volume" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "and you need to define it:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "6000" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "depth = 10\n", "volume = area*depth\n", "volume" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "You can name a variable *almost* anything you want. It needs to start with an alphabetical character or \"\\_\", can contain alphanumeric charcters plus underscores (\"\\_\"). [Certain words](https://docs.python.org/3/reference/lexical_analysis.html#keywords), however, are reserved for the language:\n", "\n", " False class finally is return\n", " None continue for lambda try\n", " True def from nonlocal while\n", " and del global not with\n", " as elif if or yield\n", " assert else import pass\n", " break except in raise\n", "\n", "Trying to define a variable using one of these will result in a syntax error:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (, line 1)", "output_type": "error", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m return = 0\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "return = 0" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The [Python Tutorial](http://docs.python.org/2/tutorial/introduction.html#using-python-as-a-calculator) has more on using Python as an interactive shell. The [IPython tutorial](http://ipython.org/ipython-doc/dev/interactive/tutorial.html) makes a nice complement to this, since IPython has a much more sophisticated iteractive shell." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Strings\n", "Strings are lists of printable characters, and can be defined using either single quotes" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "'Hello, World!'" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'Hello, World!'" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "or double quotes" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "'Hello, World!'" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"Hello, World!\"" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "But not both at the same time, unless you want one of the symbols to be part of the string." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "\"He's a Rebel\"" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"He's a Rebel\"" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "'She asked, \"How are you today?\"'" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'She asked, \"How are you today?\"'" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Just like the other two data objects we're familiar with (ints and floats), you can assign a string to a variable" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "greeting = \"Hello, World!\"" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The **print** function is often used for printing character strings:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello, World!\n" ] } ], "source": [ "print(greeting)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "But it can also print data types other than strings:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The area is 600\n" ] } ], "source": [ "print(\"The area is \", area)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "In the above snipped, the number 600 (stored in the variable \"area\") is converted into a string before being printed out." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "You can use the + operator to concatenate strings together:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello,World!\n" ] } ], "source": [ "statement = \"Hello,\" + \"World!\"\n", "print(statement)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Don't forget the space between the strings, if you want one there. " ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello, World!\n" ] } ], "source": [ "statement = \"Hello, \" + \"World!\"\n", "print(statement)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "You can use + to concatenate multiple strings in a single statement:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "This is a longer statement.\n" ] } ], "source": [ "print(\"This \" + \"is \" + \"a \" + \"longer \" + \"statement.\")" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "If you have a lot of words to concatenate together, there are other, more efficient ways to do this. But this is fine for linking a few strings together." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Lists\n", "Very often in a programming language, one wants to keep a group of similar items together. Python does this using a data type called **lists**." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "days_of_the_week = [\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "You can access members of the list using the **index** of that item:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "'Tuesday'" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "days_of_the_week[2]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Python lists, like C, but unlike Fortran, use 0 as the index of the first element of a list. Thus, in this example, the 0 element is \"Sunday\", 1 is \"Monday\", and so on. If you need to access the *n*th element from the end of the list, you can use a negative index. For example, the -1 element of a list is the last element:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "'Saturday'" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "days_of_the_week[-1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can add additional items to the list using the .append() command:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Fortran', 'C', 'C++']\n", "['Fortran', 'C', 'C++', 'Python']\n" ] } ], "source": [ "languages = [\"Fortran\",\"C\",\"C++\"]\n", "print(languages)\n", "\n", "languages.append(\"Python\")\n", "print(languages)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The **range()** command is a convenient way to make sequential lists of numbers:\n", "\n", "Nota: En Python 3 la función **range()** devuelve un generador en lugar de una lista. No es importante ahora la diferencia, pero para convertirlo a una lista, tienen que usar la función **list()**." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(range(10))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Note that range(n) starts at 0 and gives the sequential list of integers less than n. If you want to start at a different number, use range(start,stop)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[2, 3, 4, 5, 6, 7]" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(range(2,8))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The lists created above with range have a *step* of 1 between elements. You can also give a fixed step size via a third command:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "evens = list(range(0,20,2))\n", "evens" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "evens[3]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Lists do not have to hold the same data type. For example," ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "['Today', 7, 99.3, '']" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[\"Today\",7,99.3,\"\"]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "However, it's good (but not essential) to use lists for similar objects that are somehow logically connected. If you want to group different data types together into a composite data object, it's best to use **tuples**, which we will learn about below.\n", "\n", "You can find out how long a list is using the **len()** command:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on built-in function len in module builtins:\n", "\n", "len(obj, /)\n", " Return the number of items in a container.\n", "\n" ] } ], "source": [ "help(len)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "10" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(evens)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Iteration, Indentation, and Blocks\n", "One of the most useful things you can do with lists is to *iterate* through them, i.e. to go through each element one at a time. To do this in Python, we use the **for** statement:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sunday\n", "Monday\n", "Tuesday\n", "Wednesday\n", "Thursday\n", "Friday\n", "Saturday\n" ] } ], "source": [ "for day in days_of_the_week:\n", " print(day)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This code snippet goes through each element of the list called **days_of_the_week** and assigns it to the variable **day**. It then executes everything in the indented block (in this case only one line of code, the print statement) using those variable assignments. When the program has gone through every element of the list, it exists the block.\n", "\n", "(Almost) every programming language defines blocks of code in some way. In Fortran, one uses END statements (ENDDO, ENDIF, etc.) to define code blocks. In C, C++, and Perl, one uses curly braces {} to define these blocks.\n", "\n", "Python uses a colon (\":\"), followed by indentation level to define code blocks. Everything at a higher level of indentation is taken to be in the same block. In the above example the block was only a single line, but we could have had longer blocks as well:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Today is Sunday\n", "Today is Monday\n", "Today is Tuesday\n", "Today is Wednesday\n", "Today is Thursday\n", "Today is Friday\n", "Today is Saturday\n" ] } ], "source": [ "for day in days_of_the_week:\n", " statement = \"Today is \" + day\n", " print(statement)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The **range()** command is particularly useful with the **for** statement to execute loops of a specified length:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The square of 0 is 0\n", "The square of 1 is 1\n", "The square of 2 is 4\n", "The square of 3 is 9\n", "The square of 4 is 16\n", "The square of 5 is 25\n", "The square of 6 is 36\n", "The square of 7 is 49\n", "The square of 8 is 64\n", "The square of 9 is 81\n", "The square of 10 is 100\n", "The square of 11 is 121\n", "The square of 12 is 144\n", "The square of 13 is 169\n", "The square of 14 is 196\n", "The square of 15 is 225\n", "The square of 16 is 256\n", "The square of 17 is 289\n", "The square of 18 is 324\n", "The square of 19 is 361\n" ] } ], "source": [ "for i in range(20):\n", " print(\"The square of \",i,\" is \",i*i)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Slicing\n", "Lists and strings have something in common that you might not suspect: they can both be treated as sequences. You already know that you can iterate through the elements of a list. You can also iterate through the letters in a string:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "S\n", "u\n", "n\n", "d\n", "a\n", "y\n" ] } ], "source": [ "for letter in \"Sunday\":\n", " print(letter)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This is only occasionally useful. Slightly more useful is the *slicing* operation, which you can also use on any sequence. We already know that we can use *indexing* to get the first element of a list:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "'Sunday'" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "days_of_the_week[0]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "If we want the list containing the first two elements of a list, we can do this via" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "['Sunday', 'Monday']" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "days_of_the_week[0:2]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "or simply" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "['Sunday', 'Monday']" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "days_of_the_week[:2]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "If we want the last items of the list, we can do this with negative slicing:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "['Friday', 'Saturday']" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "days_of_the_week[-2:]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "which is somewhat logically consistent with negative indices accessing the last elements of the list.\n", "\n", "You can do:" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']\n" ] } ], "source": [ "workdays = days_of_the_week[1:6]\n", "print(workdays)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Since strings are sequences, you can also do this to them:" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sun\n" ] } ], "source": [ "day = \"Sunday\"\n", "abbreviation = day[:3]\n", "print(abbreviation)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "If we really want to get fancy, we can pass a third element into the slice, which specifies a step length (just like a third argument to the **range()** function specifies the step):" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38]" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "numbers = list(range(0,40))\n", "evens = numbers[2::2]\n", "evens" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Note that in this example I was even able to omit the second argument, so that the slice started at 2, went to the end of the list, and took every second element, to generate the list of even numbers less that 40." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Booleans and Truth Testing\n", "We have now learned a few data types. We have integers and floating point numbers, strings, and lists to contain them. We have also learned about lists, a container that can hold any data type. We have learned to print things out, and to iterate over items in lists. We will now learn about **boolean** variables that can be either True or False.\n", "\n", "We invariably need some concept of *conditions* in programming to control branching behavior, to allow a program to react differently to different situations. If it's Monday, I'll go to work, but if it's Sunday, I'll sleep in. To do this in Python, we use a combination of **boolean** variables, which evaluate to either True or False, and **if** statements, that control branching based on boolean values." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "For example:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sleep in\n" ] } ], "source": [ "if day == \"Sunday\":\n", " print(\"Sleep in\")\n", "else:\n", " print(\"Go to work\")" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "(Quick quiz: why did the snippet print \"Go to work\" here? What is the variable \"day\" set to?)\n", "\n", "Let's take the snippet apart to see what happened. First, note the statement" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "day == \"Sunday\"" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "If we evaluate it by itself, as we just did, we see that it returns a boolean value, False. The \"==\" operator performs *equality testing*. If the two items are equal, it returns True, otherwise it returns False. In this case, it is comparing two variables, the string \"Sunday\", and whatever is stored in the variable \"day\", which, in this case, is the other string \"Saturday\". Since the two strings are not equal to each other, the truth test has the false value." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The if statement that contains the truth test is followed by a code block (a colon followed by an indented block of code). If the boolean is true, it executes the code in that block. Since it is false in the above example, we don't see that code executed.\n", "\n", "The first block of code is followed by an **else** statement, which is executed if nothing else in the above if statement is true. Since the value was false, this code is executed, which is why we see \"Go to work\".\n", "\n", "You can compare any data types in Python:" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 == 2" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "50 == 2*25" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "3 < 3.14159" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 == 1.0" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 != 0" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 <= 2" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 >= 1" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We see a few other boolean operators here, all of which which should be self-explanatory. Less than, equality, non-equality, and so on. Particularly interesting is the 1 == 1.0 test, which is true, since even though the two objects are different data types (integer and floating point number), they have the same value.\n", "\n", "There is another boolean operator **is**, that tests whether two objects are the same object:" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 is 1.0" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can do boolean tests on lists as well:" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[1,2,3] == [1,2,4]" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[1,2,3] < [1,2,4]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Finally, note that you can also string multiple comparisons together, which can result in very intuitive tests:" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hours = 5\n", "0 < hours < 24" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "If statements can have **elif** parts (\"else if\"), in addition to if/else parts. For example:" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sleep in\n" ] } ], "source": [ "if day == \"Sunday\":\n", " print(\"Sleep in\")\n", "elif day == \"Saturday\":\n", " print(\"Do chores\")\n", "else:\n", " print(\"Go to work\")" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Of course we can combine if statements with for loops, to make a snippet that is almost interesting:" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Today is Sunday\n", " Sleep in\n", "Today is Monday\n", " Go to work\n", "Today is Tuesday\n", " Go to work\n", "Today is Wednesday\n", " Go to work\n", "Today is Thursday\n", " Go to work\n", "Today is Friday\n", " Go to work\n", "Today is Saturday\n", " Do chores\n" ] } ], "source": [ "for day in days_of_the_week:\n", " statement = \"Today is \" + day\n", " print(statement)\n", " if day == \"Sunday\":\n", " print(\" Sleep in\")\n", " elif day == \"Saturday\":\n", " print(\" Do chores\")\n", " else:\n", " print(\" Go to work\")" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This is something of an advanced topic, but ordinary data types have boolean values associated with them, and, indeed, in early versions of Python there was not a separate boolean object. Essentially, anything that was a 0 value (the integer or floating point 0, an empty string \"\", or an empty list []) was False, and everything else was true. You can see the boolean value of any data object using the **bool()** function." ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bool(1)" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bool(0)" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bool([\"This \",\" is \",\" a \",\" list\"])" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Code Example: The Fibonacci Sequence\n", "The [Fibonacci sequence](http://en.wikipedia.org/wiki/Fibonacci_number) is a sequence in math that starts with 0 and 1, and then each successive entry is the sum of the previous two. Thus, the sequence goes 0,1,1,2,3,5,8,13,21,34,55,89,...\n", "\n", "A very common exercise in programming books is to compute the Fibonacci sequence up to some number **n**. First I'll show the code, then I'll discuss what it is doing." ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]\n" ] } ], "source": [ "n = 10\n", "sequence = [0,1]\n", "for i in range(2,n): # This is going to be a problem if we ever set n <= 2!\n", " sequence.append(sequence[i-1]+sequence[i-2])\n", "print(sequence)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Let's go through this line by line. First, we define the variable **n**, and set it to the integer 20. **n** is the length of the sequence we're going to form, and should probably have a better variable name. We then create a variable called **sequence**, and initialize it to the list with the integers 0 and 1 in it, the first two elements of the Fibonacci sequence. We have to create these elements \"by hand\", since the iterative part of the sequence requires two previous elements.\n", "\n", "We then have a for loop over the list of integers from 2 (the next element of the list) to **n** (the length of the sequence). After the colon, we see a hash tag \"#\", and then a **comment** that if we had set **n** to some number less than 2 we would have a problem. Comments in Python start with #, and are good ways to make notes to yourself or to a user of your code explaining why you did what you did. Better than the comment here would be to test to make sure the value of **n** is valid, and to complain if it isn't; we'll try this later.\n", "\n", "In the body of the loop, we append to the list an integer equal to the sum of the two previous elements of the list.\n", "\n", "After exiting the loop (ending the indentation) we then print out the whole list. That's it!" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Functions\n", "We might want to use the Fibonacci snippet with different sequence lengths. We could cut an paste the code into another cell, changing the value of **n**, but it's easier and more useful to make a function out of the code. We do this with the **def** statement in Python:" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def fibonacci(sequence_length):\n", " \"Return the Fibonacci sequence of length *sequence_length*\"\n", " sequence = [0,1]\n", " if sequence_length < 1:\n", " print(\"Fibonacci sequence only defined for length 1 or greater\")\n", " return\n", " if 0 < sequence_length < 3:\n", " return sequence[:sequence_length]\n", " for i in range(2,sequence_length): \n", " sequence.append(sequence[i-1]+sequence[i-2])\n", " return sequence" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can now call **fibonacci()** for different sequence_lengths:" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[0, 1]" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fibonacci(2)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fibonacci(12)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We've introduced a several new features here. First, note that the function itself is defined as a code block (a colon followed by an indented block). This is the standard way that Python delimits things. Next, note that the first line of the function is a single string. This is called a **docstring**, and is a special kind of comment that is often available to people using the function through the python command line:" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on function fibonacci in module __main__:\n", "\n", "fibonacci(sequence_length)\n", " Return the Fibonacci sequence of length *sequence_length*\n", "\n" ] } ], "source": [ "help(fibonacci)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "If you define a docstring for all of your functions, it makes it easier for other people to use them, since they can get help on the arguments and return values of the function.\n", "\n", "Next, note that rather than putting a comment in about what input values lead to errors, we have some testing of these values, followed by a warning if the value is invalid, and some conditional code to handle special cases." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Recursion and Factorials\n", "Functions can also call themselves, something that is often called *recursion*. We're going to experiment with recursion by computing the factorial function. The factorial is defined for a positive integer **n** as\n", " \n", "$$ n! = n(n-1)(n-2)\\cdots 1 $$\n", "\n", "First, note that we don't need to write a function at all, since this is a function built into the standard math library. Let's use the help function to find out about it:" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on built-in function factorial in module math:\n", "\n", "factorial(...)\n", " factorial(x) -> Integral\n", " \n", " Find x!. Raise a ValueError if x is negative or non-integral.\n", "\n" ] } ], "source": [ "from math import factorial\n", "help(factorial)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This is clearly what we want." ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "2432902008176640000" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "factorial(20)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "However, if we did want to write a function ourselves, we could do recursively by noting that\n", "\n", "$$ n! = n(n-1)!$$\n", "\n", "The program then looks something like:" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def fact(n):\n", " if n <= 0:\n", " return 1\n", " return n*fact(n-1)" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "2432902008176640000" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fact(20)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Recursion can be very elegant, and can lead to very simple programs.\n", "\n", "Nota: En realidad, a Python no le gusta tanto la recursión, pero es un tema mucho mas avanzado que no voy a explicar. Solo vean los ejemplo de abajo que calculan la suma cumulativa de manera recursiva o iterativa. La recursiva tira un error para números grandes." ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def recursive_cumsum(n):\n", " 'Suma cumulativa de manera recursiva'\n", " if n<=0:\n", " return 0\n", " return n+recursive_cumsum(n-1)\n", "\n", "def iterative_cumsum(n):\n", " 'Suma cumulativa de manera iterativa'\n", " suma = 0\n", " for i in range(n+1):\n", " suma = suma + i\n", " return suma" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(15, 15)" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "recursive_cumsum(5), iterative_cumsum(5)" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "collapsed": false }, "outputs": [ { "ename": "RecursionError", "evalue": "maximum recursion depth exceeded in comparison", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mRecursionError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mrecursive_cumsum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2000\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m\u001b[0m in \u001b[0;36mrecursive_cumsum\u001b[0;34m(n)\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m<=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mrecursive_cumsum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0miterative_cumsum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "... last 1 frames repeated, from the frame below ...\n", "\u001b[0;32m\u001b[0m in \u001b[0;36mrecursive_cumsum\u001b[0;34m(n)\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m<=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mrecursive_cumsum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0miterative_cumsum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mRecursionError\u001b[0m: maximum recursion depth exceeded in comparison" ] } ], "source": [ "recursive_cumsum(2000)" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2001000" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "iterative_cumsum(2000)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Two More Data Structures: Tuples and Dictionaries\n", "Before we end the Python overview, I wanted to touch on two more data structures that are very useful (and thus very common) in Python programs.\n", "\n", "A **tuple** is a sequence object like a list or a string. It's constructed by grouping a sequence of objects together with commas, either without brackets, or with parentheses:" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "(1, 2, 'hi', 9.0)" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t = (1,2,'hi',9.0)\n", "t" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Tuples are like lists, in that you can access the elements using indices:" ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t[1]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "However, tuples are *immutable*, you can't append to them or change the elements of them:" ] }, { "cell_type": "code", "execution_count": 81, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "ename": "AttributeError", "evalue": "'tuple' object has no attribute 'append'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m7\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m: 'tuple' object has no attribute 'append'" ] } ], "source": [ "t.append(7)" ] }, { "cell_type": "code", "execution_count": 82, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "ename": "TypeError", "evalue": "'tuple' object does not support item assignment", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m77\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment" ] } ], "source": [ "t[1] = 77" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Tuples are useful anytime you want to group different pieces of data together in an object, but don't want to create a full-fledged class (see below) for them. For example, let's say you want the Cartesian coordinates of some objects in your program. Tuples are a good way to do this:" ] }, { "cell_type": "code", "execution_count": 83, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "('Bob', 0.0, 21.0)" ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ "('Bob',0.0,21.0)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Again, it's not a necessary distinction, but one way to distinguish tuples and lists is that tuples are a collection of different things, here a name, and x and y coordinates, whereas a list is a collection of similar things, like if we wanted a list of those coordinates:" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "positions = [\n", " ('Bob',0.0,21.0),\n", " ('Cat',2.5,13.1),\n", " ('Dog',33.0,1.2)\n", " ]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Tuples can be used when functions return more than one value. Say we wanted to compute the smallest x- and y-coordinates of the above list of objects. We could write:" ] }, { "cell_type": "code", "execution_count": 85, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.0 1.2\n" ] } ], "source": [ "def minmax(objects):\n", " minx = 1e20 # These are set to really big numbers\n", " miny = 1e20\n", " for obj in objects:\n", " name,x,y = obj\n", " if x < minx: \n", " minx = x\n", " if y < miny:\n", " miny = y\n", " return minx,miny\n", "\n", "x,y = minmax(positions)\n", "print(x,y)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Here we did two things with tuples you haven't seen before. First, we unpacked an object into a set of named variables using *tuple assignment*:\n", "\n", " >>> name,x,y = obj\n", "\n", "We also returned multiple values (minx,miny), which were then assigned to two other variables (x,y), again by tuple assignment. This makes what would have been complicated code in C++ rather simple.\n", "\n", "Tuple assignment is also a convenient way to swap variables:" ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "(2, 1)" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x,y = 1,2\n", "y,x = x,y\n", "x,y" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "**Dictionaries** are an object called \"mappings\" or \"associative arrays\" in other languages. Whereas a list associates an integer index with a set of objects:" ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "mylist = [1,2,9,21]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The index in a dictionary is called the *key*, and the corresponding dictionary entry is the *value*. A dictionary can use (almost) anything as the key. Whereas lists are formed with square brackets [], dictionaries use curly brackets {}:" ] }, { "cell_type": "code", "execution_count": 88, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "{'Bob': 86, 'Fred': 21, 'Rick': 46}" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ages = {\"Rick\": 46, \"Bob\": 86, \"Fred\": 21}\n", "ages" ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Rick's age is 46\n" ] } ], "source": [ "print(\"Rick's age is\", ages[\"Rick\"])" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There's also a convenient way to create dictionaries without having to quote the keys." ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "{'Bob': 86, 'Fred': 20, 'Rick': 46}" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dict(Rick=46,Bob=86,Fred=20)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The **len()** command works on both tuples and dictionaries:" ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(t)" ] }, { "cell_type": "code", "execution_count": 92, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(ages)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Plotting with Matplotlib\n", "We can generally understand trends in data by using a plotting program to chart it. Python has a wonderful plotting library called [Matplotlib](http://matplotlib.sf.net). The IPython notebook interface we are using for these notes has that functionality built in.\n", "\n", "As an example, we have looked at two different functions, the Fibonacci function, and the factorial function, both of which grow faster than polynomially. Which one grows the fastest? Let's plot them. First, let's generate the Fibonacci sequence of length 20:" ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "fibs = fibonacci(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nota: No hay una función fibonacci predefinida en Python, sino que estan llamando a una que definieron ustedes antes, unas cuantas celdas más arriba. Si nunca corrieron esa celda (Shift+Enter), al llamar la función les va a tirar un error." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Next lets generate the factorials." ] }, { "cell_type": "code", "execution_count": 94, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "facts = []\n", "for i in range(10):\n", " facts.append(factorial(i))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Now we use the Matplotlib function **plot** to compare the two." ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nzYw8BFjMXQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt # Acá estamos importando el módulo \"pyplot\" del paquete \"matplotlib\",\n", " # y renombrandolo como \"plt\" para que sea más sencillo de escribir.\n", "\n", "# Este es un comando especial de IPython que muestra el gráfico en el mismo notebook.\n", "% matplotlib inline\n", "\n", "plt.plot(facts, label=\"factorial\")\n", "plt.plot(fibs, label=\"Fibonacci\")\n", "plt.xlabel(\"n\")\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The factorial function grows much faster. In fact, you can't even see the Fibonacci sequence. It's not entirely surprising: a function where we multiply by n each iteration is bound to grow faster than one where we add (roughly) n each iteration.\n", "\n", "Let's plot these on a semilog plot so we can see them both a little more clearly:" ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.semilogy(facts, label=\"factorial\")\n", "plt.semilogy(fibs, label=\"Fibonacci\")\n", "plt.xlabel(\"n\")\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There are many more things you can do with Matplotlib. We'll be looking at some of them in the sections to come. In the meantime, if you want an idea of the different things you can do, look at the Matplotlib [Gallery](http://matplotlib.org/gallery.html). Rob Johansson's IPython notebook [Introduction to Matplotlib](http://nbviewer.ipython.org/urls/raw.github.com/jrjohansson/scientific-python-lectures/master/Lecture-4-Matplotlib.ipynb) is also particularly good." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Conclusion of the Python Overview\n", "There is, of course, much more to the language than I've covered here. I've tried to keep this brief enough so that you can jump in and start using Python to simplify your life and work. My own experience in learning new things is that the information doesn't \"stick\" unless you try and use it for something in real life.\n", "\n", "You will no doubt need to learn more as you go. I've listed several other good references, including the [Python Tutorial](http://docs.python.org/2/tutorial/) and [Learn Python the Hard Way](http://learnpythonthehardway.org/book/). Additionally, now is a good time to start familiarizing yourself with the [Python Documentation](http://docs.python.org/2.7/), and, in particular, the [Python Language Reference](http://docs.python.org/2.7/reference/index.html).\n", "\n", "Tim Peters, one of the earliest and most prolific Python contributors, wrote the \"Zen of Python\", which can be accessed via the \"import this\" command:" ] }, { "cell_type": "code", "execution_count": 98, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The Zen of Python, by Tim Peters\n", "\n", "Beautiful is better than ugly.\n", "Explicit is better than implicit.\n", "Simple is better than complex.\n", "Complex is better than complicated.\n", "Flat is better than nested.\n", "Sparse is better than dense.\n", "Readability counts.\n", "Special cases aren't special enough to break the rules.\n", "Although practicality beats purity.\n", "Errors should never pass silently.\n", "Unless explicitly silenced.\n", "In the face of ambiguity, refuse the temptation to guess.\n", "There should be one-- and preferably only one --obvious way to do it.\n", "Although that way may not be obvious at first unless you're Dutch.\n", "Now is better than never.\n", "Although never is often better than *right* now.\n", "If the implementation is hard to explain, it's a bad idea.\n", "If the implementation is easy to explain, it may be a good idea.\n", "Namespaces are one honking great idea -- let's do more of those!\n" ] } ], "source": [ "import this" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "No matter how experienced a programmer you are, these are words to meditate on." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# II. Numpy and Scipy\n", "\n", "[Numpy](http://numpy.org) contains core routines for doing fast vector, matrix, and linear algebra-type operations in Python. [Scipy](http://scipy) contains additional routines for optimization, special functions, and so on. Both contain modules written in C and Fortran so that they're as fast as possible. Together, they give Python roughly the same capability that the [Matlab](http://www.mathworks.com/products/matlab/) program offers. (In fact, if you're an experienced Matlab user, there a [guide to Numpy for Matlab users](http://www.scipy.org/NumPy_for_Matlab_Users) just for you.)\n", "\n", "## Importing Numpy\n", "The first thing we have to do is to import the numpy module. It is customary to rename it as \"np\"." ] }, { "cell_type": "code", "execution_count": 99, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Making vectors and matrices\n", "Fundamental to both Numpy and Scipy is the ability to work with vectors and matrices. You can create vectors from lists using the **array** command from numpy (here renamed as np):" ] }, { "cell_type": "code", "execution_count": 100, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3, 4, 5, 6])" ] }, "execution_count": 100, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.array([1,2,3,4,5,6])" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "You can pass in a second argument to **array** that gives the numeric type. There are a number of types [listed here](http://docs.scipy.org/doc/numpy/user/basics.types.html) that your matrix can be. Some of these are aliased to single character codes. The most common ones are 'd' (double precision floating point number), 'D' (double precision complex number), and 'i' (int32). Thus," ] }, { "cell_type": "code", "execution_count": 101, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([ 1., 2., 3., 4., 5., 6.])" ] }, "execution_count": 101, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.array([1,2,3,4,5,6],'d')" ] }, { "cell_type": "code", "execution_count": 102, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([ 1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j, 5.+0.j, 6.+0.j])" ] }, "execution_count": 102, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.array([1,2,3,4,5,6],'D')" ] }, { "cell_type": "code", "execution_count": 103, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3, 4, 5, 6], dtype=int32)" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.array([1,2,3,4,5,6],'i')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "To build matrices, you can either use the array command with lists of lists:" ] }, { "cell_type": "code", "execution_count": 104, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 1.],\n", " [ 1., 0.]])" ] }, "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.array([[0,1],[1,0]],'d')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "You can also form empty (zero) matrices of arbitrary shape (including vectors, which Numpy treats as vectors with one row), using the **zeros** command:" ] }, { "cell_type": "code", "execution_count": 105, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 0., 0.],\n", " [ 0., 0., 0.],\n", " [ 0., 0., 0.]])" ] }, "execution_count": 105, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.zeros((3,3),'d')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The first argument is a tuple containing the shape of the matrix, and the second is the data type argument, which follows the same conventions as in the array command. Thus, you can make row vectors:" ] }, { "cell_type": "code", "execution_count": 106, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([ 0., 0., 0.])" ] }, "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.zeros(3,'d')" ] }, { "cell_type": "code", "execution_count": 107, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 0., 0.]])" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.zeros((1,3),'d')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "or column vectors:" ] }, { "cell_type": "code", "execution_count": 108, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 0.],\n", " [ 0.],\n", " [ 0.]])" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.zeros((3,1),'d')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There's also an **identity** command that behaves as you'd expect:" ] }, { "cell_type": "code", "execution_count": 109, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 1., 0., 0., 0.],\n", " [ 0., 1., 0., 0.],\n", " [ 0., 0., 1., 0.],\n", " [ 0., 0., 0., 1.]])" ] }, "execution_count": 109, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.identity(4,'d')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "as well as a **ones** command." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Linspace, matrix functions, and plotting\n", "The **linspace** command makes a linear array of points from a starting to an ending value." ] }, { "cell_type": "code", "execution_count": 110, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([ 0. , 0.02040816, 0.04081633, 0.06122449, 0.08163265,\n", " 0.10204082, 0.12244898, 0.14285714, 0.16326531, 0.18367347,\n", " 0.20408163, 0.2244898 , 0.24489796, 0.26530612, 0.28571429,\n", " 0.30612245, 0.32653061, 0.34693878, 0.36734694, 0.3877551 ,\n", " 0.40816327, 0.42857143, 0.44897959, 0.46938776, 0.48979592,\n", " 0.51020408, 0.53061224, 0.55102041, 0.57142857, 0.59183673,\n", " 0.6122449 , 0.63265306, 0.65306122, 0.67346939, 0.69387755,\n", " 0.71428571, 0.73469388, 0.75510204, 0.7755102 , 0.79591837,\n", " 0.81632653, 0.83673469, 0.85714286, 0.87755102, 0.89795918,\n", " 0.91836735, 0.93877551, 0.95918367, 0.97959184, 1. ])" ] }, "execution_count": 110, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linspace(0,1)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "If you provide a third argument, it takes that as the number of points in the space. If you don't provide the argument, it gives a length 50 linear space." ] }, { "cell_type": "code", "execution_count": 111, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([ 0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])" ] }, "execution_count": 111, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linspace(0,1,11)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "**linspace** is an easy way to make coordinates for plotting. Functions in the numpy library (all of which are imported into IPython notebook) can act on an entire vector (or even a matrix) of points at once. Thus," ] }, { "cell_type": "code", "execution_count": 112, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([ 0.00000000e+00, 1.27877162e-01, 2.53654584e-01,\n", " 3.75267005e-01, 4.90717552e-01, 5.98110530e-01,\n", " 6.95682551e-01, 7.81831482e-01, 8.55142763e-01,\n", " 9.14412623e-01, 9.58667853e-01, 9.87181783e-01,\n", " 9.99486216e-01, 9.95379113e-01, 9.74927912e-01,\n", " 9.38468422e-01, 8.86599306e-01, 8.20172255e-01,\n", " 7.40277997e-01, 6.48228395e-01, 5.45534901e-01,\n", " 4.33883739e-01, 3.15108218e-01, 1.91158629e-01,\n", " 6.40702200e-02, -6.40702200e-02, -1.91158629e-01,\n", " -3.15108218e-01, -4.33883739e-01, -5.45534901e-01,\n", " -6.48228395e-01, -7.40277997e-01, -8.20172255e-01,\n", " -8.86599306e-01, -9.38468422e-01, -9.74927912e-01,\n", " -9.95379113e-01, -9.99486216e-01, -9.87181783e-01,\n", " -9.58667853e-01, -9.14412623e-01, -8.55142763e-01,\n", " -7.81831482e-01, -6.95682551e-01, -5.98110530e-01,\n", " -4.90717552e-01, -3.75267005e-01, -2.53654584e-01,\n", " -1.27877162e-01, -2.44929360e-16])" ] }, "execution_count": 112, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.linspace(0, 2 * np.pi) # np.pi es la constante pi (3.1415...) que la incluye el paquete Numpy\n", "np.sin(x)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "In conjunction with **matplotlib**, this is a nice way to plot things:" ] }, { "cell_type": "code", "execution_count": 113, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 113, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x, np.sin(x)) # Recuerden que importamos el modulo matplotlib.pyplot (y lo llamamos plt) anteriormente\n", " # plot es una función que pertenece al modulo pyplot" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Matrix operations\n", "Matrix objects act sensibly when multiplied by scalars:" ] }, { "cell_type": "code", "execution_count": 114, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 0.125, 0. , 0. ],\n", " [ 0. , 0.125, 0. ],\n", " [ 0. , 0. , 0.125]])" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" } ], "source": [ "0.125 * np.identity(3,'d')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "as well as when you add two matrices together. (However, the matrices have to be the same shape.)" ] }, { "cell_type": "code", "execution_count": 115, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 2., 1.],\n", " [ 1., 3.]])" ] }, "execution_count": 115, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.identity(2,'d') + np.array([[1,1],[1,2]])" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Something that confuses Matlab users is that the times (*) operator give element-wise multiplication rather than matrix multiplication:" ] }, { "cell_type": "code", "execution_count": 116, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 1., 0.],\n", " [ 0., 1.]])" ] }, "execution_count": 116, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.identity(2) * np.ones((2,2))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "To get matrix multiplication, you need the **dot** command:" ] }, { "cell_type": "code", "execution_count": 117, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([[ 1., 1.],\n", " [ 1., 1.]])" ] }, "execution_count": 117, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.dot(np.identity(2), np.ones((2,2)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nota: A partir de Python 3.5, se introdujo el operador @ para multiplicación matricial" ] }, { "cell_type": "code", "execution_count": 118, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1., 1.],\n", " [ 1., 1.]])" ] }, "execution_count": 118, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.identity(2) @ np.ones((2,2))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "**dot** can also do dot products (duh!):" ] }, { "cell_type": "code", "execution_count": 119, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "5.0" ] }, "execution_count": 119, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v = np.array([3,4], 'd')\n", "np.sqrt(np.dot(v,v)) # Noten que estamos usando la funcion raiz cuadrada del modulo Numpy, no del Math" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "as well as matrix-vector products." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There are **determinant**, **inverse**, and **transpose** functions that act as you would suppose. Transpose can be abbreviated with \".T\" at the end of a matrix object:" ] }, { "cell_type": "code", "execution_count": 120, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([[1, 2],\n", " [3, 4]])" ] }, "execution_count": 120, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m = np.array([[1,2],[3,4]])\n", "m" ] }, { "cell_type": "code", "execution_count": 121, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[1, 3],\n", " [2, 4]])" ] }, "execution_count": 121, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m.T" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There's also a **diag()** function that takes a list or a vector and puts it along the diagonal of a square matrix. " ] }, { "cell_type": "code", "execution_count": 122, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([[1, 0, 0, 0, 0],\n", " [0, 2, 0, 0, 0],\n", " [0, 0, 3, 0, 0],\n", " [0, 0, 0, 4, 0],\n", " [0, 0, 0, 0, 5]])" ] }, "execution_count": 122, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.diag([1,2,3,4,5])" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We'll find this useful later on." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Matrix Solvers\n", "You can solve systems of linear equations using the **solve** command:\n", "\n", "Nota: solve es una función del submodulo de algebra lineal (linalg) de numpy." ] }, { "cell_type": "code", "execution_count": 123, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([ 5., 3., -2.])" ] }, "execution_count": 123, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.array([[1,1,1],[0,2,5],[2,5,-1]])\n", "b = np.array([6,-4,27])\n", "np.linalg.solve(A,b)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There are a number of routines to compute eigenvalues and eigenvectors\n", "\n", "* **eigvals** returns the eigenvalues of a matrix\n", "* **eigvalsh** returns the eigenvalues of a Hermitian matrix\n", "* **eig** returns the eigenvalues and eigenvectors of a matrix\n", "* **eigh** returns the eigenvalues and eigenvectors of a Hermitian matrix." ] }, { "cell_type": "code", "execution_count": 124, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([ 5., 15.])" ] }, "execution_count": 124, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.array([[13,-4],[-4,7]],'d')\n", "np.linalg.eigvalsh(A)" ] }, { "cell_type": "code", "execution_count": 125, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "(array([[-0.4472136 , -0.89442719],\n", " [-0.89442719, 0.4472136 ]]), array([ 5., 15.]))" ] }, "execution_count": 125, "metadata": {}, "output_type": "execute_result" } ], "source": [ "eigvals, eigvecs = np.linalg.eigh(A)\n", "eigvecs, eigvals" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Example: Finite Differences\n", "Now that we have these tools in our toolbox, we can start to do some cool stuff with it. Many of the equations we want to solve in Physics involve differential equations. We want to be able to compute the derivative of functions:\n", "\n", "$$ y' = \\frac{y(x+h)-y(x)}{h} $$\n", "\n", "by *discretizing* the function $y(x)$ on an evenly spaced set of points $x_0, x_1, \\dots, x_n$, yielding $y_0, y_1, \\dots, y_n$. Using the discretization, we can approximate the derivative by\n", "\n", "$$ y_i' \\approx \\frac{y_{i+1}-y_{i-1}}{x_{i+1}-x_{i-1}} $$\n", "\n", "We can write a derivative function in Python via" ] }, { "cell_type": "code", "execution_count": 126, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def nderiv(y,x):\n", " \"Finite difference derivative of the function f\"\n", " n = len(y)\n", " d = np.zeros(n,'d') # assume double\n", " # Use centered differences for the interior points, one-sided differences for the ends\n", " for i in range(1,n-1):\n", " d[i] = (y[i+1]-y[i-1])/(x[i+1]-x[i-1])\n", " d[0] = (y[1]-y[0])/(x[1]-x[0])\n", " d[n-1] = (y[n-1]-y[n-2])/(x[n-1]-x[n-2])\n", " return d" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Let's see whether this works for our sin example from above:" ] }, { "cell_type": "code", "execution_count": 127, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 127, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0,2*np.pi, 50)\n", "dsin = nderiv(np.sin(x),x)\n", "plt.plot(x,dsin,label='numerical', linewidth=3)\n", "plt.plot(x,np.cos(x),label='analytical', linewidth=3, linestyle='--')\n", "plt.title(\"Comparison of numerical and analytical derivatives of sin(x)\")\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Pretty close!\n", "\n", "Nota: cambien la cantidad de puntos (el tercer numero de linspace, actualmente 50) y vean como difieren cada vez más la version numerica y la analitica al considerar menos puntos." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## One-Dimensional Harmonic Oscillator using Finite Difference\n", "Now that we've convinced ourselves that finite differences aren't a terrible approximation, let's see if we can use this to solve the one-dimensional harmonic oscillator.\n", "\n", "We want to solve the time-independent Schrodinger equation\n", "\n", "$$ -\\frac{\\hbar^2}{2m}\\frac{\\partial^2\\psi(x)}{\\partial x^2} + V(x)\\psi(x) = E\\psi(x)$$\n", "\n", "for $\\psi(x)$ when $V(x)=\\frac{1}{2}m\\omega^2x^2$ is the harmonic oscillator potential. We're going to use the standard trick to transform the differential equation into a matrix equation by multiplying both sides by $\\psi^*(x)$ and integrating over $x$. This yields\n", "\n", "$$ -\\frac{\\hbar}{2m}\\int\\psi(x)\\frac{\\partial^2}{\\partial x^2}\\psi(x)dx + \\int\\psi(x)V(x)\\psi(x)dx = E$$\n", "\n", "We will again use the finite difference approximation. The finite difference formula for the second derivative is\n", "\n", "$$ y'' = \\frac{y_{i+1}-2y_i+y_{i-1}}{x_{i+1}-x_{i-1}} $$\n", "\n", "We can think of the first term in the Schrodinger equation as the overlap of the wave function $\\psi(x)$ with the second derivative of the wave function $\\frac{\\partial^2}{\\partial x^2}\\psi(x)$. Given the above expression for the second derivative, we can see if we take the overlap of the states $y_1,\\dots,y_n$ with the second derivative, we will only have three points where the overlap is nonzero, at $y_{i-1}$, $y_i$, and $y_{i+1}$. In matrix form, this leads to the tridiagonal Laplacian matrix, which has -2's along the diagonals, and 1's along the diagonals above and below the main diagonal.\n", "\n", "The second term turns leads to a diagonal matrix with $V(x_i)$ on the diagonal elements. Putting all of these pieces together, we get:" ] }, { "cell_type": "code", "execution_count": 128, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def Laplacian(x):\n", " h = x[1]-x[0] # assume uniformly spaced points\n", " n = len(x)\n", " M = -2*np.identity(n,'d')\n", " for i in range(1,n):\n", " M[i,i-1] = M[i-1,i] = 1\n", " return M/h**2" ] }, { "cell_type": "code", "execution_count": 129, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 129, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nJfw/Eh8rSqk7SloAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(-3,3)\n", "m = 1.0\n", "ohm = 1.0\n", "T = (-0.5/m)*Laplacian(x)\n", "V = 0.5*(ohm**2)*(x**2)\n", "H = T + np.diag(V)\n", "E,U = np.linalg.eigh(H)\n", "h = x[1]-x[0]\n", "\n", "# Plot the Harmonic potential\n", "plt.plot(x,V,color='k')\n", "\n", "for i in range(4):\n", " # For each of the first few solutions, plot the energy level:\n", " plt.axhline(y=E[i],color='k',ls=\":\")\n", " # as well as the eigenfunction, displaced by the energy level so they don't\n", " # all pile up on each other:\n", " plt.plot(x,-U[:,i]/np.sqrt(h)+E[i])\n", "plt.title(\"Eigenfunctions of the Quantum Harmonic Oscillator\")\n", "plt.xlabel(\"Displacement (bohr)\")\n", "plt.ylabel(\"Energy (hartree)\")" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We've made a couple of hacks here to get the orbitals the way we want them. First, I inserted a -1 factor before the wave functions, to fix the phase of the lowest state. The phase (sign) of a quantum wave function doesn't hold any information, only the square of the wave function does, so this doesn't really change anything. \n", "\n", "But the eigenfunctions as we generate them aren't properly normalized. The reason is that finite difference isn't a real basis in the quantum mechanical sense. It's a basis of Dirac δ functions at each point; we interpret the space betwen the points as being \"filled\" by the wave function, but the finite difference basis only has the solution being at the points themselves. We can fix this by dividing the eigenfunctions of our finite difference Hamiltonian by the square root of the spacing, and this gives properly normalized functions." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Special Functions\n", "The solutions to the Harmonic Oscillator are supposed to be Hermite polynomials. The Wikipedia page has the HO states given by\n", "\n", "$$\\psi_n(x) = \\frac{1}{\\sqrt{2^n n!}}\n", "\\left(\\frac{m\\omega}{\\pi\\hbar}\\right)^{1/4}\n", "\\exp\\left(-\\frac{m\\omega x^2}{2\\hbar}\\right)\n", "H_n\\left(\\sqrt{\\frac{m\\omega}{\\hbar}}x\\right)$$\n", "\n", "Let's see whether they look like those. There are some special functions in the Numpy library, and some more in Scipy. Hermite Polynomials are in Numpy:" ] }, { "cell_type": "code", "execution_count": 130, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "from numpy.polynomial.hermite import Hermite\n", "from scipy.misc import factorial\n", "\n", "def ho_evec(x,n,m,ohm):\n", " vec = [0]*9\n", " vec[n] = 1\n", " Hn = Hermite(vec)\n", " return (1/np.sqrt(2**n*factorial(n)))*pow(m*ohm/np.pi,0.25)*np.exp(-0.5*m*ohm*x**2)*Hn(x*np.sqrt(m*ohm))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Let's compare the first function to our solution." ] }, { "cell_type": "code", "execution_count": 131, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 131, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(x,ho_evec(x,0,1,1),label=\"Analytic\")\n", "plt.plot(x,-U[:,0]/np.sqrt(h),label=\"Numeric\")\n", "plt.xlabel('x (bohr)')\n", "plt.ylabel(r'$\\psi(x)$')\n", "plt.title(\"Comparison of numeric and analytic solutions to the Harmonic Oscillator\")\n", "plt.legend()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The agreement is almost exact." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can use the **subplot** command to put multiple comparisons in different panes on a single plot:" ] }, { "cell_type": "code", "execution_count": 132, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "phase_correction = [-1,1,1,-1,-1,1]\n", "for i in range(6):\n", " plt.subplot(2,3,i+1)\n", " plt.plot(x,ho_evec(x,i,1,1),label=\"Analytic\")\n", " plt.plot(x,phase_correction[i]*U[:,i]/np.sqrt(h),label=\"Numeric\")" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Other than phase errors (which I've corrected with a little hack: can you find it?), the agreement is pretty good, although it gets worse the higher in energy we get, in part because we used only 50 points.\n", "\n", "The Scipy module has many more special functions:" ] }, { "cell_type": "code", "execution_count": 133, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 133, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from scipy.special import airy,jn,eval_chebyt,eval_legendre\n", "\n", "plt.figure(figsize=(12,8))\n", "\n", "plt.subplot(2,2,1)\n", "x = np.linspace(-1,1)\n", "Ai,Aip,Bi,Bip = airy(x)\n", "plt.plot(x,Ai)\n", "plt.plot(x,Aip)\n", "plt.plot(x,Bi)\n", "plt.plot(x,Bip)\n", "plt.title(\"Airy functions\")\n", "\n", "plt.subplot(2,2,2)\n", "x = np.linspace(0,10)\n", "for i in range(4):\n", " plt.plot(x,jn(i,x))\n", "plt.title(\"Bessel functions\")\n", "\n", "plt.subplot(2,2,3)\n", "x = np.linspace(-1,1)\n", "for i in range(6):\n", " plt.plot(x,eval_chebyt(i,x))\n", "plt.title(\"Chebyshev polynomials of the first kind\")\n", "\n", "plt.subplot(2,2,4)\n", "x = np.linspace(-1,1)\n", "for i in range(6):\n", " plt.plot(x,eval_legendre(i,x))\n", "plt.title(\"Legendre polynomials\")" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "As well as Jacobi, Laguerre, Hermite polynomials, Hypergeometric functions, and many others. There's a full listing at the [Scipy Special Functions Page](http://docs.scipy.org/doc/scipy/reference/special.html)." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Least squares fitting\n", "Very often we deal with some data that we want to fit to some sort of expected behavior. Say we have the following:" ] }, { "cell_type": "code", "execution_count": 134, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "raw_data = \"\"\"\\\n", "3.1905781584582433,0.028208609537968457\n", "4.346895074946466,0.007160804747670053\n", "5.374732334047101,0.0046962988461934805\n", "8.201284796573875,0.0004614473299618756\n", "10.899357601713055,0.00005038370219939726\n", "16.295503211991434,4.377451812785309e-7\n", "21.82012847965739,3.0799922117601088e-9\n", "32.48394004282656,1.524776208284536e-13\n", "43.53319057815846,5.5012073588707224e-18\"\"\"" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There's a section below on parsing CSV data. We'll steal the parser from that. For an explanation, skip ahead to that section. Otherwise, just assume that this is a way to parse that text into a numpy array that we can plot and do other analyses with." ] }, { "cell_type": "code", "execution_count": 135, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "data = []\n", "for line in raw_data.splitlines():\n", " words = line.split(',')\n", " data.append([float(word) for word in words])\n", "data = np.array(data)" ] }, { "cell_type": "code", "execution_count": 136, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 136, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n7DdIIMwXBoIkTd+ggTAvDipLkrpnIEiSAANBktQYCJIkYIEdVE4ySu8bSXPpaODv5/g1BzEf65qP\nNYF1Tcd8rAmsa7rG17Wiqqb8Ze+CCoQuJBkZ5Oj8XJuPdc3HmsC6pmM+1gTWNV0zrctdRpIkwECQ\nJDUGwtQ2dV3AJOZjXfOxJrCu6ZiPNYF1TdeM6vIYgiQJcAtBktQYCJIkwECYVJKHk9yd5M4knZ1R\nL8nmJLuT3NPX9ookNyV5sN0fNU/quijJzjZnd7Yz3c5lTccn+UaS+5Lcm+QDrb3T+dpHXV3P1z9J\n8r0kP2h1fby1dz1fk9XV6Xy1GpYk+X6Sr7blzv8WJ6lrRnPlMYRJJHkYGKqqTn90kuSNwDPANVX1\nmtZ2KfBEVV2SZCNwVFX9+3lQ10XAM1X1ibmspa+m5fSu031HksOBrcDbgd+jw/naR13voNv5CvCy\nqnomySHAt4EPAP+GbudrsrrOoMP5arX9O2AIeHlVvW0+/C1OUtdFzGCu3EKY56rqFmD8dSLWAVe3\nx1fT+3CZU5PU1amq2lVVd7THTwP307uGd6fztY+6OtWunfJMWzyk3Yru52uyujqV5Dh6FwP7s77m\nzv8WJ6lrRgyEyRXwv5JsTbKh62LGOaaqdrXHjwHHdFnMOO9PclfbpdTJ5jNAkpXA64DvMo/ma1xd\n0PF8tV0Nd9K7hO1NVTUv5muSuqDb+foM8IfAC31tnc8VE9cFM5grA2Fyv1ZVa4C1wPvaLpJ5p10e\nr/P/PTWXAycBa4BdwCe7KCLJYcCXgA9W1VP967qcrwnq6ny+qur59u/8OOCUJK8Zt76T+Zqkrs7m\nK8nbgN1VtXWyPl3M1T7qmtFcGQiTqKqd7X438FfAKd1WtJfH237psf3TuzuuB4Cqerz9Ib8AXEkH\nc9b2OX8JGK6qL7fmzudrorrmw3yNqaofA9+gt5++8/maqK6O5+s04F+3Y4vXAf8yybV0P1cT1jXT\nuTIQJpDkZe3gH0leBvwmcM++R82pLcB57fF5wFc6rOX/G/vDaM5ijuesHYz8PHB/VX2qb1Wn8zVZ\nXfNgvpYlObI9/nngLcDf0v18TVhXl/NVVR+pquOqaiVwNvC/q+rf0vFcTVbXTOfq4P1Q44HgGOCv\nen/HHAx8oar+potCknwROB04OskO4GPAJcD1Sd5N73Tg75gndZ2eZA29zeaHgffMcVmnAe8E7m77\nnwE+SvfzNVld53Q8X8uBq5Msofefw+ur6qtJvkO38zVZXX/e8XxNpOt/W5O5dCZz5ddOJUmAu4wk\nSY2BIEkCDARJUmMgSJIAA0GS1BgIWnSSPN/OAHlvemfU/HCSg9q6oSSX7WPsyiS/O3fVSnPHr51q\n0UnyTFUd1h6/EvgCcGtVfWyAsacDf1BVb9u/VUpzzy0ELWrt1CQbgAvSc3rfOeXf1Hc++e+3X69f\nAvx6a/tQ22L4VpI72u1ftLGnJ/lmkv+W5G+TDLdfLJPkDUn+T9s6+V6Sw9vJ3P4kye3thGTz4UdX\nWmT8pbIWvap6qP0q9pXjVv0B8L6qurWdmO6nwEb6thCSLAXeUlU/TbIK+CK989JD76ymrwZ+BNwK\nnJbke8BfAL9TVbcneTnwE+DdwJNV9YYkPwfcmuR/VtXf7c/3LvUzEKTJ3Qp8Kskw8OWq2tH+k9/v\nEOCz7TQBzwOv6lv3varaAdBOWbESeBLYVVW3A4ydjTXJbwL/PMlvt7FHAKsAA0FzxkDQopfkJHof\n5ruBfzrW3q6C9T+AM+n9j/1fTTD8Q8DjwGvp7YL9ad+6n/U9fp59/70FeH9V3TijNyHNAo8haFFL\nsgy4AvhsjfuGRZJfrKq7q+qPgduBXwaeBg7v63YEvf/xv0DvBHZLpnjJB4DlSd7QXuPwJAcDNwK/\n306TTZJXtTPtSnPGLQQtRj/fduEcAjwH/DnwqQn6fTDJb9C7EtW9wNfa4+eT/AC4CvjPwJeSnAv8\nDfAP+3rhqno2ye8Af9pO7fwT4M30Ln+4ErijHXwepYPLMWpx82unkiTAXUaSpMZAkCQBBoIkqTEQ\nJEmAgSBJagwESRJgIEiSmv8HvhIAFDO4PS4AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.title(\"Raw Data\")\n", "plt.xlabel(\"Distance\")\n", "plt.plot(data[:,0],data[:,1],'bo')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Since we expect the data to have an exponential decay, we can plot it using a semi-log plot." ] }, { "cell_type": "code", "execution_count": 137, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 137, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAEWCAYAAABmE+CbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGOZJREFUeJzt3X+Q3Hd93/HnSwJDBI4htmAYydLZGeHgQMEzh5jiAGon\nTuSgYGAYYnMtpNbMxQSnSZpMatczMXTqipKESYLdOJdgZJNDjmKcVDVK3HSKLeO6RTaQ2ELxRCiW\nfeKHHDsYOwIytt/9Y79X1svd6e52776nu+djRrP7fe9+9/vWd+72dZ/9fvfzTVUhSdKqthuQJC0N\nBoIkCTAQJEkNA0GSBBgIkqSGgSBJAgwESVLDQNCylOShJN9O8lSSryfZmeTFC7zNn03yTLPNp5L8\nXZJPJHnlHF5jZ5L/tJB9StMxELSc/XRVvRh4HXAecOUibPOeZpunAT8OfBu4L8mrF2HbUl8MBC17\nVfV14HY6wQBAkrcm+WKSbyV5JMkHux67McmvNPfXJakkH2iWfzjJ40lm/N2pqmeq6itV9fPAnUD3\n6/9JM2p5Ism+JD/a1EeBEeDXmhHGf2/qVyT5SpInk3w5yTsGs2ek5zIQtOwlWQ9cCBzqKv8j8F7g\nJcBbgfcneXvz2J3Alub+W4DDwJu7lu+qqmfn0MKtwJu6lv8c2AS8DPgCMA5QVWPN/Y9U1Yur6qeb\n53+lWf804EPAHyV5xRy2L82KgaDl7M+SPAk8AhwDrp58oKruqKr7q+rZqvprYBedN3voBMKPNaOA\nNwMfAc5vHntL8/hcfBX4oa5t31BVT1bVd+mMHF6b5LTpVq6qP6mqrza9/jHwt8DmOfYgnZCBoOXs\n7VV1Kp2/9n8EOGPygSRvSPLZJI8meQK4bPLxqvoKnRHE6+j8ZX4b8NUk5zC/QFgHPN5sd3WSDzcf\nAX0LeKh5zhnTrZzkvUm+lOSbSb4JvHqm50vzZSBo2auqO4GdwG92lT8F7AHOrKrTgOuBdD1+J/Au\n4JSqOtosvw94KfClObbwDuCu5v57gIvoHHA+DRhq6pPbfs70w0k2An8AXA6cXlUvAR7o6VUaCANB\nK8VvAxckeW2zfCrweFV9J8lmOm/U3e6k8ya8r1m+o1n+XFU9c6KNNSOBs5J8jM4I5UNd2/0u8Biw\nBvjPPat+Azi7a/lFdELi0eZ1/w2dEYI0cAaCVoSqehS4Cfj1pvTzwH9sjjH8OrC7Z5U76bx5TwbC\n5+i8ge9jZv88yVPAt+iEyA8Cr6+q+5vHbwKOAEeBLwP/p2f9jwPnNh8P/VlVfRn4LeAeOmHxGuDu\n2fyfpbmKF8iRJIEjBElSw0CQJAEGgiSpYSBIkgB4XpsbT3I2cBVwWlW960TPP+OMM2poaGjB+5Kk\n5eS+++77+6pae6LnzTsQktwAbAOOVdWru+pbgd8BVgN/WFUfnu41quowsD3JLbPZ5tDQEPfee+98\nW5akFSnJkdk8r58Rwk7gWjrnVU9udDVwHXABMAHsT7KHTjjs6Fn/0qo61sf2JUkDNO9AqKp9SYZ6\nypuBQ81f/iS5GbioqnbQGU3MWTMl8CjAhg0b5tuuJOkEBn1QeR2dmSUnTTS1KSU5Pcn1wHlJprx4\nSVWNVdVwVQ2vXXvCj8AkSfPU6kHlqnqMziyTkqSWDXqEcBQ4s2t5fVOTJC1xgw6E/cCmZpbHU4CL\n6Uwx3JrxcRgaglWrOrfj4212I0lL17wDIckuOjMwnpNkIsn2qnqazhTBtwMHgd1VdWAwrc7d+DiM\njsKRI1DVuR0dNRQkaSon1Wynw8PDNZfvIQwNdUKg18aN8NBDA2tLkpa0JPdV1fCJnresp654+OG5\n1SVpJVvWgTDd1xb8OoMkfb9lHQjXXANr1jy3tmZNpy5Jeq5lHQgjIzA21jlmkHRux8Y6dUnSc7X6\nxbTFMDJiAEjSbCzrEcJs+V0FSVoBI4QTmfyuwvHjneXJ7yqAIwtJK8uKHyFcddX3wmDS8eOd+iRH\nEJJWghU/QjjRdxUcQUhaKVb8COFE31WYzQhCkpaDFR8IJ/qugt92lrRSrPhAONF3Ffy2s6SVYsUH\nAnTe/B96CJ59tnPbfWzAbztLWikMhBPw286SVooVf5bRbPhtZ0krQasjhCSvSnJ9kluSvL/NXiRp\npevnimk3JDmW5IGe+tYkDyY5lOSKmV6jqg5W1WXAu4Hz59uLJKl//YwQdgJbuwtJVgPXARcC5wKX\nJDk3yWuS3Nbz72XNOm8DPgPs7aMXSVKf5n0Moar2JRnqKW8GDlXVYYAkNwMXVdUOYNs0r7MH2JPk\nM8Cneh9PMgqMAmzwXE9JWjCDPqi8Dnika3kCeMN0T06yBXgn8AKmGSFU1RgwBp1rKg+qUUnSc7V6\nULmq7qiqf1tVP1dV17XZy2JzwjxJS82gRwhHgTO7ltc3NXVxwjxJS9GgRwj7gU1JzkpyCnAxsGfA\n2zjpOWGepKWon9NOdwH3AOckmUiyvaqeBi4HbgcOArur6sBgWl0+nDBP0lLUz1lGl0xT34unkM5o\nw4bOx0RT1SWpLc5l1AInzJO0FBkILXDCPElLkZPbtcQJ8yQtNY4QJEmAgSBJahgIkiTAQJAkNQyE\nZcT5kST1w7OMlgnnR5LUL0cIy4TzI0nql4GwTDg/kqR+GQjLxHTzIDk/kqTZMhCWCedHktQvA2GZ\ncH4kSf3yLKNlxPmRJPWj1RFCki1J7kpyfZItbfYiSStdP1dMuyHJsSQP9NS3JnkwyaEkV5zgZQp4\nCnghMDHfXiRJ/evnI6OdwLXATZOFJKuB64AL6LzB70+yB1gN7OhZ/1Lgrqq6M8nLgY8CfuAhSS3p\n5xKa+5IM9ZQ3A4eq6jBAkpuBi6pqB7Bthpf7B+AF8+1FktS/QR9UXgc80rU8AbxhuicneSfwk8BL\n6Iw2pnrOKDAKsMGT6iVpwbR6llFV3QrceoLnjAFjAMPDw7UYfUnSSjTos4yOAmd2La9vapKkJW7Q\ngbAf2JTkrCSnABcDewa8DUnSAujntNNdwD3AOUkmkmyvqqeBy4HbgYPA7qo6MJhWJUkLqZ+zjC6Z\npr4X2DvvjiRJrXAuI0kSYCBIkhoGgiQJMBAkSQ0DQZIEGAiSpIaBIEkCDARJUsNA0KIZH4ehIVi1\nqnM7Pt52R5K6eU1lLYrxcRgdhePHO8tHjnSWwetAS0uFIwQtiquu+l4YTDp+vFOXtDQYCFoUDz88\nt7qkxWcgaFFMd7E7L4InLR0GghbFNdfAmjXPra1Z06lLWhoMBC2KkREYG4ONGyHp3I6NeUBZWko8\ny0iLZmTEAJCWslYDIcmbgJGmj3Or6o1t9iNJK1k/l9C8IcmxJA/01LcmeTDJoSRXzPQaVXVXVV0G\n3AbcON9eJEn962eEsBO4FrhpspBkNXAdcAEwAexPsgdYDezoWf/SqjrW3H8PsL2PXiRJfernmsr7\nkgz1lDcDh6rqMECSm4GLqmoHsG2q10myAXiiqp6c5vFRYBRgg+coStKCGfRZRuuAR7qWJ5raTLYD\nn5juwaoaq6rhqhpeu3btAFqUJE2l9bOMqurqtnuQJA1+hHAUOLNreX1TkyQtcYMOhP3ApiRnJTkF\nuBjYM+BtSJIWQD+nne4C7gHOSTKRZHtVPQ1cDtwOHAR2V9WBwbQqSVpI/ZxldMk09b3A3nl3JElq\nhXMZSZIAA0GS1DAQJEmAgSBJahgIkiTAQJAkNQwESRJgIEiSGgaCJAkwEKTvMz4OQ0OwalXndny8\n7Y6kxdH69NfSUjI+DqOjcPx4Z/nIkc4ywMhIe31Ji8ERgtTlqqu+FwaTjh/v1KXlzkCQujz88Nzq\n0nJiIEhdprtst5fz1kpgIEhdrrkG1qx5bm3Nmk5dWu5aDYQk5ybZneT3kryrzV4k6Bw4HhuDjRsh\n6dyOjXlAWStDP1dMuyHJsSQP9NS3JnkwyaEkV5zgZS4EPlZV7wfeO99epEEaGYGHHoJnn+3cGgZa\nKfo57XQncC1w02QhyWrgOuACYALYn2QPsBrY0bP+pcAngauTvA04vY9eJEl96ucSmvuSDPWUNwOH\nquowQJKbgYuqagewbZqX+kATJLdO9WCSUWAUYINH9iRpwQz6GMI64JGu5YmmNqUkQ0nG6IwyfmOq\n51TVWFUNV9Xw2rVrB9qsJOl7Wv2mclU9RPPXvySpXYMeIRwFzuxaXt/UJElL3KADYT+wKclZSU4B\nLgb2DHgbkqQF0M9pp7uAe4Bzkkwk2V5VTwOXA7cDB4HdVXVgMK1KkhZSP2cZXTJNfS+wd94dSZJa\n4dQVkiTAQJAkNQwESRJgIEiSGgaCJAkwECRJDQNBkgQYCJKkhoEgSQIMBElSw0CQJAEGgiSpYSBI\nkgADQZLUMBAkScAiBkKSs5N8PMktM9UkSe2YVSAkuSHJsSQP9NS3JnkwyaEkV8z0GlV1uKq2n6gm\nSWrHbK+YthO4FrhpspBkNXAdcAEwAexPsgdYDezoWf/SqjrWd7eSpAUzq0Coqn1JhnrKm4FDVXUY\nIMnNwEVVtQPYNqgGk4wCowAbNmwY1MtKknr0cwxhHfBI1/JEU5tSktOTXA+cl+TK6Wq9qmqsqoar\nanjt2rV9tCtJmslsPzLqW1U9Blx2opokqR39jBCOAmd2La9vapKkk1A/gbAf2JTkrCSnABcDewbT\nliRpsc32tNNdwD3AOUkmkmyvqqeBy4HbgYPA7qo6sHCtSpIW0mzPMrpkmvpeYO9AO5IktcKpKyRJ\ngIEgSWoYCJIkwECQJDUMBEkSYCBIkhoGgiQJMBAkSQ0DQZIEGAiSpIaBIEkCDARJUsNAkCQBBoKk\nARsfh6EhWLWqczs+3nZHmq1Fu4SmpOVvfBxGR+H48c7ykSOdZYCRkfb60uws2gghydlJPp7klq7a\nq5Jcn+SWJO9frF4kLYyrrvpeGEw6frxT19I32yum3ZDkWJIHeupbkzyY5FCSK2Z6jao6XFXbe2oH\nq+oy4N3A+XNtXtLS8vDDc6traZntCGEnsLW7kGQ1cB1wIXAucEmSc5O8JsltPf9eNt0LJ3kb8Bm8\n8pp00tuwYW51LS2zCoSq2gc83lPeDBxq/vL/J+Bm4KKqur+qtvX8OzbDa++pqguBKT9hTDKa5N4k\n9z766KOz+19JasU118CaNc+trVnTqWvp6+cYwjrgka7liaY2pSSnJ7keOC/JlU1tS5LfTfL7TDNC\nqKqxqhququG1a9f20a6khTYyAmNjsHEjJJ3bsTEPKJ8sFu0so6p6DLisp3YHcMdi9SBp4Y2MGAAn\nq35GCEeBM7uW1zc1SdJJqJ9A2A9sSnJWklOAi4E9g2lLkrTYZnva6S7gHuCcJBNJtlfV08DlwO3A\nQWB3VR1YuFYlSQtpVscQquqSaep78XRRSVoWnMtIkgQYCJKkhoEgSQIMBElSw0CQJAEGgiSpYSBI\nkgADQZLUMBAkSYCBIElqGAiSJMBAkCQ1DARJEmAgSJIaBoIkCVjEQEhydpKPJ7mlq7YlyV1Jrk+y\nZbF6kSR9v9leMe2GJMeSPNBT35rkwSSHklwx02tU1eGq2t5bBp4CXghMzKVxSdJgzeqKacBO4Frg\npslCktXAdcAFdN7M9yfZA6wGdvSsf2lVHZvide+qqjuTvBz4KDAyt/YlSYMy20to7ksy1FPeDByq\nqsMASW4GLqqqHcC2Wb7us83dfwBeMNVzkowCowAbNmyYzctKkuahn2MI64BHupYnmtqUkpye5Hrg\nvCRXNrV3Jvl94JN0RiDfp6rGqmq4qobXrl3bR7uSpJnM9iOjvlXVY8BlPbVbgVsXqwdJ0vT6GSEc\nBc7sWl7f1CRJJ6F+AmE/sCnJWUlOAS4G9gymLUnSYpvtaae7gHuAc5JMJNleVU8DlwO3AweB3VV1\nYOFalSQtpNmeZXTJNPW9wN6BdiRJaoVTV0iSAANBktQwECRJgIEgSWoYCJIkwECQJDUMBEkSYCBI\nkhoGgiQJMBAkSQ0DQZIEGAiSpIaBIEkCDARJUsNAkCQBi3hN5SRnA1cBp1XVu5ram4CRpo9zq+qN\ni9WPJOm5ZnvFtBuSHEvyQE99a5IHkxxKcsVMr1FVh6tqe0/trqq6DLgNuHGuzUuSBme2I4SdwLXA\nTZOFJKuB64ALgAlgf5I9wGpgR8/6l1bVsRle/z3A9hkelyQtsNleQnNfkqGe8mbgUFUdBkhyM3BR\nVe0Ats22gSQbgCeq6snZriNJGrx+DiqvAx7pWp5oalNKcnqS64HzklzZ9dB24BMzrDea5N4k9z76\n6KN9tCtJJ5/xcRgaglWrOrfj4wu3rUU7qFxVjwGXTVG/+gTrjQFjAMPDw7Uw3UnS0jM+DqOjcPx4\nZ/nIkc4ywMjI4LfXzwjhKHBm1/L6piZJGoCrrvpeGEw6frxTXwj9BMJ+YFOSs5KcAlwM7BlMW5Kk\nhx+eW71fsz3tdBdwD3BOkokk26vqaeBy4HbgILC7qg4sTJuStPJs2DC3er9me5bRJdPU9wJ7B9qR\nJAmAa6557jEEgDVrOvWF4NQVkrREjYzA2Bhs3AhJ53ZsbGEOKMMinmUkSZq7kZGFC4BejhAkSYCB\nIElqGAiSJMBAkCQ1DARJEgCpOnmmB0ryKHBkkTd7BvD3i7zN2bCv2VuKPYF9zcVS7AlOnr42VtXa\nE610UgVCG5LcW1XDbffRy75mbyn2BPY1F0uxJ1h+ffmRkSQJMBAkSQ0D4cTG2m5gGvY1e0uxJ7Cv\nuViKPcEy68tjCJIkwBGCJKlhIEiSAANhRkkeSnJ/ki8lubfFPm5IcizJA121H0ryl0n+trl96RLo\n6YNJjjb760tJfmoxe2p6ODPJZ5N8OcmBJL/Y1FvbXzP01Or+SvLCJJ9P8ldNXx9q6m3/bE3X11L4\n+Vqd5ItJbmuWW91XM/Q1r33lMYQZJHkIGK6qVr94kuTNwFPATVX16qb2EeDxqvpwkiuAl1bVv2+5\npw8CT1XVby5WH1P09QrgFVX1hSSnAvcBbwd+lpb21ww9vZsW91eSAC+qqqeSPB/4HPCLwDtp92dr\nur620v7P178DhoEfrKptbf8eztDXB5nHvnKEcBKoqn3A4z3li4Abm/s30nmDabun1lXV16rqC839\nJ+lc3nUdLe6vGXpqVXU81Sw+v/lXtP+zNV1frUqyHngr8Idd5Vb31Qx9zYuBMLMC/meS+5KMtt1M\nj5dX1dea+18HXt5mM11+IclfNx8ptTJ8npRkCDgP+L8skf3V0xO0vL+ajxq+BBwD/rKqlsS+mqYv\naHd//Tbwa8CzXbXW9xVT9wXz2FcGwsx+rKpeB1wIfKD5mGTJqc7nfq3/BQX8HnA28Drga8BvtdVI\nkhcDnwZ+qaq+1f1YW/trip5a319V9UzzM74e2Jzk1T2Pt7Kvpumrtf2VZBtwrKrum+45beyrGfqa\n174yEGZQVUeb22PAnwKb2+3oOb7RfDY9+Rn1sZb7oaq+0fwiPwv8AS3tr+Zz508D41V1a1NudX9N\n1dNS2V9NL98EPkvnc/ol87PV3VfL++t84G3NccWbgX+Z5I9of19N2dd895WBMI0kL2oOAJLkRcBP\nAA/MvNai2gO8r7n/PuC/tdgL8P9/ISa9gxb2V3NA8uPAwar6aNdDre2v6Xpqe38lWZvkJc39HwAu\nAP6Gln+2puurzf1VVVdW1fqqGgIuBv5XVf0rWt5X0/U13331vAXocbl4OfCnnd9lngd8qqr+oo1G\nkuwCtgBnJJkArgY+DOxOsp3OlODvXgI9bUnyOjrD5oeAn1vMnhrnA/8auL/5DBrgP9Du/pqup0ta\n3l+vAG5MsprOH4e7q+q2JPfQ4s/WDH19cgn8fPVq9fdwBh+Zz77ytFNJEuBHRpKkhoEgSQIMBElS\nw0CQJAEGgiSpYSBoRUryTDML5IF0ZtX8lSSrmseGk/zuDOsOJXnP4nUrLQ5PO9WKlOSpqnpxc/9l\nwKeAu6vq6lmsuwX41aratrBdSovLEYJWvGZqklHg8nRs6ZpX/i1dc8p/sfn2+oeBNzW1X25GDHcl\n+ULz743NuluS3JHkliR/k2S8+dYySV6f5H83o5PPJzm1mdDtN5LsbyYlWwpfvNIK4jeVJaCqDjff\njH1Zz0O/Cnygqu5uJqf7DnAFXSOEJGuAC6rqO0k2AbvozE0PnZlNfxT4KnA3cH6SzwN/DPxMVe1P\n8oPAt4HtwBNV9fokLwDuTvI/qurvFvL/Lk0yEKSZ3Q18NMk4cGtVTTR/5Hd7PnBtM1XAM8Arux77\nfFVNADTTVgwBTwBfq6r9AJOzsSb5CeCfJXlXs+5pwCbAQNCiMBAkIMnZdN7MjwGvmqw3V8L6DPBT\ndP5i/8kpVv9l4BvAa+l8DPudrse+23X/GWb+nQvwC1V1+7z+E1KfPIagFS/JWuB64NrqOcsiyQ9X\n1f1V9V+A/cCPAE8Cp3Y97TQ6f/E/S2cSu9Un2OSDwCuSvL7ZxqlJngfcDry/mSqbJK9sZtqVFoUj\nBK1UP9B8hPN84Gngk8BHp3jeLyX5F3SuRnUA+PPm/jNJ/grYCfxX4NNJ3gv8BfCPM224qv4pyc8A\nH2umd/428ON0LoE4BHyhOfj8KC1cklErl6edSpIAPzKSJDUMBEkSYCBIkhoGgiQJMBAkSQ0DQZIE\nGAiSpMb/A1saZl7cXk1lAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.title(\"Raw Data\")\n", "plt.xlabel(\"Distance\")\n", "plt.semilogy(data[:,0],data[:,1],'bo')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "For a pure exponential decay like this, we can fit the log of the data to a straight line. The above plot suggests this is a good approximation. Given a function\n", "$$ y = Ae^{-ax} $$\n", "$$ \\log(y) = \\log(A) - ax$$\n", "Thus, if we fit the log of the data versus x, we should get a straight line with slope $a$, and an intercept that gives the constant $A$.\n", "\n", "There's a numpy function called **polyfit** that will fit data to a polynomial form. We'll use this to fit to a straight line (a polynomial of order 1)" ] }, { "cell_type": "code", "execution_count": 138, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "params = np.polyfit(data[:,0], np.log(data[:,1]),1)\n", "a = params[0]\n", "A = np.exp(params[1])" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Let's see whether this curve fits the data." ] }, { "cell_type": "code", "execution_count": 139, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 139, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nBjghmJlZ5v8Bwwp07+yM12MAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(1,45)\n", "plt.title(\"Raw Data\")\n", "plt.xlabel(\"Distance\")\n", "plt.semilogy(data[:,0],data[:,1],'bo')\n", "plt.semilogy(x,A*np.exp(a*x),'b-')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "If we have more complicated functions, we may not be able to get away with fitting to a simple polynomial. Consider the following data:" ] }, { "cell_type": "code", "execution_count": 140, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 140, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nQwcADLdV9tABAEO0ItBt/7btJ2y/ZHvgEeBBF6W2fantQ7ZP5Pc7K6xt6HPbfr3to32352zfks+7\nzfbpvnn7mqorX+6k7cfz114su35dtdm+zPaDtr+Vv/cf7ZtX6TYbdjFzZ/4mn/+Y7bcUXbfmujp5\nPY/b/rrtN/fNW/d9baiuq23/qO/9+eOi6zZQ2x/11XXM9ou2L83n1bnN7rB9zvaxAfOb+YwVufBo\n3TdJvyLp9ZL+XdLcgGUGXpRa0l9KujV/fKukv6iwtlLPndf5lLJxo5J0m6Q/rGGbFapL0klJu8b9\nd1Vdm6Q9kt6SP75E0nf73s/KttlGn5u+ZfZJ+qokS7pK0sNF1625rrdJ2pk/vn61ro3e14bqulrS\nV0ZZt+7a1iz/Xkn/Vvc2y5/7nZLeIunYgPmNfMZasYceEccj4jtDFrtS0vci4gcR8b+SviTphnze\nDZIO5o8PSrqxwvLKPvc1kr4fEaOcQFXGuP/mTd1mEXEmIh7JHz8v6bjWuSZtBTb63PTX+/eR+Yak\nV9neU3Dd2uqKiK9HxA/zyW8ouypY3cb5N9e5vUZ5/psk3VXh6w8UEQ9JenaDRRr5jLUi0Ava6KLU\nuyPiTP74KUm7K3zdss/9fv3sh+gj+X+z7qiwa6NoXSHpAdtHbM+PsH6dtUmSbM9KukLSw33NVW2z\nIhczH7RMoQuh11hXv5uV7eGtGvS+NlXX2/L356u2f7XkunXXJtuTkq6T9OW+5rq2WRGNfMZePuqK\nZdl+QNJr1pm1EBH3VvU6ERG2Sw3d2ai2Ms/t7FJ8vyXp433Nn5P0SWUfpk9K+rSk32+wrndExGnb\nvyDpkO1v53sTRdevszbZvljZl+6WiHgubx55m6XI9ruUBfo7+pqHvq81ekTSdES8kB/f+GdJlzf0\n2kW9V9J/RET/XvNmbrNGNBboEXHtmE+x0UWpz9reExFn8v/GnKuqNttlnvt6SY9ExNm+5/7/x7Y/\nL+krTdYVEafz+3O271H2X7yH1IJtZnuHsjDvRcTdfc898jZbR5GLmQ9aZkeBdeusS7bfJOkLkq6P\niGdW2zd4X2uvq+8PryLiftt/Z3tXkXXrrq3Pz/xPucZtVkQjn7Gt1OWy0UWp75O0P3+8X1Jle/wl\nn/tn+uzyQFv1PknrHgWvoy7br7B9yepjSe/pe/1N3Wa2Lel2Sccj4jNr5lW5zYpczPw+Sb+bj0S4\nStKP8i6jOi+EPvS5bU9LulvSByLiu33tG72vTdT1mvz9k+0rleXIM0XWrbu2vKZXSvp19X3uat5m\nRTTzGavjiG/Zm7Iv7ZOSfizprKR/zdt/UdL9fcvtUzYa4vvKumpW218t6bCkE5IekHRphbWt+9zr\n1PYKZR/qV65Z/x8kPS7psfyN2tNUXcqOnD+a355o0zZT1n0Q+XY5mt/21bHN1vvcSPqQpA/ljy3p\nb/P5j6tvpNWgz1xF22lYXV+Q9MO+7bM47H1tqK4/yF/3UWUHa9/WxPYqUls+/XuSvrRmvbq32V2S\nzkj6ibIsu3kzPmOcKQoAidhKXS4AgA0Q6ACQCAIdABJBoANAIgh0AEgEgQ4AiSDQASARBDoAJOL/\nAF5+28dOGRdiAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "gauss_data = \"\"\"\\\n", "-0.9902286902286903,1.4065274110372852e-19\n", "-0.7566104566104566,2.2504438576596563e-18\n", "-0.5117810117810118,1.9459459459459454\n", "-0.31887271887271884,10.621621621621626\n", "-0.250997150997151,15.891891891891893\n", "-0.1463309463309464,23.756756756756754\n", "-0.07267267267267263,28.135135135135133\n", "-0.04426734426734419,29.02702702702703\n", "-0.0015939015939017698,29.675675675675677\n", "0.04689304689304685,29.10810810810811\n", "0.0840994840994842,27.324324324324326\n", "0.1700546700546699,22.216216216216214\n", "0.370878570878571,7.540540540540545\n", "0.5338338338338338,1.621621621621618\n", "0.722014322014322,0.08108108108108068\n", "0.9926849926849926,-0.08108108108108646\"\"\"\n", "\n", "data = []\n", "for line in gauss_data.splitlines():\n", " words = line.split(',')\n", " data.append([float(word) for word in words])\n", "data = np.array(data)\n", "\n", "plt.plot(data[:,0],data[:,1],'bo')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This data looks more Gaussian than exponential. If we wanted to, we could use **polyfit** for this as well, but let's use the **curve_fit** function from Scipy, which can fit to arbitrary functions. You can learn more using help(curve_fit).\n", "\n", "First define a general Gaussian function to fit to." ] }, { "cell_type": "code", "execution_count": 141, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def gauss(x,A,a):\n", " return A * np.exp(a * x**2)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Now fit to it using **curve_fit**:" ] }, { "cell_type": "code", "execution_count": 142, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 142, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from scipy.optimize import curve_fit\n", "\n", "params,conv = curve_fit(gauss,data[:,0],data[:,1])\n", "x = np.linspace(-1,1)\n", "plt.plot(data[:,0],data[:,1],'bo')\n", "A,a = params\n", "plt.plot(x,gauss(x,A,a),'b-')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The **curve_fit** routine we just used is built on top of a very good general **minimization** capability in Scipy. You can learn more [at the scipy documentation pages](http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html)." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Monte Carlo, random numbers, and computing $\\pi$\n", "Many methods in scientific computing rely on Monte Carlo integration, where a sequence of (pseudo) random numbers are used to approximate the integral of a function. Python has good random number generators in the standard library. The **random()** function gives pseudorandom numbers uniformly distributed between 0 and 1:" ] }, { "cell_type": "code", "execution_count": 143, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 143, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from random import random\n", "rands = []\n", "for i in range(100):\n", " rands.append(random())\n", "plt.plot(rands)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "**random()** uses the [Mersenne Twister](http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html) algorithm, which is a highly regarded pseudorandom number generator. There are also functions to generate random integers, to randomly shuffle a list, and functions to pick random numbers from a particular distribution, like the normal distribution:" ] }, { "cell_type": "code", "execution_count": 144, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 144, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from random import gauss\n", "grands = []\n", "for i in range(100):\n", " grands.append(gauss(0,1))\n", "plt.plot(grands)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "It is generally more efficient to generate a list of random numbers all at once, particularly if you're drawing from a non-uniform distribution. Numpy has functions to generate vectors and matrices of particular types of random distributions." ] }, { "cell_type": "code", "execution_count": 145, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 145, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(np.random.rand(100))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "One of the first programs I ever wrote was a program to compute $\\pi$ by taking random numbers as x and y coordinates, and counting how many of them were in the unit circle. For example:" ] }, { "cell_type": "code", "execution_count": 146, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 146, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "npts = 5000\n", "xs = 2 * np.random.rand(npts) - 1 # Genera puntos en [-1, 1] (rand genera en [0, 1])\n", "ys = 2*np.random.rand(npts)-1\n", "r = xs**2+ys**2\n", "ninside = (r<1).sum()\n", "plt.figure(figsize=(6,6)) # make the figure square\n", "plt.title(\"Approximation to pi = %f\" % (4*ninside/float(npts)))\n", "plt.plot(xs[r<1],ys[r<1],'b.')\n", "plt.plot(xs[r>1],ys[r>1],'r.')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The idea behind the program is that the ratio of the area of the unit circle to the square that inscribes it is $\\pi/4$, so by counting the fraction of the random points in the square that are inside the circle, we get increasingly good estimates to $\\pi$. \n", "\n", "The above code uses some higher level Numpy tricks to compute the radius of each point in a single line, to count how many radii are below one in a single line, and to filter the x,y points based on their radii. To be honest, I rarely write code like this: I find some of these Numpy tricks a little too cute to remember them, and I'm more likely to use a list comprehension (see below) to filter the points I want, since I can remember that.\n", "\n", "As methods of computing $\\pi$ go, this is among the worst. A much better method is to use Leibniz's expansion of arctan(1):\n", "\n", "$$\\frac{\\pi}{4} = \\sum_k \\frac{(-1)^k}{2*k+1}$$" ] }, { "cell_type": "code", "execution_count": 147, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.1315929035585537\n" ] } ], "source": [ "n = 100\n", "total = 0\n", "for k in range(n):\n", " total += pow(-1,k)/(2*k+1.0)\n", "print(4*total)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "If you're interested a great method, check out [Ramanujan's method](http://en.wikipedia.org/wiki/Approximations_of_%CF%80). This converges so fast you really need arbitrary precision math to display enough decimal places. You can do this with the Python **decimal** module, if you're interested." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Numerical Integration\n", "Integration can be hard, and sometimes it's easier to work out a definite integral using an approximation. For example, suppose we wanted to figure out the integral:\n", "\n", "$$\\int_0^\\infty\\exp(-x)dx=1$$" ] }, { "cell_type": "code", "execution_count": 148, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 148, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n/x/31XrTsWVGLgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def f(x):\n", " return np.exp(-x)\n", "\n", "x = np.linspace(0,10)\n", "plt.plot(x, f(x))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Scipy has a numerical integration routine **quad** (since sometimes numerical integration is called *quadrature*), that we can use for this:" ] }, { "cell_type": "code", "execution_count": 149, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "(1.0000000000000002, 5.842606742906004e-11)" ] }, "execution_count": 149, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from scipy.integrate import quad\n", "\n", "quad(f,0,np.inf)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There are also 2d and 3d numerical integrators in Scipy. [See the docs](http://docs.scipy.org/doc/scipy/reference/integrate.html) for more information." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Fast Fourier Transform and Signal Processing\n" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Very often we want to use FFT techniques to help obtain the signal from noisy data. Scipy has several different options for this." ] }, { "cell_type": "code", "execution_count": 150, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 150, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from numpy import pi\n", "from scipy.fftpack import fft,fftfreq\n", "\n", "npts = 4000\n", "nplot = npts//10 # La doble barra significa división entre enteros (es decir, sin decimales)\n", " # Por ejemplo: 7 / 2 = 3.5, mientras que 7 // 2 = 3\n", " # Queremos que nplot sea un entero porque lo vamos a usar como indice\n", " # de un array y sino tira error.\n", " # array[3] (bien)\n", " # array[3.0] o array[3.5] (mal)\n", "t = np.linspace(0,120,npts)\n", "def acc(t):\n", " return 10*np.sin(2*pi*2.0*t) + 5*np.sin(2*pi*8.0*t) + 2*np.random.rand(npts)\n", "\n", "signal = acc(t)\n", "\n", "FFT = np.abs(fft(signal))\n", "freqs = fftfreq(npts, t[1]-t[0])\n", "\n", "plt.subplot(211)\n", "plt.plot(t[:nplot], signal[:nplot])\n", "plt.subplot(212)\n", "plt.plot(freqs,20*np.log10(FFT),',')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There are additional signal processing routines in Scipy that you can [read about here](http://docs.scipy.org/doc/scipy/reference/tutorial/signal.html)." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "# III. Intermediate Python\n", "\n", "## Output Parsing\n", "As more and more of our day-to-day work is being done on and through computers, we increasingly have output that one program writes, often in a text file, that we need to analyze in one way or another, and potentially feed that output into another file.\n", "\n", "Suppose we have the following output:" ] }, { "cell_type": "code", "execution_count": 151, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "myoutput = \"\"\"\\\n", "@ Step Energy Delta E Gmax Grms Xrms Xmax Walltime\n", "@ ---- ---------------- -------- -------- -------- -------- -------- --------\n", "@ 0 -6095.12544083 0.0D+00 0.03686 0.00936 0.00000 0.00000 1391.5\n", "@ 1 -6095.25762870 -1.3D-01 0.00732 0.00168 0.32456 0.84140 10468.0\n", "@ 2 -6095.26325979 -5.6D-03 0.00233 0.00056 0.06294 0.14009 11963.5\n", "@ 3 -6095.26428124 -1.0D-03 0.00109 0.00024 0.03245 0.10269 13331.9\n", "@ 4 -6095.26463203 -3.5D-04 0.00057 0.00013 0.02737 0.09112 14710.8\n", "@ 5 -6095.26477615 -1.4D-04 0.00043 0.00009 0.02259 0.08615 20211.1\n", "@ 6 -6095.26482624 -5.0D-05 0.00015 0.00002 0.00831 0.03147 21726.1\n", "@ 7 -6095.26483584 -9.6D-06 0.00021 0.00004 0.01473 0.05265 24890.5\n", "@ 8 -6095.26484405 -8.2D-06 0.00005 0.00001 0.00555 0.01929 26448.7\n", "@ 9 -6095.26484599 -1.9D-06 0.00003 0.00001 0.00164 0.00564 27258.1\n", "@ 10 -6095.26484676 -7.7D-07 0.00003 0.00001 0.00161 0.00553 28155.3\n", "@ 11 -6095.26484693 -1.8D-07 0.00002 0.00000 0.00054 0.00151 28981.7\n", "@ 11 -6095.26484693 -1.8D-07 0.00002 0.00000 0.00054 0.00151 28981.7\"\"\"" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This output actually came from a geometry optimization of a Silicon cluster using the [NWChem](http://www.nwchem-sw.org/index.php/Main_Page) quantum chemistry suite. At every step the program computes the energy of the molecular geometry, and then changes the geometry to minimize the computed forces, until the energy converges. I obtained this output via the unix command\n", "\n", " % grep @ nwchem.out\n", "\n", "since NWChem is nice enough to precede the lines that you need to monitor job progress with the '@' symbol.\n", "\n", "We could do the entire analysis in Python; I'll show how to do this later on, but first let's focus on turning this code into a usable Python object that we can plot.\n", "\n", "First, note that the data is entered into a multi-line string. When Python sees three quote marks \"\"\" or ''' it treats everything following as part of a single string, including newlines, tabs, and anything else, until it sees the same three quote marks (\"\"\" has to be followed by another \"\"\", and ''' has to be followed by another ''') again. This is a convenient way to quickly dump data into Python, and it also reinforces the important idea that you don't have to open a file and deal with it one line at a time. You can read everything in, and deal with it as one big chunk.\n", "\n", "The first thing we'll do, though, is to split the big string into a list of strings, since each line corresponds to a separate piece of data. We will use the **splitlines()** function on the big myout string to break it into a new element every time it sees a newline (\\n) character:" ] }, { "cell_type": "code", "execution_count": 152, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "['@ Step Energy Delta E Gmax Grms Xrms Xmax Walltime',\n", " '@ ---- ---------------- -------- -------- -------- -------- -------- --------',\n", " '@ 0 -6095.12544083 0.0D+00 0.03686 0.00936 0.00000 0.00000 1391.5',\n", " '@ 1 -6095.25762870 -1.3D-01 0.00732 0.00168 0.32456 0.84140 10468.0',\n", " '@ 2 -6095.26325979 -5.6D-03 0.00233 0.00056 0.06294 0.14009 11963.5',\n", " '@ 3 -6095.26428124 -1.0D-03 0.00109 0.00024 0.03245 0.10269 13331.9',\n", " '@ 4 -6095.26463203 -3.5D-04 0.00057 0.00013 0.02737 0.09112 14710.8',\n", " '@ 5 -6095.26477615 -1.4D-04 0.00043 0.00009 0.02259 0.08615 20211.1',\n", " '@ 6 -6095.26482624 -5.0D-05 0.00015 0.00002 0.00831 0.03147 21726.1',\n", " '@ 7 -6095.26483584 -9.6D-06 0.00021 0.00004 0.01473 0.05265 24890.5',\n", " '@ 8 -6095.26484405 -8.2D-06 0.00005 0.00001 0.00555 0.01929 26448.7',\n", " '@ 9 -6095.26484599 -1.9D-06 0.00003 0.00001 0.00164 0.00564 27258.1',\n", " '@ 10 -6095.26484676 -7.7D-07 0.00003 0.00001 0.00161 0.00553 28155.3',\n", " '@ 11 -6095.26484693 -1.8D-07 0.00002 0.00000 0.00054 0.00151 28981.7',\n", " '@ 11 -6095.26484693 -1.8D-07 0.00002 0.00000 0.00054 0.00151 28981.7']" ] }, "execution_count": 152, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lines = myoutput.splitlines()\n", "lines" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Splitting is a big concept in text processing. We used **splitlines()** here, and we will use the more general **split()** function below to split each line into whitespace-delimited words.\n", "\n", "We now want to do three things:\n", "\n", "* Skip over the lines that don't carry any information\n", "* Break apart each line that does carry information and grab the pieces we want\n", "* Turn the resulting data into something that we can plot.\n", "\n", "For this data, we really only want the Energy column, the Gmax column (which contains the maximum gradient at each step), and perhaps the Walltime column. \n", "\n", "Since the data is now in a list of lines, we can iterate over it:" ] }, { "cell_type": "code", "execution_count": 153, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "for line in lines[2:]:\n", " # do something with each line\n", " words = line.split()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Let's examine what we just did: first, we used a **for** loop to iterate over each line. However, we skipped the first two (the lines[2:] only takes the lines starting from index 2), since lines[0] contained the title information, and lines[1] contained underscores.\n", "\n", "We then split each line into chunks (which we're calling \"words\", even though in most cases they're numbers) using the string **split()** command. Here's what split does:" ] }, { "cell_type": "code", "execution_count": 154, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on built-in function split:\n", "\n", "split(...) method of builtins.str instance\n", " S.split(sep=None, maxsplit=-1) -> list of strings\n", " \n", " Return a list of the words in S, using sep as the\n", " delimiter string. If maxsplit is given, at most maxsplit\n", " splits are done. If sep is not specified or is None, any\n", " whitespace string is a separator and empty strings are\n", " removed from the result.\n", "\n" ] } ], "source": [ "help(''.split)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Here we're implicitly passing in the first argument (s, in the doctext) by calling a method .split() on a string object. In this instance, we're not passing in a sep character, which means that the function splits on whitespace. Let's see what that does to one of our lines:" ] }, { "cell_type": "code", "execution_count": 155, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "['@',\n", " '0',\n", " '-6095.12544083',\n", " '0.0D+00',\n", " '0.03686',\n", " '0.00936',\n", " '0.00000',\n", " '0.00000',\n", " '1391.5']" ] }, "execution_count": 155, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lines[2].split()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This is almost exactly what we want. We just have to now pick the fields we want:" ] }, { "cell_type": "code", "execution_count": 156, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-6095.12544083 0.03686 1391.5\n", "-6095.25762870 0.00732 10468.0\n", "-6095.26325979 0.00233 11963.5\n", "-6095.26428124 0.00109 13331.9\n", "-6095.26463203 0.00057 14710.8\n", "-6095.26477615 0.00043 20211.1\n", "-6095.26482624 0.00015 21726.1\n", "-6095.26483584 0.00021 24890.5\n", "-6095.26484405 0.00005 26448.7\n", "-6095.26484599 0.00003 27258.1\n", "-6095.26484676 0.00003 28155.3\n", "-6095.26484693 0.00002 28981.7\n", "-6095.26484693 0.00002 28981.7\n" ] } ], "source": [ "for line in lines[2:]:\n", " # do something with each line\n", " words = line.split()\n", " energy = words[2]\n", " gmax = words[4]\n", " time = words[8]\n", " print(energy,gmax,time)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This is fine for printing things out, but if we want to do something with the data, either make a calculation with it or pass it into a plotting, we need to convert the strings into regular floating point numbers. We can use the **float()** command for this. We also need to save it in some form. I'll do this as follows:" ] }, { "cell_type": "code", "execution_count": 157, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "data = []\n", "for line in lines[2:]:\n", " # do something with each line\n", " words = line.split()\n", " energy = float(words[2])\n", " gmax = float(words[4])\n", " time = float(words[8])\n", " data.append((energy,gmax,time))\n", "data = np.array(data)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We now have our data in a numpy array, so we can choose columns to print:" ] }, { "cell_type": "code", "execution_count": 158, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 158, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(data[:,0])\n", "plt.xlabel('step')\n", "plt.ylabel('Energy (hartrees)')\n", "plt.title('Convergence of NWChem geometry optimization for Si cluster')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "I would write the code a little more succinctly if I were doing this for myself, but this is essentially a snippet I use repeatedly. \n", "\n", "Suppose our data was in CSV (comma separated values) format, a format that originally came from Microsoft Excel, and is increasingly used as a data interchange format in big data applications. How would we parse that?" ] }, { "cell_type": "code", "execution_count": 159, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "csv = \"\"\"\\\n", "-6095.12544083, 0.03686, 1391.5\n", "-6095.25762870, 0.00732, 10468.0\n", "-6095.26325979, 0.00233, 11963.5\n", "-6095.26428124, 0.00109, 13331.9\n", "-6095.26463203, 0.00057, 14710.8\n", "-6095.26477615, 0.00043, 20211.1\n", "-6095.26482624, 0.00015, 21726.1\n", "-6095.26483584, 0.00021, 24890.5\n", "-6095.26484405, 0.00005, 26448.7\n", "-6095.26484599, 0.00003, 27258.1\n", "-6095.26484676, 0.00003, 28155.3\n", "-6095.26484693, 0.00002, 28981.7\n", "-6095.26484693, 0.00002, 28981.7\"\"\"" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can do much the same as before:" ] }, { "cell_type": "code", "execution_count": 160, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "data = []\n", "for line in csv.splitlines():\n", " words = line.split(',')\n", " data.append([float(word) for word in words])\n", "data = np.array(data)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There are two significant changes over what we did earlier. First, I'm passing the comma character ',' into the split function, so that it breaks to a new word every time it sees a comma. Next, to simplify things a big, ~~I'm using the **map()** command to repeatedly apply a single function (**float()**) to a list, and to return the output as a list.~~ we are using a list comprehension to build a list applying the float function to each element in words (which is itself a list)." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Despite the differences, the resulting plot should be the same:" ] }, { "cell_type": "code", "execution_count": 161, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 161, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(data[:,0])\n", "plt.xlabel('step')\n", "plt.ylabel('Energy (hartrees)')\n", "plt.title('Convergence of NWChem geometry optimization for Si cluster')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Hartrees (what most quantum chemistry programs use by default) are really stupid units. We really want this in kcal/mol or eV or something we use. So let's quickly replot this in terms of eV above the minimum energy, which will give us a much more useful plot:" ] }, { "cell_type": "code", "execution_count": 162, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 162, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "energies = data[:,0]\n", "minE = min(energies)\n", "energies_eV = 27.211*(energies-minE)\n", "plt.plot(energies_eV)\n", "plt.xlabel('step')\n", "plt.ylabel('Energy (eV)')\n", "plt.title('Convergence of NWChem geometry optimization for Si cluster')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This gives us the output in a form that we can think about: 4 eV is a fairly substantial energy change (chemical bonds are roughly this magnitude of energy), and most of the energy decrease was obtained in the first geometry iteration." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We mentioned earlier that we don't have to rely on **grep** to pull out the relevant lines for us. The **string** module has a lot of useful functions we can use for this. Among them is the **startswith** function. For example:" ] }, { "cell_type": "code", "execution_count": 163, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "@ Step Energy Delta E Gmax Grms Xrms Xmax Walltime\n", "@ ---- ---------------- -------- -------- -------- -------- -------- --------\n", "@ 0 -6095.12544083 0.0D+00 0.03686 0.00936 0.00000 0.00000 1391.5\n" ] } ], "source": [ "lines = \"\"\"\\\n", " ----------------------------------------\n", " | WALL | 0.45 | 443.61 |\n", " ----------------------------------------\n", "\n", "@ Step Energy Delta E Gmax Grms Xrms Xmax Walltime\n", "@ ---- ---------------- -------- -------- -------- -------- -------- --------\n", "@ 0 -6095.12544083 0.0D+00 0.03686 0.00936 0.00000 0.00000 1391.5\n", " ok ok\n", "\n", "\n", "\n", " Z-matrix (autoz)\n", " --------\n", "\"\"\".splitlines()\n", "\n", "for line in lines:\n", " if line.startswith('@'):\n", " print(line)\n", " " ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "and we've successfully grabbed all of the lines that begin with the @ symbol." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The real value in a language like Python is that it makes it easy to take additional steps to analyze data in this fashion, which means you are thinking more about your data, and are more likely to see important patterns." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## More Sophisticated String Formatting and Processing\n", "Strings are a big deal in most modern languages, and hopefully the previous sections helped underscore how versatile Python's string processing techniques are. We will continue this topic in this chapter.\n", "\n", "We can print out lines in Python using the print command. " ] }, { "cell_type": "code", "execution_count": 164, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "I have 3 errands to run\n" ] } ], "source": [ "print(\"I have 3 errands to run\")" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "In IPython we don't even need the print command, since it will display the last expression not assigned to a variable." ] }, { "cell_type": "code", "execution_count": 165, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "'I have 3 errands to run'" ] }, "execution_count": 165, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"I have 3 errands to run\"" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "**print** even converts some arguments to strings for us:" ] }, { "cell_type": "code", "execution_count": 166, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The variables are 1 2 3\n" ] } ], "source": [ "a,b,c = 1,2,3\n", "print(\"The variables are \",1,2,3)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "As versatile as this is, you typically need more freedom over the data you print out. For example, what if we want to print a bunch of data to exactly 4 decimal places? We can do this using formatted strings.\n", "\n", "Formatted strings share a syntax with the C **printf** statement. We make a string that has some funny *format characters* in it, and then pass a bunch of variables into the string that fill out those characters in different ways.\n", "\n", "For example," ] }, { "cell_type": "code", "execution_count": 167, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Pi as a decimal = 3\n", "Pi as a float = 3.141593\n", "Pi with 4 decimal places = 3.1416\n", "Pi with overall fixed length of 10 spaces, with 6 decimal places = 3.141593\n", "Pi as in exponential format = 3.141593e+00\n" ] } ], "source": [ "print(\"Pi as a decimal = %d\" % pi)\n", "print(\"Pi as a float = %f\" % pi)\n", "print(\"Pi with 4 decimal places = %.4f\" % pi)\n", "print(\"Pi with overall fixed length of 10 spaces, with 6 decimal places = %10.6f\" % pi)\n", "print(\"Pi as in exponential format = %e\" % pi)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We use a percent sign in two different ways here. First, the format character itself starts with a percent sign. %d or %i are for integers, %f is for floats, %e is for numbers in exponential formats. All of the numbers can take number immediately after the percent that specifies the total spaces used to print the number. Formats with a decimal can take an additional number after a dot . to specify the number of decimal places to print.\n", "\n", "The other use of the percent sign is after the string, to pipe a set of variables in. You can pass in multiple variables (if your formatting string supports it) by putting a tuple after the percent. Thus," ] }, { "cell_type": "code", "execution_count": 168, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The variables specified earlier are 1, 2, and 3\n" ] } ], "source": [ "print(\"The variables specified earlier are %d, %d, and %d\" % (a,b,c))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This is a simple formatting structure that will satisfy most of your string formatting needs. More information on different format symbols is available in the [string formatting part of the standard docs](http://docs.python.org/release/2.5.2/lib/typesseq-strings.html).\n", "\n", "It's worth noting that more complicated string formatting methods are in development, but I prefer this system due to its simplicity and its similarity to C formatting strings.\n", "\n", "Recall we discussed multiline strings. We can put format characters in these as well, and fill them with the percent sign as before." ] }, { "cell_type": "code", "execution_count": 169, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " July 1, 2013\n", "\n", "Dear Valued Customer Bob,\n", "\n", "We regret to inform you that your product did not\n", "ship today due to alien attack.\n", "\n", "We hope to remedy this as soon as possible.\n", "\n", " From,\n", " Your Supplier\n", "\n" ] } ], "source": [ "form_letter = \"\"\"\\\n", "\n", " %s\n", "\n", "Dear %s,\n", "\n", "We regret to inform you that your product did not\n", "ship today due to %s.\n", "\n", "We hope to remedy this as soon as possible.\n", "\n", " From,\n", " Your Supplier\n", "\"\"\"\n", "\n", "print(form_letter % (\"July 1, 2013\",\"Valued Customer Bob\",\"alien attack\"))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The problem with a long block of text like this is that it's often hard to keep track of what all of the variables are supposed to stand for. There's an alternate format where you can pass a dictionary into the formatted string, and give a little bit more information to the formatted string itself. This method looks like:" ] }, { "cell_type": "code", "execution_count": 170, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " July 1, 2013\n", "\n", "Dear Valued Customer Bob,\n", "\n", "We regret to inform you that your product did not\n", "ship today due to alien attack.\n", "\n", "We hope to remedy this as soon as possible.\n", "\n", " From,\n", " Your Supplier\n", "\n" ] } ], "source": [ "form_letter = \"\"\"\\\n", "\n", " %(date)s\n", "\n", "Dear %(customer)s,\n", "\n", "We regret to inform you that your product did not\n", "ship today due to %(lame_excuse)s.\n", "\n", "We hope to remedy this as soon as possible.\n", "\n", " From,\n", " Your Supplier\n", "\"\"\"\n", "\n", "print(form_letter % {\"date\" : \"July 1, 2013\",\"customer\":\"Valued Customer Bob\",\"lame_excuse\":\"alien attack\"})" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "By providing a little bit more information, you're less likely to make mistakes, like referring to your customer as \"alien attack\".\n", "\n", "As a scientist, you're less likely to be sending bulk mailings to a bunch of customers. But these are great methods for generating and submitting lots of similar runs, say scanning a bunch of different structures to find the optimal configuration for something.\n", "\n", "For example, you can use the following template for NWChem input files:" ] }, { "cell_type": "code", "execution_count": 171, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "nwchem_format = \"\"\"\n", "start %(jobname)s\n", "\n", "title \"%(thetitle)s\"\n", "charge %(charge)d\n", "\n", "geometry units angstroms print xyz autosym\n", "%(geometry)s\n", "end\n", "\n", "basis\n", " * library 6-31G**\n", "end\n", "\n", "dft\n", " xc %(dft_functional)s\n", " mult %(multiplicity)d\n", "end\n", "\n", "task dft %(jobtype)s\n", "\"\"\"" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "If you want to submit a sequence of runs to a computer somewhere, it's pretty easy to put together a little script, maybe even with some more string formatting in it:" ] }, { "cell_type": "code", "execution_count": 172, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "---------\n", "\n", "start h2o-0\n", "\n", "title \"Water run #0\"\n", "charge 0\n", "\n", "geometry units angstroms print xyz autosym\n", " O 0.000000 0.000000 0.0\n", " H 0.0 1.0 0.0\n", " H 1.0 0.0 0.0\n", "end\n", "\n", "basis\n", " * library 6-31G**\n", "end\n", "\n", "dft\n", " xc b3lyp\n", " mult 1\n", "end\n", "\n", "task dft optimize\n", "\n", "---------\n", "\n", "start h2o-1\n", "\n", "title \"Water run #1\"\n", "charge 0\n", "\n", "geometry units angstroms print xyz autosym\n", " O 0.000000 0.100000 0.0\n", " H 0.0 1.0 0.0\n", " H 1.0 0.0 0.0\n", "end\n", "\n", "basis\n", " * library 6-31G**\n", "end\n", "\n", "dft\n", " xc b3lyp\n", " mult 1\n", "end\n", "\n", "task dft optimize\n", "\n", "---------\n", "\n", "start h2o-2\n", "\n", "title \"Water run #2\"\n", "charge 0\n", "\n", "geometry units angstroms print xyz autosym\n", " O 0.100000 0.000000 0.0\n", " H 0.0 1.0 0.0\n", " H 1.0 0.0 0.0\n", "end\n", "\n", "basis\n", " * library 6-31G**\n", "end\n", "\n", "dft\n", " xc b3lyp\n", " mult 1\n", "end\n", "\n", "task dft optimize\n", "\n", "---------\n", "\n", "start h2o-3\n", "\n", "title \"Water run #3\"\n", "charge 0\n", "\n", "geometry units angstroms print xyz autosym\n", " O 0.100000 0.100000 0.0\n", " H 0.0 1.0 0.0\n", " H 1.0 0.0 0.0\n", "end\n", "\n", "basis\n", " * library 6-31G**\n", "end\n", "\n", "dft\n", " xc b3lyp\n", " mult 1\n", "end\n", "\n", "task dft optimize\n", "\n" ] } ], "source": [ "oxygen_xy_coords = [(0,0),(0,0.1),(0.1,0),(0.1,0.1)]\n", "charge = 0\n", "multiplicity = 1\n", "dft_functional = \"b3lyp\"\n", "jobtype = \"optimize\"\n", "\n", "geometry_template = \"\"\"\\\n", " O %f %f 0.0\n", " H 0.0 1.0 0.0\n", " H 1.0 0.0 0.0\"\"\"\n", "\n", "for i,xy in enumerate(oxygen_xy_coords):\n", " thetitle = \"Water run #%d\" % i\n", " jobname = \"h2o-%d\" % i\n", " geometry = geometry_template % xy\n", " print(\"---------\")\n", " print(nwchem_format % dict(thetitle=thetitle,charge=charge,jobname=jobname,jobtype=jobtype,\n", " geometry=geometry,dft_functional=dft_functional,multiplicity=multiplicity))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This is a very bad geometry for a water molecule, and it would be silly to run so many geometry optimizations of structures that are guaranteed to converge to the same single geometry, but you get the idea of how you can run vast numbers of simulations with a technique like this.\n", "\n", "We used the **enumerate** function to loop over both the indices and the items of a sequence, which is valuable when you want a clean way of getting both. **enumerate** is roughly equivalent to:" ] }, { "cell_type": "code", "execution_count": 173, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[(0, (0, 0)), (1, (0, 0.1)), (2, (0.1, 0)), (3, (0.1, 0.1))]" ] }, "execution_count": 173, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def my_enumerate(seq):\n", " l = []\n", " for i in range(len(seq)):\n", " l.append((i,seq[i]))\n", " return l\n", "\n", "my_enumerate(oxygen_xy_coords)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Although enumerate uses **generators** (see below) so that it doesn't have to create a big list, which makes it faster for really long sequenes." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Optional arguments\n", "You will recall that the **linspace** function can take either two arguments (for the starting and ending points):" ] }, { "cell_type": "code", "execution_count": 174, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([ 0. , 0.02040816, 0.04081633, 0.06122449, 0.08163265,\n", " 0.10204082, 0.12244898, 0.14285714, 0.16326531, 0.18367347,\n", " 0.20408163, 0.2244898 , 0.24489796, 0.26530612, 0.28571429,\n", " 0.30612245, 0.32653061, 0.34693878, 0.36734694, 0.3877551 ,\n", " 0.40816327, 0.42857143, 0.44897959, 0.46938776, 0.48979592,\n", " 0.51020408, 0.53061224, 0.55102041, 0.57142857, 0.59183673,\n", " 0.6122449 , 0.63265306, 0.65306122, 0.67346939, 0.69387755,\n", " 0.71428571, 0.73469388, 0.75510204, 0.7755102 , 0.79591837,\n", " 0.81632653, 0.83673469, 0.85714286, 0.87755102, 0.89795918,\n", " 0.91836735, 0.93877551, 0.95918367, 0.97959184, 1. ])" ] }, "execution_count": 174, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linspace(0,1)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "or it can take three arguments, for the starting point, the ending point, and the number of points:" ] }, { "cell_type": "code", "execution_count": 175, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([ 0. , 0.25, 0.5 , 0.75, 1. ])" ] }, "execution_count": 175, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linspace(0,1,5)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "You can also pass in keywords to exclude the endpoint:" ] }, { "cell_type": "code", "execution_count": 176, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([ 0. , 0.2, 0.4, 0.6, 0.8])" ] }, "execution_count": 176, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linspace(0,1,5,endpoint=False)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Right now, we only know how to specify functions that have a fixed number of arguments. We'll learn how to do the more general cases here.\n", "\n", "If we're defining a simple version of linspace, we would start with:" ] }, { "cell_type": "code", "execution_count": 177, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[0.0,\n", " 0.02040816326530612,\n", " 0.04081632653061224,\n", " 0.061224489795918366,\n", " 0.08163265306122448,\n", " 0.1020408163265306,\n", " 0.12244897959183673,\n", " 0.14285714285714285,\n", " 0.16326530612244897,\n", " 0.18367346938775508,\n", " 0.2040816326530612,\n", " 0.22448979591836732,\n", " 0.24489795918367346,\n", " 0.26530612244897955,\n", " 0.2857142857142857,\n", " 0.3061224489795918,\n", " 0.32653061224489793,\n", " 0.3469387755102041,\n", " 0.36734693877551017,\n", " 0.3877551020408163,\n", " 0.4081632653061224,\n", " 0.42857142857142855,\n", " 0.44897959183673464,\n", " 0.4693877551020408,\n", " 0.4897959183673469,\n", " 0.5102040816326531,\n", " 0.5306122448979591,\n", " 0.5510204081632653,\n", " 0.5714285714285714,\n", " 0.5918367346938775,\n", " 0.6122448979591836,\n", " 0.6326530612244897,\n", " 0.6530612244897959,\n", " 0.673469387755102,\n", " 0.6938775510204082,\n", " 0.7142857142857142,\n", " 0.7346938775510203,\n", " 0.7551020408163265,\n", " 0.7755102040816326,\n", " 0.7959183673469387,\n", " 0.8163265306122448,\n", " 0.836734693877551,\n", " 0.8571428571428571,\n", " 0.8775510204081632,\n", " 0.8979591836734693,\n", " 0.9183673469387754,\n", " 0.9387755102040816,\n", " 0.9591836734693877,\n", " 0.9795918367346939,\n", " 0.9999999999999999]" ] }, "execution_count": 177, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def my_linspace(start,end):\n", " npoints = 50\n", " v = []\n", " d = (end-start)/float(npoints-1)\n", " for i in range(npoints):\n", " v.append(start + i*d)\n", " return v\n", "\n", "my_linspace(0,1)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can add an optional argument by specifying a default value in the argument list:" ] }, { "cell_type": "code", "execution_count": 178, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def my_linspace(start,end,npoints = 50):\n", " v = []\n", " d = (end-start)/float(npoints-1)\n", " for i in range(npoints):\n", " v.append(start + i*d)\n", " return v" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This gives exactly the same result if we don't specify anything:" ] }, { "cell_type": "code", "execution_count": 179, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[0.0,\n", " 0.02040816326530612,\n", " 0.04081632653061224,\n", " 0.061224489795918366,\n", " 0.08163265306122448,\n", " 0.1020408163265306,\n", " 0.12244897959183673,\n", " 0.14285714285714285,\n", " 0.16326530612244897,\n", " 0.18367346938775508,\n", " 0.2040816326530612,\n", " 0.22448979591836732,\n", " 0.24489795918367346,\n", " 0.26530612244897955,\n", " 0.2857142857142857,\n", " 0.3061224489795918,\n", " 0.32653061224489793,\n", " 0.3469387755102041,\n", " 0.36734693877551017,\n", " 0.3877551020408163,\n", " 0.4081632653061224,\n", " 0.42857142857142855,\n", " 0.44897959183673464,\n", " 0.4693877551020408,\n", " 0.4897959183673469,\n", " 0.5102040816326531,\n", " 0.5306122448979591,\n", " 0.5510204081632653,\n", " 0.5714285714285714,\n", " 0.5918367346938775,\n", " 0.6122448979591836,\n", " 0.6326530612244897,\n", " 0.6530612244897959,\n", " 0.673469387755102,\n", " 0.6938775510204082,\n", " 0.7142857142857142,\n", " 0.7346938775510203,\n", " 0.7551020408163265,\n", " 0.7755102040816326,\n", " 0.7959183673469387,\n", " 0.8163265306122448,\n", " 0.836734693877551,\n", " 0.8571428571428571,\n", " 0.8775510204081632,\n", " 0.8979591836734693,\n", " 0.9183673469387754,\n", " 0.9387755102040816,\n", " 0.9591836734693877,\n", " 0.9795918367346939,\n", " 0.9999999999999999]" ] }, "execution_count": 179, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_linspace(0,1)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "But also let's us override the default value with a third argument:" ] }, { "cell_type": "code", "execution_count": 180, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[0.0, 0.25, 0.5, 0.75, 1.0]" ] }, "execution_count": 180, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_linspace(0,1,5)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can add arbitrary keyword arguments to the function definition by putting a keyword argument \\*\\*kwargs handle in:" ] }, { "cell_type": "code", "execution_count": 181, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[0.0, 0.2, 0.4, 0.6000000000000001, 0.8]" ] }, "execution_count": 181, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def my_linspace(start,end,npoints=50,**kwargs):\n", " endpoint = kwargs.get('endpoint',True)\n", " v = []\n", " if endpoint:\n", " d = (end-start)/float(npoints-1)\n", " else:\n", " d = (end-start)/float(npoints)\n", " for i in range(npoints):\n", " v.append(start + i*d)\n", " return v\n", "\n", "my_linspace(0,1,5,endpoint=False)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "What the keyword argument construction does is to take any additional keyword arguments (i.e. arguments specified by name, like \"endpoint=False\"), and stick them into a dictionary called \"kwargs\" (you can call it anything you like, but it has to be preceded by two stars). You can then grab items out of the dictionary using the **get** command, which also lets you specify a default value. I realize it takes a little getting used to, but it is a common construction in Python code, and you should be able to recognize it.\n", "\n", "There's an analogous \\*args that dumps any additional arguments into a list called \"args\". Think about the **range** function: it can take one (the endpoint), two (starting and ending points), or three (starting, ending, and step) arguments. How would we define this?" ] }, { "cell_type": "code", "execution_count": 182, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def my_range(*args):\n", " start = 0\n", " step = 1\n", " if len(args) == 1:\n", " end = args[0]\n", " elif len(args) == 2:\n", " start,end = args\n", " elif len(args) == 3:\n", " start,end,step = args\n", " else:\n", " raise Exception(\"Unable to parse arguments\")\n", " v = []\n", " value = start\n", " while True:\n", " v.append(value)\n", " value += step\n", " if value > end: break\n", " return v" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Note that we have defined a few new things you haven't seen before: a **break** statement, that allows us to exit a for loop if some conditions are met, and an exception statement, that causes the interpreter to exit with an error message. For example:" ] }, { "cell_type": "code", "execution_count": 183, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[0, 1, 2, 3]" ] }, "execution_count": 183, "metadata": {}, "output_type": "execute_result" } ], "source": [ "my_range(3)" ] }, { "cell_type": "code", "execution_count": 184, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "ename": "Exception", "evalue": "Unable to parse arguments", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mException\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmy_range\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m\u001b[0m in \u001b[0;36mmy_range\u001b[0;34m(*args)\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mstart\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mend\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mstep\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 11\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mException\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Unable to parse arguments\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 12\u001b[0m \u001b[0mv\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0mvalue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstart\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mException\u001b[0m: Unable to parse arguments" ] } ], "source": [ "my_range()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## List Comprehensions and Generators\n", "List comprehensions are a streamlined way to make lists. They look something like a list definition, with some logic thrown in. For example:" ] }, { "cell_type": "code", "execution_count": 185, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]\n" ] } ], "source": [ "evens1 = [2*i for i in range(10)]\n", "print(evens1)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "You can also put some boolean testing into the construct:" ] }, { "cell_type": "code", "execution_count": 186, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]" ] }, "execution_count": 186, "metadata": {}, "output_type": "execute_result" } ], "source": [ "odds = [i for i in range(20) if i%2==1]\n", "odds" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Here i%2 is the remainder when i is divided by 2, so that i%2==1 is true if the number is odd. Even though this is a relative new addition to the language, it is now fairly common since it's so convenient." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Nota: esta celda es valida para Python 2, ya que en Python 3 (que es el que usamos) cambió. Lo dejo como está para que se entienda porque el cambio:\n", "\n", "- xrange (Python 2) es range (Python 3)\n", "- range (Python 2) no existe en Python 3, pero se puede hacer como list(range)\n", "\n", "\n", "~~**iterators**~~ **generators** are a way of making virtual sequence objects. Consider if we had the nested loop structure:\n", "\n", " for i in range(1000000):\n", " for j in range(1000000):\n", "\n", "Inside the main loop, we make a list of 1,000,000 integers, just to loop over them one at a time. We don't need any of the additional things that a lists gives us, like slicing or random access, we just need to go through the numbers one at a time. And we're making 1,000,000 of them. \n", "\n", "~~**iterators**~~ **generators** are a way around this. For example, the **xrange** function is the iterator version of range. This simply makes a counter that is looped through in sequence, so that the analogous loop structure would look like:\n", "\n", " for i in xrange(1000000):\n", " for j in xrange(1000000):\n", "\n", "Even though we've only added two characters, we've dramatically sped up the code, because we're not making 1,000,000 big lists.\n", "\n", "We can define our own ~~iterators~~ generators using the **yield** statement:" ] }, { "cell_type": "code", "execution_count": 187, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "2\n", "4\n", "6\n", "8\n" ] } ], "source": [ "def evens_below(n):\n", " for i in range(n):\n", " if i%2 == 0:\n", " yield i\n", " return\n", "\n", "for i in evens_below(9):\n", " print(i)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can always turn an iterator into a list using the **list** command:" ] }, { "cell_type": "code", "execution_count": 188, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[0, 2, 4, 6, 8]" ] }, "execution_count": 188, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(evens_below(9))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There's a special syntax called a **generator expression** that looks a lot like a list comprehension:" ] }, { "cell_type": "code", "execution_count": 189, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "2\n", "4\n", "6\n", "8\n" ] } ], "source": [ "evens_gen = (i for i in range(9) if i%2==0)\n", "for i in evens_gen:\n", " print(i)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Factory Functions\n", "A factory function is a function that returns a function. They have the fancy name *lexical closure*, which makes you sound really intelligent in front of your CS friends. But, despite the arcane names, factory functions can play a very practical role.\n", "\n", "Suppose you want the Gaussian function centered at 0.5, with height 99 and width 1.0. You could write a general function." ] }, { "cell_type": "code", "execution_count": 190, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def gauss(x,A,a,x0):\n", " return A*np.exp(-a*(x-x0)**2)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "But what if you need a function with only one argument, like f(x) rather than f(x,y,z,...)? You can do this with Factory Functions:" ] }, { "cell_type": "code", "execution_count": 191, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def gauss_maker(A,a,x0):\n", " def f(x):\n", " return A*np.exp(-a*(x-x0)**2)\n", " return f" ] }, { "cell_type": "code", "execution_count": 192, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 192, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\noldKKZv7/zsO92l2N3LEAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0,1)\n", "g = gauss_maker(99.0,1.0,0.5)\n", "plt.plot(x,g(x))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Everything in Python is an object, including functions. This means that functions can be returned by other functions. (They can also be passed into other functions, which is also useful, but a topic for another discussion.) In the **gauss_maker** example, the *g* function that is output \"remembers\" the A, a, x0 values it was constructed with, since they're all stored in the local memory space (this is what the *lexical closure* really refers to) of that function.\n", "\n", "Factories are one of the more important of the [Software Design Patterns](http://en.wikipedia.org/wiki/Software_design_pattern), which are a set of guidelines to follow to make high-quality, portable, readable, stable software. It's beyond the scope of the current work to go more into either factories or design patterns, but I thought I would mention them for people interested in software design." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Serialization: Save it for later\n", "*Serialization* refers to the process of outputting data (and occasionally functions) to a database or a regular file, for the purpose of using it later on. In the very early days of programming languages, this was normally done in regular text files. Python is excellent at text processing, and you probably already know enough to get started with this.\n", "\n", "When accessing large amounts of data became important, people developed database software based around the Structured Query Language (SQL) standard. I'm not going to cover SQL here, but, if you're interested, I recommend using the [sqlite3](http://docs.python.org/2/library/sqlite3.html) module in the Python standard library.\n", "\n", "As data interchange became important, the eXtensible Markup Language (XML) has emerged. XML makes data formats that are easy to write parsers for, greatly simplifying the ambiguity that sometimes arises in the process. Again, I'm not going to cover XML here, but if you're interested in learning more, look into [Element Trees](http://docs.python.org/2/library/xml.etree.elementtree.html), now part of the Python standard library.\n", "\n", "Python has a very general serialization format called **pickle** that can turn any Python object, even a function or a class, into a representation that can be written to a file and read in later. But, again, I'm not going to talk about this, since I rarely use it myself. Again, [the standard library documentation for pickle](http://docs.python.org/2/library/pickle.html#module-cPickle) is the place to go.\n", "\n", "What I am going to talk about is a relatively recent format call [JavaScript Object Notation](http://json.org/) (JSON) that has become very popular over the past few years. [There's a module in the standard library](http://docs.python.org/2/library/json.html) for encoding and decoding JSON formats. The reason I like JSON so much is that it looks almost like Python, so that, unlike the other options, you can look at your data and edit it, use it in another program, etc.\n", "\n", "Here's a little example:" ] }, { "cell_type": "code", "execution_count": 193, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "{'a': [1, 2, 3], 'b': [4, 5, 6], 'greeting': 'Hello'}" ] }, "execution_count": 193, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Data in a json format:\n", "json_data = \"\"\"\\\n", "{\n", " \"a\": [1,2,3],\n", " \"b\": [4,5,6],\n", " \"greeting\" : \"Hello\"\n", "}\"\"\"\n", "import json\n", "json.loads(json_data)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Ignore the little u's before the strings, these just mean the strings are in UNICODE. Your data sits in something that looks like a Python dictionary, and in a single line of code, you can load it into a Python dictionary for use later.\n", "\n", "In the same way, you can, with a single line of code, put a bunch of variables into a dictionary, and then output to a file using json:" ] }, { "cell_type": "code", "execution_count": 194, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "'{\"b\": [9, 10, 11], \"greeting\": \"Hola\", \"a\": [1, 2, 3]}'" ] }, "execution_count": 194, "metadata": {}, "output_type": "execute_result" } ], "source": [ "json.dumps({\"a\":[1,2,3],\"b\":[9,10,11],\"greeting\":\"Hola\"})" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Functional programming\n", "\n", "Nota: esto ya va mucho más allá de lo que necesitan, pero lo dejo para el que le interese.\n", "Nota 2: A Guido Van Rossum, creador de Python y BDLF*, no le gusta mucho el paradigma funcional, así que para Python 3 \"escondió\" las funciones relacionadas en el modulo functools.\n", "\n", "*BDLF: Benevolent Dictator For Life, que significa que tiene la última decisión sobre las adiciones y cambios que se hagan en Python.\n", "\n", "\n", "\n", "\n", "Functional programming is a very broad subject. The idea is to have a series of functions, each of which generates a new data structure from an input, without changing the input structure at all. By not modifying the input structure (something that is called not having *side effects*), many guarantees can be made about how independent the processes are, which can help parallelization and guarantees of program accuracy. There is a [Python Functional Programming HOWTO](http://docs.python.org/3/howto/functional.html) in the standard docs that goes into more details on functional programming. I just wanted to touch on a few of the most important ideas here.\n", "\n", "There is an **operator** module that has function versions of most of the Python operators. For example:" ] }, { "cell_type": "code", "execution_count": 195, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 195, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from operator import add, mul\n", "add(1,2)" ] }, { "cell_type": "code", "execution_count": 196, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "12" ] }, "execution_count": 196, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mul(3,4)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "These are useful building blocks for functional programming." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The **lambda** operator allows us to build *anonymous functions*, which are simply functions that aren't defined by a normal **def** statement with a name. For example, a function that doubles the input is:" ] }, { "cell_type": "code", "execution_count": 197, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "34" ] }, "execution_count": 197, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def doubler(x): return 2*x\n", "doubler(17)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We could also write this as:" ] }, { "cell_type": "code", "execution_count": 198, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ ">" ] }, "execution_count": 198, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lambda x: 2*x" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "And assign it to a function separately:" ] }, { "cell_type": "code", "execution_count": 199, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "38" ] }, "execution_count": 199, "metadata": {}, "output_type": "execute_result" } ], "source": [ "another_doubler = lambda x: 2*x\n", "another_doubler(19)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "**lambda** is particularly convenient (as we'll see below) in passing simple functions as arguments to other functions." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "**map** is a way to repeatedly apply a function to a list:" ] }, { "cell_type": "code", "execution_count": 200, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[1.0, 2.0, 3.0, 4.0, 5.0]" ] }, "execution_count": 200, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(map(float, '1 2 3 4 5'.split()))" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "**reduce** is a way to repeatedly apply a function to the first two items of the list. There already is a **sum** function in Python that is a reduction:" ] }, { "cell_type": "code", "execution_count": 201, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "15" ] }, "execution_count": 201, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum([1,2,3,4,5])" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can use **reduce** to define an analogous **prod** function:" ] }, { "cell_type": "code", "execution_count": 202, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "120" ] }, "execution_count": 202, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from functools import reduce\n", "def prod(l):\n", " return reduce(mul,l)\n", "prod([1,2,3,4,5])" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Object Oriented Programming" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We've seen a lot of examples of **objects** in Python. We create a string object with quote marks:" ] }, { "cell_type": "code", "execution_count": 203, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "mystring = \"Hi there\"" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "and we have a bunch of methods we can use on the object:" ] }, { "cell_type": "code", "execution_count": 204, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "['Hi', 'there']" ] }, "execution_count": 204, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mystring.split()" ] }, { "cell_type": "code", "execution_count": 205, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 205, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mystring.startswith('Hi')" ] }, { "cell_type": "code", "execution_count": 206, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "8" ] }, "execution_count": 206, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(mystring)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Object oriented programming simply gives you the tools to define objects and methods for yourself. It's useful anytime you want to keep some data (like the characters in the string) tightly coupled to the functions that act on the data (length, split, startswith, etc.).\n", "\n", "As an example, we're going to bundle the functions we did to make the 1d harmonic oscillator eigenfunctions with arbitrary potentials, so we can pass in a function defining that potential, some additional specifications, and get out something that can plot the orbitals, as well as do other things with them, if desired." ] }, { "cell_type": "code", "execution_count": 207, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "class Schrod1d:\n", " \"\"\"\\\n", " Schrod1d: Solver for the one-dimensional Schrodinger equation.\n", " \"\"\"\n", " def __init__(self,V,start=0,end=1,npts=50,**kwargs):\n", " m = kwargs.get('m',1.0)\n", " self.x = np.linspace(start,end,npts)\n", " self.Vx = V(self.x)\n", " self.H = (-0.5/m)*self.laplacian() + np.diag(self.Vx)\n", " return\n", " \n", " def plot(self,*args,**kwargs):\n", " titlestring = kwargs.get('titlestring',\"Eigenfunctions of the 1d Potential\")\n", " xstring = kwargs.get('xstring',\"Displacement (bohr)\")\n", " ystring = kwargs.get('ystring',\"Energy (hartree)\")\n", " if not args:\n", " args = [3]\n", " x = self.x\n", " E,U = np.linalg.eigh(self.H)\n", " h = x[1]-x[0]\n", "\n", " # Plot the Potential\n", " plt.plot(x,self.Vx,color='k')\n", "\n", " for i in range(*args):\n", " # For each of the first few solutions, plot the energy level:\n", " plt.axhline(y=E[i],color='k',ls=\":\")\n", " # as well as the eigenfunction, displaced by the energy level so they don't\n", " # all pile up on each other:\n", " plt.plot(x,U[:,i]/np.sqrt(h)+E[i])\n", " plt.title(titlestring)\n", " plt.xlabel(xstring)\n", " plt.ylabel(ystring) \n", " return\n", " \n", " def laplacian(self):\n", " x = self.x\n", " h = x[1]-x[0] # assume uniformly spaced points\n", " n = len(x)\n", " M = -2*np.identity(n,'d')\n", " for i in range(1,n):\n", " M[i,i-1] = M[i-1,i] = 1\n", " return M/h**2" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The **__init__()** function specifies what operations go on when the object is created. The **self** argument is the object itself, and we don't pass it in. The only required argument is the function that defines the QM potential. We can also specify additional arguments that define the numerical grid that we're going to use for the calculation.\n", "\n", "For example, to do an infinite square well potential, we have a function that is 0 everywhere. We don't have to specify the barriers, since we'll only define the potential in the well, which means that it can't be defined anywhere else." ] }, { "cell_type": "code", "execution_count": 208, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "square_well = Schrod1d(lambda x: 0*x,m=10)\n", "square_well.plot(4,titlestring=\"Square Well Potential\")" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can similarly redefine the Harmonic Oscillator potential." ] }, { "cell_type": "code", "execution_count": 209, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ho = Schrod1d(lambda x: x**2,start=-3,end=3)\n", "ho.plot(6,titlestring=\"Harmonic Oscillator\")" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Let's define a finite well potential:" ] }, { "cell_type": "code", "execution_count": 210, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n/9m3TvyX3MtaAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def finite_well(x,V_left=1,V_well=0,V_right=1,d_left=10,d_well=10,d_right=10):\n", " V = np.zeros(x.size,'d')\n", " for i in range(x.size):\n", " if x[i] < d_left: \n", " V[i] = V_left\n", " elif x[i] > (d_left+d_well):\n", " V[i] = V_right\n", " else:\n", " V[i] = V_well\n", " return V\n", " \n", "fw = Schrod1d(finite_well,start=0,end=30,npts=100)\n", "fw.plot()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "A triangular well:" ] }, { "cell_type": "code", "execution_count": 211, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEWCAYAAABrDZDcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd4FNX6wPHv2U3vhRBCDR1CaJGOCoIoilivXFHvVQkg\ncIWLF0WvXrFxERXxh4jUIIgdBKmiICIgGHqHQIAQahJISO/7/v6YJQQukAWy2ZTzeZ55Zmd25sy7\nm828c2bOnFEigqZpmlZ1mRwdgKZpmuZYOhFomqZVcToRaJqmVXE6EWiaplVxOhFomqZVcToRaJqm\nVXE6EVQSSqmnlFK/lNG2xiqlzimlzpbF9optd5pS6o2y3Ob1KKWaKqV2KqXSlVIjbFxHlFKN7B3b\nVbbbXSl1sqy3e6uUUnWVUhlKKbMNy1bIz1ge6ERQgSil4pRS2dZ/jIvDpwAi8pWI3FMGMdQFRgFh\nIlLDjtt5Vim1ofg8ERkiIu/aa5s3YTTwm4h4i8gnV76plFqrlBpor40rpWYopWKUUhal1LO3WJYo\npTKtv6lTSqmJNu585yilxt7Ktq8oL04pdffFaRGJFxEvESksrW1o/0sngoqnr/Uf4+LwQhlvvy5w\nXkQSy3i75VE9YJ8Dt78LGAZsL6XyWouIF9ATeBIYVErlauWdiOihggxAHHD3Nd57FthQbPoeIAZI\nBT4DfgcGFnt/AHAASAF+BuoVe0+AIcBh4AIwBVDA3UA2YAEygDlAd+DkteIE3gK+B74A0jF2nO2K\nLVsHWAgkAeeBT4HmQA5QaN3OBeuyc4CxxdYdBMQCycASoGZJn8H6XiPr95EKnAO+u853/qA15gvA\nWqC5df4aa3w51hibXLHef694/9OS4irp73KdGDcAz14xz936faUA+4GXr/w7XbG8AI2KTc8vFnNz\n62e/YP0uHrTOHwzkA3nWz7jUOr8m8IP1b3oMGFGs3Gv+HoB5GL+tbGt5o4FQa2xO1mWes34/6cBR\n4PliZXe/3mfUw3V+Q44OQA838MeyMREA1YA04FHACfin9R92oPX9hzB2oM2t7/8H2FisLAGWAX4Y\nNYAkoLf1vcv+2a72z8f/JoIc4H7ADLwH/Gl9z4xxVPsx4Am4Abdf+XmKlTsHayIAemDsxCMAV2Ay\nsM7Gz/AN8DpGjbhom1f5TpsAmUAvwNm6Y4oFXKzvr6VYcr3K+v/zfglxXffvcp3tXC0RjAfWAwEY\nyXbv9XaSFEsEQBhwFoi0fu5Y4DXAxfq9pwNNr/ybWKdNwDZgjHX5Bhg77HtL+j1c7TfO/yaCPkBD\njAOTbkAWEHGt36IebBv0qaGK50el1IViw9Wq7/cD+0RkoYgUAJ9g/GNfNAR4T0QOWN8fB7RRStUr\ntsx4EbkgIvHAb0CbW4h5g4isEOM87zygtXV+B4yjx5dFJFNEckRkwzVLudxTwGwR2S4iucC/gc5K\nqVAbPkM+xmmdmiVs86/AchFZJSL5wASMI+0uNsZ4LdeKy5a/i636Af8VkWQROYHxGyjJdqVUCrAU\nmAV8DnQCvKwx54nIGoxE1v8aZbQHgkTkHevyR4GZwBPFlrnW76FEIrJcRI6I4XfgF+AOW9fXrk4n\ngornYRHxKzbMvMoyNYETFyfEOFwq3pqiHjDpYjLBOLWigFrFlimeOLIwdgY368qy3JRSThhHqset\nO70bVRM4fnFCRDIwTi3Z8hlGY3zezUqpfUqpATZuw4Lxvda6xvK2ulZctvxdbHXZb4Bin+M6IkTE\nX0Qaish/rJ+3JnDC+rp4WdeKqR5Qs/jBCkZtIrjYMtf6PZRIKXWfUupPpVSytez7MWrA2i2w6cvX\nKpwzQO2LE0opVXwaYwfxXxH5qhS2lQl4FNuWGQiycd0TQF2llNNVkkFJ3eKextjpXNyuJxAInCpp\noyJyFuuFUKXU7cBqpdQ6EYm9yjZaFtuGwkheJW7j4qZsXO6i0vy7nMGI9eLF7Lo3Wc5poI5SylQs\nGdQFDllfX/kZTwDHRKTxTW7vmt+ZUsoV49rD34HFIpKvlPoRI1lqt0DXCCqn5UBLpdTD1iOtfwDF\nm3pOA/6tlGoBoJTyVUo9fpPbOoRxRNdHKeWMcV7b1cZ1N2PssMYrpTyVUm5Kqa7W9xKA2kopl2us\n+w3wnFKqjXUHMQ6IFpG4kjaqlHpcKXUxMaZg7HwsV1n0e6CPUqqn9bONAnKBjTZ+vgSMc+S2uqG/\ni1LKRSnlhrEjdLZ+fxf/p7+3luVv/azDbyCO4qIxjtpHK6WclVLdgb7At9b3r/yMm4F0pdQrSil3\npZRZKRWulGpv4/au9525YPy2koACpdR9GI0itFukE0HFs/SK+wgWXbmAiJwDHgc+wDhdEgZsxdiJ\nISKLgPeBb5VSaRgXEu+7mWBEJBWjCeMsjCPlTC4/DXW9dQsxdiqNgHjren+1vr0G42j2rFLq3FXW\nXQ28gXGEeAbjAuITVy53De2BaKVUBkZro39az2VfuY0Y4GmMC9HnrLH2FZE8G7czCfiLUipFKVXi\nOfqb+Lv8gtHCpgsww/r6Tut7b2OcwjlmXW6ejTFfGVMexue+D+M7+Az4u4gctC4SBYRZTwP9aP2b\nPoBx3eOYdZ1ZgK+Nm3wP+I+1vJeuiCUdGIGR5FIwmrguuZnPpV3uYnM6rRKzHiWeBJ4Skd8cHY+m\naeWLrhFUUkqpe5VSftbTJq9hnD7408FhaZpWDulEUHl1Bo5w6ZTGwyKS7diQNE0rj/SpIU3TtCpO\n1wg0TdOquApxH0G1atUkNDTU0WFomqZVKNu2bTsnIiXe11MhEkFoaChbt251dBiapmkVilLKljvK\n9akhTdO0qk4nAk3TtCpOJwJN07QqTicCTdO0Kk4nAk3TtCrObonA2hPiZqXULmuf729b5wcopVYp\npQ5bx/72ikHTNE0rmT1rBLlADxFpjdETYW+lVCfgVeBXa3/lv1qnNU3TNAexWyKwPkouwzrpbB0E\n47msc63z5wIP2ysGTdO0iur8+fOMHDmS1NRUu2/LrtcIrA+l2AkkAqtEJBoIFpEz1kXOcvkj7Iqv\nO1gptVUptTUpKcmeYWqappUbIsL8+fMJCwtjypQprFu3zu7btGsiEJFCEWmD8ZjEDkqp8CveF67x\naDoRmSEi7USkXVCQrU8+1DRNq7hOnz7No48+Sr9+/ahTpw7btm2jb9++dt9umbQaEpELwG9AbyBB\nKRUCYB0nlkUMmqZp5ZWIEBUVRVhYGCtXruSDDz7gzz//pFWrVmWyfXu2GgpSSvlZX7sDvYCDGI+W\ne8a62DPAYnvFoGmaVt4dPXqUXr16MXDgQFq3bs3u3bt5+eWXcXIqu67g7LmlEGCuUsqMkXC+F5Fl\nSqlNwPdKqUiMZ6r2s2MMmqZp5VJhYSGTJ0/m9ddfx2w2M3XqVAYPHozJVPa3d9ktEYjIbqDtVeaf\nB3raa7uapmnl3b59+4iMjCQ6Opo+ffowdepU6tSp47B49J3FmqZpZSQvL493332Xtm3bEhsby1df\nfcXSpUsdmgSggjyPQNM0raLbunUrAwYMYM+ePTzxxBN88sknlJcWkbpGoGmaZkdZWVmMHj2ajh07\ncv78eRYvXsw333xTbpIA6BqBpmma3fz+++8MHDiQ2NhYBg8ezAcffICvr6+jw/ofukagaZpWytLS\n0hg6dCjdu3dHRFizZg3Tp08vl0kAdCLQNE0rVcuXL6dFixbMmDGDUaNGsXv3bu666y5Hh3VdOhFo\nmqaVgqSkJJ566ikeeOABfH192bRpExMmTMDDw8PRoZVIJwJN07RbICJ8++23hIWFMX/+fN566y22\nb99Ohw4dHB2azfTFYk3TtJt08uRJhg0bxtKlS+nQoQNRUVGEh4eXvGI5o2sEmqZpN8hisTBjxgxa\ntGjB6tWrmThxIhs3bqyQSQB0jUDTNO2GxMbGMmjQINauXctdd93FzJkzadiwoaPDuiW6RqBpmmaD\nwsJCPvroI1q1asX27duZOXMmv/76a4VPAqBrBJqmaSXau3cvAwYMYMuWLfTt25epU6dSq1YtR4dV\nanSNQNM07Rry8vJ46623iIiIIC4ujm+//ZbFixdXqiQAukagaZp2VZs3b2bAgAHs27ePp59+mo8/\n/phq1ao5Oiy70DUCTdO0YrKyshg1ahSdO3cmNTWVZcuWMW/evEqbBEDXCDRN04r89ttvDBw4kKNH\njzJ06FDGjx+Pj4+Po8OyO10j0DStyktNTWXw4MH06NEDk8nE2rVr+eyzz6pEEgCdCDRNq+KWLl1K\nWFgYUVFRjB49mt27d9OtWzdHh1WmdCLQNK1KSkpKon///jz44IMEBgYSHR3N+++/j7u7u6NDK3M6\nEWiaVqWICF9//TXNmzdn4cKFvPvuu2zdupV27do5OjSH0ReLNU2rMk6cOMHQoUNZvnw5nTp1Iioq\nirCwMEeH5XC6RqBpWqVnsViYNm0aLVq04LfffuP//u//2LBhg04CVrpGoGlapXb48GEGDhzIunXr\n6NmzJzNmzKBBgwaODqtcsVuNQClVRyn1m1Jqv1Jqn1Lqn9b5bymlTimldlqH++0Vg6ZpVVdBQQEf\nfPABrVq1YteuXURFRbFq1SqdBK7CnjWCAmCUiGxXSnkD25RSq6zvfSwiE+y4bU3TqrBdu3YRGRnJ\ntm3bePjhh5kyZQo1a9Z0dFjllt1qBCJyRkS2W1+nAweAytVTk6Zp5Upubi5vvPEG7dq148SJE3z/\n/fcsXLhQJ4ESlMnFYqVUKNAWiLbOGq6U2q2Umq2U8r/GOoOVUluVUluTkpLKIkxN0yqwTZs20bZt\nW8aOHcuTTz7J/v37efzxx1FKOTq0cs/uiUAp5QX8AIwUkTRgKtAAaAOcAT662noiMkNE2olIu6Cg\nIHuHqWlaBZWRkcHIkSPp2rUrmZmZ/PTTT8ydO5fAwEBHh1Zh2DURKKWcMZLAVyKyEEBEEkSkUEQs\nwEyggz1j0DSt8lq1ahUtW7Zk0qRJDBs2jL1799K7d29Hh1Xh2LPVkAKigAMiMrHY/JBiiz0C7LVX\nDJqmVU4pKSlERkZyzz334OLiwrp16/j000/x9vZ2dGgVkj1bDXUF/gbsUUrttM57DeivlGoDCBAH\nPG/HGDRNq2QWLVrEsGHDSEpK4t///jdjxozBzc3N0WFVaHZLBCKyAbjaVZoV9tqmpmmVV0JCAsOH\nD2f+/Pm0adOG5cuXExER4eiwKgXdxYSmaeWaiPDFF1/QvHlzlixZwrhx49i8ebNOAqVIdzGhaVq5\ndfz4cYYMGcLKlSvp0qULUVFRNGvWzNFhVTq6RqBpWrljsViYMmUK4eHhrF+/nk8++YT169frJGAn\nukagaVq5EhMTw8CBA9mwYQP33HMP06dPJzQ01NFhVWq6RqBpWrmQn5/Pe++9R+vWrdm3bx9z5sxh\n5cqVOgmUAV0j0DTN4Xbs2EFkZCQ7duzgscce49NPP6VGjRqODqvK0DUCTdMcJicnh9dee4327dtz\n+vRpFixYwIIFC3QSKGO6RqBpmkP88ccfREZGEhMTw3PPPceECRMICAhwdFhVkq4RaJpWptLT0xk+\nfDh33HEHOTk5/Pzzz8yePVsnAQfSiUDTtDLz888/07JlS6ZMmcLw4cPZu3cv99xzj6PDqvJ0ItA0\nze6Sk5N59tln6d27N+7u7mzYsIFJkybh5eXl6NA0dCLQNM3OfvjhB8LCwvjqq694/fXX2bFjB126\ndHF0WFox+mKxpml2cebMGV544QUWLlxIREQEK1eupE2bNo4OS7sKXSPQNK1UiQhz5swhLCyM5cuX\nM378eKKjo3USKMd0jUDTtFITFxfH4MGDWbVqFXfccQczZ86kadOmjg5LK4GuEWiadssKCwuZPHky\n4eHhbNq0iSlTprB27VqdBCoIXSPQNO2WHDhwgIEDB7Jx40Z69+7N9OnTqVu3rqPD0m6ArhFomnZT\n8vPzGTduHG3atOHgwYN88cUXrFixQieBCkjXCDRNu2Hbtm0jMjKSXbt28fjjjzN58mSCg4MdHZZ2\nk3SNQNM0m2VnZ/Pqq6/SsWNHEhMTWbRoEd9//71OAhWczTUCpZQnkCMihXaMR9O0cmrdunUMHDiQ\nw4cPExkZyYQJE/Dz83N0WFopuGYiUEqZgCeAp4D2QC7gqpQ6BywHpotIbJlEqWkOYhELyTnJnMs+\nR2JWIklZSaTkppBbmEtuQa4xLswlpzCH/MJ8nExOOJuccTY7G2Pr4O3ijZ+rH76uvkWDn6sf/m7+\nOJucHf0xrystLY1XX32VqVOnUr9+fVavXk3Pnj0dHZZWiq5XI/gNWA38G9grIhYApVQAcBfwvlJq\nkYh8af8wNc2+UnNTib0QS2xKLIcvHOZwymFOZZzifPZ5CqTgquu4ml0vG5zNzhRaCsm35BcNeYV5\n5BfmX7MMhaKaezWqe1Qn2COYYM9ggj2CCfEMobZ3bWp718bf1R+llD0//jWtWLGCIUOGcPLkSUaO\nHMnYsWPx9PR0SCya/VwvEdwtIvlXzhSRZOAH4AelVPk+lNG0q8i35HPg/AG2JmxlW8I2DiYfJDEr\nseh9L2cvGvk1omNIR4I9ggnyCCLIPYggjyCqu1fH380fV7OrzTtnESG7IJu0vDQu5F4gNTe1aHwu\n+xwJWQkkZCUQnx7PloQtpOelX7a+p7Mntb1qU8e7DnW861DPpx6hvqGE+oQS4BZglyRx7tw5Xnzx\nRb788kvCwsLYuHEjnTp1KvXtaOXDNRNB8SSglLodaCwinyulggAvETl2tURRbJ06wBdAMCDADBGZ\nZK1RfAeEAnFAPxFJKY0PU9pEhPT8dBIzE0nMSsTZ7EygeyCBboH4uPg47ChNuzGFlkL2nNvDlrNb\n2JqwlR2JO8guyAYg1CeUjjU60si/EY38GtHEvwnBHsGl+rdVSuHh7IGHswc1PEt+8lZWfhZnMs9w\nIv0EJ9NPGuOMkxxJPcLvJ38n33Lp387b2ZtQ31Dq+dSjgW8D6vvWp75vfep618XZfOPHaSLC/Pnz\neeGFF0hJSWHMmDG89tpruLq63nBZWsWhROT6Cyj1JtAOaCoiTZRSNYH5ItK1hPVCgBAR2a6U8ga2\nAQ8DzwLJIjJeKfUq4C8ir1yvrHbt2snWrVtt/lA3IzU3lQ2nNhB9JprTGaeLjtIu7jCu5KSc8Hfz\nJ9A9kFCfUDqEdKBTSCfqeNexa5yabXILc4k+E82a+DX8duI3knOSAWjk14jbgm+jXY12tAtuRzX3\nag6O9MYUWgo5k3mGuLQ4jqcd51jqsaJxQlZC0XJmZaaOd52ixFB88HHxuWrZp0+fZtiwYSxevJh2\n7doRFRVFq1atyuqjaXaglNomIu1KXM6GRLATaAtsF5G21nm7ReSGfiFKqcXAp9ahu4icsSaLtSJy\n3fvQ7ZEIRIRDKYdYf2o9606uY1fSLixiwdfVl1CfUII9gqnuUZ0anjWo7lGdIPcgCqSA5OxkknOS\nOZ9z3hhnn+dA8oGiUwu1vGrRMaQjHWt0pFPNTgS46aculZWs/CzWnljLmhNrWH9yPVkFWXg6e3Jn\nrTu5q+5ddArphL+bv6PDtJus/CyOpR3jWOql4eiFoxxPP06B5dI1imru1Yyk4FPfOM3kE8qWX7bw\n7kvvkpuTy7vvvsvIkSNxctK3GVV0pZkINotIB6XUdhGJsDYj3XQjiUApFQqsA8KBeBHxs85XQMrF\n6SvWGQwMBqhbt+5tx48ft3Vz13Uu+xzfx3zPothFnM08C0DzgObcWftO7qh9B+GB4ZhN5hsqU0Q4\nlnaM6DPR/Hn6T7ac3UJ6fjpmZaZ7ne78pclf6BzS+YbL1UpmEQvbEraxOHYxq46vIqsgi0C3QO6q\nexc96/akQ40OuJhdHB2mQxVYCjiVceryBJF6lLi0OFJzUy8tWAh1vOrQuFpj6vnUo45PHep616We\nTz2qe1THpPRtRxVNaSaCl4DGQC/gPWAA8LWITLYxEC/gd+C/IrJQKXWh+I5fKZUiItc9TCuNGkFM\ncgzz9s9jxbEV5Fvyub3W7fSq14vba91OdY/qt1T2lQosBRw4f4BVx1fxY+yPpOSmUNOzJo82fpSH\nGz1MsKe++eZWnUg/wdIjS1lyZAmnMk7h6ezJvaH30rdBXyKCI/ROqwSFhYV88sknvDHuDdxruvPU\n8Keo06YOx9OOczztOCfTT5JnySta3tXsSm0voxVTLa9axuBdi9pexrSXi37SWHlUaonAWlgv4B5A\nAT+LyCobg3AGllnXmWidF0MZnRqyiIV1J9cxb/88Np/djLuTOw82fJCnmz9NqG/oDZd3M/IK81hz\nYg0LDi0g+kw0JmWiW+1uPNviWSKCI8okhsoi35LP2hNr+e7gd0SfjUah6BTSiYcaPUSPuj1wd3J3\ndIgVwr59+4iMjCQ6Opo+ffowbdo0ateufdkyhZZCErMSiU+P53jacU6knyA+LZ5TGac4mXGSzPzM\ny5b3dvEmxDOEEM8QanjWKBounmINcg/Cw9mjLD+mRukngnoYrYZWK6U8ALOIpJewjgLmYlwYHlls\n/ofA+WIXiwNEZPT1yrrZRPDGH2/wY+yPBHsE82TzJ3ms8WP4uvrecDml5UTaCX44/AMLDy8kJTeF\niOoRDGo1iK41u+oWSNeRmJXID4d+YMGhBSRmJ1LTsyaPNXmMBxs+aFMrHM2Ql5fH+PHjGTt2LD4+\nPnzyySf079//hn97IkJqbmpRUjiZfpKzmWeNIessZzLPXH7KycrL2auoCW6geyCB7oEEuAUQ6Hbp\ntb+bP36ufng4eej/iVJQmqeGBmGcqw8QkYZKqcbANBG57q2F1ian64E9gMU6+zUgGvgeqAscx2g+\nmny9sm42EexI3MHZzLPcXe/ucnX3ZnZBNgsPL+TzvZ+TkJVA84DmRLaM5O66d+vrCFYiwtaErXxz\n8BvWxK/BIha61urKE02f4PZat+vv6QZt2bKFyMhI9uzZQ//+/Zk0aRJBQUF2215WfhZnM8+SmG3c\njZ2YlUhSdlLR3dnnss+RnJNMVkHWVdd3NjkX3Ynt5+qHn6sf3i7eeLl44e3ijY+LjzHt7IWXsxee\nzp54OHvg6eyJp7Mn7k7u+vQgpd9qqAMQXazV0B4RaVkqkdqgLJqPOkJ+YT7Lji5j9t7ZxKXFEeoT\nSmTLSB5o8ABOpqrZYiO7IJsVR1fw1cGvOJxyGF9XXx5t9CiPN3mcOj66ae6NysrK4s0332TixImE\nhIQwdepU+vbt6+iwimQXZBe1vkvOMVrkXci9cOnGuxzjdVpeGul56aTnpV8zeRSnULg5ueHu5F40\nuJndcHc2xm5ObriYXXAzu126O9zJFWeTMy4mF5zNzriYXXAxueBidsHZ5FzUfUjxsZPJCbMy42xy\nxmwyY1bmonkXp4u/NikTZmUus9qOrYkAEbnugJEAAHZYx07A7pLWK83By8tLunXrJgcPHhQRkQ8/\n/FC6desmH374oYiIHDx4ULp16ybdunWTiwYNGiTdunWTJUuWiIjIkiVLpFu3bjJo0KCiZS6u4+hy\nCwoL5NFXH5XWH7WW8Dnh0ntBbxkzf4zc2f3OchmvPco9nX5aJm6dKG1mtpHwOeHSa14vWXhoofyw\n+IdyGW9FKHfu3Lni5uYmgAwePFguXLhQruO1tdw7u98pzw59VuJT42Xvub3S5a9dpPPTnWXmhpny\n3cHv5JlPn5H2I9tLv8/6ydsb35Zhy4ZJxFsR0nZsW/n7ir9Lv6X9pP1n7aXVJ62k89zO0vnrztJm\njvG7K7Ph83BpPbe1RHwRIW0+byMtZ7SUtrPbStdvukqXL7tIy6ktpeVnLaXH9z1k85nNN/39AlvF\nhn2sLYedvyulXgPcrReNhwFLby4/aVdjNpkJPB/IuU3n6DO8D9tct7Hw/EJMj5lISEggvzD/pu4S\nLe9EhPwa+eQ0z6H3wt4A+KX6UbC5gBeeeoEHGz/I0oP6p3ajcnJyGDJkCNOnT8fNzY3WrVszffp0\nR4dVapQonAuci2qIzmeN/407qt1B06ZNiV8aT9yOONrXas9LnV8iJiaGfR/uA2Du63MBGDx4MIcO\nHWLUqFH07duXpUuXMuGjCTRu2pj/m/x/5FnyeOjRh8AEb419i9p1a/P5F5+z/o/1dL69M489/hhx\n8XFMnjIZMQlvvvUmBVLArNmzOJt4lrt73U2Lli3YtWcXv639jWrVq/HwIw9TKIXM/nw2KOh9f2/8\nAvyI3hzN0WNHqV+/Pm3C2pCckszavWtBQddWXfFztX8Pr7acGjIBkRRrNQTMkpJWLEWV9dTQtYgI\n60+tZ9quaew5t4canjV4tsWzPNLokUrR8iIjL4OlR5fy3cHvOJJ6BD9XPx5t/ChPNH2CEK8QR4dX\noS1btowhQ4Zw5swZXnzxRd555x08PCr+b0a7OaVyjUApZQa+EJGnSjO4G1XVEsFFIsLG0xuZvns6\nOxJ34OPiQ7+m/Xiy2ZMEedjvQp+9xKbE8m3Mtyw9spSsgizCA8N5otkT3Bt6L25Obo4Or0JLSkri\nn//8J9988w3h4eFERUXRoUMHR4elOVhpXizeAPQQkbzrLmhHVTURFLczcSdz983l1/hfMZvM9Knf\nh2daPENj/8aODu26UnNT+enYTyw5soQ95/bgYnKhd/3e9G/Wn/Bq4Y4Or8ITEb799ltGjBhBamoq\n//nPf3j11Vdxcanad1NrhtJMBF8AzYElQNFdJGK9Qaws6ERwSXxaPPP2z2PxkcVkF2TTsUZH+jbs\ny9317sbTuXz0E59vyWfjqY0sPrKYtSfWkm/Jp4l/Ex5s+CAPNnywUvf3U5ZOnjzJ0KFDWbZsGR06\ndGD27Nm0aNHC0WFp5UhpJoI3rzJbROSdmw3uRulE8L9Sc1P5PuZ7Fh5eyMmMk7iZ3ehRtwcPNHiA\nzjU7l3nz06z8LP488yfrTq5j7Ym1nM85T4BbAPfXv5+HGj1Es4BmZRpPZWaxWJg1axYvv/wy+fn5\n/Pe//2XEiBGYzfreCu1ypZkIHheR+SXNsyedCK5NRNiZtJNlR5axMm4laXlpBLoFck/oPbSv0Z62\n1dvaravn302bAAAgAElEQVTlE2knWHdqHetOrmPL2S3kW/LxdPaka82uPNDgAW6vfXu5upGvMoiN\njWXQoEGsXbuWHj16MHPmTBo0aODosLRyqjQTwXYRiShpnj3pRGCbvMI81p9az7Ijy1h/aj25hbkA\n1POpR0T1CCKCI2gd1JqaXjVxNdv+oJFCSyHH049zKPkQMSkxHEw+yKHkQyRmG11vh/qEcmftO7mz\n9p1EVI+olE1dHa2goIBJkybxxhtv4OzszEcffURkZKTuhkG7rltOBEqp+4D7gX4YTxS7yAcIE5Ey\na5KgE8GNyy/MZ3/yfrYnbDeGxO2k5aUVve/t4k2gWyDV3KtRzb0aAW4BFEohWflZZOZnklmQWfT6\ndMZpcgpzAOOBPPX96tPUvynh1cK5s9ad+o5fO9uzZw+RkZFs2bKFBx98kM8++4xatWo5OiytAiiN\nRNAaaAO8A4wp9lY68JuU4eMldSK4dRaxcPTCUfac28O57HOXDedzznM++zxmkxlPJ6PPluL9t9Tw\nrEFT/6Y0DWhKA98GVb5//7KSm5vLuHHjGDduHP7+/kyePJl+/frpWoBmM1sTwfWeWbxLKbUXuFdE\n5pZqdFqZMymT8Vxe/0aODkWzQXR0NJGRkezbt4+nn36ajz/+mGrVKtZjNbWK47rd84lIIVBHKaUP\nATWtDGRmZjJq1Ci6dOlCamoqy5YtY968eToJaHZlSxvDY8AfSimH3UegaVXBmjVrGDRoEEePHmXI\nkCG8//77+Phc/UHzmlaabOmw+wjGU8ZMgHexQdO0UnDhwgUGDRpEz549MZlMrF27lqlTp+okoJWZ\nEmsEIvJ2WQSiaVXRkiVLGDp0KGfPnmX06NG89dZbuLvrR25qZavERKCUCgJGAy2Aop7BRKSHHePS\ntEotMTGRESNG8N1339GyZUsWL15Mu3YlPz9E0+zBllNDXwEHgfrA20AcsMWOMWlapSUifPnllzRv\n3pyFCxfyzjvvsHXrVp0ENIeyJREEikgUkC8iv4vIAEDXBjTtBsXHx9OnTx/+9re/0aRJE3bu3Mkb\nb7yhewrVHM6WRJBvHZ9RSvVRSrUFAuwYk6ZVKhaLhalTp9KiRQt+//13Jk2axIYNGwgLC3N0aJoG\n2NZ8dKxSyhcYBUzG6GLiRbtGpWmVxKFDhxg0aBDr1q3j7rvvZsaMGdSvX9/RYWnaZWxpNbTM+jIV\nuMu+4Wha5VBQUMDEiRN58803cXNzIyoqiueee053D6GVS7a2GhoEhBZf3nqtQNO0K+zatYsBAwaw\nfft2HnnkEaZMmUJIiH4Ws1Z+2XJqaDGwHlgNFNo3nHIsLxMyz0FuGuSmG0NOmjFtcgKvYPAOBq8a\n4BkE5rJ9MIzmeLm5uYwdO5bx48cTGBjIggULeOyxxxwdlqaVyJa9lYeIvHKjBSulZgMPAIkiEm6d\n9xZG7SLJuthrIrLiRsu2u8ICSNwPp7bBqa1wajskHQSx2La+MoFHNfCvB3U6Qt1OUKcTeFW8B85r\nttm4cSMDBw7kwIEDPPPMM0ycOJGAAN2mQqsYbEkEy5RS99/EDnsO8CnwxRXzPxaRCTdYlv1lnoO9\nC+HAEiMB5GcZ890DoNZt0Lwv+NUFV29w9TEGNx9jujAfMhIg/SxknIX0BGN87jBsngmbPjXKCmxk\nJIW6XaDpfeChdxQVXUZGBq+//jqTJ0+mTp06/PTTT/Tu3dvRYWnaDblmIlBKpQMCKOA1pVQuRlNS\nhfHM4ut2hCIi65RSoaUXqh3kZkDMCtj9PRxZA1II1cMg4hlj51/7NvCvD7Zc4PO7xsNZCnLh9E6I\n3wTxf8LB5bDjS+N0UsMe0OJRaNbHSCpahbJq1SoGDx5MXFwcL7zwAuPGjcPbW3fDpVU813segb1+\n0cOVUn8HtgKjrvWAG6XUYGAwQN26dUs3gvg/jSP1mBXGkb9vHeg6Alr2g+BSbtvt5Ap1OxoDgMUC\nZ3fBvkVGDeTwEDC7QuNeEP4YNL0fnN2uX6bmUCkpKYwaNYrPP/+cpk2bsn79em6//XZHh6VpN+16\nTygLFZG4a65otIOrJSInr7NMKLCs2DWCYOAcRk3jXSDEltZHpfKEMosFDq2EP/4PTkSDmx+EP2rs\n/Ot0BJMt99aVMhE4uQX2/gD7fjROJ3kEQtu/QbsBxjUGrVxZtGgRw4YNIykpidGjRzNmzBjc3HTi\n1sqnW35CGfChUsqE0WpoG8YFXjegEcb9BD2BN4FrJoIriUhCsQBnYnRvbV8FebBnPmz8xLjg61sX\n7vsA2j4NLp523/x1KQV1OhjDvePg2DrYMsuIdeMn0KQ3tB8IDe5yTKLSipw9e5bhw4ezYMEC2rRp\nw/Lly4mIiHB0WJpWKq53auhxpVQY8BQwAAgBsoADwArgvyKScyMbU0qFiMgZ6+QjwN6bitpW2+fB\n2vcg7RRUbwGPzoQWj4DZ2a6bvSkmMzS8yxhST8LWz2HbHOP0VUBD6Ph8+UheVYyIMG/ePEaOHElW\nVhbjxo3jpZdewtm5HP6GNO0mXfPU0C0XrNQ3QHegGpCAUXvoDrTBODUUBzxfLDFc002fGtrwMRxe\nDbePhEZ323bRtzwpyIX9i2HzDOMUkru/UUPo8LxuiloGjh8/zvPPP8/PP/9Mly5diIqKolmzZo4O\nS9NsZuupIbslgtJ004nAYqk8p1Ti/4Q/PjFqCGYXaNMfOg+Havph9KXtYidxr776KiLC+PHjGTZs\nGKbK8lvSqgxbE0GF+GXHxMTQvXt3YmJiAJgwYQLdu3dnwoQJl73fvXv3onUGDx5M9x49WLp0KQBL\nly6le/fuDB48uGiZi+vccLndu5d9uXU70X36af4W3YwLoffBzm+QT29j3T/q8tX7I8tfvBW03A4d\nOtC+fXteeOEFatasSXh4ODk5OZhMpnIZb4Us9+ABKMhl0ofj6NPzDj798B3ISOTIjvX89d4u9O/d\nGc4fgaQY3hrWj8g+HVj33Sdwajvrv/2YYQ+254MXHoG4P+DYel58+DZGPRLBibVzIXY1P4wfwquP\ntmXh+MFwcAWnfp3Of/7ShjF/aWM0yti3iOkjevP2463ZNvc12LOA7XP/zdh+rYj65z2w61vY+Q3j\n/tqS9/7akjM/fQQ7vmLle08z/omWrHzvadg+j7MrPuCDJ1rywRMtYdtc2DaXL0b25MP+4eya/S/Y\nNodds//FhP7hzBvZ0zjdu3U2H/UP56P+4ZxdNg62RLHqvf5MfLIFq957ArbMImHZf5n4ZAsmPtnC\nuGZ44cRN/91spftBqGBOZLuR0OE1/B75kD8nPUcbv03cmf05fH4Iz3qPoRCECnYKrBzIz88nPj6e\nuLg4vL29mTNnDomJiSxfvtzRodmVkkK8nAoIMGdCwn7Iy+A2/zTczRa841ZCxiYi8qLxq3uW8Nw1\nsDKZ6ufO8krT47iYLPDNk1CQw6jA3eS3zaL2gf9A/H+5Ky2ZDp2ScXM+AO//AoUF/HJnBmYlmL/t\nBMA/gX/eAWTuhgkf0RD4rrM1sMnGhfi3qgPVgQNvwAG4A7gjAuAQzFkDwMdtrOusHQHAY8BjrYCc\no/Dtd9QCxoZbl5n/DADPB2B0pn9sChyDCCAiDOA4LIoG4LXm1nWi3wGgN9C7GZAbD0uWUgMYffFM\n4VJj23/3A/yA+CiIh9ZA66YAJ2CZcVZjVFPrOlvfB6AX0KsJkHsSlv9EMPCvJtZllo+Cp0Jt+lve\nihJPDSmlFgJRwE8itvaxULpKpfloZZWbAdu/gE1TIO0kBDWHrv807klw0g88scWOHTuIjIxkx44d\n/OUvf2Hy5MnUqFHD0WHZTgRyLkBWMmSdvzTOTjZe51yAnFTIto4vDrlpUHAD7T2UGZzdjXtjnKzj\ni9NmV+P3dtnY1WiYYXI2TmeanayvnY3GEUWvnazTTsY2TOZL4+KvldnovsVkMsbKbFz3uzhfKevY\nBKhi0+ryeSWOuTR91ddcZbrYvP+Zf733rreOlZuv8V3ehFK7RqCUuht4DugEzAc+F5GYm4rqJulE\nYIPCfOMGtT8mQeI+8K4JHQbBbc/qriyuIScnh3feeYcPPviAoKAgpkyZwqOPPurosC4pzDe6LUk/\nYwxp1nFmEmQkQmYiZCQZ05b8q5dhcjLumXHzvTS4+13qIsXFG1y9jK5SXC6OPcHZo9jYA5w9jZ12\nRWtwUcWV+sVi68Np+gOvAyeAmcCXInKNX2Dp0YngBohA7Gqjf6Oja40jt9Z/hY5DoHrzElevKv74\n4w8iIyOJiYnhueee46OPPsLf379sg8hOgQvxcOEEpJ64NE49AamnjB08V/x/mpzBq7rRw61XdfCs\nbrQg86xu3IzoEWAM7gHGtKu33nlXYaVxQ1nxwgKBp4G/ATswHmh/O/AMRpNQrbxQyuiuonEv45xv\n9DTj4te2OcaNaZ2GGk1pTWZHR+oQ6enpvPbaa0yZMoV69erxyy+/0KtXL/tsTMQ4oj8fCynHIPlY\nsXGcccqmOCd3o88q39pQo6VRq/MJKTYOMXbueseulTJbTg0tApoC84A5xdv9K6W22pJtbpWuEdyi\nzPOwfY7Rv1L6GfCpDW2ehLZPgX+oo6MrMz///DODBw/mxIkTjBgxgrFjx+Ll5XXrBedlGj3Nnjtk\n7PTPxxrT549Afual5UxORg+2/qFGZ4b+oUY3Ir51jPl6J6+VstK8RnCXiPxWapHdBJ0ISklhPhxc\nZtxxfWQNIFC/m9G3UfO+lbazu+TkZP71r38xd+5cmjdvTlRUFJ07dy55xSvlpEJSjNFVSVLMpSE1\nvthCytipV2tsdDse2AgCG0JAAyMB6wcWaWWoNBPB1a6epQJ7RCTxJuO7IToR2MGFE7Dza9j5pXGe\n2s3XSAbNHzSSQyVJCgsWLOAf//gHycnJvPLKK7zxxhu4upbQAiM3w9jBJ+43dvqJB4xx2qlLyzi5\nQWBjCGoCQc2gWhMIamoc6VeS706r+EozESwHOgMXawXdMTqhqw+8IyLzbi3UkulEYEcWC8Stgx1f\nGb2z5qYZrUca32Mkhsa9jAuOFcyZM2d44YUXWLhwIREREURFRdGmTZvLF8rPNk7nJB6EpAPGDj9x\nv5EYL3JyM3by1ZsbO/zqzY0dvl+9KnudRas4SvNisTPQ/GLPodaupL8AOgLrMK4daBWVyQQNuhtD\nQa7RA+qBpcYDdPYtNNqD1+sC9bpCaFeoGVGuj3hFhDlz5vCvf/2LnJwc3n//ff71j0E4pcbBru+M\nHX5SjLHTT4mjqFWOydk4nVO7PUT83XhAUVAz4zy+3uFrlZwtNYL9IhJWbFoB+0QkTCm1Q0Ta2jtI\nXSNwAEuh9Ylqy+Do78a9CWAkhtrtjeRQp4Oxs/St7fiLnHlZnNr/J1Pfe4XM+N10D69Fr4j6eGSd\nMi6QX2RyNs7bBzU1Yg9qauz0AxuWz15pNe0WlGaNYK1SahnGzWRg3MG9VinlCVy49mpahWYyGzWA\n0K7GdFaykRiO/2EM6yfAxRvNXbwunSMPamqcO/cKtrZvD7q1rrNFjIu0RTdQJRrt69PPQMpxuBCP\nXIhHZSYaXQk0B5q7IW6FKGdlNJmtZr1oG9TMuGird/iadhlbagQKeBTjvgGAP4AfpAy7LdU1gnIo\nJw0S9hVrQWMdp5/+32WdPYyE4FnNqFGYnazdChTrbqAgz2hqmZ8NeVmXXmenQGHe/5Zpcgbf2mQ4\nB7JmeyzRh87iW68lfx8xhhphXcEz0P7fgaaVc6VSI1BKmYHVInIX8ENpBadVAm4+UK+zMRSXkwrJ\nRy91fXDZcM7YqRfmGzt7S4ExFOYb/dM4exq1C6/gS10buPla7569/G7afGdv3v9wAu+++y5eXl5M\nmhTFU089hXL0KSpNq4CumwhEpFApZVFK+YpIalkFpVVgbr5Q076XjbZt28aAAQPYvXs3/fr1Y/Lk\nyVSvXt2u29S0ysyWawQZwB6l1Cqg6DZJERlht6g07Sqys7N56623mDBhAsHBwSxatIiHH37Y0WFp\nWoVnSyJYaB00zWHWrVvHwIEDOXz4MAMHDuTDDz/Ez8/P0WFpWqVQYiIQkblKKXegbll3P61paWlp\nvPrqq0ydOpX69euzevVqevbs6eiwNK1SKfFRlUqpvsBOYKV1uo1Saom9A9O0FStW0KJFC6ZNm8aL\nL77Inj17dBLQNDuw5ZnFbwEdsN4zICI7gQZ2jEmr4s6dO8fTTz9Nnz598PHxYePGjUycOBFPz1u4\nH0HTtGuyJRHkX6XFkEMeWalVbiLCt99+S1hYGN999x1jxoxh+/btdOrUydGhaVqlZsvF4n1KqScB\ns1KqMTAC2GjfsLSq5vTp0wwdOpQlS5bQrl07Vq9eTatWrRwdlqZVCbbUCIYDLYBc4BsgDRhpz6C0\nqkNEmDVrFmFhYfzyyy9MmDCBTZs26SSgaWXIllZDWRjPKX79RgpWSs0GHgASRSTcOi8A+A4IBeKA\nfiKScmMha5XF0aNHGTRoEGvWrKFbt27MmjWLRo0aOTosTatybGk11EQpNUMp9YtSas3FwYay5wC9\nr5j3KvCriDQGfrVOa1VMYWEhH3/8MeHh4WzZsoXp06ezZs0anQQ0zUFsuUYwH5gGzAIKbS1YRNYp\npUKvmP0Qlx52PxdYC7xia5laxbdv3z4iIyOJjo6mT58+TJs2jdq1azs6LE2r0mxJBAUiMrWUthcs\nIhc7hz8LBF9rQaXUYGAwQN26dUtp85qj5OXlMX78eMaOHYuvry9ff/01TzzxhO4kTtPKAVsuFi9V\nSg1TSoUopQIuDre6YWs31tfsylpEZohIOxFpFxQUdKub0xxoy5Yt3Hbbbbz55pv85S9/Yf/+/fTv\n318nAU0rJ2ypETxjHb9cbJ5wczeVJSilQkTkjFIqBEi8iTK0CiIrK4sxY8bw8ccfExISwpIlS+jb\nt6+jw9I07Qq2tBqqX4rbW4KRWMZbx4tLsWytHFm7di0DBw7kyJEjPP/887z//vv4+vo6OixN067i\nmqeGlFKji71+/Ir3xpVUsFLqG2AT0FQpdVIpFYmRAHoppQ4Dd1untUokNTWV559/nrvuuguANWvW\nMG3aNJ0ENK0cu941gieKvf73Fe9d2Sz0f4hIfxEJERFnEaktIlEicl5EeopIYxG5W0SSbypqrVxa\ntmwZLVq0YNasWbz00kvs3r27KCFomlZ+XS8RqGu8vtq0VoUlJSXx5JNP0rdvX/z9/dm0aRMffvgh\nHh4ejg5N0zQbXC8RyDVeX21aq4JEhK+//prmzZuzYMEC3n77bbZt20aHDh0cHZqmaTfgeheLWyul\n0jCO/t2tr7FOu9k9Mq1cO3nyJEOHDmXZsmV07NiRqKgoWrRo4eiwNE27CddMBCJiLstAtIrBYrEw\nc+ZMXn75ZQoKCpg4cSIjRozAbNY/F02rqGy5j0DTAIiNjWXQoEGsXbuWHj16MGPGDBo2bOjosDRN\nu0W23FmsVXEFBQVMmDCBli1bsmPHDmbNmsXq1at1EtC0SkLXCLTr2rNnDwMGDGDr1q089NBDfPbZ\nZ9SsWdPRYWmaVop0jUC7qtzcXN58800iIiI4fvw43333HYsWLdJJQNMqoQpRI4iJiaF79+5Mnz6d\npk2bMmHCBJYtW8YDDzzASy+9RExMDM8//zxgdG0AMHjwYA4dOsSoUaPo27cvS5cu5aOPPqJJkybM\nmDEDgO7duwPocq8od/jw4cyePZusrCyefvpp/vGPf/Dqq6/y2Weflct4K0q506ZNo1HjJnw48WNW\nrPyFXvf2ZtDzQzh0+Aiv/ec/CCaiPp9DoUV4d+x/OX7iJH99oj8dO3fmj42bmL/gB2rVrsOwf7xA\noUV4Y8wYQBE5aBA1aoSwbPlydu7cRas2bbj33ns5feYsX375FaIUL44ciUXgm2++ITEpie533UVY\nWAv27tvH77+vo1pQEI899hgiMH3GdEDx8MMPU61aNTZs2MDBmBiaNm1Gly5dOXf+HEuXLAXgmWef\nRYBly5Zy/nwynTt1pkmTxhw6dJhNf24iMDCQPn36IALz5s0D4L777ycwMIA//4wmNvYwjRo1pmPH\njpxPTmblTz8B8ORTTwGw8qefSE5OpkOHjjRq3IjYw7Fs3hxNQEAAve+7DxH4+uuvAejd+14CAgLZ\nvDma2NgjNGrUkA4dOpKcfJ6VK382yn3ySaPclSut5XagUaNGxMbGsnnzZqPc3sb9siWVe/78eX7+\nxSi3f//+APy88meSU5Lp0L4DDRs15EjsETZv2UyAfwD39r4XMP4GAPfecy8BgQFs2byZ2CNHaNSw\nIe07dCD5fPJl5fZrV4f3X//XTf1+bVUhEoFWNrKysnjxxRf59NNPcXFxYcCAAURFRRETE+Po0OxO\nRLCYnLGYXYi/kEdmfArxeZ5k+jfmYI4P8/48zvGTKaTU7oqYnPnPj3vIybewy7MdaU1aMHmvYs7J\njSSeU5xt9SwJru50fu9XcgsspLT/J6JM9J5zBDgCNIP2zZidDLPfsz7jqc0gAO6btN6Y9u0GvjBp\nL7A3GjBB88dJBAZ9sdVYpslDAIz/PQFIAGpBo1qsyYA1P+wxlmlwDwBvLN5nTHu2Ak9YeAwWHjtg\nlFuvOynA+J8OGsvU7QbAnO3JQDJQHepUJzoLolcfMpap0xWASb8eNqbdm0FtWHkSfj4VCwJSqzOp\nwJTfYgGw1OoIwPd7UjCpC1gsgVhC/NmRbWL3+qOICAUh7QEhav0xAPLdGiIhDfjtNPx+9hgWCxSE\ntCNNqaJl8kJuA2DR/lSUSqOwIIDCED92ZZvY+8cxRIR86zKz/zDWKXBrgCWkPmtPw7qEY1gKoSDk\nNjKUKlrGlnILakQY39UfcdZ4GyA1Qvn9DKxPiDPirRFBhjIVLZNnXWfxAaPcgoIALDV82ZVtZt8f\ncUa8xcrt2rDatX+4pUQZvUGXb+3atZOtW7c6OoxK7ddff2XQoEEcO3aMYcOG8d577+Hj4+PosG5K\nXoGF5Mw8zmXkkpyZx/nMXM5n5HEhK58L2cY4NTufC1n5pGTlkZ5TQEZuAYUW2/4X3J3NuLuYcXMy\n4eZixs3JOu1swtXJjKuTCRcnU9HYxWy2jhXOZhPOTiZjbJ02mxTOZoWTyYSTSeFkNmE2gdk6bVIK\nJ7MxNpsUZqUwmSh6rZTCpIxpk1IoBSZ16fXFaQWX5qFQJuOmIGV9r2i+td+A/5kutuzF97HO08on\npdQ2EWlX0nKVukZwNCmD7PxCWtTUHZ5dy4ULF3jppZeIioqicePG/P7779x5552ODuuqLBYhKSOX\nUxeyOXMhh4S0HBLSc0hKyyUhPYeEtFwS03JIyym46vomBX4eLvi5O+Pr4Uw1LxcaBnni4+6Mt5sT\n3m6Xj71cnfB0ccLDxYyHqxlPFyfcnc2YTHrHp1UulToRfPLrYX7ceZpeYcGM6NGYlrV1Qijuxx9/\nZNiwYSQmJvLKK6/w5ptv4u7u7rB4RITE9Fzik7M4fj6L+OQsTqZkcSolm9Op2ZxNzSG/8PKjdhez\nieo+rgT7uNG4uhddGwZSzcuVAC8XAj1dCfRyIdDTeO3t5qR34pp2FZU6Ebz9UDj1q3kRteEoffcn\n0KNZdUb0bEybOn6ODs2hEhISGD58OPPnz6d169YsXbqU2267rcy2n5yZx9GkDI4mZXIkKYOj5zI5\nfj6T+OQscvItRcuZFNTwcaOWvzsRdf2p6edOLetQw9eNGj5u+Hk461MTmnaLqsQ1gvScfL7YdJyZ\n649yISufbk2CGNGzEbfVu+UnblYoIsKXX37JyJEjycjIYMyYMYwePRpnZ2e7bCspI5dDZzM4lJDO\n4cR0DiVkcCQpgwtZ+UXLuZhN1Av0ILSaJ/UCPKgb6EHdAA/qBXpSy88dFyfdwlnTbpat1wiqRCK4\nKCO3gHnWhJCcmUfbun482yWU+1uG4Gyu3Duc+Ph4hgwZwk8//UTnzp2JioqiefPmpVJ2dl4hMQnp\nHDiTxoEzaRw8m86hhPTLdvj+Hs40DvamUXUvGlTzpGGQFw2CPKnt74FZn67RNLvQieA6svIK+H7L\nCeZsjCPufBbBPq78rVM9+neoS6CXa6ltpzywWCxMmzaNV155BRHhvffeY9iwYTfdSVxSei77Tqey\n73Qa+607/rhzmVxscOPpYqZpDW+a1vChSbAXTYO9aRzsTTUvF30KR9PKmE4ENrBYhLWHEvn8jzjW\nHz6Hi5OJh9vUpF+7OtxWz7/C77gOHTrEwIEDWb9+Pb169WLGjBmEhobatK6IcOpCNntPpRXt+Ped\nTiUhLbdomToB7jSv4UPzEGMIC/Ghtr+7viCraeWEbj5qA5NJ0aNZMD2aBXM4IZ05G+NYuP0U3289\nSW1/dx5qU5OH29SicbC3o0O9IQUFBXz00UdFrYA+//xznnnmmWsmNotFOJ6cxd5Tqew9ncq+U2ns\nPZ1adGrHpKBRdS+6NKxGi5o+tKjpS1hNH3zdS//agqZpZa9K1wiuJiO3gF/2neXHnafZcDgJi0BY\niA8Pt63JPWE1qBfoUa5rCrt27WLAgAFs376dRx55hClTphASElL0fl6BhUMJ6ey3ntrZdzqVA2fS\nycg12t47mxVNa3gTXtOXFrV8Ca/pQ7MaPri76OcNaFpFo08NlYKk9FyW7T7NjztPs+vEBQBq+blz\ne6Nq3N64Gl0aBv5/e/ceXEWZ5nH8+wPkkhDuFxkFRRQwwggMl1HJyKzLjCi1ztS45eA44yWAU8Cw\nLk6Vw66LZUlRQxW4igwipBDXkoVVhEXuF2URASMwGMJF7s6AsCYMcjMYkjz7R3fwkAU5QM7pJOf5\nVJ1Kd58+3c9LQj/99tvn6SozpnDmzBnGjh3L+PHjad68Oa+8Mpk7+9/PZ0eCwdvPwtfeglPn7sVP\nq1ubW9s0Cs/ygzP9jq0z/E4d52oITwSV7POjp1mzu5C1uwtYt/coJ8Nvr2a2aUTv9s3CAdIMOrXO\nIFFve9sAAA7oSURBVL1e8q64FRWXMn/VRzw34U98WSQ69cqi5U1d+PzYmXMxAnyvcf1zg7jlB/4b\nm6f79XznajBPBAlUUlpG/hcn+GhPIR/uLmDrweOcLi49937bZg3o1LoRHVql07JhPVpm1KN5ej1a\nZNSlRcN6NE2re9FbJs2MM2fLOPnN2aAGzpkSTp4pofDUNxw+foYjx4uCnyfO8MVXRRSeKj7v899r\nXJ/2LdO5qUVDOl6bQedrM+jYOsOv5zuXgjwRJFFZWXCHzc4jJ9l5+AQ7/ze4DPP50dP/ryRCufIi\nYVJQOCyYDs7wS76j+Fmj+nVo07gB15ScIj93LV99sZ97enVh9IgnyGzXkrS6KT3+75yLUaXvGpJ0\nADgJlAIl8QRaldWqJdo2S6NtszT6Z7Y+t9zMOFFUQsGpbygMX0dPFfO308WUlhmlZpSZUVZmlJZB\nmRlpdWuTUf8aGtavQ0a9OueKn7XIqMe1jerzzekTPP3008ycOZNOnTqxMCeHvn37Rth651x1F+Xp\n44/NrDDC/SecJBqnBZUub27V8Kq3N3fuXIYPH05hYSGjR49mzJgx1K9fvxIidc6lMr+OUA0cOXKE\nESNGMHfuXLp168aSJUvo3r171GE552qIqO4TNGClpE2Shl5oBUlDJW2UtLGgoCDJ4VUNZsbMmTPJ\nzMxk4cKFjBs3jtzcXE8CzrlKFVWPoK+ZHZLUClghaaeZrYldwcymAdMgGCyOIsgoHThwgCeffJLl\ny5dz1113kZOTQ+fOnaMOyzlXA0XSIzCzQ+HPL4F5QO8o4qiKysrKeOWVV+jSpQvr1q1j8uTJrFmz\nxpOAcy5hkp4IJKVLyiifBn4C5Cc7jqpox44dZGVlMXLkSLKyssjPz2f48OHUquXf9HXOJU4UR5jW\nwFpJnwK5wCIzWxpBHFXG2bNnGTduHN26dWPnzp288cYbLF68mBtuuCHq0JxzKSDpYwRmtg+4Pdn7\nrao2b95MdnY2W7Zs4cEHH2Ty5Mm0bt360h90zrlK4tccIlJUVMTo0aPp3bs3R44cYe7cubz99tue\nBJxzSeffI4jA2rVryc7OZteuXTz++ONMnDiRpk2bRh2Wcy5FeY8giU6ePMmIESPIysqiuLiY5cuX\nM2PGDE8CzrlIeSJIkqVLl9KlSxemTJnCyJEj2bp1K/379486LOec80SQaEePHuXRRx9lwIABpKWl\nsXbtWl5++WUaNrz62kPOOVcZPBEkiJnxzjvvkJmZyaxZs3j22WfZsmULd955Z9ShOefceXywOAEO\nHz7M8OHDmTdvHj169GDZsmV069Yt6rCcc+6CvEdQicyM119/nczMTJYsWcL48eP5+OOPPQk456o0\n7xFUkv379zN06FBWrlxJVlYWOTk5dOzYMeqwnHPukrxHcJVKS0uZNGkSXbp0YcOGDUyZMoXVq1d7\nEnDOVRveI7gK27dvZ/Dgwaxfv54BAwYwdepU2rVrF3VYzjl3WbxHcAXOnj3L2LFj6d69O7t27eLN\nN99k0aJFngScc9WS9wgu06ZNm3jiiSfIy8vjoYceYtKkSbRq1SrqsJxz7op5jyBORUVFPPPMM/Tu\n3ZuCggLmz5/P7NmzPQk456o97xHEYc2aNQwePJjdu3eTnZ3NhAkTaNKkSdRhOedcpfAewXc4ceIE\nw4YN4+6776a0tJSVK1eSk5PjScA5V6N4IriIxYsXc9ttt/Haa68xatQo8vLyuOeee6IOyznnKp0n\nggoKCwt55JFHuP/++2nUqBHr1q1j4sSJpKenRx2ac84lhCeCkJkxZ84cMjMzmTNnDmPGjGHz5s30\n6dMn6tCccy6hfLAYOHToEMOGDWPBggX06tWLVatW0bVr16jDcs65pEjpHoGZMX36dDIzM1mxYgUT\nJkxg/fr1ngSccyklZXsEe/fuZciQIXzwwQf069eP6dOnc/PNN0cdlnPOJV3K9QhKS0t58cUX6dq1\nK5s2bWLatGm8//77ngSccykrpXoE+fn5ZGdnk5uby8CBA3n11Ve5/vrrow7LOeciFUmPQNK9kj6T\ntEfSHxK9v+LiYp5//nl69OjBvn37mDVrFgsWLPAk4JxzRNAjkFQb+BPQHzgIfCJpgZltT8T+cnNz\nyc7OJj8/n4cffpiXXnqJli1bJmJXzjlXLUXRI+gN7DGzfWZWDMwGHkjEjsaOHcsdd9zBsWPHeO+9\n93jrrbc8CTjnXAVRJILrgL/GzB8Ml51H0lBJGyVtLCgouKIddejQgSFDhrBt2zYGDhx4ZdE651wN\nV2UHi81sGjANoGfPnnYl2xg0aBCDBg2q1Licc66miaJHcAhoGzN/fbjMOedcBKJIBJ8At0hqL6ku\n8EtgQQRxOOecI4JLQ2ZWImkEsAyoDcwws23JjsM551wgkjECM1sMLI5i3845586XciUmnHPOnc8T\ngXPOpThPBM45l+I8ETjnXIqT2RV9VyupJBUAn1/hx1sAhZUYTnXgbU4N3ubUcDVtvsHMLllXp1ok\ngqshaaOZ9Yw6jmTyNqcGb3NqSEab/dKQc86lOE8EzjmX4lIhEUyLOoAIeJtTg7c5NSS8zTV+jMA5\n59x3S4UegXPOue/gicA551JcjUkEku6V9JmkPZL+cIH3JWlS+H6epB5RxFmZ4mjzr8K2bpW0TtLt\nUcRZmS7V5pj1ekkqkfRgMuOrbPG0V1I/SVskbZP0P8mOsbLF8XfdWNJ7kj4N2/x4FHFWJkkzJH0p\nKf8i7yf2+GVm1f5FUM56L3ATUBf4FMissM59wBJAwA+Bj6OOOwltvhNoGk4PSIU2x6z3PkGF2wej\njjvBv+MmwHagXTjfKuq4k9DmfwHGh9Mtgb8BdaOO/Srb/SOgB5B/kfcTevyqKT2C3sAeM9tnZsXA\nbOCBCus8APyHBTYATSS1SXagleiSbTazdWZ2LJzdQPA0uOosnt8zwO+AucCXyQwuAeJp78PAu2b2\nFwAzS4U2G5AhSUBDgkRQktwwK5eZrSFox8Uk9PhVUxLBdcBfY+YPhssud53q5HLbk01wRlGdXbLN\nkq4Dfg68msS4EiWe33FHoKmk1ZI2SfpN0qJLjHjaPBm4FfgC2Ar8k5mVJSe8yCT0+FVlH17vKo+k\nHxMkgr5Rx5IELwHPmFlZcMJY49UBfgDcAzQA1kvaYGa7og0roX4KbAH+DugArJD0oZmdiDas6qum\nJIJDQNuY+evDZZe7TnUSV3skfR/IAQaY2dEkxZYo8bS5JzA7TAItgPsklZjZ/OSEWKniae9B4KiZ\nnQZOS1oD3A5U10QQT5sfB/5owcXzPZL2A52B3OSEGImEHr9qyqWhT4BbJLWXVBf4JbCgwjoLgN+E\no+8/BI6b2eFkB1qJLtlmSe2Ad4Ff15AzxEu22czam9mNZnYj8A4wrJomAYjv7/q/gb6S6khKA/oA\nO5IcZ2WKp81/IegBIak10AnYl9Qoky+hx68a0SMwsxJJI4BlBHcdzDCzbZJ+G74/leAOkvuAPcDX\nBGcV1VacbR4DNAemhGfIJVaNKzfG2eYaI572mtkOSUuBPKAMyDGzC96CWB3E+Tt+AZgpaSvBXTTP\nmFm1Lk0t6T+BfkALSQeB54BrIDnHLy8x4ZxzKa6mXBpyzjl3hTwROOdcivNE4JxzKc4TgXPOpThP\nBM45l+I8EbhISCqNqZj5qaSnJdUK3+spadIVbveApBaVG23lk3SjpIe/4/02khaG049JmnyZ247r\nFlJJIyQ9Ee+2Xc3kicBFpcjMupnZbUB/guqozwGY2UYzGxlpdIl3I0HBuIsZBUxPZACS6gAzCIr0\nuRTmicBFLqyYORQYEX5zsl/M2fDdYc9hi6Q/S8oI318jaVFYt35qeW8ilqT5YSG2bZKGxiy/V9Lm\nsCeyKlyWHtaEzw3380C4/LFwOyvC3sYISaPCdTZIahau10HS0nB/H0rqHC6fqaCO/DpJ+/Tt8xH+\nCGSF7frnC/yz/AJYGjPfNiwst1vSczFtGSUpP3w9FbN+bUnTw7Yvl9QgXH+1pJckbSQo1vY1cEBS\n78v7rbkaJeo63P5KzRdw6gLLvgJaE3zDcmG47D3grnC6IcG34fsBZwhq1tcGVhA+dwA4ALQIp5uF\nPxsA+QTfsm5JUMWxfYV1xgGPhNNNCGr1pAOPEXybMyP87HHgt+F6/w48FU6vAm4Jp/sA74fTM4G3\nCU66MglKLBPbxgv8O7QHNsXMPwYcDuMvb0tPgmJzW8M4GwLbgO4EvY0SoFv4+f+KadtqYEqF/f0r\n8HTUfxP+iu5VI0pMuBrtI+BFSW8R1N0/GJbLyDWzfXDu6/l9CWoLxRop6efhdFvgFoKD+Roz2w9g\nZuU14H8C/IOk34fz9YF24fQHZnYSOCnpOEFyguAg/H1JDQkeAvS2vq14Wi8mjvkWlEneHtbGuZQ2\nQEGFZSssLBoo6d2wvQbMs6DgXPnyLIK6NPvNbEv42U0EyaHcnArb/pKgaJtLUZ4IXJUg6SaglOCg\ndGv5cjP7o6RFBHVWPpL00/K3KmzivHlJ/YC/B+4ws68lrSY4uF80BOAXZvZZhe30Ab6JWVQWM19G\n8H+oFvCVmXW7yLZjPx9PbeyiC8T6ne29xD5LCXoS5U5XWLd+uE+XonyMwEVOUktgKjDZzCoe0DuY\n2VYzG09QmbL8zLW3ggqVtYCHgLUVNtsYOBYmgc4Ej/eD4EltP5LUPtx+s3D5MuB3Ck/pJXWPN34L\n6uDvl/SP4WelSz8f+iTB5aYL2cX5Z/AA/SU1C6/1/4ygp/Qh8DNJaZLSCR7I82G8ccfoSHC5yaUo\nTwQuKg3Kbx8FVgLLgecvsN5T4UBoHnCWb5+y9gnBk6p2APuBeRU+txSoI2kHwcDsBgAzKyAYmH5X\n0qd8e5nkBYJqj3lhTC9cZnt+BWSH29zGhR+hGSsPKA0HrM8bLA4v9eyVdHPM4lyCx2/mAXMtuLNq\nM8EYRC7wMUHl0T9fZtwAdxGMs7gU5dVHXbUTXvb5vZkNjDqWRAnHNn5gZs8meD/dgVFm9utE7sdV\nbT5G4FwVZGbzJDVPwq5aAP+WhP24Ksx7BM45l+J8jMA551KcJwLnnEtxngiccy7FeSJwzrkU54nA\nOedS3P8B8YfJNLWy9zwAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def triangular(x,F=30): return F*x\n", "\n", "tw = Schrod1d(triangular,m=10)\n", "tw.plot()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Or we can combine the two, making something like a semiconductor quantum well with a top gate:" ] }, { "cell_type": "code", "execution_count": 212, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def tri_finite(x): return finite_well(x)+triangular(x,F=0.025)\n", "\n", "tfw = Schrod1d(tri_finite,start=0,end=30,npts=100)\n", "tfw.plot()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There's a lot of philosophy behind object oriented programming. Since I'm trying to focus on just the basics here, I won't go into them, but the internet is full of lots of resources on OO programming and theory. The best of this is contained in the [Design Patterns](http://en.wikipedia.org/wiki/Design_Patterns_(book)) book, which I highly recommend." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "# IV. Speeding Python: Timeit, Profiling, Cython, SWIG, and PyPy\n", "\n", "The first rule of speeding up your code is not to do it at all. As Donald Knuth said:\n", "\n", "> \"We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.\"\n", "\n", "The second rule of speeding up your code is to only do it if you really think you need to do it. Python has two tools to help with this process: a timing program called **timeit**, and a very good code profiler. We will discuss both of these tools in this section, as well as techniques to use to speed up your code once you know it's too slow.\n", "\n", "## Timeit\n", "**timeit** helps determine which of two similar routines is faster. Recall that some time ago we wrote a factorial routine, but also pointed out that Python had its own routine built into the math module. Is there any difference in the speed of the two? **timeit** helps us determine this. For example, **timeit** tells how long each method takes:" ] }, { "cell_type": "code", "execution_count": 213, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The slowest run took 4.71 times longer than the fastest. This could mean that an intermediate result is being cached.\n", "100000 loops, best of 3: 13.1 µs per loop\n" ] } ], "source": [ "%timeit factorial(20)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The little % sign that we have in front of the timeit call is an example of an IPython magic function, which we don't have time to go into here, but it's just some little extra mojo that IPython adds to the functions to make it run better in the IPython environment. You can read more about it in the [IPython tutorial](http://ipython.org/ipython-doc/dev/interactive/tutorial.html).\n", "\n", "In any case, the timeit function runs 3 loops, and tells us that it took on the average of 583 ns to compute 20!. In contrast:" ] }, { "cell_type": "code", "execution_count": 214, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100000 loops, best of 3: 4.57 µs per loop\n" ] } ], "source": [ "%timeit fact(20)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "the factorial function we wrote is about a factor of 10 slower. This is because the built-in factorial function is written in C code and called from Python, and the version we wrote is written in plain old Python. A Python program has a lot of stuff in it that make it nice to interact with, but all that friendliness slows down the code. In contrast, the C code is less friendly but more efficient. If you want speed with as little effort as possible, write your code in an easy to program language like Python, but dump the slow parts into a faster language like C, and call it from Python. We'll go through some tricks to do this in this section." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Profiling" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Nota: En cada compu corre distinto, y no se si hubo cambios de performance entre Python 2 y 3, o desde cuando se hizo originalmente esta guia. Lo que importa es la idea, pero los numeros a los que se refiere no los estaría viendo.\n", "\n", "Profiling complements what **timeit** does by splitting the overall timing into the time spent in each function. It can give us a better understanding of what our program is really spending its time on.\n", "\n", "Suppose we want to create a list of even numbers. Our first effort yields this:" ] }, { "cell_type": "code", "execution_count": 215, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def evens(n):\n", " \"Return a list of even numbers below n\"\n", " l = []\n", " for x in list(range(n)):\n", " if x % 2 == 0:\n", " l.append(x)\n", " return l" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Is this code fast enough? We find out by running the Python profiler on a longer run:" ] }, { "cell_type": "code", "execution_count": 216, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 50004 function calls in 0.029 seconds\n", "\n", " Ordered by: standard name\n", "\n", " ncalls tottime percall cumtime percall filename:lineno(function)\n", " 1 0.026 0.026 0.028 0.028 :1(evens)\n", " 1 0.001 0.001 0.029 0.029 :1()\n", " 1 0.000 0.000 0.029 0.029 {built-in method builtins.exec}\n", " 50000 0.003 0.000 0.003 0.000 {method 'append' of 'list' objects}\n", " 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}\n", "\n", "\n" ] } ], "source": [ "import cProfile\n", "cProfile.run('evens(100000)')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This looks okay, 0.05 seconds isn't a *huge* amount of time, but looking at the profiling shows that the **append** function is taking almost 20% of the time. Can we do better? Let's try a list comprehension." ] }, { "cell_type": "code", "execution_count": 217, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def evens2(n):\n", " \"Return a list of even numbers below n\"\n", " return [x for x in list(range(n)) if x % 2 == 0]" ] }, { "cell_type": "code", "execution_count": 218, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 5 function calls in 0.018 seconds\n", "\n", " Ordered by: standard name\n", "\n", " ncalls tottime percall cumtime percall filename:lineno(function)\n", " 1 0.003 0.003 0.017 0.017 :1(evens2)\n", " 1 0.014 0.014 0.014 0.014 :3()\n", " 1 0.001 0.001 0.018 0.018 :1()\n", " 1 0.000 0.000 0.018 0.018 {built-in method builtins.exec}\n", " 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}\n", "\n", "\n" ] } ], "source": [ "import cProfile\n", "cProfile.run('evens2(100000)')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "By removing a small part of the code using a list comprehension, we've doubled the overall speed of the code! \n", "\n", "It seems like **range** is taking a long time, still. Can we get rid of it? We can, using the **xrange** generator:\n", "\n", "Nota: recuerden que xrange es una funcion de Python 2 que no existe más en Python 3. En la parte de generadores lo mencioné. Cambié el codigo para que corra en Python 3." ] }, { "cell_type": "code", "execution_count": 219, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "def evens3(n):\n", " \"Return a list of even numbers below n\"\n", " return [x for x in range(n) if x % 2 == 0]" ] }, { "cell_type": "code", "execution_count": 220, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 5 function calls in 0.017 seconds\n", "\n", " Ordered by: standard name\n", "\n", " ncalls tottime percall cumtime percall filename:lineno(function)\n", " 1 0.000 0.000 0.016 0.016 :1(evens3)\n", " 1 0.016 0.016 0.016 0.016 :3()\n", " 1 0.001 0.001 0.017 0.017 :1()\n", " 1 0.000 0.000 0.017 0.017 {built-in method builtins.exec}\n", " 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}\n", "\n", "\n" ] } ], "source": [ "import cProfile\n", "cProfile.run('evens3(100000)')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This is where profiling can be useful. Our code now runs 3x faster by making trivial changes. We wouldn't have thought to look in these places had we not had access to easy profiling. Imagine what you would find in more complicated programs." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Other Ways to Speed Python\n", "\n", "When we compared the fact and factorial functions, above, we noted that C routines are often faster because they're more streamlined. Once we've determined that one routine is a bottleneck for the performance of a program, we can replace it with a faster version by writing it in C. This is called *extending* Python, and there's a [good section in the standard documents](http://docs.python.org/2/extending/extending.html). This can be a tedious process if you have many different routines to convert. Fortunately, there are several other options.\n", "\n", "[Swig](http://swig.org/) (the simplified wrapper and interface generator) is a method to generate binding not only for Python but also for Matlab, Perl, Ruby, and other scripting languages. Swig can scan the header files of a C project and generate Python binding for it. Using Swig is substantially easier than writing the routines in C.\n", "\n", "[Cython](http://www.cython.org/) is a C-extension language. You can start by compiling a Python routine into a shared object libraries that can be imported into faster versions of the routines. You can then add additional static typing and make other restrictions to further speed the code. Cython is generally easier than using Swig.\n", "\n", "[PyPy](http://pypy.org/) is the easiest way of obtaining fast code. PyPy compiles Python to a subset of the Python language called RPython that can be efficiently compiled and optimized. Over a wide range of tests, PyPy is [roughly 6 times faster than the standard Python Distribution](http://speed.pypy.org/).\n", "\n", "[Numba](http://numba.pydata.org/) compila las funciones a código de maquina. No van a necesitar nada de esto por lo pronto, pero cuando realmente necesiten mejorar la velocidad más alla de lo que se puede hacer en Python, les recomiendo que prueben esta opción." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Fun: Finding Primes\n", "\n", "[Project Euler](http://projecteuler.net) is a site where programming puzzles are posed that might have interested Euler. [Problem 7](http://projecteuler.net/problem=7) asks the question:\n", "\n", "> By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.\n", "> \n", "> What is the 10,001st prime number?\n", "\n", "To solve this we need a very long list of prime numbers. First we'll make a function that uses the Sieve of Erastothenes to generate all the primes less than n." ] }, { "cell_type": "code", "execution_count": 221, "metadata": { "collapsed": false }, "outputs": [ { "ename": "NotImplementedError", "evalue": "", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNotImplementedError\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 3\u001b[0m \u001b[0;31m# Implementenla ustedes, que sino no es divertido ;)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mprimes\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;32m\u001b[0m in \u001b[0;36mprimes\u001b[0;34m(n)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mprimes\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mNotImplementedError\u001b[0m \u001b[0;31m# Cuando llaman a esta función, tira un error para avisar que no fue implementada.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;31m# Implementenla ustedes, que sino no es divertido ;)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mprimes\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[0;31mNotImplementedError\u001b[0m: " ] } ], "source": [ "def primes(n):\n", " raise NotImplementedError # Cuando llaman a esta función, tira un error para avisar que no fue implementada.\n", " # Implementenla ustedes, que sino no es divertido ;)\n", " \n", "primes(10)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "# VII. References\n", "\n", "## Learning Resources\n", "* [Official Python Documentation](http://docs.python.org/2.7), including\n", " - [Python Tutorial](http://docs.python.org/2.7/tutorial)\n", " - [Python Language Reference](http://docs.python.org/2.7/reference)\n", "* If you're interested in Python 3, the [Official Python 3 Docs are here](http://docs.python.org/3/).\n", "* [IPython tutorial](http://ipython.org/ipython-doc/dev/interactive/tutorial.html).\n", "* [Learn Python The Hard Way](http://learnpythonthehardway.org/book/)\n", "* [Dive Into Python](http://www.diveintopython.net/), in particular if you're interested in Python 3.\n", "* [Invent With Python](http://inventwithpython.com/), probably best for kids.\n", "* [Python Functional Programming HOWTO](http://docs.python.org/2/howto/functional.html)\n", "* [The Structure and Interpretation of Computer Programs](http://mitpress.mit.edu/sicp/full-text/book/book.html), written in Scheme, a Lisp dialect, but one of the best books on computer programming ever written.\n", "* [Generator Tricks for Systems Programmers](http://www.dabeaz.com/generators/) Beazley's slides on just what generators can do for you.\n", "* [Python Module of the Week](http://pymotw.com/2/contents.html) is a series going through in-depth analysis of the Python standard library in a very easy to understand way.\n", "\n", "## Badass IPython Notebooks\n", "* Rob Johansson's [excellent notebooks](http://jrjohansson.github.io/), including [Scientific Computing with Python](https://github.com/jrjohansson/scientific-python-lectures) and [Computational Quantum Physics with QuTiP](https://github.com/jrjohansson/qutip-lectures) lectures;\n", "* [XKCD style graphs in matplotlib](http://nbviewer.ipython.org/url/jakevdp.github.com/downloads/notebooks/XKCD_plots.ipynb);\n", "* [A collection of Notebooks for using IPython effectively](https://github.com/ipython/ipython/tree/master/examples/notebooks#a-collection-of-notebooks-for-using-ipython-effectively)\n", "* [A gallery of interesting IPython Notebooks](https://github.com/ipython/ipython/wiki/A-gallery-of-interesting-IPython-Notebooks)\n", "* [Cross-disciplinary computational analysis IPython Notebooks From Hadoop World 2012](https://github.com/invisibleroads/crosscompute-tutorials)\n", "* [Quantites](http://nbviewer.ipython.org/urls/raw.github.com/tbekolay/pyconca2012/master/QuantitiesTutorial.ipynb) Units in Python.\n", " - [Another units module is here](http://www.southampton.ac.uk/~fangohr/blog/)\n", "\n", "## Packages for Scientists\n", "Important libraries\n", "\n", "* [Python](http://www.python.org) version ~~2.7~~ 3.x;\n", "* [Numpy](http://www.numpy.org), the core numerical extensions for linear algebra and multidimensional arrays;\n", "* [Scipy](http://www.scipy.org), additional libraries for scientific programming;\n", "* [Matplotlib](http://matplotlib.sf.net), excellent plotting and graphing libraries;\n", "* [IPython](http://ipython.org), with the additional libraries required for the notebook interface.\n", "* [Sympy](http://sympy.org), symbolic math in Python\n", "* [Pandas](http://pandas.pydata.org/) library for big data in Python\n", "\n", "Other packages of interest\n", "\n", "* [PyQuante](http://pyquante.sf.net) Python Quantum Chemistry\n", "* [QuTiP](https://code.google.com/p/qutip/) Quantum Toolbox in Python\n", "* Konrad Hinsen's [Scientific Python](http://dirac.cnrs-orleans.fr/plone/software/scientificpython/) and [MMTK](http://dirac.cnrs-orleans.fr/MMTK/)\n", "* [Atomic Simulation Environment](https://wiki.fysik.dtu.dk/ase/)\n", "\n", "\n", "## Cool Stuff\n", "* [Moin Moin](http://moinmo.in/), a wiki written in Python\n", "* [Project Euler](http://projecteuler.net/), programming problems that would (?) have interested Euler. Python is one of the most commonly used languages there." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "# VI. Acknowledgements\n", "Thanks to Alex and Tess for everything!\n", "\n", "Thanks to Barbara Muller and Tom Tarman for helpful suggestions." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This work is licensed under a [Creative Commons Attribution-ShareAlike 3.0 Unported License](http://creativecommons.org/licenses/by-sa/3.0/deed.en_US). The work is offered for free, with the hope that it will be useful. Please consider making a donation to the [John Hunter Memorial Fund](http://numfocus.org/johnhunter/).\n", "\n", "![CC BY SA](http://i.creativecommons.org/l/by-sa/3.0/88x31.png)\n", "\n", "![Sandia](http://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Sandia_National_Laboratories_logo.svg/200px-Sandia_National_Laboratories_logo.svg.png)\n", "\n", "Sandia is a multiprogram laboratory operated by Sandia Corporation, a Lockheed Martin Company, for the United States Department of Energy's National Nuclear Security Administration under Contract DE-AC04-94AL85000.\n", "\n", "![DOE](http://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/US-DeptOfEnergy-Seal.svg/200px-US-DeptOfEnergy-Seal.svg.png)" ] } ], "metadata": { "kernelspec": { "display_name": "Python [default]", "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.5.2" } }, "nbformat": 4, "nbformat_minor": 0 }