{ "metadata": { "name": "Lecture-3-Scipy" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# SciPy - Library of scientific algorithms for Python\n", "\n", "J.R. Johansson (robert@riken.jp) http://dml.riken.jp/~rob/\n", "\n", "The latest version of this [IPython notebook](http://ipython.org/ipython-doc/dev/interactive/htmlnotebook.html) lecture is available at [http://github.com/jrjohansson/scientific-python-lectures](http://github.com/jrjohansson/scientific-python-lectures).\n", "\n", "The other notebooks in this lecture series are indexed at [http://jrjohansson.github.com](http://jrjohansson.github.com)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# what is this line all about? Answer in lecture 4\n", "%pylab inline\n", "from IPython.display import Image" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n", "For more information, type 'help(pylab)'.\n" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction\n", "\n", "The SciPy framework builds on top of the low-level NumPy framwork for multidimensional arrays, and provides a large number of higher-level scientific algorithms. Some of the topics that SciPy covers are:\n", "\n", "* Special functions ([scipy.special](http://docs.scipy.org/doc/scipy/reference/special.html))\n", "* Integration ([scipy.integrate](http://docs.scipy.org/doc/scipy/reference/integrate.html))\n", "* Optimization ([scipy.optimize](http://docs.scipy.org/doc/scipy/reference/optimize.html))\n", "* Interpolation ([scipy.interpolate](http://docs.scipy.org/doc/scipy/reference/interpolate.html))\n", "* Fourier Transforms ([scipy.fftpack](http://docs.scipy.org/doc/scipy/reference/fftpack.html))\n", "* Signal Processing ([scipy.signal](http://docs.scipy.org/doc/scipy/reference/signal.html))\n", "* Linear Algebra ([scipy.linalg](http://docs.scipy.org/doc/scipy/reference/linalg.html))\n", "* Sparse Eigenvalue Problems ([scipy.sparse](http://docs.scipy.org/doc/scipy/reference/sparse.html))\n", "* Statistics ([scipy.stats](http://docs.scipy.org/doc/scipy/reference/stats.html))\n", "* Multi-dimensional image processing ([scipy.ndimage](http://docs.scipy.org/doc/scipy/reference/ndimage.html))\n", "* File IO ([scipy.io](http://docs.scipy.org/doc/scipy/reference/io.html))\n", "\n", "Each of these submodules provides a number of functions and classes that can be used to solve problems in their respective topics.\n", "\n", "In this lecture we will look at how to use some of these subpackages.\n", "\n", "To access the SciPy package in a Python program, we start by importing everything from the `scipy` module." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy import *" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we only need to use part of the SciPy framwork we can selectively include only those modules we are interested in. For example, to include the linear algebra package under the name `la`, we can do:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import scipy.linalg as la" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Special functions\n", "\n", "A large number of mathematical special functions are important for many computional physics problems. SciPy provides implementations a very extensive set of special functions. For a details, see the list of functions in the reference documention at http://docs.scipy.org/doc/scipy/reference/special.html#module-scipy.special. \n", "\n", "To demonstrate the typical usage of special functions we will look in more detail at the Bessel functions:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#\n", "# The scipy.special module includes a large number of Bessel-functions\n", "# Here we will use the functions jn and yn, which are the Bessel functions \n", "# of the first and second kind and real-valued order. We also include the \n", "# function jn_zeros and yn_zeros that gives the zeres of the functions jn\n", "# and yn.\n", "#\n", "from scipy.special import jn, yn, jn_zeros, yn_zeros" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "n = 0 # order\n", "x = 0.0\n", "\n", "# Bessel function of first kind\n", "print \"J_%d(%f) = %f\" % (n, x, jn(n, x))\n", "\n", "x = 1.0\n", "# Bessel function of second kind\n", "print \"Y_%d(%f) = %f\" % (n, x, yn(n, x))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "J_0(0.000000) = 1.000000\n", "Y_0(1.000000) = 0.088257\n" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "x = linspace(0, 10, 100)\n", "\n", "fig, ax = subplots()\n", "for n in range(4):\n", " ax.plot(x, jn(n, x), label=r\"$J_%d(x)$\" % n)\n", "ax.legend();" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\nSZsSEsjSx4c+j4yk9ApKDMrlrE9XhHIdOrXadzUN2ztMv8ciFAqiESNYLQM9IZMRvfoq0SefEOWX\nKOjFoCCap5NmrHZEZ0RT2/VtaZ3/Oq1e5+BBdoN++7bIJ1YoiGbPZjN0tPx3eJj1kLpt7kafn/68\n2u7ROpv0NwRsoJH7R2o3AHd3tnDH1VVnMzoEQSC39HTqGBBAw4ODKbia+dlbthC5uOgkNNGUKEuo\nz7Y+tDNop9ShVC0tjU2NcZO+YqhSyWb+jRv3383HY7mcOl2/Tuvi46UNTg0R6RFkv9aettzYopPr\n/f03eysHBop0woICov/9j+iVV4i0UKK8IjmyHBq5fySN+WtMlWOYdTLpZxdlk+VqyxoPcKhMLif6\n7jvWr+vrq51rVOBKVhYNunWLugcGkmdGhkot4aIinSwEFl1wcjBZrLKgpFw9L55y/Tob2I3UfNGM\nJr77jtXSeXZm7sOiIrL386NDejj+UJmwtDCydbWl3bd36/S67u7sT+njo+GJ0tJYsb4pU3Req1qu\nkNPUE1Op7/a+lJKXUuExdTLp/+D9A009MVU7F71/n/1BR43SWbUqv+xsGh4cTO38/WlPcjIpanhX\nsW4da3TUNgsuLKDxR8ZLHUb1tmxhszIkmvy9aRMbtH/8uOLHQ/PyyNLHhy5kZuo2MDWEp4eTrast\n7Q/ZL8n1n0y+U3suRmwsW/r844+SrecQBIF+vvQztfu9HUU9Lr8jTp1L+vE58WS20ozic0S+pRUE\nou3b2YKK33/X+vx7QRDoUlYWjQwOJgc/P9qemEhyNa9ZUMD6LEO0dOOjLUUlReS00YmO3zsudShV\nEwSiDz5gVcx0/EZ3d2d/2wcPqj7uUlYWWfj4UEgNt+PUpcjHkWTnakd7bu+RNI7z51nir3G5pTt3\nWDmFjRu1EldN7QjaQdZrrMuVnqlzSf+jEx/RfG+RB9cSEtgyvp492cIrLVIKAp1MT6cXg4KoQ0AA\n7UxKEmWP2jVr2ILS2ubJhiuZhXreSi0oYNXMNm3S2SWDglgbRNUlA0dSU8nez0/SyqqVic6IJvu1\n9vTnrT+lDoWI2A6EFhasErpK/PzYDJ2//tJmWDV2IvwEma8yJ6/o/+r61KmkH5oSSparLcvuPKMJ\npZK9ic3N2SacWuyfyykpofXx8dQ+IID63rxJR1JTa9yNU5X8fPZv8s4d0U6pMzPPzKSPTnwkdRjV\n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\n" } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "# zeros of Bessel functions\n", "n = 0 # order\n", "m = 4 # number of roots to compute\n", "jn_zeros(n, m)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 7, "text": [ "array([ 2.40482556, 5.52007811, 8.65372791, 11.79153444])" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Integration\n", "\n", "### Numerical integration: quadrature\n", "\n", "Numerical evaluation of a function of the type\n", "\n", "$\\displaystyle \\int_a^b f(x) dx$\n", "\n", "is called *numerical quadrature*, or simply *quadature*. SciPy provides a series of functions for different kind of quadrature, for example the `quad`, `dblquad` and `tplquad` for single, double and triple integrals, respectively.\n", "\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy.integrate import quad, dblquad, tplquad" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `quad` functions takes a large number of optional arguments, which can be used to fine-tune the behaviour of the function (try `help(quad)` for details).\n", "\n", "The basic usage is as follows:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# define a simple function for the integrand\n", "def f(x):\n", " return x" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "x_lower = 0 # the lower limit of x\n", "x_upper = 1 # the upper limit of x\n", "\n", "val, abserr = quad(f, x_lower, x_upper)\n", "\n", "print \"integral value =\", val, \", absolute error =\", abserr " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "integral value = 0.5 , absolute error = 5.55111512313e-15\n" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we need to pass extra arguments to integrand function we can use the `args` keyword argument:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def integrand(x, n):\n", " \"\"\"\n", " Bessel function of first kind and order n. \n", " \"\"\"\n", " return jn(n, x)\n", "\n", "\n", "x_lower = 0 # the lower limit of x\n", "x_upper = 10 # the upper limit of x\n", "\n", "val, abserr = quad(integrand, x_lower, x_upper, args=(3,))\n", "\n", "print val, abserr " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0.736675137081 9.38925687719e-13\n" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "For simple functions we can use a lambda function (name-less function) instead of explicitly defining a function for the integrand:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "val, abserr = quad(lambda x: exp(-x ** 2), -Inf, Inf)\n", "\n", "print \"numerical =\", val, abserr\n", "\n", "analytical = sqrt(pi)\n", "print \"analytical =\", analytical" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "numerical = 1.77245385091 1.42026367809e-08\n", "analytical = 1.77245385091\n" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "As show in the example above, we can also use 'Inf' or '-Inf' as integral limits.\n", "\n", "Higher-dimensional integration works in the same way:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def integrand(x, y):\n", " return exp(-x**2-y**2)\n", "\n", "x_lower = 0 \n", "x_upper = 10\n", "y_lower = 0\n", "y_upper = 10\n", "\n", "val, abserr = dblquad(integrand, x_lower, x_upper, lambda x : y_lower, lambda x: y_upper)\n", "\n", "print val, abserr " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0.785398163397 1.63822994214e-13\n" ] } ], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note how we had to pass lambda functions for the limits for the y integration, since these in general can be functions of x." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ordinary differential equations (ODEs)\n", "\n", "SciPy provides two different ways to solve ODEs: An API based on the function `odeint`, and object-oriented API based on the class `ode`. Usually `odeint` is easier to get started with, but the `ode` class offers some finer level of control.\n", "\n", "Here we will use the `odeint` functions. For more information about the class `ode`, try `help(ode)`. It does pretty much the same thing as `odeint`, but in an object-oriented fashion.\n", "\n", "To use `odeint`, first import it from the `scipy.integrate` module:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy.integrate import odeint, ode" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "A system of ODEs are usually formulated on standard form before it is attacked nummerically. The standard form is:\n", "\n", "$y' = f(y, t)$\n", "\n", "where \n", "\n", "$y = [y_1(t), y_2(t), ..., y_n(t)]$ \n", "\n", "and $f$ is some function that gives the derivatives of the function $y_i(t)$. To solve an ODE we need to know the function $f$ and an initial condition, $y(0)$.\n", "\n", "Note that higher-order ODEs can always be written in this form by introducing new variables for the intermediate derivatives.\n", "\n", "Once we have defined the Python function `f` and array `y_0` (that is $f$ and $y(0)$ in the mathematical formulation), we can use the `odeint` function as:\n", "\n", " y_t = odeint(f, y_0, t)\n", "\n", "where `t` is and array with time-coordinates for which to solve the ODE problem. `y_t` is an array with one row for each point in time in `t`, where each column corresponds to a solution `y_i(t)` at that point in time. \n", "\n", "We will see how we can implement `f` and `y_0` in Python code in the examples below." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Example: double pendulum" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's consider a physical example: The double compound pendulum, described in some detail here: http://en.wikipedia.org/wiki/Double_pendulum" ] }, { "cell_type": "code", "collapsed": false, "input": [ "Image(url='http://upload.wikimedia.org/wikipedia/commons/c/c9/Double-compound-pendulum-dimensioned.svg')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "output_type": "pyout", "prompt_number": 15, "text": [ "" ] } ], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The equations of motion of the pendulum are given on the wiki page:\n", "\n", "${\\dot \\theta_1} = \\frac{6}{m\\ell^2} \\frac{ 2 p_{\\theta_1} - 3 \\cos(\\theta_1-\\theta_2) p_{\\theta_2}}{16 - 9 \\cos^2(\\theta_1-\\theta_2)}$\n", "\n", "${\\dot \\theta_2} = \\frac{6}{m\\ell^2} \\frac{ 8 p_{\\theta_2} - 3 \\cos(\\theta_1-\\theta_2) p_{\\theta_1}}{16 - 9 \\cos^2(\\theta_1-\\theta_2)}.$\n", "\n", "${\\dot p_{\\theta_1}} = -\\frac{1}{2} m \\ell^2 \\left [ {\\dot \\theta_1} {\\dot \\theta_2} \\sin (\\theta_1-\\theta_2) + 3 \\frac{g}{\\ell} \\sin \\theta_1 \\right ]$\n", "\n", "${\\dot p_{\\theta_2}} = -\\frac{1}{2} m \\ell^2 \\left [ -{\\dot \\theta_1} {\\dot \\theta_2} \\sin (\\theta_1-\\theta_2) + \\frac{g}{\\ell} \\sin \\theta_2 \\right]$\n", "\n", "To make the Python code simpler to follow, let's introduce new variable names and the vector notation: $x = [\\theta_1, \\theta_2, p_{\\theta_1}, p_{\\theta_2}]$\n", "\n", "${\\dot x_1} = \\frac{6}{m\\ell^2} \\frac{ 2 x_3 - 3 \\cos(x_1-x_2) x_4}{16 - 9 \\cos^2(x_1-x_2)}$\n", "\n", "${\\dot x_2} = \\frac{6}{m\\ell^2} \\frac{ 8 x_4 - 3 \\cos(x_1-x_2) x_3}{16 - 9 \\cos^2(x_1-x_2)}$\n", "\n", "${\\dot x_3} = -\\frac{1}{2} m \\ell^2 \\left [ {\\dot x_1} {\\dot x_2} \\sin (x_1-x_2) + 3 \\frac{g}{\\ell} \\sin x_1 \\right ]$\n", "\n", "${\\dot x_4} = -\\frac{1}{2} m \\ell^2 \\left [ -{\\dot x_1} {\\dot x_2} \\sin (x_1-x_2) + \\frac{g}{\\ell} \\sin x_2 \\right]$" ] }, { "cell_type": "code", "collapsed": false, "input": [ "g = 9.82\n", "L = 0.5\n", "m = 0.1\n", "\n", "def dx(x, t):\n", " \"\"\"\n", " The right-hand side of the pendelum ODE\n", " \"\"\"\n", " x1, x2, x3, x4 = x[0], x[1], x[2], x[3]\n", " \n", " dx1 = 6.0/(m*L**2) * (2 * x3 - 3 * cos(x1-x2) * x4)/(16 - 9 * cos(x1-x2)**2)\n", " dx2 = 6.0/(m*L**2) * (8 * x4 - 3 * cos(x1-x2) * x3)/(16 - 9 * cos(x1-x2)**2)\n", " dx3 = -0.5 * m * L**2 * ( dx1 * dx2 * sin(x1-x2) + 3 * (g/L) * sin(x1))\n", " dx4 = -0.5 * m * L**2 * (-dx1 * dx2 * sin(x1-x2) + (g/L) * sin(x2))\n", " \n", " return [dx1, dx2, dx3, dx4]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 93 }, { "cell_type": "code", "collapsed": false, "input": [ "# choose an initial state\n", "x0 = [pi/4, pi/2, 0, 0]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 94 }, { "cell_type": "code", "collapsed": false, "input": [ "# time coodinate to solve the ODE for: from 0 to 10 seconds\n", "t = linspace(0, 10, 250)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 95 }, { "cell_type": "code", "collapsed": false, "input": [ "# solve the ODE problem\n", "x = odeint(dx, x0, t)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 96 }, { "cell_type": "code", "collapsed": false, "input": [ "# plot the angles as a function of time\n", "\n", "fig, axes = subplots(1,2, figsize=(12,4))\n", "axes[0].plot(t, x[:, 0], 'r', label=\"theta1\")\n", "axes[0].plot(t, x[:, 1], 'b', label=\"theta2\")\n", "\n", "\n", "x1 = + L * sin(x[:, 0])\n", "y1 = - L * cos(x[:, 0])\n", "\n", "x2 = x1 + L * sin(x[:, 1])\n", "y2 = y1 - L * cos(x[:, 1])\n", " \n", "axes[1].plot(x1, y1, 'r', label=\"pendulum1\")\n", "axes[1].plot(x2, y2, 'b', label=\"pendulum2\")\n", "axes[1].set_ylim([-1, 0])\n", "axes[1].set_xlim([1, -1]);" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\n" } ], "prompt_number": 97 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Simple annimation of the pendulum motion. We will see how to make better annimation in Lecture 4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.display import clear_output\n", "import time" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 98 }, { "cell_type": "code", "collapsed": false, "input": [ "fig, ax = subplots(figsize=(4,4))\n", "\n", "for t_idx, tt in enumerate(t[:200]):\n", "\n", " x1 = + L * sin(x[t_idx, 0])\n", " y1 = - L * cos(x[t_idx, 0])\n", "\n", " x2 = x1 + L * sin(x[t_idx, 1])\n", " y2 = y1 - L * cos(x[t_idx, 1])\n", " \n", " ax.cla() \n", " ax.plot([0, x1], [0, y1], 'r.-')\n", " ax.plot([x1, x2], [y1, y2], 'b.-')\n", " ax.set_ylim([-1.5, 0.5])\n", " ax.set_xlim([1, -1])\n", "\n", " display(fig)\n", " clear_output()\n", " \n", " time.sleep(0.1)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\n" } ], "prompt_number": 99 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Example: Damped harmonic oscillator" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "ODE problems are important in computational physics, so we will look at one more example: the damped harmonic oscillation. This problem is well described on the wiki page: http://en.wikipedia.org/wiki/Damping\n", "\n", "The equation of motion for the damped oscillator is:\n", "\n", "$\\displaystyle \\frac{\\mathrm{d}^2x}{\\mathrm{d}t^2} + 2\\zeta\\omega_0\\frac{\\mathrm{d}x}{\\mathrm{d}t} + \\omega^2_0 x = 0$\n", "\n", "where $x$ is the position of the oscillator, $\\omega_0$ is the frequency, and $\\zeta$ is the damping ratio. To write this second-order ODE on standard form we introduce $p = \\frac{\\mathrm{d}x}{\\mathrm{d}t}$:\n", "\n", "$\\displaystyle \\frac{\\mathrm{d}p}{\\mathrm{d}t} = - 2\\zeta\\omega_0 p - \\omega^2_0 x$\n", "\n", "$\\displaystyle \\frac{\\mathrm{d}x}{\\mathrm{d}t} = p$\n", "\n", "In the implementation of this example we will add extra arguments to the RHS function for the ODE, rather than using global variables as we did in the previous example. As a consequence of the extra arguments to the RHS, we need to pass an keyword argument `args` to the `odeint` function:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def dy(y, t, zeta, w0):\n", " \"\"\"\n", " The right-hand side of the damped oscillator ODE\n", " \"\"\"\n", " x, p = y[0], y[1]\n", " \n", " dx = p\n", " dp = -2 * zeta * w0 * p - w0**2 * x\n", "\n", " return [dx, dp]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "# initial state: \n", "y0 = [1.0, 0.0]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "# time coodinate to solve the ODE for\n", "t = linspace(0, 10, 1000)\n", "w0 = 2*pi*1.0" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ "# solve the ODE problem for three different values of the damping ratio\n", "\n", "y1 = odeint(dy, y0, t, args=(0.0, w0)) # undamped\n", "y2 = odeint(dy, y0, t, args=(0.2, w0)) # under damped\n", "y3 = odeint(dy, y0, t, args=(1.0, w0)) # critial damping\n", "y4 = odeint(dy, y0, t, args=(5.0, w0)) # over damped" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 27 }, { "cell_type": "code", "collapsed": false, "input": [ "fig, ax = subplots()\n", "ax.plot(t, y1[:,0], 'k', label=\"undamped\", linewidth=0.25)\n", "ax.plot(t, y2[:,0], 'r', label=\"under damped\")\n", "ax.plot(t, y3[:,0], 'b', label=r\"critical damping\")\n", "ax.plot(t, y4[:,0], 'g', label=\"over damped\")\n", "ax.legend();" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\nAAAASUVORK5CYII=\n" } ], "prompt_number": 28 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fourier transform\n", "\n", "Fourier transforms are one of the universial tools in computational physics, which appear over and over again in different contexts. SciPy provides functions for accessing the classic [FFTPACK](http://www.netlib.org/fftpack/) library from NetLib, which is an efficient and well tested FFT library written in FORTRAN. The SciPy API has a few additional convenience functions, but overall the API is closely related to the original FORTRAN library.\n", "\n", "To use the `fftpack` module in a python program, include it using:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy.fftpack import *" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 29 }, { "cell_type": "markdown", "metadata": {}, "source": [ "To demonstrate how to do a fast Fourier transform with SciPy, let's look at the FFT of the solution to the damped oscillator from the previous section:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "N = len(t)\n", "dt = t[1]-t[0]\n", "\n", "# calculate the fast fourier transform\n", "# y2 is the solution to the under-damped oscillator from the previous section\n", "F = fft(y2[:,0]) \n", "\n", "# calculate the frequencies for the components in F\n", "w = fftfreq(N, dt)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "fig, ax = subplots(figsize=(9,3))\n", "ax.plot(w, abs(F));" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\nMzR9+nQ9+eSTkS4nplRWVmrRokWaOXOmZs2apWeffVaSVFdXJ7fbrdTUVC1evFj19fURrjS2tLa2\nyul0asmSJZJoz76or6/X3XffrbS0NKWnp+u9994Lvj3NfrZv3z7zlltuMZuamkzTNM0TJ06Ypmma\nH330kTlnzhyzqanJrKioMKdOnWq2trb299sPOl999ZV56623mlOmTDFPnTplmiZtGardu3e3t9Oj\njz5qPvroo6Zp0p6hamlpMadOnWpWVFSYTU1N5pw5c8yPP/440mXFjOrqavPQoUOmaZrmuXPnzNTU\nVPPjjz82H3nkEfPJJ580TdM0CwsL2/+dwp5NmzaZ9957r7lkyRLTNE3asw/uv/9+c9u2baZpmmZz\nc7NZX18fdHv2+6oGzz//vNauXav4+HhJUkJCgiRp165dWrZsmeLj4zVlyhRNmzZNZWVl/f32g05+\nfr6eeuqpTvtoy9C43W7F/XUhjwULFqiqqkoS7Rkq3/Vy4uPj29fLgT1JSUnKzMyUJI0bN05paWk6\nfvy4iouLlZeXJ0nKy8vTa6+9FskyY0pVVZVKSkq0cuXK9iscac/QnDlzRm+99ZaWL18uyZomMX78\n+KDbs99DxtGjR/Xmm2/q+uuvl8vl0vvvvy9J+vrrrztdgZKcnKzjx4/399sPKrt27VJycrJmz57d\naT9t2Xe//OUvdfvtt0uiPUN1/PhxTZ48uf1r2i10x44d06FDh7RgwQLV1tbK4XBIkhwOh2prayNc\nXex46KGHtHHjxvY/JiTRniGqqKhQQkKCHnjgAc2dO1cPPvigzp8/H3R7hjTx0+12q6amptv+J554\nQi0tLTp9+rTeffdd/elPf9I999yjL774osfzsGCX/7bcsGFDp/kBpp+1R2hLS2/tuX79+vYx2iee\neEIjRozQvffe2+t5aM/AaKP+0dDQoKVLl2rz5s267LLLOr1mGAbtbNPrr7+uxMREOZ1OeTyeHo+h\nPe1raWnRwYMH9dxzz2n+/PlavXq1CgsLOx1jpz1DChl7/Cyy/vzzz+uuu+6SJM2fP19xcXE6efJk\nt7U1qqqqNGnSpFDeflDprS3/8pe/qKKiQnPmzJFktde1116r9957j7b0w9+/TUn69a9/rZKSEv3x\nj39s30d7hob1cvquublZS5cuVW5urnJyciRZfx3W1NQoKSlJ1dXVSkxMjHCVseGdd95RcXGxSkpK\n1NjYqLNnzyo3N5f2DFFycrKSk5M1f/58SdLdd9+tDRs2KCkpKaj27PfhkpycHO3bt0+SdOTIETU1\nNenKK6/vPWS8AAABgUlEQVRUdna2duzYoaamJlVUVOjo0aO67rrr+vvtB41Zs2aptrZWFRUVqqio\nUHJysg4ePCiHw0Fbhqi0tFQbN27Url27NMrn3uq0Z2hYL6dvTNPUihUrlJ6ertWrV7fvz87OVlFR\nkSSpqKioPXzAv/Xr16uyslIVFRXasWOHbr75Zr344ou0Z4iSkpI0efJkHTlyRJK0d+9ezZw5U0uW\nLAmuPft7NmpTU5N53333mbNmzTLnzp1r7t+/v/21J554wpw6dap5zTXXmKWlpf391oNaSkpK+9Ul\npklbhmLatGnm1VdfbWZmZpqZmZnmqlWr2l+jPUNTUlJipqammlOnTjXXr18f6XJiyltvvWUahmHO\nmTOn/d/k73//e/PUqVNmVlaWOX36dNPtdpunT5+OdKkxx+PxtF9dQnuGrry83Jw3b545e/Zs8847\n7zTr6+uDbs+QbpAGAAAQSAzcmBsAAMQiQgYAAAgLQgYAAAgLQgYAAAgLQgYAAAgLQgYAAAiL/wdK\nTP2eJuq6ugAAAABJRU5ErkJggg==\n" } ], "prompt_number": 31 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since the signal is real, the spectrum is symmetric. We therefore only need to plot the part that corresponds to the postive frequencies. To extract that part of the `w` and `F` we can use some of the indexing tricks for NumPy arrays that we saw in Lecture 2:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "indices = where(w > 0) # select only indices for elements that corresponds to positive frequencies\n", "w_pos = w[indices]\n", "F_pos = F[indices]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 32 }, { "cell_type": "code", "collapsed": false, "input": [ "fig, ax = subplots(figsize=(9,3))\n", "ax.plot(w_pos, abs(F_pos))\n", "ax.set_xlim(0, 5);" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\nFaYnpFOnum87doQOHUzTKhgJdU0SLBITE9m+fTuxsbGNLkBEJNSUl5thlmPHLnx77JjZ3dTbLrmk\nJmSc3WJja1pMTM1tTIwCiQQPXz/XL3paU10vkpGRUX3f6XTidDov9uVERCzXurWZOJqQ4NvzPR4o\nLT0zaNRuBw7A9u2m1+T4cdO89y+55MygERNjVsS0b3/h++3bm+MO2rTRpoLSeC6XC5fL1eCfu6ge\ni6uuuop27drRvHlz7r//fr7//e/XXFg9FiIiF8UbSLwho7gYSkpMq+/+iRNmx9Q2bUzIaNeuJnDU\nbm3b1tye3bxfv+QSq/9PSDBokqGQgoICOnfuzLFjx0hNTWXx4sUMGDCgQQWIiEhguN3wxRcmZJw4\nURM4vM37vS++qGnne9ysmQkobduaW287+7G3RUfXfaslwKGpyVeFzJkzh+joaB555JEGFSAiIsHL\n4zFzSr78sqZ98cWFH5eW1tzWvl/7tmVLEzIuu8zc1m61v3bZZfU37/OiosySYa3WCZyAz7EoKyvD\n7XbTpk0bTp48yYYNG5g9e3ZjLyciIkHIZjMf2JdeapbaXiyPx2z3fvKkad4AUlp6/sfFxWZDNO/z\nL9TKyuCrr0yd3qARFVVzv/bXvO3SSy/82PvffL77rVsrwNSl0cHiyJEjjBkzBoDKykomTJjA0KFD\n/VaYiIiEH5ut5sO7Uyf/XruqygQMb/MGDu/9kydNqCkrq7ktKzMreWr/nPf7tZ9b+35FhQkX3sBR\nu9X3dV9uL9QuuSQ0Ao02yBIREWkAt9sMD3kDx9ntfN8rL6/5+tn3a99+9VXN989+3unTZvlxq1Ym\naHhva98/3+3Z98/3uL7WujV06aKdN0VERMJGVVVN8KgdQM7+2tnfq/318z0++3sXaocPK1iIiIiI\nn/j6ua6tU0RERMRvFCxERETEbxQsRERExG8ULERERMRvFCxERETEbxQsRERExG8ULCJEY46+lcDS\nexJc9H4EH70noanRwSI7O5trr72W7t27M2/ePH/WJAGgX9Dgo/ckuOj9CD56T0JTo4KF2+3moYce\nIjs7m48//piVK1fyySef+Ls2ERERCTGNChY5OTlcffXVdOvWjZYtW3L33Xfz17/+1d+1iYiISIhp\n1Jbeq1at4q233uLFF18E4OWXX+Yf//gHixcvrrlwKBzBJiIiIj7zJTI06th0X0KDzgkRERGJPI0a\nCrniiivIy8urfpyXl0dCQoLfihIREZHQ1KhgkZKSwr59+8jNzaWiooLXXnuNUaNG+bs2ERERCTGN\nGgpp0aLRH1VXAAADZElEQVQFL7zwAsOGDcPtdjNlyhR69uzp79pEREQkxDRq8mZ9srOzmTp1Km63\nm/T0dB577DF/v4Q0wOTJk3nzzTeJi4tj9+7dVpcT8fLy8khLS+Po0aPYbDbuu+8+fvzjH1tdVsQq\nLy9n4MCBfPXVV1RUVHDnnXfy9NNPW11WxHO73aSkpJCQkMCaNWusLifidevWjbZt29K8eXNatmxJ\nTk7OBZ/r92Dhdru55pprePvtt7niiiu48cYbWblypXo0LLRlyxaio6NJS0tTsAgChYWFFBYWkpyc\nTGlpKTfccANvvPGGfkcsVFZWRlRUFJWVlfTv358FCxbQv39/q8uKaM8++yzbt2/nyy+/JCsry+py\nIl5iYiLbt28nNja23uf6fUtv7XERfAYMGEBMTIzVZcjX4uPjSU5OBiA6OpqePXty+PBhi6uKbFFR\nUQBUVFTgdrt9+stTAic/P59169aRnp6uFYZBxNf3wu/B4tChQ3Tp0qX6cUJCAocOHfL3y4iEhdzc\nXHbs2EG/fv2sLiWiVVVVkZycjN1uZ9CgQSQlJVldUkSbNm0a8+fPp1kzHWcVLGw2G0OGDCElJaV6\nD6sL8fu7po2xRHxTWlrKt7/9bRYtWkR0dLTV5US0Zs2asXPnTvLz83nvvfd0RoWF1q5dS1xcHA6H\nQ70VQWTr1q3s2LGD9evXs2TJErZs2XLB5/o9WGiPC5H6nT59mrFjx3LPPfcwevRoq8uRr7Vr147h\nw4ezbds2q0uJWB988AFZWVkkJiYyfvx4Nm3aRFpamtVlRbzOnTsD0KlTJ8aMGVPn5E2/BwvtcSFS\nN4/Hw5QpU0hKSmLq1KlWlxPxioqKKCkpAeDUqVNs3LgRh8NhcVWRa+7cueTl5XHgwAFeffVVbr31\nVlasWGF1WRGtrKyML7/8EoCTJ0+yYcMG+vTpc8Hn+z1Y1N7jIikpibvuukuz3S02fvx4br75Zvbu\n3UuXLl1YtmyZ1SVFtK1bt/Lyyy/z7rvv4nA4cDgcZGdnW11WxCooKODWW28lOTmZfv36MXLkSAYP\nHmx1WfI1Da9b78iRIwwYMKD6d2TEiBEMHTr0gs8PyD4WIiIiEpk05VZERET8RsFCRERE/EbBQkRE\nRPxGwUJERET8RsFCRERE/EbBQkRERPzm/wHIRu26Qj00nwAAAABJRU5ErkJggg==\n" } ], "prompt_number": 33 }, { "cell_type": "markdown", "metadata": {}, "source": [ "As expected, we now see a peak in the spectrum that is centered around 1, which is the frequency we used in the damped oscillator example." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Linear algebra\n", "\n", "The linear algebra module contains a lot of matrix related functions, including linear equation solving, eigenvalue solvers, matrix functions (for example matrix-exponentiation), a number of different decompositions (SVD, LU, cholesky), etc. \n", "\n", "Detailed documetation is available at: http://docs.scipy.org/doc/scipy/reference/linalg.html\n", "\n", "Here we will look at how to use some of these functions:\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Linear equation systems\n", "\n", "Linear equation systems on the matrix form\n", "\n", "$A x = b$\n", "\n", "where $A$ is a matrix and $x,b$ are vectors can be solved like:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "A = array([[1,2,3], [4,5,6], [7,8,9]])\n", "b = array([1,2,3])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 34 }, { "cell_type": "code", "collapsed": false, "input": [ "x = solve(A, b)\n", "\n", "x" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 35, "text": [ "array([-0.33333333, 0.66666667, 0. ])" ] } ], "prompt_number": 35 }, { "cell_type": "code", "collapsed": false, "input": [ "# check\n", "dot(A, x) - b" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 36, "text": [ "array([ -1.11022302e-16, 0.00000000e+00, 0.00000000e+00])" ] } ], "prompt_number": 36 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also do the same with\n", "\n", "$A X = B$\n", "\n", "where $A, B, X$ are matrices:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "A = rand(3,3)\n", "B = rand(3,3)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 37 }, { "cell_type": "code", "collapsed": false, "input": [ "X = solve(A, B)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 38 }, { "cell_type": "code", "collapsed": false, "input": [ "X" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 39, "text": [ "array([[ 2.28587973, 5.88845235, 1.6750663 ],\n", " [-4.88205838, -5.26531274, -1.37990347],\n", " [ 1.75135926, -2.05969998, -0.09859636]])" ] } ], "prompt_number": 39 }, { "cell_type": "code", "collapsed": false, "input": [ "# check\n", "norm(dot(A, X) - B)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 40, "text": [ "6.2803698347351007e-16" ] } ], "prompt_number": 40 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Eigenvalues and eigenvectors" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The eigenvalue problem for a matrix $A$:\n", "\n", "$\\displaystyle A v_n = \\lambda_n v_n$\n", "\n", "where $v_n$ are is the $n$th eigenvector and $\\lambda_n$ is the $n$th eigenvalue.\n", "\n", "To calculate eigenvalues of a matrix, use the `eigvals` and for calculating both eigenvalues and eigenvectors, use the function `eig`:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "evals = eigvals(A)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 41 }, { "cell_type": "code", "collapsed": false, "input": [ "evals" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 42, "text": [ "array([ 1.06633891+0.j , -0.12420467+0.10106325j,\n", " -0.12420467-0.10106325j])" ] } ], "prompt_number": 42 }, { "cell_type": "code", "collapsed": false, "input": [ "evals, evecs = eig(A)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 43 }, { "cell_type": "code", "collapsed": false, "input": [ "evals" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 44, "text": [ "array([ 1.06633891+0.j , -0.12420467+0.10106325j,\n", " -0.12420467-0.10106325j])" ] } ], "prompt_number": 44 }, { "cell_type": "code", "collapsed": false, "input": [ "evecs" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 45, "text": [ "array([[ 0.89677688+0.j , -0.30219843-0.30724366j,\n", " -0.30219843+0.30724366j],\n", " [ 0.35446145+0.j , 0.79483507+0.j , 0.79483507+0.j ],\n", " [ 0.26485526+0.j , -0.20767208+0.37334563j,\n", " -0.20767208-0.37334563j]])" ] } ], "prompt_number": 45 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The eigenvectors corresponding to the $n$th eigenvalue (stored in `evals[n]`) is the $n$th *column* in `evecs`, i.e., `evecs[:,n]`. To verify this, let's try mutiplying eigenvectors with the matrix and compare to the product of the eigenvector and the eigenvalue:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "n = 1\n", "\n", "norm(dot(A, evecs[:,n]) - evals[n] * evecs[:,n])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 46, "text": [ "1.3964254612015911e-16" ] } ], "prompt_number": 46 }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are also more specialized eigensolvers, like the `eigh` for Hermitian matrices. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Matrix operations" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# the matrix inverse\n", "inv(A)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 47, "text": [ "array([[-1.38585633, 1.36837431, 6.03633364],\n", " [ 3.80855289, -4.76960426, -5.2571037 ],\n", " [ 0.0689213 , 2.4652602 , -2.5948838 ]])" ] } ], "prompt_number": 47 }, { "cell_type": "code", "collapsed": false, "input": [ "# determinant\n", "det(A)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 48, "text": [ "0.027341548212627968" ] } ], "prompt_number": 48 }, { "cell_type": "code", "collapsed": false, "input": [ "# norms of various orders\n", "norm(A, ord=2), norm(A, ord=Inf)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 49, "text": [ "(1.1657807164173386, 1.7872032588446576)" ] } ], "prompt_number": 49 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sparse matrices\n", "\n", "Sparse matrices are often useful in numerical simulations dealing with large systems, if the problem can be described in matrix form where the matrices or vectors mostly contains zeros. Scipy has a good support for sparse matrices, with basic linear algebra operations (such as equation solving, eigenvalue calculations, etc).\n", "\n", "There are many possible strategies for storing sparse matrices in an efficient way. Some of the most common are the so-called coordinate form (COO), list of list (LIL) form, and compressed-sparse column CSC (and row, CSR). Each format has some advantanges and disadvantages. Most computational algorithms (equation solving, matrix-matrix multiplication, etc) can be efficiently implemented using CSR or CSC formats, but they are not so intuitive and not so easy to initialize. So often a sparse matrix is initially created in COO or LIL format (where we can efficiently add elements to the sparse matrix data), and then converted to CSC or CSR before used in real calcalations.\n", "\n", "For more information about these sparse formats, see e.g. http://en.wikipedia.org/wiki/Sparse_matrix\n", "\n", "When we create a sparse matrix we have to choose which format it should be stored in. For example, " ] }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy.sparse import *" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 50 }, { "cell_type": "code", "collapsed": false, "input": [ "# dense matrix\n", "M = array([[1,0,0,0], [0,3,0,0], [0,1,1,0], [1,0,0,1]]); M" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 51, "text": [ "array([[1, 0, 0, 0],\n", " [0, 3, 0, 0],\n", " [0, 1, 1, 0],\n", " [1, 0, 0, 1]])" ] } ], "prompt_number": 51 }, { "cell_type": "code", "collapsed": false, "input": [ "# convert from dense to sparse\n", "A = csr_matrix(M); A" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 52, "text": [ "<4x4 sparse matrix of type ''\n", "\twith 6 stored elements in Compressed Sparse Row format>" ] } ], "prompt_number": 52 }, { "cell_type": "code", "collapsed": false, "input": [ "# convert from sparse to dense\n", "A.todense()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 53, "text": [ "matrix([[1, 0, 0, 0],\n", " [0, 3, 0, 0],\n", " [0, 1, 1, 0],\n", " [1, 0, 0, 1]])" ] } ], "prompt_number": 53 }, { "cell_type": "markdown", "metadata": {}, "source": [ "More efficient way to create sparse matrices: create an empty matrix and populate with using matrix indexing (avoids creating a potentially large dense matrix)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "A = lil_matrix((4,4)) # empty 4x4 sparse matrix\n", "A[0,0] = 1\n", "A[1,1] = 3\n", "A[2,2] = A[2,1] = 1\n", "A[3,3] = A[3,0] = 1\n", "A" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 54, "text": [ "<4x4 sparse matrix of type ''\n", "\twith 6 stored elements in LInked List format>" ] } ], "prompt_number": 54 }, { "cell_type": "code", "collapsed": false, "input": [ "A.todense()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 55, "text": [ "matrix([[ 1., 0., 0., 0.],\n", " [ 0., 3., 0., 0.],\n", " [ 0., 1., 1., 0.],\n", " [ 1., 0., 0., 1.]])" ] } ], "prompt_number": 55 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Converting between different sparse matrix formats:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "A" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 56, "text": [ "<4x4 sparse matrix of type ''\n", "\twith 6 stored elements in LInked List format>" ] } ], "prompt_number": 56 }, { "cell_type": "code", "collapsed": false, "input": [ "A = csr_matrix(A); A" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 57, "text": [ "<4x4 sparse matrix of type ''\n", "\twith 6 stored elements in Compressed Sparse Row format>" ] } ], "prompt_number": 57 }, { "cell_type": "code", "collapsed": false, "input": [ "A = csc_matrix(A); A" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 58, "text": [ "<4x4 sparse matrix of type ''\n", "\twith 6 stored elements in Compressed Sparse Column format>" ] } ], "prompt_number": 58 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can compute with sparse matrices like with dense matrices:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "A.todense()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 59, "text": [ "matrix([[ 1., 0., 0., 0.],\n", " [ 0., 3., 0., 0.],\n", " [ 0., 1., 1., 0.],\n", " [ 1., 0., 0., 1.]])" ] } ], "prompt_number": 59 }, { "cell_type": "code", "collapsed": false, "input": [ "(A * A).todense()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 60, "text": [ "matrix([[ 1., 0., 0., 0.],\n", " [ 0., 9., 0., 0.],\n", " [ 0., 4., 1., 0.],\n", " [ 2., 0., 0., 1.]])" ] } ], "prompt_number": 60 }, { "cell_type": "code", "collapsed": false, "input": [ "dot(A, A).todense()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 61, "text": [ "matrix([[ 1., 0., 0., 0.],\n", " [ 0., 9., 0., 0.],\n", " [ 0., 4., 1., 0.],\n", " [ 2., 0., 0., 1.]])" ] } ], "prompt_number": 61 }, { "cell_type": "code", "collapsed": false, "input": [ "v = array([1,2,3,4])[:,newaxis]; v" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 62, "text": [ "array([[1],\n", " [2],\n", " [3],\n", " [4]])" ] } ], "prompt_number": 62 }, { "cell_type": "code", "collapsed": false, "input": [ "# sparse matrix - dense vector multiplication\n", "A * v" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 63, "text": [ "array([[ 1.],\n", " [ 6.],\n", " [ 5.],\n", " [ 5.]])" ] } ], "prompt_number": 63 }, { "cell_type": "code", "collapsed": false, "input": [ "# same result with dense matrix - dense vector multiplcation\n", "A.todense() * v" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 64, "text": [ "matrix([[ 1.],\n", " [ 6.],\n", " [ 5.],\n", " [ 5.]])" ] } ], "prompt_number": 64 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Optimization\n", "\n", "Optimization (finding minima or maxima of a function) is a large field in mathematics, and optimization of complicated functions or in many variables can be rather involved. Here we will only look at a few very simple cases. For a more detailed introduction to optimization with SciPy see: http://scipy-lectures.github.com/advanced/mathematical_optimization/index.html\n", "\n", "To use the optimization module in scipy first include the `optimize` module:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy import optimize" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 65 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Finding a minima\n", "\n", "Let's first look at how to find the minima of a simple function of a single variable:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def f(x):\n", " return 4*x**3 + (x-2)**2 + x**4" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 66 }, { "cell_type": "code", "collapsed": false, "input": [ "fig, ax = subplots()\n", "x = linspace(-5, 3, 100)\n", "ax.plot(x, f(x));" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\n2fxTCF4AAAAASUVORK5CYII=\n" } ], "prompt_number": 67 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can use the `fmin_bfgs` function to find the minima of a function:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x_min = optimize.fmin_bfgs(f, -2)\n", "x_min " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Optimization terminated successfully.\n", " Current function value: -3.506641\n", " Iterations: 6\n", " Function evaluations: 30\n", " Gradient evaluations: 10\n" ] }, { "output_type": "pyout", "prompt_number": 68, "text": [ "array([-2.67298167])" ] } ], "prompt_number": 68 }, { "cell_type": "code", "collapsed": false, "input": [ "optimize.fmin_bfgs(f, 0.5) " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Optimization terminated successfully.\n", " Current function value: 2.804988\n", " Iterations: 3\n", " Function evaluations: 15\n", " Gradient evaluations: 5\n" ] }, { "output_type": "pyout", "prompt_number": 69, "text": [ "array([ 0.46961745])" ] } ], "prompt_number": 69 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also use the `brent` or `fminbound` functions. They have a bit different syntax and use different algorithms. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "optimize.brent(f)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 70, "text": [ "0.46961743402759754" ] } ], "prompt_number": 70 }, { "cell_type": "code", "collapsed": false, "input": [ "optimize.fminbound(f, -4, 2)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 71, "text": [ "-2.6729822917513886" ] } ], "prompt_number": 71 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Finding a solution to a function\n", "\n", "To find the root for a function of the form $f(x) = 0$ we can use the `fsolve` function. It requires an initial guess: " ] }, { "cell_type": "code", "collapsed": false, "input": [ "omega_c = 3.0\n", "def f(omega):\n", " # a transcendental equation: resonance frequencies of a low-Q SQUID terminated microwave resonator\n", " return tan(2*pi*omega) - omega_c/omega" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 100 }, { "cell_type": "code", "collapsed": false, "input": [ "fig, ax = subplots(figsize=(10,4))\n", "x = linspace(0, 3, 1000)\n", "y = f(x)\n", "mask = where(abs(y) > 50)\n", "x[mask] = y[mask] = NaN # get rid of vertical line when the function flip sign\n", "ax.plot(x, y)\n", "ax.plot([0, 3], [0, 0], 'k')\n", "ax.set_ylim(-5,5);" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\nRP8P6n3ihzZWO2AAAAAASUVORK5CYII=\n" } ], "prompt_number": 104 }, { "cell_type": "code", "collapsed": false, "input": [ "optimize.fsolve(f, 0.1)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 105, "text": [ "array([ 0.23743014])" ] } ], "prompt_number": 105 }, { "cell_type": "code", "collapsed": false, "input": [ "optimize.fsolve(f, 0.6)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 108, "text": [ "array([ 0.71286972])" ] } ], "prompt_number": 108 }, { "cell_type": "code", "collapsed": false, "input": [ "optimize.fsolve(f, 1.1)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 107, "text": [ "array([ 1.18990285])" ] } ], "prompt_number": 107 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Interpolation\n", "\n", "Interpolation is simple and convenient in scipy: The `interp1d` function, when given arrays describing X and Y data, returns and object that behaves like a function that can be called for an arbitrary value of x (in the range covered by X), and it returns the corresponding interpolated y value:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy.interpolate import *" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 110 }, { "cell_type": "code", "collapsed": false, "input": [ "def f(x):\n", " return sin(x)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 111 }, { "cell_type": "code", "collapsed": false, "input": [ "n = arange(0, 10) \n", "x = linspace(0, 9, 100)\n", "\n", "y_meas = f(n) + 0.1 * randn(len(n)) # simulate measurement with noise\n", "y_real = f(x)\n", "\n", "linear_interpolation = interp1d(n, y_meas)\n", "y_interp1 = linear_interpolation(x)\n", "\n", "cubic_interpolation = interp1d(n, y_meas, kind='cubic')\n", "y_interp2 = cubic_interpolation(x)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 112 }, { "cell_type": "code", "collapsed": false, "input": [ "fig, ax = subplots(figsize=(10,4))\n", "ax.plot(n, y_meas, 'bs', label='noisy data')\n", "ax.plot(x, y_real, 'k', lw=2, label='true function')\n", "ax.plot(x, y_interp1, 'r', label='linear interp')\n", "ax.plot(x, y_interp2, 'g', label='cubic interp')\n", "ax.legend(loc=3);" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAlkAAAD9CAYAAACP6mKWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdYVMcaBvAXsKAoihSpioDYxZJEsWHH3jW2SNQYI4q9\nN7CiIHbsUa/Ye4klNuwNe0MFRQUUURHpsOW9f6zZaLAssstS5vc8PPfKzJnzbR6F75yZ+UaHJCEI\ngiAIgiCola62AxAEQRAEQciNRJIlCIIgCIKgASLJEgRBEARB0ACRZAmCIAiCIGiASLIEQRAEQRA0\nQCRZgiAIgiAIGpCpJKtfv34oWbIkqlSp8sU+Q4cORdmyZeHk5IQbN25k5naCIAiCIAg5RqaSrL59\n++LIkSNfbD906BBCQ0MREhKCVatWYdCgQZm5nSAIgiAIQo6RqSSrfv36MDIy+mL7/v374ebmBgCo\nVasWYmNj8erVq8zcUhAEQRAEIUfIp8nBIyMjYWNjo/yztbU1IiIiULJkyU/66ejoaDIMQRAEQRAE\ntVLlwByNJlmfC+JLCVVePN3Hy8sLXl5eGhn76dOnOHToEA4dOoSTJ08iOTk5XR9zc3OUKVMGNjY2\nkMvlSEpKQnJyMpKTk5GUlISIiAjExMSku87R0RG9e/dGr169YGdnl+HYNPm5szPxufMW8bnzlqz+\n3M9in+H0s9O4+uIqgl4E4far2yhdrDSczJ1gpG8E/Xz60M+nj0L5CkE/nz6SJEkICgnC7fDbeJny\nEtKCUiAOQDiARwAeA4V0CqFs2bIoXbo0dHV1IZFIIJVKIZFIIJFI8OLFCzx58iRdLIUKFULbtm3R\nvXt3tGzZEvr6+ln230FbVH05pNEky8rKCuHh4co/R0REwMrKSpO3zNNkMhn27dsHPz8/XLhw4ZO2\nmjVrolWrVnB2dkaZMmVQunRpFCpU6KvjkcSzZ89w7do15VdQUBAePXqEqVOnYurUqahbty569+6N\nbt26oUSJEpr8eIIgCHlakiQJu+7vwtqba3E3+i6a2jXFj5Y/okvFLqhuXh1FCxZNd014eDgWLFiA\nTZs2ITo6Wvn94ibFUb9tfRSpVwRhjcJwN/4ualjUQGvH1mhXrh3Km5T/bAzx8fG4e/cubt++jdu3\nb2Pv3r148eIFtm/fju3bt6No0aLo0KEDevToAVdXV+jq5u0iBhpNstq1a4elS5eie/fuuHTpEooX\nL55uqlDIvMTERKxbtw4LFy7E48ePAQCGhoZwdXVFq1at0KJFC5ibm2d4XB0dHdja2sLW1hadO3cG\nAEilUpw4cQIbN27E7t27cf78eZw/fx7Dhg3Db7/9hkmTJsHS0lKtn08QBCGvIolLEZew9uZa7Ly/\nE3Vs6mDwj4PR1rEtCuYr+MXr7t+/Dx8fH2zatAlSqRQAUKZMGbRv3x7t27dHvXr1kC/fvylAsiQZ\ngU8DcTDkIBr/rzEqmFbAKOdRaOHQAro6/yZKRYsWhbOzM5ydnQEApqam6NevH7Zv346tW7fi2rVr\nCAgIQEBAAKpUqQJPT0907Ngx7yZbzITu3bvTwsKC+fPnp7W1Nf/880+uWLGCK1asUPYZPHgw7e3t\nWbVqVV67du2z42QyjBwrMDAwU9e/e/eOEydOpJGREQEQAO3s7LhkyRImJCSoJ8iviI+PZ0BAAF1d\nXamjo0MA1NfX5+jRo/n69esvXpfZz51Tic+dt4jPnbdo4nNfe3GNDdc3pMNiB3qf9WbE+4hvXnPx\n4kW2b99e+TtBV1eXPXr04NWrVymXy1W6b6o0lRtubqDTcidWWFqBq6+tZrIk+bN9//u5Q0JCOGPG\nDFpbWytjqFKlCnfu3EmZTKbS/XMCVfMWnQ+dtUpHRydPrsn6XiQREBCAMWPGKF//1qlTB6NGjUL7\n9u2hp6eX5THdv38fU6dOxa5duwAonnZGjBiBkSNHolixYlkejyAIQk4VGReJSScn4UjoEUxrOA39\na/RHPt2vTzy9ePECw4YNw86dOwEA+vr66NevH0aNGvVda2cBxe+awKeB8Lvoh2svrmGk80gMrz0c\nv/efjadP0/e3tQXWr/cCAKSmpmLt2rWYPXs2IiIiAABVq1bFzJkz0bZt2++KJztROW/RWJqXAdkk\njBzhzp07rF+/vvIJoV69erxw4YK2w1K6evUqW7ZsqYzP1NSUO3fu1HZYgiAI2V5CagI9Az1ZYm4J\nTjg+ge9T3n/zGqlUyiVLlrBo0aIEQAMDA06YMIFRUVFqje1e9D223tSa5ZaUY9UOvQkw3ZeLi2e6\n61JSUujv708rKyvl74Vu3brx1atXao0vq6mat4g3WTlEfHw8pk2bhoULF0Imk8HU1BTz5s3DL7/8\nki1LYJw7dw4TJkzAuXPnAABlylSGhUVL5M9f+JN+Hz/5CIIg5FXnnp9Dr929UNemLrybeKN08dLf\nvObGjRsYOHAggoKCACjWQS9ZsgSlSpXSWJwHHh5At3V9kBLWBPh7PvD+33u5uHjh1Cmvz16XmpqK\n5cuXY/LkyUhMTISxsTGWLFmC7t27Z8vfYd8i3mTlIhcvXmSpUqUIgDo6OnR3d2dMTIy2w/ommUxG\nf39/Fi5c+MMTjDmBfd988hEEQcgrZHIZZ5+ZzZK+JXnw0UGVrklNTeXo0aOpq6tLALSysuKePXs0\nHOm/6jWaSLh4EWONaV7Pg7q6SSr/PA8LC2PTpk2Vb7XatWvHyMhIzQetZqrmLeJNVjZGEosWLcKY\nMWMglUpRs2ZNrFixAj/88INW4kmSJOH88/N4+PYhIuIilF/hceF4nfgaBgUMUKxgMRTTL6b8X9vi\ntnDI74AxP89AfHTkh5H6AFgEoPhXn3wEQRBys9eJr/HLnl+QkJaArV22wtrQ+pvXhIeHo2vXrrh8\n+TJ0dXXh4eGBGTNmoGjR9OUb1B/wa+DCBWzx8IFNuA6KGV3HsFYyPC1UDGE7L8PF6X8q/TwnibVr\n12LkyJGIi4tDsWLFsGrVKnTr1k3zn0FNVM1bRJKVTcXGxqJfv37Ys2cPAGD48OGYO3cuChQokGUx\nyOQyXH95HcefHMexJ8dwJfIKqplXQ5WSVWBjaANrQ2vll5mBGRLTEvE+9T3ep7xHXGoc3qe+x8M3\nD3H2+VmcfHQasrfGwPNoWD+T4eUjW8jSDsLFZbtIsgRByHPOPDuDXrt74Zeqv2B6o+nfXNgOAMeP\nH0ePHj3w5s0blCpVCtu2bUPt2rU1EyAJPHgAnD8PXLig+N+oKKB2bax9mIZNzybjMmqBIAY6V8Cq\nurEoHdYa93ZuU/kWkZGR+OOPP/DXX38BAMaNG4dZs2ZpZfNWRokkKwe7fv06unbtiidPnsDQ0BDr\n1q1Dp06dsuz+N6NuYvnV5dh5fyfMi5ijmV0zNLVrCpfSLp8tdqcKl4ZTkBRigR9Lz8XTMs9xxhpI\nvJUfZWNd8ejSATV/AkEQhOxr4aWFmHt+Lta1X4cWDi2+2V8ul8Pb2xtTpkwBSTRv3hybNm2CiYmJ\n+oJKTgauXlUkU/8kVoaGQN26/35VqgTo6eHXX70+2V1YIi0Bv0WthFtXObo37AffZr7Qz6da1XeS\nWLp0KUaMGAGZTAZXV1ds2bLlq+ciZwdiTVYOtX79ehYoUIAAWL16dYaGhmbJfZMlydxwcwNrr6lN\n6/nWnHF6BsPfh2d+YLmcPHCAdw2teR/l2RsbaIgX3F/MkM5NQYwBK0yvwKOhR1Wu4SIIgpATyeVy\nTj45meWWlOPz2OcqXRMTE8O2bdsq1zBNnTqVUqk088FERZG7d5OjRpG1a5OFC5M//kgOH07u2EFm\ndJ3U/fuMtTZhlyUNWG1FNT588zBDlwcGBtLExIQA6ODgwLt372bs/llM1bxFvMnKJkjC29sbkyZN\nAgAMGjQI8+fP1/gZUG+S3sD3gi/W3liLmhY1MeiHQWjt2FqlV9dfJZcDu3cDs2YBcjn8jRyxixUg\n/1A52CglDkuuLcdonRRsqwIUcy2GUtalsKTVErjYuqjhkwmCIGQfcsox/MhwnHt+Dn/3/humBqbf\nvCY8PBzNmzfHgwcPYGRkhI0bN6JVq1bfcXM5cP/+p1N/MTFA7dr/vqX66SegcOFvj/U1Z8+CnTth\n5eo/MPXRSmzqtAnN7JupfPmzZ8/QsWNH3LhxA0WKFEFAQAA6dOiQuZg0RLzJykFkMhk9PDyUuweX\nLl2q8XsmpiVy1plZNJ5rTPeD7gx5G6KegSUScsMGsnx58qefyP37FW+zPufuXaYYGrKFvj4B0L6t\nPa3mWbHPnj58lZCza6gIgiD8QyKT0G2PG+utrcfY5FiVrgkODqaNjQ0BsHLlynzy5InqN0xIIAMD\nyZkzyZYtyeLFSXt7sk8fcuVK8u5dUlPV17duJW1seCZoJ0v6luSf1//M0OWJiYns0aOH8s3dkiVL\nNBNnJqmat2SL7CYvJ1kpKSns1q0bAbBAgQLcsWOHRu8nlUn55/U/aeVnxa7bu/LRm0fqGTglhVy1\nirSzI11cyKNHv5xcfezECaaVKMHGlpYEQMfKjvxj1x809THl8qDllMrU8FpcEARBS1IkKey4tSNd\nA1yZmJao0jVXrlyhsbExAbBOnTrfLtkTGUlu304OG0b+8INi6q92bcVU4O7d5MuXavgkGeDrS1au\nzAdPgmi3yI6TT07O0HIQuVxOb29vZaLl7e2twWC/j0iycoDY2Fg2atSIAGhoaMiTJ09q9H5/h/7N\nSv6V2GBdA14Kv6SeQRMTyUWLSGtrskUL8uzZjI+xfj0lpUrRpXx55fmLR24cYb219fjT6p94K+qW\nemIVBEHIQklpSWy2oRk7b+vMFEmKStccO3aMBgYGBMBWrVoxMfE/iZlUSt68Sfr7kz17kqVLk8bG\nZNu25Jw55JkzZFKS+j9MRsjl5JAhZJMmfBUTzlqra7H37t4q/zf4x6pVq5Tn4k6YMCFbrdsVSVY2\nFx0dzWrVqhEAzc3NefPmTY3d613yO/bb14+2C22578E+9fxFjYsj584lS5Yk27cng4IyN56nJyXV\nqrHuh/8mpUqV4sNHD7nm2hqa+Jjwfzf/l/mYBUEQsohUJmXHrR3ZY2cPSmQSla7Zvn078+fPTwDs\n3bs309LSFD9rjx0jvbzIZs1IQ0OyXDmyb19yzRoyOFi1WYOsJpUqfjf88gsTUxPYcWtHNlzfkDFJ\nGSukvXnzZurp6REAPTw8ss0h0yLJysZiYmKUCVbZsmUzNteeQYceHaLNfBsO+msQ41LiMj9gTAw5\nbRppYkL26EHevp35MUnFD4lffmFaq1asW7s2AdDCwoL379/n3Vd36bjEkYP+GpThJyFBEISsJpfL\nOfTwUDZa34ip0lSVrgkICKCOjg6tAa5v0YLywYPJ6tVJAwOybl1y7Fhy3z7y9WsNR69GiYlkrVrk\npEmUyqQcdngYnZY7MTohOkPD7N27V7nr/tdff6VEolrSqkmq5i1id2EWi4uLQ7NmzXDlyhU4Ojri\n9OnTMDc3V/t9YlNiMfLvkQh8Gog/2/2JxmUaZ27A6GhgwQJg1SqgfXtg/HjA0VE9wf4jLQ1o0QJp\n5cqheXAwTp8+DVNTUxw7dgxlypfBr3t/RWR8JHZ23QmbYjbqvbcgCEIG/bde1D8Sq15EcvlInOt3\nDsX1i395AKkUuH0bt5YtQ/DatahDwtjAAIWbNYPOP7v+atQAChbU2GfQuNevAWdnYOxYcMAATA6c\njP0P9+NEnxMwMzBTeZhjx46hQ4cOSEpKws8//4xNmzZptWip2F2YDSUkJLB+/foEwDJlyjA8XA11\nqD7j5JOTtJ5vTfeD7oxPjc/cYBERisWURkakuzv59Kl6gvySd+/IihWZ6uPD5s2bEwCNjY0ZHBxM\nuVzOuefmsqRvSR5/fFyzcQiCIHyDi4vnJ2exAiQqbmfB8Yafr4MVG0seOUJOmUI2bkwWKcL4UqW4\nRkeHbgDnu7tnz6m/zHr0iDQ3Jw8epFwup2egJyssrcAXcS8yNMy5c+doaGhIABwwYIBW12ipmrdk\ni+wmLyRZycnJykMxraysNDJFKJPL6H3Wm+bzzHk09GjmBnvyhBw4UJFcjRyZ8cJ0mREWRlpaMm37\ndrZs2ZIAaGNjo0xKTzw5QfN55hneGiwIgqBO6ZKsUmeIMaas2WqgIll68oTcuJEcNIisWlUx9deg\nATlhAnngAC/89RcLFSpEABw6dGi2WtitdhcvKpaZXL1KkpxxegYdlzgy4n1EhoY5c+YM9T+U/Zkw\nYYImIlWJSLKykdTUVLZu3ZoAWLJkST58mLFKuKp4l/yO7ba0Y+01tTNXqT04WFFLpUQJcuJE7c3/\nBwWRJiZMPn2azs7OBMCKFSvy7du3JMmHbx6y9ILS9Lvgp534BEHI8z5OsvRMbjHf6BLsYD+QgSYV\nSQsLxdubzp3J+fPJy5fJ1H/XZwUFBbFo0aIEwH79+mWbBd0atXs3aWmpeJAmOefsHDosdlC5+v0/\nDhw4oFwMP2/ePA0E+m0iycomZDKZsg6WsbEx79y5o/Z73Hh5g/aL7OlxyEPlRZbp3LxJdutGmpqS\nM2Yopu20bf9+0tyc765dY8WKFZU1Y/7Z0vws9hkdlzhyyskpufsJUBCEbOmfJEuv4GvaDC3A6dWs\nuAx/cGb5joq3WF/4uXTnzh2WKFGCANitWzf1HJOTUyxerChW/eGB2e+CH8ssLJPhRCsgIEBZR2vd\nunUaCPTrRJKVTYwdO1ZZB+vatWtqH3/9jfU08THh5tubv2+Ay5fJdu0UT13z5pHxmVzDpW5LlpDl\nyjHizh1l9ePWrVsrtjaTfJXwitVWVKPHIQ/K5HngSVAQhGxDkWTJad+1Gtu0slG+1XJx8fziNeHh\n4bSwsFD+LEtN/c4H45xs5Eiyfn0yOZkk6Xvel+WXlufrxIzNnCxatIgAqKenx71792oi0i8SSVY2\nsGrVKgJgvnz5ePy4ehdqy+QyTjg+gQ6LHXj31XccpHn6tKLmSqlS5NKl2i9e9zUjR5INGjD45k3l\n05+bm5vy7dW75Hes+2dd/rL7F5Xr0QiCIGSWm5snK/3clFUH6vKXnwbQxcWTLi6edHPz/Gz/+Ph4\nZfmeBg0aMCk7/9zVJJmM7NpVMXvyYZp0/PHx/GHVDxkuNTRlyhQCYMGCBXn69GlNRPtZIsnSsmPH\njinnjNesWaPWsZMlyey+szvr/FknY5m/XK7Y2VKvHungQP755ydrBLItmYzs1Ins2ZOXLlxg4cKF\nCYATJ05UdklMS6RrgCs7beskEi1BELLE1cirNJlaiCGDfv5mX6lUynbt2inrI7558yYLIszGkpMV\nv4tGjyapqC32+4Hf2Wh9IyZLklUeRi6X093dXbkk5/Hjx5qK+BMiydKie/fusVixYgTAcePGqXXs\nN4lvWG9tPXbd3pVJaSo+Bclk5J49ijOtKlUiN21SHOSckyQlKc7imjSJhw8fViawW7ZsUXZJlabS\nNcCVv+79VUwdCoKgUbHJsbSbV4rbahUho6K+2X/06NEEQCMjI41sfsqR3r5VVK//cAi0VCZltx3d\n2H5L+ww9LEulUrZq1YoAWKlSJb5//15TESuJJEtLoqKiaGtrSwDs0qWLWneMhL4NpeMSR445Oka1\nJEIqJbdsIStXJmvUUOzsyMk7WF69UhxAvWaNci6+UKFCvPphSzBJJqQmsPaa2hz590ixGF4QBI2Q\ny+Xssr0L3T3syVmzvtl/9erVyqUjmj6jNsd58kSx4/DDmqp/Hpbd9rhl6GE5NjaWFSpUIAC2adNG\n45sJRJKlBUlJSaxVqxYB8KefflLrfPul8Es0n2fOZVeWfbtzWhq5bh1ZtixZpw556FDuKXD34AFp\nZkb5kSPs168fAdDa2povPzpl/m3SW1ZeVpmzz8zWYqCCIORWSy8vZXU/RybbWn9zPevJkyeZL18+\nAuDq1auzKMIcJihIsbP90iWSiodl5zXOHPn3yAwNExISoly3q+5ZpP8SSVYWk8vl7N27NwGwdOnS\njFLh9bGqTj45SRMfEx54eODrHZOTyWXLFKeyN25MBgbmnuTqY2fOkCYmTA0KYp06dZSlHVJS/j3X\nMDIukmUWluGKoBVaDFQQhNzm+ovrNPExYUjDqopCo1/x8OFDGhkZEQBHf1h7JHzBX38p6oqFhJAk\nY5JiWGFpBS66tChDw3yc1AYEBGgiUpIiycpy/v7+BMDChQvztroOTSZ58NFBmvqYMjAs8MudEhJI\nPz/FK9fWrckLF9R2/2xryxbSxobRN27Q2tqaANi/f/9PpghD3obQ0s+S2+5u02KggiDkFimSFFZe\nVpkBywcp1rh+ZflFfHy8cvqqffv2easW1vdauVKxKStacYB02LswWsyz4L4H+zI0zLJly5Q7Di9e\nvKiJSEWSlZUuXrzI/PnzEwA3b/7OelWfsePeDpr5mvFS+KXPd4iNVawHMDMju3Qhr19X271zBG9v\nslo1Xj99WnnMwuLFiz/pcivqFs18zcRZh4IgZNrkk5PZbmNrykvZKN6of4FcLmfPnj2VJ1XEZ7f6\ng9nZxImKTU4fik5fjrhMEx8TBkUGZWiYf3YcmpubM1IDx8KJJCuLREdHK9+keHh4qG3c9TfW02Ke\nBW++vJm+8fVrcvJk0tiY7NWLvHdPbffNUeRycsAAsmVLbvlQ/VdPT4+nTp36pNupsFM08zXjozeP\ntBSoIAg53bUX12jqY8oXs8YrSsp8xT8zGwYGBrx//34WRZhLyOVk795khw6KzVsk9wTvoaWfJZ++\ne6ryMGlpaWzUqBEB0MXFhRI176gXSVYWkEqlbNKkCQHQ2dlZbZV7/a/403q+NYNfB3/a8PKloqaI\nkZEiuQgNVcv9crS0NNLVlfzjD477UF3f0tKS0R9eN/9j5dWVLL+0PGOTY7UUqCAIOVWqNJVVllXh\nhjNLFA+3H9YNfc7ly5eVMxtbt27NwihzkdRUxbriIUOU64oXXFzASv6V+C5Z9SPfoqKiaG5uTgCc\nNGmSWkMUSVYWmDhxIgHQzMyMEREZO0n8SxZfWswyC8vwccxHBdWePVP8ZTMyIj08yOcZO+Mp14uL\nI52cKJ0zh/Xq1SMAurq6piufMeTQELbY2IJSmVgbIQiC6jwDPdlmcxvKB/5OjhjxxX5v3rxhqVKl\n1D6zkSfFxirKD304AFoul3PIoSFs8r8mGTqj99SpU9TV1SUAHj58WG3hiSRLw/bt20cA1NXVVVvd\nk+VBy1l6QWmGvQtTfCMkhOzfX5FcjR2rUsG7PCs8nLSx4Ztly2hsbEwAnD370xIOEpmETf7XhKP+\nHqWlIAVByGluvLxBUx9TRgSdUJQZiIn5bD+ZTMYWLVoQAGvVqpU3zyRUt+fPSWtrcpti85JUJmWb\nzW04YP+ADNVBnDlzprIifHh4uFpCE0mWBoWFhSkrus+ZMydD17q5eSrPt/r4q87gdrSeb83Qt6Hk\n3btkz56K19JTp5J5/fgFVd26RZqa8oKvr3J91tmzZz/p8jbpLR0WO3DdjXXaiVEQhBwjTZpGp+VO\nip8XLVqQCxd+se/06dOVv8ifPXuWdUHmdjdvKpLbDxsN4lLiWMm/EpdeXqryEDKZjK6urgTAunXr\nMi0tLdNhiSRLQyQSibI2U7t27TJcVVxxajs//aq6gQUmFOXD07sVCyrNzBQ757LgaIBc58gRsmRJ\nzv3tNwKglZUVX7/+9HzH+9H3aepjyvPPz2spSEEQcoJpp6ax5caWlB8+rCju/IW3UydPnqSOjg51\ndHT4999/Z3GUecDRo4rfix82ETyOecySviV54skJlYeIjo6mlZUVAXDs2LGZDkkkWRri6emp/OX9\nPQd8pkuyKm9m/lEm3GJfirSyIhcsUNS9Er7fqlWUOziw5Y8/EgBbtmyZbn3WoUeHaDHPgpFx6t/a\nKwhCzncv+h5NfEwYHvNUsTZoz57P9nv79q3yl/eUKVOyOMo8ZN060tZWsQGMiiLdZr5mitkfFZ09\ne1Z57u3+/fszFY5IsjTg3Llz1NXVpY6ODk+cUD2D/tjHSVa5CjNZYlQBHjaz5LyyrcmPKpYLmTRh\nAlNq1qTlh2rLc+fOTddlxukZdFnnkqGDSAVByP3kcjkbrW+kqDa+ahXp4vLZ0zPkcjm7dOlCAKxd\nu7baywQI/zFtmuIc3g91x5ZeXsqK/hX5PkX1WZ85c+Yop3VfvHjx3aGIJEvNYmNjWbp06Uy/avwn\nyapt70mT0TpsYz6d+ZBGFxdP9QUrKCox9+jByHr1qPPhYNZr16590kUqk7LZhmacfHKyloIUBCE7\n2nx7M52WO1ESG6M46uWjQ+g/tm7dOgJgkSJF+Pjx48/2EdRILif79SNbtSIlEsrlcv5+4He23dxW\n5cOkZTIZmzVrppzlyOiSn3+omrfoQlCJu7s7nj17hpo1a2LGjBmZGsvZeh5COk1HiW2r8VfUFEiR\nX01RCkq6usC6dbDU0cHRGjUglUrRu3dvJCcnK7vo6ephY6eNWHdjHY4+PqrFYAVByC7iUuMw+tho\nLGu9DPl85gHNmwM1a6br9/jxY3h4eAAAli5dCjs7u6wONe/R0QFWrABkMsDdHToAlrRcgtiUWEwJ\nnKLSELq6uli3bh2MjIxw+PBhLF++XKMhiyRLBRs3bsTmzZtRuHBhbN68GQUKFPjusX4odhWh3ceg\n1u1msLALh4uLF1xcvGBrq754hQ8KFgT27EHj+Hh4liyJ4OBgTJw48ZMuZgZm2NhpI9z2uuFF/Ast\nBSoIQnbhdcoLrvauqENrxS/0WbPS9ZFIJOjVqxcSEhLQrVs39OnTRwuR5lH58wM7dgBBQYC3Nwro\nFcCubruw6fYm7Lq/S6UhrKyssHLlSgDA6NGj8fDhQ83F+13vydQsm4TxWY8fP2bRokUJgGvWrMnU\nWE/+CqDVaF1u3umpnuAE1Tx+zFQTE7b9UJDu+PH05xjOOD2DDdY1EOuzBCEPux11m6Y+poxOiFYc\nWfaFhexTp04lAFpbWzPmC3WzBA2LjCRLlyYDAkiSVyOv0sTHhPeiVT9m7pdffiEA/vDDDxku66Bq\n3pItspvmmmmeAAAgAElEQVTsmmRJpVJluYbOnTt/99wtSb48upv2w3W5dNMwNUYoqOziRSYULszq\nH34wvnv36dEM/6zPmnRCvUcvCIKQM8jlctZbW4/Lg5aTV66QlpbKBdYf+3gDVGBgYNYHKvzr7l1F\naYcPG9HW3VhHxyWOKh+fFhsbq6zQn9GdoSLJUgPfD0UtLS0t+fbt2+8e513gYToN1uO0tW7qC07I\nMOn27XyVPz9tAPbq1Std+6uEV7Tys+KRkCNaiE4QBG36383/8YdVP1AqlZD16pGfmbmIj49nmTJl\nCIDjxo3TQpRCOoGBimKlt2+TJAf9NYjtt7RXeSH8qVOnqKOjQ11dXV64cEHl24okK5OCg4NZsGBB\nAuDBgwe/e5zk86fpMiA/PVa0z9SbMEE9Xk2YwLs6OjQEuO3DUQ0fCwwLpKWfJV8nvv7M1YIg5Ebv\nkt/RfJ45r0RcIXftIqtWJaXpzzgdPHgwAbBatWri2JzsZNMm0saGDA9nqjSVzmucOfP0TJUvHzNm\nDAHQ3t6e8Z95e/k5IsnKBKlUylq1ahEA+/bt+93jyK5cZtfeBdl1UT2Vs2pBw+Ry3nZx4TGAZsWL\nMzIyfTHSMUfHsOPWjiIpFoQ8YsihIRx4YKCioru9PXnsWLo+gYGBxIdyMDdv3tRClMJXeXsrkuP3\n7xkZF0lLP0seDlHtQOiUlBQ6OTkRAAcNGqTSNSLJyoS5c+cqq7r/d+2OquTXr3NYx0Js4FuJyZJk\nNUcoZIZcIuFFU1OuBdimdet0yVSKJIVVllXh+hvrtRShIAhZ5Z/K7m8S35Dz55OtW6frk5CQoJwm\n9PLy0kKUwjfJ5eSgQWSzZmRaGs88PUMzXzM+jlGtftnt27eZP39+AuCpU6e+2V8kWd/p3r17ymnC\nQ4cOfd8gt29zXvOirORtw5gksfMkO3oREsLrenqcDHDTpk3p2m9F3aKJjwnD3oVlfXCCIGSZVpta\ncf6F+eSbN6SJifJ8vI95eHgQAJ2cnMQ0YXYmkZBt2pBubqRczsWXFtNpuROT0pJUutzLy0s5bZiY\nmPjVviLJ+g4SiYQ/fjjvrn///t83yL173FyvGG1mGvN57HP1Biio1SY/Pz4B+EeRInz16lW6dp9z\nPqy/tj6lsvRrMwRByPn+Dv2bDosdmCpNJYcOJd3d0/U5deqUcprwxo0bWohSyJCEBPLHH8mpUymX\ny9l9Z3f229dPpUtTU1NZpUoVAuCIESO+2lckWd/B29tbWfskNla1LaCfePiQJ34wpun0orwddVv9\nAQpqJZfL2a92bUYBnNawYbp2qUzKBusa0OecjxaiEwRBkyQyCSv5V+Ke4D3kw4eKt1jR0Z/0SUhI\noL29PQFw6tSpWopUyLCoKNLOjlyzhvGp8aywtALXXFOtzuXVq1epp6dHHR2dr+42zLIk6/DhwyxX\nrhwdHBw4Z86cdO2BgYE0NDRktWrVWK1aNc6YMeO7g9Wke/fusUCBAgTAI0e+Ywt/aChvVylJ0+lF\nGRgWqPb4BM148uQJWxQsyCiAx5csSdce9i6MJj4mvPlSLHQVhNxkRdAKuqxzUazJbN+e/Mwh8kOH\nDiUAVq1aVUwT5jQPHpAlS5KHD/N+9H2a+Jjw+ovrKl06fvx4AmD58uWZnPz5NdVZkmRJpVLa29sz\nLCyMaWlpdHJy4v3/zGcHBgaybdu2Xw9Cy0mWTCajs7MzAfC3337L+ABhYYwob0mb6UbccmeL+gMU\nNGrRokXsDfCZnh5jHzxI177uxjpWWVZFbGAQhFzifcp7lvQtyWsvrinqLNnakv/5ZXrmzBkCoJ6e\nHq9fV+2Xs5DNnDunqKF1/Tq33tlKu0V2fJf87c1sycnJLFeuHAFwwoQJn+2jat6SLzNH8ly5cgUO\nDg6w/XDwXvfu3bFv3z5UqFDhv0f3fHMsLy8v5f9v2LAhGjZsmJnQMmTFihW4ePEiLCws4Ovrm7GL\nnz9HnGtDtP5FB+4Nx6J75e6aCVLQmCFDhqD+tm1Yc+EC+tarh2JPnwIGBsp2Nyc37Hu4D9NPT8fs\nJrO1F6ggCGrhfc4bLcu2RI2S1YA2PwJz5gD6+sr21NRUDBgwAAAwYcIEVK9eXVuhCplRty6wfDnQ\nti1+vnABFxzboM+ePtjbfS90db58dLO+vj7Wrl2LevXqwcfHB507d0Z8fDxOnTqV8RgykhT+144d\nOz558xMQEMAhQ4Z80ufUqVMsUaIEq1atypYtW/LevfTnCmUyjEyJiIhQnk24c+fOjF7MNAc7us4o\nx4EHBoq6SjlYcHAwCxYowLUAX9Wuna4Q4cv4lzT1MVX5dbMgCNlT2LswlphbgpFxkeT//kfWrq3Y\n/v8RT09P5XRRSkqKliIV1GbBArJiRaa+jqLzGmd6n/VW6bIRI0Yop4v/e7ahqnnLl1M5Fejo6Hyz\nT40aNRAeHo5bt27Bw8MDHTp0yMwt1c7DwwPx8fFo3749OnXqpPqFUVFg40ZwdzOBnp09lrZaqtJ/\nDyF7Kl++PDy9vDAQwKObN5E2eDDw0RtY8yLm8Gnmg377+0Eik2gvUEEQMmX88fEYVmsYLPWKA5Mm\nAfPnAx/97H7w4AG8vb0BACtXrkTBggW1FaqgLsOHA82bo0CXn7G9XQAWXV6EwLDAb142c+ZM2NnZ\n4fbt25g/f/533TpTSZaVlRXCw8OVfw4PD4e1tfUnfYoWLYrChQsDAFq2bAmJRIKYmJjM3FZt9uzZ\ngz179qBIkSJYujQDSVJ0NNCkCbx7lcY1Uwm2ddmGfLqZmnkVsoHRo0ejcvXqaJOSgpidO4FFiz5p\nd3NyQ0mDkvC9kMEpZUEQsoWL4RdxPvw8RjmPAvz8FNNJzs7KdrlcjoEDByItLQ39+/dHgwYNtBit\noFbz5gHGxrAeNgUb2q9Hr9298DL+5VcvKVy4MJYvXw4AmDZtGsLCwjJ+3wy/dvuIRCKhnZ0dw8LC\nmJqa+tmF71FRUcpptMuXL7N06dLpxslkGN/l/fv3tLS0JAAu+cyusi96/ZqsUoWbpnZk6QWlFa+c\nhVwjKCiIOjo6tNXVZaqZGbl79yftT989pfFcYwa/DtZShIIgfA+5XM56a+tx7fW15IsXZIkS5JMn\nn/RZs2YNAdDMzIxv377VUqSCxiQlkXXqkOPG0SvQiy7rXCiRSb55WY8ePQiALVq0UOYzquYtmc5u\nDh06REdHR9rb23P27NkkyRUrVnDFihUkyaVLl7JSpUp0cnKis7MzL168mD4ILSRZ/xz0WatWLUo/\ncxDoZ719S1arxlMTetLUx5R3Xt3RbJCCVgwZMoQA2KdKFcpNTclLlz5pX3J5Cev8WUcUKRWEHOTA\nwwOs5F9J8e+2f39y7NhP2l+9ekUjIyMC4ObNm7UUpaBxr1+Tjo6ULvNnsw3NOP74+G9e8vLlSxYv\nXpwAuG3bNpKiGOlXXbhwgTo6OsyXLx9v3bql2kXv3pE1azJ4TF+a+Zrx+OPjmg1S0JrY2FhaWFgo\njlZydyctLMjH/55/JZPLWG9tPS66tEiLUQqCoCqpTMpK/pW478E+8uZNRf2k/xSc7tmzJwHQ1dVV\nbGLK7UJDSQsLRu8KoPV8ax54eOCbl6xcuZIAaG5uztjYWJFkfUlaWhorV6781foX6bx/T9aqxahh\nv7HMwjJcd2OdRmMUtG/79u0EwOLFi/O9tzdZrpziTeYHD14/oPFcY3G2oSDkAOtvrGfdP+tSLpOR\nTZqQ/v6ftB85coQAWKhQIT75zxSikEtdvkyamvLckdU08zX75s9ymUzGOnXqEADd3d1Vzlt0SBWK\nWGmYjo6OSrW01MHX1xdjx46Fvb097ty5g0KFCn39goQEoEULJFWtgEY1bqOFQwtMazgtS2IVtIck\nWrdujcOHD6NXr17YaGEBXLkCHD0KfNhtNOfcHJwIO4GjvY+KnaWCkE2lSFNQbmk5bO60GXXvxAKj\nRwN37gD5FJuVkpKSULlyZYSFhWHu3LkYO3asliMWssyBA8DAgfBb9Su2vTyOs33PomC+L+8mvXPn\nDmrUqAGZTAYqXlJ98xaZ2l2Y00RERGDaNEWC5O/v/+0EKzERaN0asgrl0NvlLcoZl4OXi5fmAxW0\nTkdHB0uXLoW+vj42bdqE482aAWZmQN++gFwOABhdZzReJ77G5jubtRytIAhfsixoGZxKOqGuxU+K\nBGvePGWCBQDe3t4ICwtD1apVMWLECC1GKmS5tm2BKVMwctROWOmbYvSx0V/tXqVKFYwaNSpjL4Uy\n87ZNXbIqjC5duhAAO3fu/O3OSUlk48akmxtHHB7OhusbKk5qF/KU2bNnEwDLli3L5JgY0tmZnDRJ\n2X4p/BLN55kzJilGi1EKgvA5scmx/25S8vdXTBV+tN7q0aNHyjNrz58/r8VIBa0aN47vGvxE+4V2\n3Hpn61e7JiYm0tbWNmuKkeYkR48exc6dO2FgYIAFCxZ8vXNKCtChA2BujiV/VMfhx0ewu9tuFNAr\nkDXBCtnGqFGjULFiRYSEhMB74UJg3z5g61ZgzRoAQC3rWuhYviMmnpyo5UgFQfgvnws+aO3YGpUL\n2gDTpilqY32Y2ieJIUOGIC0tDX379kWdOnW0HK2gNbNno7ilHXZcscWQw0Pw8M3DL3YtXLgwli1b\npvLQeWJNVmpqKqpUqYKQkJBvz7mnpgKdOwMGBtg7tRsG/z0U5/udh21xW43FJ2Rv586dQ/369VGw\nYEHcu3cP9jIZ0KABsGED0Lw5YlNiUdG/Inb/vBu1rWtrO1xBEAC8jH+Jyssr48bAGyg12x948wb4\n809l++7du9G5c2cUL14cDx8+hJmZmRajFbQuNRVwdcXqWvmwqHQULv92GQYFDL7YXdW8JU+8yfL1\n9UVISAgqVKiA4cOHf7mjRAL8/DNQoAAuzfXA74cGYX/3/SLByuPq1auHPn36IDU1VfH3x9ER2LUL\n6N0buHULxfWLY17zeRj410BI5VJthysIAoBpp6ehb7W+KBUjU7x5njFD2ZaYmKj8XTB79myRYAmK\nDU179uC3v16gRmwhuB9yV8/Ln8xNZKqHJsN48uQJ9fX1CYCBgYFf7iiRkF26kG3aMOTlPZrPM+fB\nRwc1FpeQs7x8+ZKGhoYEwAMHPtRU2bqVtLEhIyIol8vZdENT+l3w026ggiAw5G0Ijeca803iG/Ln\nn8lp0z5pHz9+PAGwRo0aqhejFvKGp0+ZUNqClbxtuPra6i92UzVvyfVJVtu2bQmAPXv2/HInqZTs\n3p1s0YLRMeF0WOzAlVdXaiwmIWdasGABAdDOzo7JycmKb86ZQzo5kXFxfPTmEY3nGvNZ7DPtBioI\neVyvXb04/dR08sIF0tqaTEhQtgUHBzN//vzU0dHhpf+c5iAIJMnr1xlc1ogms4rz+ovrn+0ikiyS\n+/fvJwAaGhryxYsXn+8klZK//EI2bcqk929Ze01tTjiuYpFSIU+RSCTKQrbTp09XfFMuJ3//nWzR\ngkxLo1egFzts7aDdQAUhD7vz6g7NfM0Yl/yerF2bXL9e2SaXy9mkSRMC4IABA7QYpZDtHTnCLXWL\n0X5eKcYmx6ZrVjVvybUL31NSUlCxYkWEhYVh4cKFGDZsWPpOcjkwYADw5AlkB/aj26FfoZ9PHxs7\nbhTFJYXPOn36NBo2bAh9fX0EBwfD1tYWkEoV9VZsbJDqvxhVVzrBt5kv2pVrp+1wBSHP6bStE+ra\n1MWocGvAxwcICgJ0FcuPt23bhu7du6NEiRJ4+PAhTExMtBytkK2tXYshx0YgskVd7O5z8JO8IM8v\nfPfz80NYWBgqV66MwYMHp+9AAu7uwKNH4P79GHpmPN4lv8PadmtFgiV8kYuLC3r06IGUlBSMHDlS\n8c18+YDt24GgIBT0Wwj/Vv4YdmQYkiXJ2g1WEPKYqy+u4krkFbhX6QeMH68o2fAhwUpMTMSoUaMA\nKAqQigRL+KZ+/eDnOAQvbpzBvFOzv2uIXPkmKzw8HOXLl0dSUhJOnDiBxo0bf9qBBIYOBa5eBY4e\nxawbi7Hj/g6c6XsGhgUN1RaHkDtFRkaifPnySEhIwJEjR+Dq6vpPA+DsDPj4oKveLlQ2rQzPhp7a\nDVYQ8pAWG1ugfbn2GBQYD1y4AOzdq2ybPHkyZs2ahZo1a+LKlSvQ1c217xgEdSLxfEA3/GR+AFv7\nHkRD+yYAMpC3qGv6MjPUHUb37t0JgF26dEnfKJeTI0eSP/xAxsZyzbU1LLOwDF/EfWHNliB8ho+P\nDwHQ0dGRKSkp/zbcukWamvLZ0R0sMbeEOEBaELLImadnWGZhGaa+jCCNjcmHD5Vtjx8/ZsGCBUVl\nd+H7pKXx7641aDGlMCPfR5DMw2uyzp49iwYNGkBfXx8PHjxA6dKl/20kgQkTFIf8njiBA9Hn8Ptf\nv+P0r6fhaOyolvsLeUNaWhqcnJzw4MEDzJkzB+PGjfu38ehRoE8fzFzWHdclz7H7593aC1QQ8gCS\ncFnvgv7V+8Nt9RXFFP6iRcr2jh07Yu/evejduzcCAgK0GKmQY8XFYXQ3S+yzyweLYA+cPTUz763J\nkslk8PDwAACMGzfu0wQLADw9gUOHgGPHcDHhAfrv74993feJBEvIsAIFCmDx4sUAgJkzZyIqKurf\nxubNgVmzMHr8ftx6cR1HHx/VUpSCkDccfXwUr5Neo3f+mor1kVOnKtuOHz+OvXv3wsDAAHPnztVi\nlEKOZmiIsPcDYPM+FdEFrqt8Wa5KslavXo1bt26hVKlS6Y/OmTFDUaX7+HE84Gt03NYRGzpuwE9W\nP2knWCHHa9asGdq1a4eEhARMnPifswv794d+t55YGKiPoYc8kCZL006QgpDLkcTkwMmY3nA69MaN\nV8xWGBsDACQSiXJn+eTJk2FpaanNUIUc7m3BYni55xiSKxxR+ZpcM10YExODsmXLIiYmBjt27ECX\nLl3+bZwzB1i/Hjh1Cs/0U9FgfQPMaDQDfZz6ZC5wIc8LDQ1FxYoVIZFIcOXKFfz444//NpK4YF8V\no1yeIlpaGzbhdZVNtrbA+vVeWR6vIOQ2e4L3YNrpabhu7wPdQe7AvXuKI1IALFq0CMOHD4e9vT3u\n3buHgh++Lwjfo2FDL5w+7YUfLFbg6stBeWvh++DBgwmAjRo1olwu/7fBz490cCAjI/ky/iUdFjtw\n0aVFmb6fIPxj7NixBEBnZ+dP/+6RbFp/EjeW+JGFx+oTRSOpWBhIurh4aidYQchFZHIZKy+rzAPB\n+8iqVcmdO5Vt0dHRLFasGAFw3759WoxSyC1cXDyVP8NVzVtyxXThnTt3sHz5cujp6WHRokX/1rla\nsgRYuhQ4eRIxRvpoHtAcfar2wdBaQ7UbsJCrTJo0CSVLlsTFixexZcuWT9okuvngEXMEva8VhmOz\nDlqKUBByp+33tsMgvwFan4sGDA2BTp2UbZMnT8b79+/h6uqKtm3bajFKIS/L8UkWSYwYMQJyuRyD\nBg1ClSpVFA0rVigK0Z08iXiz4mi1qRWa2zfH5AaTtRuwkOsYGhrC29sbADB27FgkJiZ+0v4OJXDk\nzBkklL6GKqX8tRGiIOQ6MrkMXqe8ML32BOh4egLz5wMfHrBv3LiB1atXI1++fFi4cKEoMC2oha0t\n4OLiBRcXL5WvyfFJ1oEDB3DixAkYGRnBy8tL8c0//wRmzwZOnECKtTk6bOuAKiWrwLeZr/jHJmiE\nm5sbatasicjIyM/uYHouqQSr4x6QtRgNPZ1ULUQoCLnL5jubYWpgimbbrwKNGgEf1kOSxPDhw0ES\nHh4eKF++vJYjFXKL9eu9cOqU4ktVOTrJSktLUx6T4OXlBWNjY2DDBkWphhMnILEthZ93/gzTwqZY\n0XqFSLAEjdHV1VWWdPD19cXTp0/T9Qm6Mx9ymT6aig0XgpApEpkE005Pw/RKHtDxX6Z4qP5gz549\nOHPmDExMTDD1o1IOgqAN+bQdQGYsXboUoaGhKFeuHAYNGgRs3qw4r+rkSUjsbNFzd0/I5DJs6LgB\nerp62g5XyOXq1KmDHj16YMuWLRgzZgx27NgBW1sA8FL20X/eHLcbb0enCHctRSkIOd+GWxtQqlgp\nNPI/CPzxB1CqFAAgNTUVo0ePBgBMnz4dxYsX12aYgpBzSzi8fv0aZcuWxfv373Hw4EG0SkoCPDyA\nY8cgqVAOPXb1QLI0Gbu77UbBfGLbrpA1wsPDUa5cOSQnJ+P06dNo0KBBuj59plWDdXQKZvs/0EKE\ngpCzpcnS4LjEEZsqTUHdPpOBR4+AokUBAD4+Phg3bhwqVaqEmzdvIl++HP0eQcjGVM1bcux0oaen\np3LnSMvUVGDwYODIEWWClSJNEQmWkOVsbGyUhXBHjhwJuVyero+3+y6sLBaCsD1rszo8Qcjx1t5Y\ni/Im5VF3VgAwbZoywXr16hVmzpwJAJg/f75IsIRsIUcmWXfv3sXKlSuhp6eHle3aQeePP4BDhyCp\nXFGZYO3qtkskWIJWjBkzBpaWlrh27Ro2btyYrt3K1B7DHXpj7H4PIDlZCxEKQs6UIk3BrLOzMF23\nCfD2LdCvn7Jt6tSpiI+PR+vWrdG8eXMtRikI/8px04Uk0bx5cxw/fhxL27bF4EuXgL/+gqRmdXTf\n1R1psjTs7LpTJFiCVm3YsAFubm6wtLTEo0ePYGBg8El7siQZ5b1MsEGvC1ym/09LUQpCzrL48mIc\nC/0bB6aFKOoguroCAG7fvo3q1atDV1cXd+7cETsKBY3LtdOFBw8exPHjx9HOwACDLl4E9u5Fag0n\n/LzzZ5FgCdlG7969UbNmTbx48QK+vr7p2gvlLwSfFvMw4u0myB4EayFCQchZkiRJmHNuDqZHVQTs\n7ZUJFknl1Ly7u7tIsIRsJUe9yUpLS0OVKlVg/ugRDhsYoPChQ4ivVR0dtnWAkb4RNnXaJBIsIds4\ne/YsGjRogEKFCiEkJARWVlaftJNE/Vn26PtAH/0D7ikLKQqCkJ7fBT+cfxyI3aOuAIGBQKVKAID9\n+/ejffv2MDIyQmhoKEqUKKHlSIW8IFe+yVqxYgVMHj3Cbj09FNi9G69rVkCj/zVC2RJlsa3LNpFg\nCdlK/fr10blzZyQnJ2PixInp2nV0dLDQbQsmW4cgfsv6rA9QEHKIhLQE+F7wxbRbJRRH53xIsNLS\n0pQlG7y8vESCJWQ7OeZN1rt37/CzrS02xsXhsZcXLIa5wXWjK7pV6obpDaeLQqNCtvTkyRNUqFAB\naWlpCAoKwg8//JCuT59VLVHq4DnM3BABFCumhSgFIXubc24Oboaew9bRl4B794CSJQEAixYtwvDh\nw1GuXDncuXMH+fPn13KkQl6R695krR8yBAFxcZhftSqK/NEJ9dfVx+AfB2NGoxkiwRKyLTs7Owwb\nNgyAoqTD5/5Rzvp5FZY7SRDuNSKrwxOEbC8uNQ7zL86H59FUYORIZYIVExODadOmAQDmzZsnEiwh\nW8oRSdbz/fvRc/Nm/A7A0W8YmgY0xdymczG01lBthyYI3zRp0iSYmJjg7Nmz2L17d7p2m2I2cK81\nBBNfbQZu3NBChIKQfS26tAiuRaujwvlHwIh/H0RmzpyJd+/eoXHjxmjdurUWIxSEL8v+04V37uDd\njz/it9RURA2pg5BSIQjoGABXB9esDVIQMmH58uVwd3eHnZ0d7t+/j4IFP10/mJCWAMe51th3zho/\nHr4N6OaI5x9B0KjYlFg4LHbAxYMWKDtwAtCzJwAgNDQUFStWhFQqxfXr11GtWjUtRyrkNbljuvD+\nfaQ1bIjfJanY3zYfouyjcKbvGZFgCTnOgAEDULFiRTx58gT+/v7p2osUKILprXwxssJzcPVqLUQo\nCNnPgksL0DZfRZRNLgR07678/rhx4yCRSPDrr7+KBEvI1rLvm6yHD8HGjTHGMB/8aj2Hg60DgsYH\nobi+OPBTyJkOHTqE1q1bo3jx4ggNDYWxsfEn7TK5DNUXVYDXtlfodCAUMDXVUqSCoH1vk97CcYkj\ngjYUhN3K7UC9egCAM2fOwMXFBYULF0ZISAgsLS21HKmQF+XsN1mhoUDTptjU3hl+rs9h8N4A10Zd\nEwmWkKO1bNkSTZs2RWxsLGbMmJGuXU9XD37t/DHWVRdpY0dpIUJByD78Lvqhc6od7CrUUSZYcrkc\no0Yp/m2MHTtWJFhCtpf9kqywMLBJY6wZ3hBuhnuAk8CSdktgWNRQ25EJQqbo6Ohg3rx50NHRgb+/\nP0JCQtL1aWbfDOXsf4L/y/3A2bNaiFIQtO914musDFqBSetCgblzld/fvHkzrl69CktLS2V9LEHI\nzrJNktWwoRe61R6B4FrV0PmPEpiScBzydXJU06uGPn36aDs8QVALJycn9O3bF1KpFOPGjftsH9+W\nCzC7nhxvh/8OSCRZHKEgaJ/PBR90f2uB0p36KY7QAZCUlIQJEyYAAGbNmpXuPFBByI6yTZIVevo3\nNIvZitp9U2FRoS7iF8QD0YCfnx/09PS0HZ4gqM2MGTNQuHBh7NmzB2fOnEnXXtG0IrpW743pPyYB\nixZpIUJB0J6X8S/xZ9AqTNgZBUyerPz+ggULEBERgWrVxIO3kHNkmySrfpvKGN06FWUedIf8bzkS\n3yeiTZs2aNy4sbZDEwS1srS0xJgxYwAAo0aNglwuT9fHq6EXNtnGI2T5LCA8PKtDFASt8T7nDbdn\nxWE9whMwMgIAvHr1CnPmzAGgePDWFSVOhBwi2/xNvZfPDnHLw5D/hQFWr14NPT09+Pj4aDssQdCI\nMWPGwMLCAlevXsWWLVvStZsZmGFU3TGY0McSGD5cCxEKQtZ7/v45Nl5bh/EX9YA//lB+39PTEwkJ\nCWjbtq148BZylGyTZN3Zex1ILYYnT45BJpPh999/R4UKFbQdliBohIGBAWbOnAkAmDBhApKTk9P1\nGV57OK4UjcP5F5eAQ4eyOkRByHKzTs/AwLsFUXLGAqBAAQDA/fv3lQ/ecz9aBC8IOUG2SbIUTiAm\nJim27uIAACAASURBVARFixaFl5eXtoMRBI1yc3ND1apVER4ejoULF6ZrL5S/EGY1mY1RXQxBjyHA\nZxIxQcgtHsc8xq6bWzDmbXmgXTvl98eOHQu5XC4evIUcKdskWQ0aTEWRIr0BKJ7szczMtByRIGiW\nnp4e/Pz8AADe3t6Ijo5O16dX1V5IK1IIOxqVBLy9szpEQcgy049PgccVoMTcxYCODgDgxIkTOHjw\noHjwFnKsTCdZR44cQfny5VG2bNkvvsodOnQoypYtCycnJ9z4wgG4/frZIyEhCjY2Nhgu1qAIeUTT\npk3RsmVLxMfHY9q0aenadXV04dfcD+MrvkDqCn/g0SMtRCkImhX8OhiH7+/DcNN2QI0aAACZTKYs\nPCoevIUci5kglUppb2/PsLAwpqWl0cnJiffv3/+kz8GDB9myZUuS5KVLl1irVq104wCglZUVATAg\nICAzIQlCjnP37l3q6upST0+PwcHBn+3TdnNbzvNuRzZtSsrlWRyhIGhWt/VtOKdZITIiQvm99evX\nEwCtra2ZlJSkxegEIT1V06dMvcm6cuUKHBwcYGtri/z586N79+7Yt2/fJ332798PNzc3AECtWrUQ\nGxuLV69epRsrMjISNWvWRM8Pp6wLQl5RqVIl/Pbbb5DJZF8sUDq36VzM0buAt7EvgG3bsjhCQdCc\nW1G3cCb0OIY4DwOsrAAoCo9OmjQJADB79mwUKlRImyEKwnfLVJIVGRkJGxsb5Z+tra0RGRn5zT4R\nERGfHa9y5cqYPn06Tp06lZmwBCHHmTZtGgwMDLB///7P/v2vYFoBXSt2xUz3ysCoUUBcXNYHKQga\nMHXPUIy/UgAGYyYpvzd//nxERkaiRo0a6NWrlxajEwSFU6dOwcvLS/mlqnyZuanOh8WJ38L/nFT9\nuevatWuH9evXZyYcQcixzM3NMW7cOEydOhWjRo1CUFBQuoKLXg29UNG/Iga3bQyH/7N332FNXX8c\nx99hOVgCIiAy3Lhn6xbcC1fdA0dx4N67de/V1r0Xbq2tokgdrbi1insPFEUUZKmgEuD8/kjNTyQo\nIhDGeT1Pnprck3s/IZR8c+6550ycCBquSJSkzOT803P4BZxlR/tFYGQEqCYe/TC+d/78+XLiUSlD\ncHFxwcXFRX1f0xhaTb7pt9fW1pYnH81G/eTJEwoUKPDZNk+fPsX2vy7hj324ykqSsqsRI0aQP39+\n/Pz82Lp1a6Lt+QzzMbzacMbVfA/btsHly1pIKUmpZ8L2Pvx005KcPXqpH5s4caJ64tE6depoMZ0k\nfbtvKrIqV67MvXv3ePToETExMezYsYMWH81vAqoeqk2bNgFw9uxZ8uTJg5WVVaJ9FSlS5FuiSFKm\nlzt3bmbMmAHA+PHjk5yg9FzIJU5P+hH69QMNS/JIUmZw9I4Pj4Ju8uOANfDf+rQ3btxgzZo1csUP\nKcv4piJLT0+PJUuW0KhRI0qWLEmHDh0oUaIEK1euZOXKlQA0bdqUQoUKUaRIEfr27cuyZctSJbgk\nZUVubm6UK1cuyQlKc+vnZkbdGYwwOIZQAGvXpntGSfpWQgjG7+zLtJAy6DdsrH581KhRxMfH07dv\nX5ycnLSYUJJSh0J8OmBKGyEUikTjtiQpuzpy5AgNGjTA2NiY+/fvJ5ofKF7EU3lVZcbadaJ9j3lw\n4wZYWmoprSR9vT/Ob2TqJncu9r+CTslSABw+fJiGDRtibGzMgwcPsJS/01IGlty6RY4olKQM5uMJ\nSjVdxaKj0GF+w/mMvbec9107QhLTPkhSRhQXH8cEr2HM1G+sLrDi4uIYOXIkoDpVLgssKauQRZYk\nZUDz5s1DR0eHVatWcevWrUTb6xasS6l8pVjawgYOHYKTJ7WQUpK+nueheeR98ZrG49apH9u0aRNX\nr17F3t6eIUOGaDGdJKUuWWRJUgZUqlQpevfuTVxcHKNGjdLYZm79ucz6dyGh86aqBsErlemcUpK+\nzvvY90w+PpVZhfqg+O80eFRUlJx4VMqyZJElSRnUlClTMDIy4sCBAxw9ejTRdvUEpWbXIH9+WLRI\nCyklKflWbB9BmWCoMfT/U/YsWLCAoKAgKleuTKdOnbSYTpJSnxz4LkkZ2MyZM5kwYQLly5fnwoUL\n6P53qfsHwVHBlFxakrP1t1OkYUe4dAk+WmFBkjKK19ERFJ1myaESMynbTdU7GxQURNGiRYmKisLX\n15fatWtrOaUkJY8c+C5JWcCwYcOws7Pj8uXLeHp6Jtr+YYLSsfdXwMCBMGyYFlJK0pf9sqon9cPy\nUNZtpPqxiRMnEhUVRatWrWSBJWVJsidLkjK4zZs34+bmRv78+bl79y6GhoYJtr9VvqX4kuJsdV1P\nzSZ9YfFiaNJES2klKbGXIY9xWliIcw12ULhuWwCuXbtG+fLl0dHR4caNGxQrVkzLKSUp+WRPliRl\nEZ07d6Zy5co8e/aMhQsXJtqeSz8Xs+rNYvixccQvXqTq0dIwW7wkacvUZR3oFF1YXWAJIRg+fDjx\n8fH0799fFlhSliWLLEnK4HR0dJg/fz4Ac+bMISgoKFGbTmVUA4a32YZDxYowe3a6ZpSkpNy7dZKt\nb88zsd829WMHDx7kyJEj5MmTh4kTJ2oxnSSlLVlkSVIm4OzsTMuWLYmKiuLnn39OtF1HocPCRgsZ\nd3Qc0fNmwtKlcPeuFpJKUkJj13dlpG4tLJ0qAaBUKhkxYgSgGpNlYWGhzXiSlKbkmCxJyiTu3r1L\nqVKliIuL49KlS5QrVy5Rm3a72lHeqjwTLuSCgwdVE5UqFFpIK0lw6ugGOh105864QHJZWAOwbNky\nBgwYQOHChbl58yYGBgZaTilJX0+OyZKkLKZYsWIMGDBAPZ5F0//gs+vNZuHZhTzv2Q5evICdO7WQ\nVJJAxMcz0nsIM2zd1AVWZGQkkyZNAmDu3LmywJKyPNmTJUmZSFhYGEWKFCE8PJx9+/bRvHnzRG1G\nHR5FxLsIVpv3gA4d4OZNMDFJ/7BStrbLcyyzLv7GhXmR6OiriqkxY8Ywd+5catWqha+vLwrZyypl\nUsmtW2SRJUmZzG+//cbQoUMpVqwY169fR19fP8H2iHcRFF9SnENdD1FuwiJVgfXLL1pKK2UHPXpM\n5tGj/99XiPc8rDCXpk9cWP67arUCf39/nJyciImJ4d9//6Vy5craCStJqUCeLpSkLOrDJe93795l\n+fLlibbnyZmHibUnMuLQCMTs2bBlC1y+rIWkUnbx6BH4+k5W35Qx97AOMePWy5rqNmPHjiUmJoau\nXbvKAkvKNmSRJUmZjL6+PvPmzQNg8uTJhIWFJWrTp1IfAl8HciD8HMyYoVpAOj4+vaNK2ZBJzkfc\nrrWH8MOr1BddnD59mp07d5IzZ05mzpyp5YSSlH5kkSVJmVDz5s2pU6cO4eHhTJs2LdF2fV19FjRc\nwIhDI4jp4aZ6cN26dE4pZUcVarWj5O1i3Av5AYD4+HiG/bfc08iRI7GTa2tK2YgssiQpE1IoFCxc\nuBCFQsGSJUu4q2FOrKZFm1LIrBBLLiyD5cthwgR4+VILaaXsoqn5L1yt4Metf3aoH9u6dSvnz5/H\n2tqa0aNHazGdJKU/WWRJUiZVvnx5evbsSWxsbJIfXgsbLmTWyVmEFLWFzp1hzJh0TillF84cQ9l4\nLAYnh/LyjWoOt7i4GMaOHQvArFmzMDY21mZESUp38upCScrEgoKCKFq0KFFRURw9epS6desmajPU\nZyjvYt+xovZcKFkSduyAGjW0kFbKqn5q2Y8y99bj0TQHZS4ORkfoAhARcYwrV3ypVKkS58+fR0dH\nfq+XsoYsMYWDubk54eHhWkgkpQczMzONg7alrzNjxgx++uknypQpg5+fH3p6egm2h78Nx2mpk2pK\nB9/bqoHwFy/CJ1M/SFKKPH1KTM1qlO4Ty2/t1tGkaBMAAgICKF68OO/evePEiRPUrFnzCzuSpMwj\nSxRZsocra5Pvb+p4+/YtJUqU4PHjxyxfvhwPD49EbZb/u5ydN3fyt9tRFI0bQ+PGMHy4FtJKWUpE\nBNSqxbxO9hwvqINXJy/1ps6dO7Nt2zbat2/Pjh07PrMTScp8ZJElZXjy/U09u3fvpl27dlhYWHDv\n3j3MzMwSbI+Nj6XCygpMdp5MG70yUL26au6sAgW0lFjK9N6/h8aNCSpbiDK2eznb6yxFzIsAqikb\natSoQY4cObhz5w4ODg5aDitJqUtORipJ2UibNm1wdnYmNDSUqVOnJtqup6PHr41+ZdThUbwrZA/9\n+8N/l9VL0leLj4eePcHcnLEuSnpX6q0usD6dskEWWFJ2JnuyJK2R72/qunz5MhUrVkRXV5dr167h\n5OSUqE3rHa35Pv/3jKs8FEqXhqVLVacOJelrjB4Np09zZsN02u3ryu2BtzEyMAJg8+bNuLm5YWNj\nw927dzEyMtJyWElKfbInS5KymfLly9O7d29iY2MZnsR4q/kN5rPgzAIClWGwZAkMHAhv36ZzUilT\nW7wY9u0j/s8/GPT3SObUn6MusKKiohJM2SALLCm7k0WWlhgbG/Po4xVV04COjg4PHz5M02NIGcu0\nadMwMTHh4MGDeHt7J9pe2LwwHpU9GHV4FDRpAuXLw5w5WkgqZUp79sDs2eDjw9rHf5JDLwedy3RW\nb549ezaBgYFUqlQJNzc3LQaVpIxBni7MwnR0dLh//z6FChX6bLtHjx5RqFAhYmNj03UeG/n+po2F\nCxcyYsQIihcvztWrVzEwMEiwPSomipLLSrKx1UZcdAtDhQpw5gwULaqlxFKmcOoUtG4Nf/3Fi6L5\nKbO8DIfdDlPOWjXx6MOHDylZsiTv37/n1KlTVK9eXcuBJSntJPfzS++LLTKYHj0mo6kDyNERNmyY\nnG77yIpkwZM1DBw4kJUrV3Lnzh2WLl2qHoT8gaGBIQsbLmSg90Au9b2E/tixqtOGPj7qBX0lKYHb\nt6FNG9i8GSpUYMServQo30NdYAEMHz6c9+/f4+bmJgssSfpAZABJxdD0uLPzJAEi0c3ZeVKyj5ca\n+xBCCAcHBzF//nxRtmxZYWpqKjp06CDevXun3r5q1SpRpEgRYW5uLlq0aCGePXum3qZQKMSDBw+E\nEEIcOHBAlCxZUhgbGwtbW1uxYMECIYQQpUqVEl5eXurnxMTECAsLC3H58mWNeebOnStsbGyEra2t\nWLt2bYJj7N+/X5QvX16YmJgIOzs7MXnyZPXz7OzshEKhEEZGRsLIyEicPXtW3L9/X9SpU0dYWFiI\nvHnzii5duoiIiIiv+vl8SQb59cuS9u/fLwBhYmIinj9/nmh7fHy8aLCpgVh4eqEQMTFClC4txM6d\nWkgqZXjPngnh6CjE+vVCCCEO3T8kHH91FG/ev1E38fHxEYAwMjJK8HdOkrKq5H5+ZYhPucxaZDk6\nOooqVaqIoKAgERYWJkqUKCFWrFghhBDi6NGjIm/evOLSpUvi/fv3YtCgQaJ27drq535cAFlbW4uT\nJ08KIYSIiIgQfn5+QghV0dShQwf1c/78809RtmxZjVkOHjworKysxI0bN0RUVJTo1KlTgmMcO3ZM\nXL9+XQghxNWrV4WVlZX4888/hRBCPHr0SCgUChEXF6fe3/3798WRI0dETEyMCAkJEbVr1xZDhw79\nqp/Pl8giK+3Ex8eLpk2bCkD07NlTY5vbIbdF3rl5xbNXz4Q4cUIIW1shIiPTOamUob16JUSFCkJM\nmyaEECI6JloU/q2w8L7rrW7y/v17Ubx4cQGIuXPnaiupJKWr5H5+yYHv32jw4MFYW1tjZmZG8+bN\nuXz5MgBbtmzB3d2d8uXLY2BgwKxZszhz5gwBAQGJ9mFgYMCNGzd49eoVpqamVKhQAYAuXbpw4MAB\n3rx5A4Cnp2eSg0l37tzJjz/+SMmSJcmdOzdTpkxJsN3Z2ZlSpUoBUKZMGTp27Iivry+g+TRh4cKF\nqVevHvr6+uTNm5dhw4ap20sZn0Kh4Ndff8XAwID169dz9uzZRG2K5y2OewV3Rh8ZDTVrQsOGMHly\n+oeVMialEtq2he++gwkTAJh+YjqV8ldSL50DsHjxYu7cuUOxYsUYMmSIttJKUoYki6xvZG1trf53\nrly5iIqKAlQL9348CZ+hoSEWFhYEBgYm2sfvv/+Ot7c3jo6OuLi4qD8Q8+fPT40aNdi9ezcRERH4\n+PjQpUsXjTmCgoKws7NT37e3t0+w/dy5c9SpU4d8+fKRJ08eVq5cSWhoaJKv68WLF3Ts2JECBQpg\namqKm5vbZ9tLGU/RokUZOXIkoBqnFRcXl6jNT7V/4tijY5x4fEJ1leHmzXDlSnpHlTIaIaBXL8iR\nQzWXmkLBjeAbrLq4il8b/apu9vz5c/UXut9++y3RRRaSlN3JIiuN5M+fP8EUDVFRUYSGhmJra5uo\nbeXKlfnzzz8JCQmhVatWtG/fXr2te/fubN68mV27dlG9enVsbGw0Hs/GxiZBL9mnPWadO3emVatW\nPH36lIiICDw8PIiPjwdUvR6fGj9+PLq6uly/fp3IyEg8PT3V7aXMY/z48RQoUICLFy+ydu3aRNuN\nDIyY32A+Aw8OJNbCDKZPh379VDN6S9nXxImqwe7btoGeHvEinr77+zLVZSo2xv//GzR27Fhev35N\n8+bNaSwntZWkRDLd1YWOjgCTk3g8/faRlA+n3jp16kSnTp3o3LkzTk5OjB8/nqpVqybqYVIqlezc\nuRNXV1dMTU0xNjZGV1dXvb1169YMGDCAFy9eMGbMmCSP2759e3r27Em3bt1wcHBIdLrwzZs3mJmZ\nYWBgwPnz59m6dSuNGjUCwNLSEh0dHR48eEDR/y7jf/PmDaamppiYmBAYGMi8efO+/YcjpTtDQ0MW\nLlxI+/btGTduHG3atMHCwiJBm/al2rPKbxXL/l3G4F4DYd06WL8e3N21lFrSqpUrYft2OH0aDA0B\nWOO3hjgRR9/KfdXNzp49y8aNGzEwMGDhwoXaSitJGVuajgxLpqRiZJB4SXJ0dBRHjx5V3588ebJw\nc3NT31+xYoUoXLiwMDc3F82bNxeBgYHqbTo6OuLBgwciJiZGNG7cWJiZmQkTExPx/fffi1OnTiU4\njru7uzAyMhJRUVGfzTN79mxhbW0tbG1txbp169THEEKI3bt3CwcHB2FsbCxcXV3FoEGDEmSdOHGi\nsLS0FGZmZuLcuXPixo0bolKlSsLIyEhUqFBBLFiwQNjZ2X3Tz+tTGf39zSri4+NF3bp1BSD69eun\nsc3N4Jsi79y84mnkUyH8/ITIl0+IkJB0Tipp3b59QtjYCHH/vvqhwFeBwnKupbj6/Kr6sdjYWFG5\ncmUBiPHjx2sjqSRpVXI/v+RkpJnAtGnTuHfvHps2bdJ2lFQl39/0c+PGDcqVK0d8fDwXLlygYsWK\nidr8/M/P3Aq5xe72u2HoUHjzBtas0UJaSSvOnQNXVzhwAL7/HlD1zLfY3oIK1hWYWuf/C4+vWLGC\nfv36YWtry+3bt+XyOVK2I9cuzCLCwsJYt24dffr00XYUKRMrVaoUgwcPRgjBwIEDNY6vm1BrAlde\nXMHrjhdMnQoHD6pm+Zayvnv3oFUr1Wni/wosgE1XNvEk8gk/1f5J/VhwcDDjxo0DVIPdZYElSUmT\nRVYGtnr1auzt7WnSpAk1a9bUdhwpk5s0aRJWVlacOXMGT0/PRNtz6uVkRbMVDDw4kDc5dWDBAtUg\n+NhYLaSV0k1wsGody6lTVT1Z/3n66imjDo9iY6uNGOj+/6rB0aNHExERQaNGjfjhhx+0kViSMg15\nulDSGvn+pr9NmzbRvXt3LC0tuX37Nubm5onadP+zOxa5LFjYcIFq7qwmTWD4cC2kldJcVBTUqQON\nG6uKrP8IIWi6tSnVC1TnZ+ef1Y8fP34cZ2dncuTIwfXr1ylSpIg2UkuS1snThZIkJeLm5oazszMh\nISHqUz6fWtBwAVuubeFikJ9qjqSZM+Hp03ROKqW52Fjo0AFKl4ZPrkZee2ktwVHBjK05Vv2YUqmk\nf//+gGrqBllgSdKXyZ4sSWvk+6sdt27doly5ciiVSk6dOqVxMd8Nlzew+PxizvU6h97kqao5k3bu\nTP+wUtoQAvr2hSdPYN8+0NdXb3oc8ZjKqyvzT/d/KJ2vtPrx+fPnM2rUKAoXLsy1a9fIlSuXNpJL\nUoYge7IkSdKoRIkSjBo1CgAPDw+USmWiNt3Ldcc0hylLzi+BcePgwgX466/0jiqllenT4eJF2LUr\nQYElhMB9nzsjqo1IUGA9ffqUyf8tubR48WJZYElSMskiS5KyoQkTJlCwYEGuXbvGokWLEm1XKBSs\ncF3B9OPTCYgJgSVLYMAAePdOC2mlVLV+vep24AB8cmXgigsreB3zmpHVRyZ4fNiwYURFRfHDDz/Q\npEkTJElKHnm6UNIa+f5ql7e3N82aNcPQ0JCbN28mWo0AYMbxGfg+9uWvrn+haNsWypaFSZO0kFZK\nFT4+0KMH+PpC8eIJNt0MuYnzBmdO9DyBU16nj57iQ5MmTTA0NOTWrVsJ1kiVpOxKni7MopYvX46V\nlRUmJiaEh4en23FnzZpF79690+14Utpr2rQpbdu2JSoqiiFDhmhsM7rGaMLehrHGbw38+issXgz3\n76dzUilV+PlBt26wZ0+iAutd7Ds67u7I7HqzExRYUVFR9OvXD4CJEyfKAkuSvpLsyfoGjo6OrFu3\njrp166bL8ZRKJaamppw/f57SpUt/+QkpdOzYMdzc3Hjy5EmaHQMy/vubHQQGBuLk5MSbN2/Yu3cv\nLVq0SNTmevB16mysw4XeF3BYswuOHFFNVKphYXEpg/L3h5o1Vad9W7dOtHnQwUEERwWzvc32BAvG\njxw5kgULFlCuXDn+/fdf9D8avyVJ2Vma92SFhYXRoEEDihUrRsOGDYmIiNDYztHRkbJly1KhQgW+\n/2gm4azgSz/k2FSexPH58+e8e/eOEiVKpOp+pezL1taW6dOnAzBo0CDevHmTqE3pfKUZXnU47vvc\nEYMHq6Zz2L07vaNKKRUaqprrbPx4jQXW3tt72X93PytdVyYosC5evMgvv/yCjo4Oa9askQWWJKVE\nShdHHDVqlJgzZ44QQrUw8ZgxYzS2c3R0FKGhoZ/dV1IxviFemuvatavQ0dERuXLlEkZGRmLevHnC\n399fKBQKsXbtWmFvby+cnZ3FsWPHRIECBRI818HBQRw5ckQIoVq8d9asWaJw4cLCwsJCtG/fXoSF\nhSU63p07d4ShoaFQKBTCyMhI1KtXTzx69EgoFAoRFxenbufs7CzWrFkjhBBi/fr1okaNGmLkyJHC\nzMxMFCxYUBw8eFDdNjQ0VPTo0UPkz59fmJmZidatW4uoqCiRM2dOoaOjI4yMjISxsbF49uyZmDRp\nkujatav6uXv37hUlS5YUefLkES4uLuLWrVsJXt/8+fNF2bJlhampqejQoYN49+5doteUkd/f7ESp\nVIoKFSoIQAwZMkRzmzil+G7Vd2L5v8uFOH5cCFtbIV69Suek0leLjhaienUhkvj7/CTyicg3L584\nHXA6weMf/04MGzYsPZJKUqaS3M+vFH/KFS9eXDx//lwIIURQUJAoXry4xnaOjo7i5cuXnw+RwiIL\nSJVbSjk6OoqjR4+q738osrp37y6io6PF27dvxT///JOoyPr4eb/++quoVq2aCAwMFDExMaJv376i\nU6dOGo/3aVH14XgfF1kuLi5i7dq1QghVkaWvry/WrFkj4uPjxfLly0X+/PnVbZs2bSo6duwoIiIi\nhFKpFMePHxdCCI2F4eTJk9VF1oeC78iRIyI2NlbMnTtXFClSRCiVSvXrq1KliggKChJhYWGiRIkS\nYsWKFYlejyyyMo6LFy8KXV1doVAoxJkzZzS2uRF8Q+Sdm1f4h/sL0aOHEMOHp29I6evExgrRqpUQ\nnTsL8dHfCPXmuFjhvN5ZzDg+I9G2uXPnCkA4ODiI169fp0daScpUkvv5pZfSHrAXL15gZWUFgJWV\nFS9evNDYTqFQUL9+fXR1denbt2+Sg6c/zMEC4OLigouLS0qjad3kyZOTPY/MypUrWbJkCfnz5wdU\n68s5ODiwefNmdHQSns0VKRi/5ODggLu7OwDdunWjf//+BAcHExcXh4+PD2FhYZiamgJQq1atJI/z\n8WM7duzA1dWVevXqAapxG7/99hunT5+mdu3aAAwePBhra2sAmjdvzuXLl786u5R+KlasyKhRo5g9\nezbu7u74+fmRI0eOBG1KWpZkVPVRuO9z5/CcreiULgPdu6uuOJQyFiFgyBB49Qp27ACdxCNDZp6Y\nia6OLmNqjEnw+MOHD5n03xWkK1askAtASxKqscrHjh376ud9tshq0KABz58/T/T4jBkzEtxXKBQJ\nzuV/7NSpU9jY2BASEkKDBg1wcnJSf5h/7OMiK7lSUnSkh6+5AufRo0e0bt06QUGlp6fHixcvsLGx\n+eYsHwodgNy5cwPw5s0bXr58ibm5ubrA+hrPnj1LcLm/QqHAzs6OwMBAjcfNlSsXz549S0l8KR1N\nnDiRPXv2cPPmTWbOnMmUT5ZaARhRbQR/3P6DFY9/p//06aoFpE+c0PghLmnR3Lmq9+X4cTAwSLT5\n+OPjLLuwjIt9LqKro6t+XAhB3759efv2LZ07d6Zx48bpmVqSMqxPO380/X3U5LN/GQ8fPsy1a9cS\n3Vq0aIGVlZW6AAsKCiJfvnwa9/GhULC0tKR169acP38+WcEyg6QKy48fNzQ0JDo6Wn0/Li6OkJAQ\n9X17e3t8fHwIDw9X36Kjo5NVYBkaGgIk2L+molgTOzs7wsLCiIyM/Gx+TWxtbXn8+LH6vhCCJ0+e\nYGtrq7H9l/YnZQy5cuVizZo1AMycOZOrV68maqOro8v6luuZdGwSd1rVUq1/t359ekeVPmfLFli2\nDLy9QcOXqKevntJxd0c2tNxAfuP8CbZ5enpy5MgRzM3N+eWXX9IrsSRlWSn++tmiRQs2btwITKwG\n5gAAIABJREFUwMaNG2nVqlWiNtHR0bx+/RpQzbdy6NAhypQpk9JDZjhWVlY8ePDgs22KFSvGu3fv\n8Pb2RqlUMn36dN6/f6/e7uHhwfjx4wkICAAgJCSEffv2Jev4lpaW2Nra4unpSVxcHOvWrfting9s\nbGxo0qQJ/fv3JyIiAqVSyfHjx9WvKzQ0lFevXml8brt27Thw4AB///03SqWSBQsWkDNnTo1r4EHG\n7XGUEqtVqxb9+/cnNjYWd3d3jVfIOuV1YlqdaXT8ozPvly5SXbX28qUW0kqJHD0Kw4apCiwNX3re\nx76nzc42DK4ymEZFGiXYFhwczPDhwwFYuHBhkl+cJUlKvhQXWWPHjuXw4cMUK1aMv//+m7FjVau1\nP3v2jGbNmgGqXpVatWpRvnx5qlSpgqurKw0bNkyd5BnAuHHjmD59OmZmZixcuBBI3GtjamrKsmXL\n6NWrFwUKFMDIyCjB6cQhQ4bQokULGjZsiImJCdWqVftsb9+n+1+9ejXz5s0jb9683Lx5kxo1aiRo\n+2n7j+97enqir6+Pk5MTVlZW6uVVnJyc6NSpE4UKFcLc3JygoKAE+ypevDibN29m0KBBWFpacuDA\nAby8vNDT03z2+XOnk6WMZ9asWdjZ2XHhwgV+++03jW36VupLYbPCjH65FTp2VK1vKGnXlSvQqZNq\nPcJSpRJtFkIwwHsA9qb2icZhCSHw8PAgNDSU+vXr061bt/RKLUlZmpyMVNIa+f5mXB+W3MmVKxfX\nrl2jcOHCidqEvw2nwsoKLHaeTXPXEaoP9yR6M6U0FhCg+tkvWAAdOmhssvLCShadX8RZ97MY5zBO\nsG3r1q106dIFY2Njrl27hoODQ3qklqRMSy6rI0lSijVt2pSuXbvy9u1b3N3diY+PT9TGLJcZW37Y\nQu+jQwmcPUE1CD6VJ+CVkiE8XDXZ6PDhSRZYZ56c4ed/fubPDn8mKrCCgoIYOHAgoDpNKAssSUo9\nssiSJEmjX375hXz58uHr66s+lfypGvY1GPj9QLrG7SLOMq9qbUMp/bx7B61aQcOGqiJLg6DXQbTb\n1Y71LddT1KJogm1CCPr06UN4eDiNGzdWT/ciSVLqkKcLJa2R72/Gt2/fPlq2bEmOHDnw8/OjZMmS\nidrExcdR37M+9YzL8VOfzaqxQUlcaSqlovh41RgsIWD7do3TaLyPfU/dTXVpVLgRE50nJtq+ceNG\nevTogampKdevX6dAgQLpkVySMr3kfn7JIkvSGvn+Zg7u7u6sW7eOihUrcvbsWY1r2AW+CqTSqkr8\nHtmYGnffqibAlNLW8OFw8SL89RfkzJloc7yIp/PvnYkTcexouwMdRcIi7OnTp5QuXZrIyEg2btwo\nB7tL0leQY7IkSUoVv/zyC46Ojvj5+akXk/6UrYkta1uspUOewzy7fgYOHUrnlNnML7+Ajw/8+afG\nAgtg7JGxPH31FM/WnokKLCEEvXr1IjIykubNm+Pm5pYeqSUp25E9WZLWyPc38/D19aVOnTro6Ohw\n+vRpvv/+e43tZhyfgdd5T46tVpLzyo0kCwDpG+zcqerFOnUKkhikvvT8UhadX8TpH09jkdsi0fbV\nq1fTp08fzM3NuXHjRoIVGiRJ+jLZkyVJUqpxdnZm+PDhxMXF4ebmlmCVgY+NrzUee4eyeDSORcyZ\nnc4pswFfXxg4EA4cSLLA2nt7LzNOzOBgl4MaC6y7d+8ybNgwAJYsWSILLElKQ7InS9Ia+f5mLu/e\nvaNy5crcuHGDQYMGJXnFYVRMFAUnFmT4iQiuxXoQmMtcvc3RETZsmJw+gbOaGzegbl3Vsjn162ts\ncu7pOVy3ueLd2ZvvbL9LtD0mJobq1atz8eJFOnbsyNatW+VEwZKUArInKx04Ojry999/A6q13nr3\n7q3lRCpNmzbF09NT2zGkLCZnzpx4enqip6fH4sWLOZTEuCtDA0MKXe7M9Go5Kf3yDL6+k/D1nYyv\n72QePUrfzFlGYCA0baqabDSJAutB2ANa7WjFuhbrNBZYABMmTODixYs4OjqyYsUKWWBJUhqTRdY3\n+PgP1Pjx41m9erUW0/yft7d3sgeyuri4sHbt2jROJGUVFSpUUK8+7+bmluSC5Dnf5eHd7j+Y/8Ml\nGpktTc+IWU9kpKrA6tcPunbV2CQgMoAGng2Y5DyJ5sWba2xz6NAh5s+fj66uLlu3bsVUw+LRkiSl\nLllkZXKaZuL+Gt/6TfZbjy9lPmPGjKFu3boEBwfTtWtX4uLiNLaLe1wPM9/B+HcaRqkcpwB5avir\nxcRAmzZQsyaMGaOxSeCrQOpurMvA7wfiUdlDY5vg4GD1FA2TJ0+mWrVqaRZZkqT/k0VWKpk8ebK6\n9+jRo0fo6OiwadMmHBwcsLS0ZObMmeq2Qghmz55NkSJFyJs3Lx06dCA8PFy9vV27dtjY2JAnTx6c\nnZ25efOmeluPHj3o168fTZs2xcjIiGPHjiXK8nHv1IYNG6hZsyajRo3C3NycQoUK4ePjA6hOHZw4\ncYKBAwdibGzM4MGDAbh9+zYNGjTAwsICJycndu3aleTx//nnH3r06IGHh4d6kWsXFxcCAgJS74cr\nZSi6urps3rwZS0tLjh49yuzZSQ9wf/DvAnI/qoJxx/pc1StCn4dH4Nw51USa0ufFx8OPP4KxMSxa\nBBq+EAW9DqLOxjr0qdSH4dU0z/guhKBnz568ePECZ2dnxsnFvCUp3cgiK5Vo6hE6deoUd+/e5ejR\no0ydOpU7d+4AsGjRIvbt28fx48cJCgrCzMyMAQMGqJ/XrFkz7t+/T0hICBUrVqRLly4J9rtt2zZ+\n/vln3rx5Q40aNTRm+TjP+fPncXJyIjQ0lNGjR6uXzpgxYwa1atVi6dKlvH79mkWLFhEVFUWDBg3o\n2rUrISEhbN++nf79+3Pr1i2Nx69ZsyagWmB24sSJvHz5kvLlyyfKLGUtNjY26nF/EydO5MSJE0m0\nVHD54HHOvmlNzXYFeK8D9OypujJu8GA4dgyS6AnL9iZMgIcPVQPddXUTbX7x5gV1N9Wle7nujK4x\nOsndLF68GG9vb8zMzPD09ERXw74kSUobmbvIUihS55YKNF1lMGnSJHLkyEHZsmUpV64cV65cAWDF\nihVMnz6d/Pnzo6+vz6RJk9i9e7f61FuPHj0wNDRUb7ty5QqvX79W77dVq1bq7v4cOXJ8MZuDgwPu\n7u4oFAq6detGUFAQwcHBGrPv37+fggUL0r17d3R0dChfvjw//PBDgt4sTcd3dXWlZs2aGBgYMGPG\nDM6cOUNgYGCyf35S5tOoUSPGjh1LfHw8nTp14uXLl+ptjo7g7DxZdas9lVqhhdGzCGJ6u9fE37iu\nmqzUygpGjAAbG+jdGw4eVJ0ek2DZMtizB/btg9y5E20OiQqh7qa6dCzVkQm1JyS5m8uXLzNq1CgA\n1q5di52dXZpFliQpMT1tB/gmGfzy/4/nn8mdOzdv3rwB4PHjx7Ru3Rqdj9Ya09PT48WLF+TLl48J\nEyawe/duQkJC1G1evnyJsbExCoXiq9cX+zQHwJs3b8iXLx+QsBfu8ePHnDt3DjMzM/VjsbGx6vEc\nmo7/6WOGhoaYm5vz7NkzbOUadlna1KlT8fX15cyZM/To0QMvLy8UCoXGaRqileNovLkxQ3yGsKjx\nIhQTJqh6ax49UhUUM2ZAly6qQd4//ACNG2ssMLK8P/+E6dPh5EnImzfR5pCoEOp71qe1U2uN6xF+\nEB4eTps2bYiJiaFv3760bt06LVNLkqRB5u7JyqTs7e3x8fEhPDxcfYuOjsbGxoatW7eyb98+jh49\nSmRkJP7+/oDmnrLU8OlpTnt7e5ydnRNke/36NUuXJn2FmBCCJ0+eqO+/efOGsLAw8ufPnyaZpYxD\nX1+fbdu2YWZmxoEDB/jll1+SbJtbPzdenbw4FXCKSccm/X+Do6NqBvOTJ1VzQdWsCcuXq3q42rRR\nnS6LjEz7F5MRnD6t6tXz8oJChRJt9g/3p8a6GrQo3oJpdaYleeFKfHw8Xbt25eHDh1SsWPGz74sk\nSWlHFlla4OHhwfjx49WDw0NCQti3bx+gKlBy5MiBubk5UVFRjB8/PsFzU7vYsrKy4sGDB+r7rq6u\n3L17l82bN6NUKlEqlfz777/cvn37s8f39vbm1KlTxMTE8PPPP1OtWjXZi5VNODg4sG7dOkB15WHS\n47PANKcpPl192HFjBwvPLEzcwMYGPDzg8GHw94fmzVWLTdvZqXq41qyBkJC0einadeeOqgdv0yao\nVCnR5ktBl6i5viZDqgz5bIEFMG3aNLy9vTE3N+f3338nV65caZlckqQkyCIrlXw62PxzfwCHDBlC\nixYt1FfjVatWjfPnzwPQrVs3HBwcsLW1pXTp0lSrVi3Rfr9m2gVN7T++P2TIEHbv3o25uTlDhw7F\nyMiIQ4cOsX37dmxtbbGxsWHcuHHE/DdWJqn9de7cmSlTpmBhYcGlS5fYvHlzsjNKmV+rVq0YPnw4\nsbGxtG3bNkHP5qfyGebjsNthlv27jKm+U5P+4mBuDj16qMYlBQZC9+6q4qtoUahTBxYvhqdP0+YF\npbfnz6FJE5g5U/XfTxx5eIRGmxuxqPEiBnw/QMMO/s/b25spU6agUCjYtm0bjo6OaRRakqQvkcvq\nSN+sZ8+eFChQgGnTpn3V8+T7m7XExsbSpEkTjhw5QsWKFTl58uRne1Cev3lOky1NqGFXg0VNFqGj\nSOZ3vrdvVcXWnj2q02pFi6p6gH74AYoUSaVXk45evwYXF2jRAiZNSrR527VtDP1rKLva7aK2Q+3P\n7urBgwdUrlyZiIgIpk+fzoQJSQ+KlyQp5eSyOlK6kYWSBKqLN7Zv307BggXx8/Ojd+/en/3dsDay\n5lj3Y1wPvk7n3zsTE5fMKwtz5VIVJBs2qHqApk1TTXVQsyaUKwdTpsC1axn+whgAlEpo1w4qVoSJ\nCQexCyFYeGYhY46M4YjbkS8WWNHR0bRp04aIiAhatGgh58OSpAxAFlnSN/vaU5hS1mVhYcHevXsx\nNDRky5YtXxxw/WGM1vu497hudeX1+9efbZ+Ivj40aAArVqhOKS5dChER4OoKxYvD2LFw/nzGLLiE\ngD59VHNgLV+eYDqZqJgouv7RlU1XNnHyx5OUsSrzhV0JPDw8uHLlCkWKFGHTpk0Jrl6WJEk75OlC\nSWvk+5t1/f7777Rt2xYdHR18fHxo0KDBZ9vHxsfS70A/Lj+/jHdnbywNLb8tgBDg5we//666RUf/\n/5RizZoaJ/dMdxMnquYG++cfMDJSP3zn5R3a7GzDd7bfsazpMnLpf3nQ+qxZsxg/fjy5c+fm3Llz\nlC5dOi2TS1K2J08XSpKkNW3atOGnn34iPj6eDh06JLiCVRM9HT1Wua6icZHGVF5dmbNPz35bAIVC\ndYXezJlw+zb89ZdqzqmhQyF/flUPko+P9iY/XbUKtm6FAwcSFFi7b+6m1vpaDK06lHUt1iWrwNq2\nbRvjx49HoVDg6ekpCyxJykBkT5akNfL9zdri4+Np1aoVXl5eFC9enFOnTmFhYfHF5+29vZfeXr0Z\nX2s8Q6oMSf1T0Q8fqgbN79mjKsCaNVP1cDVqlD6Tn+7fr5oL6/hx1aB9QBmnZMyRMfx5+092t99N\nRZuKydrVyZMnqVevHjExMSxcuJBhw4alZXJJkv6T3M8vWWRJWiPf36zv1atX1KpVi6tXr1K1alWO\nHj2qXnXgc/zD/Wm/uz12Jnasa7mOPDnzpE3AwEDVDOt79sCFC6rxXT/8oBrTZWKS+sf791/VfF/7\n90OVKgBceX4F933uWBtZs6n1JsxzmSdrV3fv3qVatWqEhYUxYMAAFi9eLMdGSlI6kUWWlOHJ9zd7\nePbsGdWqVSMgIABXV1f++OMP9PS+vKLX+9j3jDw8Eu973uxqtyvZvTsp9vKlak6uPXtUvUy1aqkK\nrpYtNS5v89Xu31ftc+VKaNGCd7HvmH58OqsurmJ2/dn0LN8z2UVSSEgI1apV48GDB1/1M5UkKXXI\nIkvK8OT7m33cvn2bGjVqEBYWhru7O6tXr052QbHzxk4GeA9gwHcDGFtzLDn1cqZxWuDVK/D2Vg2a\nP3RINb7rhx+gdWtIyUoGISFQvTqMHAl9+3Iq4BS9vHpRIm8JljZdio2xTbJ39fbtW+rVq8eZM2eo\nWLEivr6+GH00rkuSpLQni6wMzMXFBTc3N9zd3RNtCwgIoFSpUrx69eqruv63bNnCpk2b+Ouvv1Iz\naprKqu+vpNmZM2eoV68eb9++5eeff2bq1KnJfm5AZADD/xrO5eeXWdRkEU2LNk3DpJ94+1ZVaP3+\nu+o0X/Hi/79SsXDhBE179JjMo0cJn54zLoaltzdRuG8PwieMYOKxifx+83cWN1lMm5JtviqKUqmk\nQ4cO/PHHH9jZ2XHu3DlsbJJfoEmSlDqS/fklMoCkYmSQeKnOxcVFrF27VmvHX79+vahZs6bWjv9B\nVn1/paR5eXkJXV1dAYhly5Z99fMP3jsoiiwqIlptbyUehT9Kg4Rf8P69EH/9JUSfPkLkyydEuXJC\nTJkixPXrQsTHC2fnSUI1f4TqpotS7MNV/F6gtJh6bIqwmGMh+nr1FaHRoV99aKVSKTp06CAAYWpq\nKq5evZoGL1CSpORI7ueXnMJB+mqxsbHajiBlUq6urqxcuRKAAQMGsGXLlq96fuMijbnW7xoVrStS\naVUlpvpOJfxteFpE1czAABo2VI2revZMtX5iWJhqvUEnJ3r5H6USFwABCBbqeeBV/Q6d3Py5E3qX\ns73OssJ1RbIHt38QFxdHz5492bFjB8bGxhw6dIgyZT4/QakkSRlAGhd7yZJUjAwSL0kBAQGidevW\nwtLSUlhYWIiBAwcKIYSYNGmS6Nq1q7qdv7+/UCgUIi4uTgih6skaN26c+P7774WJiYlo2bKlCAsL\n09g2NDRU9OjRQ+TPn1+YmZmJVq1aaczyae+UQqEQK1asEEWLFhV58uQRAwYMEEIIcfPmTZEzZ06h\nq6srjIyMhJmZmRBCiHfv3okRI0YIe3t7YWVlJTw8PMTbt2+FEEL8888/wtbWVsyZM0dYW1uLbt26\niWPHjglbW1sxc+ZMkTdvXuHo6Ci2bNnyVT+/jP7+SmlnxowZAhAKhUJs2LAhRft4EPZAdPujmzCb\nbSaGHBwi/MP9Uzfk14iPF+Lff8Vmu5riDkXFlZwFRK8qpYTlcH2h276lqNykX4p3HRcXJ3r27CkA\nYWhoKE6dOpWKwSVJSonkfn7JnqwUiouLw9XVlYIFC/L48WMCAwPp1KkTwBfHUgkh2LRpE+vXryco\nKAg9PT0GDx6ssa2bmxvv3r3j5s2bBAcHM3z48GRnPHDgABcuXODq1avs3LmTv/76ixIlSrBixQqq\nVavG69evCQsLA2Ds2LHcv3+fK1eucP/+fQIDAxOMmXnx4gXh4eEEBASwcuVKhBC8ePGC0NBQnj17\nxsaNG+nTpw93795Ndj4p+xo/fjzTpk1DCEHPnj1Zu3btV++jkFkhNrbayNV+VzHQNaDSqkp0+r0T\nfkF+aZD4CxQK4itVZG7FQhT/4TsqDI3E186AuG1exO38E8PofCnarRCCfv36sX79enLlyoW3tzfV\nq1dP5fCSJKWVTH3Nr2JK6swJIyZ9/eDr8+fPExQUxLx589RrhH344ye+MBhOoVDQrVs3SpYsCcC0\nadMoX748mzZtStAuKCgIHx8fwsLCMDU1BaBWrVrJzjh27FhMTEwwMTGhTp06XL58mUaNGiXKJ4Rg\n9erVXL16lTx5VPMRjRs3ji5dujBz5kwAdHR0mDJlCvr6+ujr66ufO23aNPT19alduzbNmjVj586d\n/PTTT8nOKGVfP/30EwYGBowZM4ZevXqhVCrx8PD46v0UMCnA3AZz+an2T6y+uJqW21uSN3deWhZv\nScviLSlvXT7N5o8SQnA39C67bu5i/eX1vCgaBSfGE39wEffefnni1S/te/DgwaxatYqcOXPi5eVF\n7dqfXyRakqSMJVMXWSkpjlLLkydPcHBwSPEirHZ2dup/29vbo1QqefnyZaJjmJubqwusr2Vtba3+\nd+7cuYmKitLYLiQkhOjoaCpVqqR+TAhBfHy8+r6lpSUGBgYJnmdmZkauXP9f9sPBwYFnz56lKKuU\nPY0ePRp9fX2GDx9Ov379UCqVDBo0KEX7MslhwojqIxhSdQinn5xm7529tNvVDmW8khbFW+Ba1JWK\nNhW/aV1EIQQPwh/wj/8//PPoH449Ooaejh7NijVjR9sdLB7vxeOcYfD94gTPc3T8uuMolUr69evH\n2rVrMTAw4M8//6RevXopzi1JknZk6iJLm+zs7AgICCAuLg7dTxabNTIyIjo6Wn3/+fPniZ4fEBCQ\n4N/6+vrkzZs3QSFkZ2dHWFgYkZGRKS60NPn0W33evHnJlSsXN2/eTPJycE09AeHh4URHR6tn8H78\n+DFly5ZNtZxS9jBs2DD1KfPBgwfz/v17Ro4cmeL96enoUduhNrUdajO/wXxuvbzF3tt7mXFiBteC\nr6Gno0dJy5KqW96S2JvaY6BrgIGuAfq6+ujr6KOvq09odCgBkQEEvApQ/TcygHuh9xAI6jjWoV7B\nekyvO52CeQqq///YuKHyN/883rx5Q/v27Tl48CC5cuVi165dNGrU6Jv3K0lS+pNFVgpVqVIFGxsb\nxo4dy5QpU9DR0cHPz4/q1atTvnx55syZw5MnTzAxMWHWrFkJniuEYPPmzXTr1g0HBwcmTpxIu3bt\nEhUyNjY2NGnShP79+7N06VIMDQ05c+ZMik4ZCCHUpwmtrKx4+vQpSqUSfX19dHR06N27N0OHDmXJ\nkiVYWloSGBjIjRs3aNiw4Wf3O2nSJGbOnMnZs2c5cOAA06ZN++pskjRo0CD09fXp168fo0aNwt/f\nn99+++2bZzFXKBTqgmpcrXGqsYRRL7gZclN9O/TwEMo4Jcp4JTFxMep/m+cyx97UHnsTe1wcXLA3\ntaegWcEERVVqe/HiBc2aNePixYvkzZsXLy8vqlatmibHkiQp7ckiK4V0dHTw8vJi8ODB2Nvbo1Ao\n6NKlC9WrV6d+/fp06NCBsmXLYmlpyejRo9m/f7/6uR/GZPXo0YPbt2/j4uKivqz9w/YPPD09GTZs\nGE5OTsTExFC3bl2NRZZCoUjwvE8/BD7eXq9ePUqVKoW1tTW6uroEBwczZ84cpk6dStWqVXn58iW2\ntrb0799fXWRp+lCxtrbGzMyM/PnzY2hoyMqVKylWrFgKf6JSdufh4YGxsTE//vgjy5Yt4969e+zc\nuVM9TjA1KBQKrI2ssTaypm7Buqm239Rw9+5dGjdujL+/P4UKFcLHx4ei/y0gLUlS5iRnfJdS5Nix\nY7i5ufHkyZMU70O+v5ImZ86coVWrVgQHB+Pk5ISXlxdFihTRdqw0dfbsWVxdXQkNDaVy5crs378f\nKysrbceSJCkJyf38klM4SJKUoVSrVo3z589TunRpbt++TZUqVfD19dV2rDQhhGDp0qU4OzsTGhpK\n06ZNOXbsmCywJCmLkEWWlGJpNS5FkhwcHDh9+jTNmjUjLCyM+vXrs2jRogRXvGZ2ERERtG3bloED\nBxITE8OAAQPYu3cvhoaG2o4mSVIqkacLJa2R76/0JXFxcYwePZqFCxcCUL9+fdavX0+BAgW0nOzb\nnD17lo4dO/L48WNMTExYs2YN7dq103YsSZKSSZ4ulCQp09PV1WXBggXs2bOHvHnzcuTIEUqXLs2W\nLVsyZYEeHx/PvHnzqFWrFo8fP+a7777j0qVLssCSpCxKFlmSJGV4rVu35tq1a7i6uhIZGUnXrl3p\n0KEDoaGh2o6WbFeuXMHFxYXRo0cTGxvL8OHDOXnyJIUKFdJ2NEmS0ogssiRJyhSsra3Zt28fq1ev\nxtDQkF27dlG6dGnWrFlDbGystuMlKTQ0lP79+1OxYkVOnDiBpaUlXl5eLFiwINEqCpIkZS0ZekyW\nubk54eHhWkgkpQczMzP1AtWS9DUePnxI9+7dOXnyJABOTk7MnDmTVq1aZZgLMuLi4li9ejUTJkwg\nLCwMXV1dBg0axKRJk1J17i9JktJfcsdkZegiS5IkKSnx8fHs3LmTCRMm8PDhQwCqVq3KnDlztLqQ\nckxMDLt372bu3LlcuXIFgLp167Jo0SJKlSqltVySJKUeOfA9Ezh27Ji2I2iFfN3ZS1q9bh0dHTp2\n7MitW7dYsmQJ+fLl4+zZszg7O1O3bl22bt3K27dv0+TYmgQHBzNt2jQcHR3p0qULV65cwd7ent27\nd3PkyJFsU2DJ3/PsJbu+7uRKcZG1a9cuSpUqha6uLn5+fkm28/HxwcnJiaJFizJnzpyUHi5Lyq6/\nnPJ1Zy9p/boNDAwYMGAA9+/fZ8qUKRgZGfHPP//QpUsXbGxs8PDw4Ny5c2nSW65UKjlx4gQ9evTA\nzs6OiRMnEhQURKlSpWjevDm3b9+mTZs2GeYUZnqQv+fZS3Z93cmV4iKrTJky/PHHH5/tlo+Li2Pg\nwIH4+Phw8+ZNtm3bxq1bt1J6SEmSpCQZGxszceJEAgICWLZsGd999x2RkZGsXLmSqlWrUqpUKYYM\nGcK2bdvw9/dPUdElhODu3bssWbKEli1bYmFhQe3atdm4cSNKpZIWLVpw9OhRrl27RsWKFcmVK1ca\nvFJJkjKLFC8Q7eTk9MU258+fp0iRIjg6OgLQsWNH9u7dS4kSJVJ6WEmSpM8yMzOjX79+9OvXj+vX\nr7NhwwY8PT25desWt27dYtGiRQDky5ePqlWrUqZMGfLkyYOJiYn6ZmxsTGRkJIGBgTx9+lR9u3Pn\nTqL1Op2cnHB1dcXDw4PChQtr4yVLkpRRiW/k4uIiLl68qHHbrl27RK9evdT3PT09xcCBAxO1A+RN\n3uRN3uRN3uRN3jLNLTk+25PVoEEDnj9/nujxmTNn0rx58889FUj+2nZCXlkoSZIkSVKtTjACAAAG\naklEQVQW89ki6/Dhw9+0c1tb2wRd60+ePMn0a45JkiRJkiQlR6pM4ZBUT1TlypW5d+8ejx49IiYm\nhh07dtCiRYvUOKQkSZIkSVKGluIi648//sDOzo6zZ8/SrFkzmjRpAsCzZ89o1qwZAHp6eixZsoRG\njRpRsmRJOnToIAe9S5IkSZKULWh9xncfHx+GDh1KXFwcvXr1YsyYMdqMky5+/PFHDhw4QL58+bh2\n7Zq246SbJ0+e0K1bN4KDg1EoFPTp04fBgwdrO1aae/fuHc7Ozrx//56YmBhatmzJrFmztB0r3cTF\nxVG5cmUKFCiAl5eXtuOkC0dHR0xMTNDV1UVfX5/z589rO1K6iIiIoFevXty4cQOFQsG6deuoWrWq\ntmOlqTt37tCxY0f1/YcPHzJt2rRs8bdt1qxZbN68GR0dHcqUKcP69evJkSOHtmOlud9++401a9Yg\nhKB3794MGTIk6cZffTlhKoqNjRWFCxcW/v7+IiYmRpQrV07cvHlTm5HSxfHjx4Wfn58oXbq0tqOk\nq6CgIHHp0iUhhBCvX78WxYoVyxbvtxBCREVFCSGEUCqVokqVKuLEiRNaTpR+FixYIDp37iyaN2+u\n7SjpxtHRUYSGhmo7Rrrr1q2bWLt2rRBC9bseERGh5UTpKy4uTlhbW4uAgABtR0lz/v7+omDBguLd\nu3dCCCHat28vNmzYoOVUae/atWuidOnS4u3btyI2NlbUr19f3L9/P8n2Wl1W5+N5tPT19dXzaGV1\ntWrVwszMTNsx0p21tTXly5cHwMjIiBIlSvDs2TMtp0ofuXPnBlTr2sXFxWFubq7lROnj6dOneHt7\n06tXr2x3FXF2e72RkZGcOHGCH3/8EVANFzE1NdVyqvR15MgRChcujJ2dnbajpDkTExP09fWJjo4m\nNjaW6OhobG1ttR0rzd2+fZsqVaqQM2dOdHV1cXZ2Zs+ePUm212qRFRgYmOCXsUCBAgQGBmoxkZRe\nHj16xKVLl6hSpYq2o6SL+Ph4ypcvj5WVFXXq1KFkyZLajpQuhg0bxrx589DRyV7LpCoUCurXr0/l\nypVZvXq1tuOkC39/fywtLenZsycVK1akd+/eREdHaztWutq+fTudO3fWdox0YW5uzogRI7C3tyd/\n/vzkyZOH+vXraztWmitdujQnTpwgLCyM6OhoDhw4wNOnT5Nsr9W/fNlpPS/p/968eUPbtm357bff\nMDIy0nacdKGjo8Ply5d5+vQpx48fzxbrfe3fv598+fJRoUKFbNerc+rUKS5dusTBgwdZunQpJ06c\n0HakNBcbG4ufnx/9+/fHz88PQ0NDZs+ere1Y6SYmJgYvLy/atWun7Sjp4sGDB/z66688evSIZ8+e\n8ebNG7Zs2aLtWGnOycmJMWPG0LBhQ5o0aUKFChU++yVSq0WWnEcr+1EqlbRp04auXbvSqlUrbcdJ\nd6ampjRr1owLFy5oO0qaO336NPv27aNgwYJ06tSJv//+m27dumk7VrqwsbEBwNLSktatW2eLge8F\nChSgQIECfPfddwC0bdsWPz8/LadKPwcPHqRSpUpYWlpqO0q6uHDhAtWrV8fCwgI9PT1++OEHTp8+\nre1Y6eLHH3/kwoUL+Pr6kidPHooXL55kW60WWXIerexFCIG7uzslS5Zk6NCh2o6Tbl6+fElERAQA\nb9++5fDhw1SoUEHLqdLezJkzefLkCf7+/mzfvp26deuyadMmbcdKc9HR0bx+/RqAqKgoDh06RJky\nZbScKu1ZW1tjZ2fH3bt3AdX4pFKlSmk5VfrZtm0bnTp10naMdOPk5MTZs2d5+/YtQgiOHDmSbYZB\nBAcHAxAQEMAff/zx2VPEKV4gOjV8PI9WXFwc7u7u2WIerU6dOuHr60toaCh2dnZMnTqVnj17ajtW\nmjt16hSbN2+mbNmy6iJj1qxZNG7cWMvJ0lZQUBDdu3cnPj6e+Ph43NzcqFevnrZjpbvsMjzgxYsX\ntG7dGlCdQuvSpQsNGzbUcqr0sXjxYrp06UJMTAz/a+cObSgEgiiKvpBgaYICSDaUgkZSEpZGaAmJ\np4Ivl00+5+gVI6/YmXEccxxH65Fecd93zvP8zP+7JJmmKeu6Zp7ndF2XUkq2bWs91iuWZcl1Xen7\nPvu+ZxiGn2+b38kCAPhH31r5AQB4icgCAKhAZAEAVCCyAAAqEFkAABWILACACh4lwUhaFXknPAAA\nAABJRU5ErkJggg==\n" } ], "prompt_number": 114 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Statistics\n", "\n", "The `scipy.stats` module contains a large number of statistical distributions, statistical functions and tests. For a complete documentation of its features, see http://docs.scipy.org/doc/scipy/reference/stats.html.\n", "\n", "There is also a very powerful python package for statistical modelling called statsmodels. See http://statsmodels.sourceforge.net for more details." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy import stats" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 81 }, { "cell_type": "code", "collapsed": false, "input": [ "# create a (discreet) random variable with poissionian distribution\n", "\n", "X = stats.poisson(3.5) # photon distribution for a coherent state with n=3.5 photons" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 82 }, { "cell_type": "code", "collapsed": false, "input": [ "n = arange(0,15)\n", "\n", "fig, axes = subplots(3,1, sharex=True)\n", "\n", "# plot the probability mass function (PMF)\n", "axes[0].step(n, X.pmf(n))\n", "\n", "# plot the commulative distribution function (CDF)\n", "axes[1].step(n, X.cdf(n))\n", "\n", "# plot histogram of 1000 random realizations of the stochastic variable X\n", "axes[2].hist(X.rvs(size=1000));" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\n" } ], "prompt_number": 83 }, { "cell_type": "code", "collapsed": false, "input": [ "# create a (continous) random variable with normal distribution\n", "Y = stats.norm()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 84 }, { "cell_type": "code", "collapsed": false, "input": [ "x = linspace(-5,5,100)\n", "\n", "fig, axes = subplots(3,1, sharex=True)\n", "\n", "# plot the probability distribution function (PDF)\n", "axes[0].plot(x, Y.pdf(x))\n", "\n", "# plot the commulative distributin function (CDF)\n", "axes[1].plot(x, Y.cdf(x));\n", "\n", "# plot histogram of 1000 random realizations of the stochastic variable Y\n", "axes[2].hist(Y.rvs(size=1000), bins=50);" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "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\n" } ], "prompt_number": 85 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Statistics:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "X.mean(), X.std(), X.var() # poission distribution" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 86, "text": [ "(3.5, 1.8708286933869707, 3.5)" ] } ], "prompt_number": 86 }, { "cell_type": "code", "collapsed": false, "input": [ "Y.mean(), Y.std(), Y.var() # normal distribution" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 87, "text": [ "(0.0, 1.0, 1.0)" ] } ], "prompt_number": 87 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Statistical tests" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Test if two sets of (independent) random data comes from the same distribution:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "t_statistic, p_value = stats.ttest_ind(X.rvs(size=1000), X.rvs(size=1000))\n", "\n", "print \"t-statistic =\", t_statistic\n", "print \"p-value =\", p_value" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "t-statistic = -0.244622880865\n", "p-value = 0.806773564698\n" ] } ], "prompt_number": 88 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since the p value is very large we cannot reject the hypothesis that the two sets of random data have *different* means." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To test if the mean of a single sample of data has mean 0.1 (the true mean is 0.0):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "stats.ttest_1samp(Y.rvs(size=1000), 0.1)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 89, "text": [ "(-4.4661322772225356, 8.8726783620609218e-06)" ] } ], "prompt_number": 89 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Low p-value means that we can reject the hypothesis that the mean of Y is 0.1." ] }, { "cell_type": "code", "collapsed": false, "input": [ "Y.mean()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 90, "text": [ "0.0" ] } ], "prompt_number": 90 }, { "cell_type": "code", "collapsed": false, "input": [ "stats.ttest_1samp(Y.rvs(size=1000), Y.mean())" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 91, "text": [ "(0.51679431628006112, 0.60541413382728715)" ] } ], "prompt_number": 91 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Further reading\n", "\n", "* http://www.scipy.org - The official web page for the SciPy project.\n", "* http://docs.scipy.org/doc/scipy/reference/tutorial/index.html - A tutorial on how to get started using SciPy. \n", "* https://github.com/scipy/scipy/ - The SciPy source code. \n" ] } ], "metadata": {} } ] }