diff --git a/01_Introduction/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb b/01_Introduction/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb deleted file mode 100644 index ccd5cd7..0000000 --- a/01_Introduction/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb +++ /dev/null @@ -1,460 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# Freefall Model\n", - "## Octave solution (will run same on Matlab)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "An object falling is subject to the force of \n", - "\n", - "- gravity ($F_g$=mg) and \n", - "- drag ($F_d=cv^2$)\n", - "\n", - "Acceleration of the object:\n", - "\n", - "$\\sum F=ma=F_g-F_d=mg - cv^2 = m\\frac{dv}{dt}$\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": true, - "slideshow": { - "slide_type": "skip" - } - }, - "outputs": [], - "source": [ - "%plot --format svg" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "Define time from 0 to 12 seconds\n", - "\n", - "t=[0,2,4,6,8,10,12]'" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "t=[0,2,4,6,8,10,12]';\n", - "% or \n", - "t=[0:2:12]';" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "### Define constants and analytical solution (meters-kilogram-sec)\n", - "\n", - "g=9.81 m/s$^2$, c=0.25 kg/m, m=60 kg\n", - "\n", - "$v_{terminal}=\\sqrt{\\frac{mg}{c}}$\n", - "\n", - "$v=v_{terminal}\\tanh{\\left(\\frac{gt}{v_{terminal}}\\right)}$" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "v_terminal = 48.522\n", - "v_analytical =\n", - "\n", - " 0.00000\n", - " 18.61630\n", - " 32.45521\n", - " 40.64183\n", - " 44.84646\n", - " 46.84974\n", - " 47.77002\n", - "\n" - ] - } - ], - "source": [ - "c=0.25; m=60; g=9.81; v_terminal=sqrt(m*g/c)\n", - "\n", - "v_analytical = v_terminal*tanh(g*t/v_terminal)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "### Define numerical method\n", - "#### Finite difference approximation\n", - "\n", - "$\\frac{v(t_{i+1})-v(t_{i})}{t_{i+1}-t_{i}}=g-\\frac{c}{m}v(t_{i})^2$\n", - "\n", - "solve for $v(t_{i+1})$\n", - "\n", - "$v(t_{i+1})=v(t_{i})+\\left(g-\\frac{c}{m}v(t_{i})^2\\right)(t_{i+1}-t_{i})$\n", - "\n", - "or\n", - "\n", - "$v(t_{i+1})=v(t_{i})+\\frac{dv_{i}}{dt}(t_{i+1}-t_{i})$\n" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "v_numerical =\n", - "\n", - " 0.00000\n", - " 19.62000\n", - " 36.03213\n", - " 44.83284\n", - " 47.70298\n", - " 48.35986\n", - " 48.49089\n", - "\n" - ] - } - ], - "source": [ - "v_numerical=zeros(length(t),1);\n", - "for i=1:length(t)-1\n", - " v_numerical(i+1)=v_numerical(i)+(g-c/m*v_numerical(i)^2)*2;\n", - "end\n", - "v_numerical" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "Display time, velocity (analytical) and velocity (numerical)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "time (s)|vel analytical (m/s)|vel numerical (m/s)\n", - "-----------------------------------------------\n", - " 0.0 | 0.00 | 0.00\n", - " 2.0 | 18.62 | 19.62\n", - " 4.0 | 32.46 | 36.03\n", - " 6.0 | 40.64 | 44.83\n", - " 8.0 | 44.85 | 47.70\n", - " 10.0 | 46.85 | 48.36\n", - " 12.0 | 47.77 | 48.49\n" - ] - } - ], - "source": [ - "fprintf('time (s)|vel analytical (m/s)|vel numerical (m/s)\\n')\n", - "fprintf('-----------------------------------------------')\n", - "M=[t,v_analytical,v_numerical];\n", - "fprintf('%7.1f | %18.2f | %15.2f\\n',M(:,1:3)');" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## Set default values for plotting" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": true, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "set (0, \"defaultaxesfontsize\", 18)\n", - "set (0, \"defaulttextfontsize\", 18) \n", - "set (0, \"defaultlinelinewidth\", 4)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "Gnuplot\n", - "Produced by GNUPLOT 5.0 patchlevel 3 \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t \n", - "\t \n", - "\t\n", - "\t\n", - "\t \n", - "\t \n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\t\n", - "\t\t0\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t10\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t20\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t30\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t40\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t50\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t0\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t2\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t4\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t6\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t8\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t10\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t12\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\n", - "\t\tvelocity (m/s)\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\ttime (s)\n", - "\t\n", - "\n", - "\n", - "\n", - "\tgnuplot_plot_1a\n", - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\tgnuplot_plot_2a\n", - "\n", - "\t\t \n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plot(t,v_analytical,'-',t,v_numerical,'o-')\n", - "xlabel('time (s)')\n", - "ylabel('velocity (m/s)')" - ] - } - ], - "metadata": { - "celltoolbar": "Slideshow", - "kernelspec": { - "display_name": "Octave", - "language": "octave", - "name": "octave" - }, - "language_info": { - "file_extension": ".m", - "help_links": [ - { - "text": "MetaKernel Magics", - "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" - } - ], - "mimetype": "text/x-octave", - "name": "octave", - "version": "0.19.14" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/01_Introduction/octave-workspace b/01_Introduction/octave-workspace deleted file mode 100644 index 8c437bb..0000000 Binary files a/01_Introduction/octave-workspace and /dev/null differ diff --git a/02_Roundoff-Truncation errors/.ipynb_checkpoints/02_Getting-started-checkpoint.ipynb b/02_Roundoff-Truncation errors/.ipynb_checkpoints/02_Getting-started-checkpoint.ipynb deleted file mode 100644 index c2b832b..0000000 --- a/02_Roundoff-Truncation errors/.ipynb_checkpoints/02_Getting-started-checkpoint.ipynb +++ /dev/null @@ -1,13750 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# Errors in Numerical Modeling\n", - "\n", - "## 1 - Roundoff \n", - "## 2 - Truncation" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# 1- Roundoff" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "## Just storing a number in a computer requires rounding\n", - "\n", - "1. digital representation of a number is rarely exact\n", - "\n", - "2. arithmetic (+,-,/,\\*) causes roundoff error\n", - "\n", - "[Consider the number $\\pi$](https://www.piday.org/million/). How many digits can a floating point number in a computer accurately represent?" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "double precision 64 bit pi = 3.1415926535897931159979635\n", - "\n", - "single precision 32 bit pi = 3.1415927410125732421875000\n", - "\n", - "First 26 digits of pi = 3.14159265358979323846264338\n" - ] - } - ], - "source": [ - "import numpy as np\n", - "pi=np.pi\n", - "double=np.array([pi],dtype='float64')\n", - "single=np.array([pi],dtype='float32')\n", - "print('double precision 64 bit pi = %1.25f\\n'%double) # 64-bit\n", - "print('single precision 32 bit pi = %1.25f\\n'%single) # 32-bit\n", - "print('First 26 digits of pi = 3.14159265358979323846264338')" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "realmax = 1.79769313486231570815e+308\n", - "\n", - "realmin = 2.22507385850720138309e-308\n", - "\n", - "maximum relative error = 2.22044604925031308085e-16\n", - "\n" - ] - } - ], - "source": [ - "print('realmax = %1.20e\\n'%np.finfo('float64').max)\n", - "print('realmin = %1.20e\\n'%np.finfo('float64').tiny)\n", - "print('maximum relative error = %1.20e\\n'%np.finfo('float64').eps)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## Machine epsilon\n", - "\n", - "Smallest number that can be added to 1 and change the value in a computer" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "summation 1+eps/2 over 1000000 minus 1 = 0.0\n", - "1000000 *eps/2 = 1.11022302463e-10\n" - ] - } - ], - "source": [ - "s=1;\n", - "N=1000000\n", - "eps=np.finfo('float64').eps\n", - "for i in range(1,N):\n", - " s+=eps/2;\n", - "\n", - "print('summation 1+eps/2 over ',N,' minus 1 =',s-1)\n", - "print(N,'*eps/2 =',N*eps/2)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# 2- Truncation error\n", - "## Freefall is example of \"truncation error\"\n", - "### Truncation error results from approximating exact mathematical procedure\n", - "\n", - "We approximated the derivative as $\\delta v/\\delta t\\approx\\Delta v/\\Delta t$\n", - "\n", - "Can reduce error by decreasing step size -> $\\Delta t$=`delta_time`" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## Truncation error as a Taylor series " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Taylor series:\n", - "$f(x)=f(a)+f'(a)(x-a)+\\frac{f''(a)}{2!}(x-a)^{2}+\\frac{f'''(a)}{3!}(x-a)^{3}+...$\n", - "\n", - "We can approximate the next value in a function by adding Taylor series terms:\n", - "\n", - "|Approximation | formula |\n", - "|---|-----------------------------|\n", - "|$0^{th}$-order | $f(x_{i+1})=f(x_{i})+R_{1}$ |\n", - "|$1^{st}$-order | $f(x_{i+1})=f(x_{i})+f'(x_{i})h+R_{2}$ |\n", - "|$2^{nd}$-order | $f(x_{i+1})=f(x_{i})+f'(x_{i})h+\\frac{f''(x_{i})}{2!}h^{2}+R_{3}$|\n", - "|$n^{th}$-order | $f(x_{i+1})=f(x_{i})+f'(x_{i})h+\\frac{f''(x_{i})}{2!}h^{2}+...\\frac{f^{(n)}}{n!}h^{n}+R_{n}$|\n", - "\n", - "Where $R_{n}=O(h^{n+1})$ is the error associated with truncating the approximation at order $n$." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "![3](https://media.giphy.com/media/xA7G2n20MzTOw/giphy.gif)\n", - "\n", - "$n^{th}$-order approximation equivalent to \n", - "an $n^{th}$-order polynomial. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Play with NumPy Arrays\n", - "\n", - "\n", - "In engineering applications, most computing situations benefit from using *arrays*: they are sequences of data all of the _same type_. They behave a lot like lists, except for the constraint in the type of their elements. There is a huge efficiency advantage when you know that all elements of a sequence are of the same type—so equivalent methods for arrays execute a lot faster than those for lists.\n", - "\n", - "The Python language is expanded for special applications, like scientific computing, with **libraries**. The most important library in science and engineering is **NumPy**, providing the _n-dimensional array_ data structure (a.k.a, `ndarray`) and a wealth of functions, operations and algorithms for efficient linear-algebra computations.\n", - "\n", - "In this lesson, you'll start playing with NumPy arrays and discover their power. You'll also meet another widely loved library: **Matplotlib**, for creating two-dimensional plots of data." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Importing libraries\n", - "\n", - "First, a word on importing libraries to expand your running Python session. Because libraries are large collections of code and are for special purposes, they are not loaded automatically when you launch Python (or IPython, or Jupyter). You have to import a library using the `import` command. For example, to import **NumPy**, with all its linear-algebra goodness, we enter:\n", - "\n", - "```python\n", - "import numpy as np\n", - "```\n", - "\n", - "Once you execute that command in a code cell, you can call any NumPy function using the dot notation, prepending the library name. For example, some commonly used functions are:\n", - "\n", - "* [`np.linspace()`](https://docs.scipy.org/doc/numpy/reference/generated/np.linspace.html)\n", - "* [`np.ones()`](https://docs.scipy.org/doc/numpy/reference/generated/np.ones.html#np.ones)\n", - "* [`np.zeros()`](https://docs.scipy.org/doc/numpy/reference/generated/np.zeros.html#np.zeros)\n", - "* [`np.empty()`](https://docs.scipy.org/doc/numpy/reference/generated/np.empty.html#np.empty)\n", - "* [`np.copy()`](https://docs.scipy.org/doc/numpy/reference/generated/np.copy.html#np.copy)\n", - "\n", - "Follow the links to explore the documentation for these very useful NumPy functions!" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Creating arrays\n", - "\n", - "To create a NumPy array from an existing list of (homogeneous) numbers, we call **`np.array()`**, like this:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 3, 5, 8, 17])" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.array([3, 5, 8, 17])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "NumPy offers many [ways to create arrays](https://docs.scipy.org/doc/numpy/reference/routines.array-creation.html#routines-array-creation) in addition to this. We already mentioned some of them above. \n", - "\n", - "Play with `np.ones()` and `np.zeros()`: they create arrays full of ones and zeros, respectively. We pass as an argument the number of array elements we want. " - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 1., 1., 1., 1., 1.])" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.ones(5)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 0., 0., 0.])" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.zeros(3)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Another useful one: `np.arange()` gives an array of evenly spaced values in a defined interval. \n", - "\n", - "*Syntax:*\n", - "\n", - "`np.arange(start, stop, step)`\n", - "\n", - "where `start` by default is zero, `stop` is not inclusive, and the default\n", - "for `step` is one. Play with it!\n" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0, 1, 2, 3])" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.arange(4)" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([2, 3, 4, 5])" - ] - }, - "execution_count": 41, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.arange(2, 6)" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([2, 4])" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.arange(2, 6, 2)" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. , 5.5])" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.arange(2, 6, 0.5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`np.linspace()` is similar to `np.arange()`, but uses number of samples instead of a step size. It returns an array with evenly spaced numbers over the specified interval. \n", - "\n", - "*Syntax:*\n", - "\n", - "`np.linspace(start, stop, num)`\n", - "\n", - "`stop` is included by default (it can be removed, read the docs), and `num` by default is 50. " - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 2. , 2.02040816, 2.04081633, 2.06122449, 2.08163265,\n", - " 2.10204082, 2.12244898, 2.14285714, 2.16326531, 2.18367347,\n", - " 2.20408163, 2.2244898 , 2.24489796, 2.26530612, 2.28571429,\n", - " 2.30612245, 2.32653061, 2.34693878, 2.36734694, 2.3877551 ,\n", - " 2.40816327, 2.42857143, 2.44897959, 2.46938776, 2.48979592,\n", - " 2.51020408, 2.53061224, 2.55102041, 2.57142857, 2.59183673,\n", - " 2.6122449 , 2.63265306, 2.65306122, 2.67346939, 2.69387755,\n", - " 2.71428571, 2.73469388, 2.75510204, 2.7755102 , 2.79591837,\n", - " 2.81632653, 2.83673469, 2.85714286, 2.87755102, 2.89795918,\n", - " 2.91836735, 2.93877551, 2.95918367, 2.97959184, 3. ])" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.linspace(2.0, 3.0)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "50" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(np.linspace(2.0, 3.0))" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 2. , 2.2, 2.4, 2.6, 2.8, 3. ])" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.linspace(2.0, 3.0, 6)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-1. , -0.75, -0.5 , -0.25, 0. , 0.25, 0.5 , 0.75, 1. ])" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.linspace(-1, 1, 9)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Array operations\n", - "\n", - "Let's assign some arrays to variable names and perform some operations with them." - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [], - "source": [ - "x_array = np.linspace(-1, 1, 9)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "Now that we've saved it with a variable name, we can do some computations with the array. E.g., take the square of every element of the array, in one go:" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 1. 0.5625 0.25 0.0625 0. 0.0625 0.25 0.5625 1. ]\n" - ] - } - ], - "source": [ - "y_array = x_array**2\n", - "print(y_array)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also take the square root of a positive array, using the `np.sqrt()` function:" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 1. 0.75 0.5 0.25 0. 0.25 0.5 0.75 1. ]\n" - ] - } - ], - "source": [ - "z_array = np.sqrt(y_array)\n", - "print(z_array)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now that we have different arrays `x_array`, `y_array` and `z_array`, we can do more computations, like add or multiply them. For example:" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 0. -0.1875 -0.25 -0.1875 0. 0.3125 0.75 1.3125 2. ]\n" - ] - } - ], - "source": [ - "add_array = x_array + y_array \n", - "print(add_array)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Array addition is defined element-wise, like when adding two vectors (or matrices). Array multiplication is also element-wise:" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[-1. -0.5625 -0.25 -0.0625 0. 0.0625 0.25 0.5625 1. ]\n" - ] - } - ], - "source": [ - "mult_array = x_array * z_array\n", - "print(mult_array)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also divide arrays, but you have to be careful not to divide by zero. This operation will result in a **`nan`** which stands for *Not a Number*. Python will still perform the division, but will tell us about the problem. \n", - "\n", - "Let's see how this might look:" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/opt/conda/lib/python3.6/site-packages/ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in true_divide\n", - " \"\"\"Entry point for launching an IPython kernel.\n" - ] - }, - { - "data": { - "text/plain": [ - "array([-1. , -1.33333333, -2. , -4. , nan,\n", - " 4. , 2. , 1.33333333, 1. ])" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x_array / y_array" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Multidimensional arrays\n", - "\n", - "### 2D arrays \n", - "\n", - "NumPy can create arrays of N dimensions. For example, a 2D array is like a matrix, and is created from a nested list as follows:" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[1 2]\n", - " [3 4]]\n" - ] - } - ], - "source": [ - "array_2d = np.array([[1, 2], [3, 4]])\n", - "print(array_2d)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "2D arrays can be added, subtracted, and multiplied:" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [], - "source": [ - "X = np.array([[1, 2], [3, 4]])\n", - "Y = np.array([[1, -1], [0, 1]])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The addition of these two matrices works exactly as you would expect:" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[2, 1],\n", - " [3, 5]])" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X + Y" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "What if we try to multiply arrays using the `'*'`operator?" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 1, -2],\n", - " [ 0, 4]])" - ] - }, - "execution_count": 54, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X * Y" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The multiplication using the `'*'` operator is element-wise. If we want to do matrix multiplication we use the `'@'` operator:" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1, 1],\n", - " [3, 1]])" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X @ Y" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Or equivalently we can use `np.dot()`:" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1, 1],\n", - " [3, 1]])" - ] - }, - "execution_count": 56, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.dot(X, Y)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3D arrays\n", - "\n", - "Let's create a 3D array by reshaping a 1D array. We can use [`np.reshape()`](https://docs.scipy.org/doc/numpy/reference/generated/np.reshape.html), where we pass the array we want to reshape and the shape we want to give it, i.e., the number of elements in each dimension. \n", - "\n", - "*Syntax*\n", - " \n", - "`np.reshape(array, newshape)`\n", - "\n", - "For example:" - ] - }, - { - "cell_type": "code", - "execution_count": 57, - "metadata": {}, - "outputs": [], - "source": [ - "a = np.arange(24)" - ] - }, - { - "cell_type": "code", - "execution_count": 58, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[[ 0 1 2 3]\n", - " [ 4 5 6 7]\n", - " [ 8 9 10 11]]\n", - "\n", - " [[12 13 14 15]\n", - " [16 17 18 19]\n", - " [20 21 22 23]]]\n" - ] - } - ], - "source": [ - "a_3D = np.reshape(a, (2, 3, 4))\n", - "print(a_3D)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can check for the shape of a NumPy array using the function `np.shape()`:" - ] - }, - { - "cell_type": "code", - "execution_count": 59, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(2, 3, 4)" - ] - }, - "execution_count": 59, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.shape(a_3D)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Visualizing the dimensions of the `a_3D` array can be tricky, so here is a diagram that will help you to understand how the dimensions are assigned: each dimension is shown as a coordinate axis. For a 3D array, on the \"x axis\", we have the sub-arrays that themselves are two-dimensional (matrices). We have two of these 2D sub-arrays, in this case; each one has 3 rows and 4 columns. Study this sketch carefully, while comparing with how the array `a_3D` is printed out above. \n", - "\n", - " \n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "When we have multidimensional arrays, we can access slices of their elements by slicing on each dimension. This is one of the advantages of using arrays: we cannot do this with lists. \n", - "\n", - "Let's access some elements of our 2D array called `X`." - ] - }, - { - "cell_type": "code", - "execution_count": 60, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1, 2],\n", - " [3, 4]])" - ] - }, - "execution_count": 60, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X" - ] - }, - { - "cell_type": "code", - "execution_count": 61, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 61, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Grab the element in the 1st row and 1st column \n", - "X[0, 0]" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2" - ] - }, - "execution_count": 62, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Grab the element in the 1st row and 2nd column \n", - "X[0, 1]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercises:\n", - "\n", - "From the X array:\n", - "\n", - "1. Grab the 2nd element in the 1st column.\n", - "2. Grab the 2nd element in the 2nd column." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Play with slicing on this array:" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1, 3])" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Grab the 1st column\n", - "X[:, 0]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "When we don't specify the start and/or end point in the slicing, the symbol `':'` means \"all\". In the example above, we are telling NumPy that we want all the elements from the 0-th index in the second dimension (the first column)." - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1, 2])" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Grab the 1st row\n", - "X[0, :]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercises:\n", - "\n", - "From the X array:\n", - "\n", - "1. Grab the 2nd column.\n", - "2. Grab the 2nd row." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's practice with a 3D array. " - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[[ 0, 1, 2, 3],\n", - " [ 4, 5, 6, 7],\n", - " [ 8, 9, 10, 11]],\n", - "\n", - " [[12, 13, 14, 15],\n", - " [16, 17, 18, 19],\n", - " [20, 21, 22, 23]]])" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a_3D" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we want to grab the first column of both matrices in our `a_3D` array, we do:" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 0, 4, 8],\n", - " [12, 16, 20]])" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a_3D[:, :, 0]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The line above is telling NumPy that we want:\n", - "\n", - "* first `':'` : from the first dimension, grab all the elements (2 matrices).\n", - "* second `':'`: from the second dimension, grab all the elements (all the rows).\n", - "* `'0'` : from the third dimension, grab the first element (first column).\n", - "\n", - "If we want the first 2 elements of the first column of both matrices: " - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 0, 4],\n", - " [12, 16]])" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a_3D[:, 0:2, 0]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Below, from the first matrix in our `a_3D` array, we will grab the two middle elements (5,6):" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([5, 6])" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a_3D[0, 1, 1:3]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercises:\n", - "\n", - "From the array named `a_3D`: \n", - "\n", - "1. Grab the two middle elements (17, 18) from the second matrix.\n", - "2. Grab the last row from both matrices.\n", - "3. Grab the elements of the 1st matrix that exclude the first row and the first column. \n", - "4. Grab the elements of the 2nd matrix that exclude the last row and the last column. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## NumPy == Fast and Clean! \n", - "\n", - "When we are working with numbers, arrays are a better option because the NumPy library has built-in functions that are optimized, and therefore faster than vanilla Python. Especially if we have big arrays. Besides, using NumPy arrays and exploiting their properties makes our code more readable.\n", - "\n", - "For example, if we wanted to add element-wise the elements of 2 lists, we need to do it with a `for` statement. If we want to add two NumPy arrays, we just use the addtion `'+'` symbol!\n", - "\n", - "Below, we will add two lists and two arrays (with random elements) and we'll compare the time it takes to compute each addition." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Element-wise sum of a Python list\n", - "\n", - "Using the Python library [`random`](https://docs.python.org/3/library/random.html), we will generate two lists with 100 pseudo-random elements in the range [0,100), with no numbers repeated." - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "#import random library\n", - "import random" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "lst_1 = random.sample(range(100), 100)\n", - "lst_2 = random.sample(range(100), 100)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[69, 21, 55, 9, 12, 57, 75, 81, 15, 17]\n", - "[57, 29, 94, 67, 51, 71, 78, 55, 41, 72]\n" - ] - } - ], - "source": [ - "#print first 10 elements\n", - "print(lst_1[0:10])\n", - "print(lst_2[0:10])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We need to write a `for` statement, appending the result of the element-wise sum into a new list we call `result_lst`. \n", - "\n", - "For timing, we can use the IPython \"magic\" `%%time`. Writing at the beginning of the code cell the command `%%time` will give us the time it takes to execute all the code in that cell. " - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 36 µs, sys: 1 µs, total: 37 µs\n", - "Wall time: 38.9 µs\n" - ] - } - ], - "source": [ - "%%time\n", - "res_lst = []\n", - "for i in range(100):\n", - " res_lst.append(lst_1[i] + lst_2[i])" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[126, 50, 149, 76, 63, 128, 153, 136, 56, 89]\n" - ] - } - ], - "source": [ - "print(res_lst[0:10])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Element-wise sum of NumPy arrays\n", - "\n", - "In this case, we generate arrays with random integers using the NumPy function [`np.random.randint()`](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/np.random.randint.html). The arrays we generate with this function are not going to be like the lists: in this case we'll have 100 elements in the range [0, 100) but they can repeat. Our goal is to compare the time it takes to compute addition of a _list_ or an _array_ of numbers, so all that matters is that the arrays and the lists are of the same length and type (integers)." - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "arr_1 = np.random.randint(0, 100, size=100)\n", - "arr_2 = np.random.randint(0, 100, size=100)" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[31 13 72 30 13 29 34 64 26 56]\n", - "[ 3 57 63 51 35 75 56 59 86 50]\n" - ] - } - ], - "source": [ - "#print first 10 elements\n", - "print(arr_1[0:10])\n", - "print(arr_2[0:10])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we can use the `%%time` cell magic, again, to see how long it takes NumPy to compute the element-wise sum." - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 20 µs, sys: 1 µs, total: 21 µs\n", - "Wall time: 26 µs\n" - ] - } - ], - "source": [ - "%%time\n", - "arr_res = arr_1 + arr_2" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Notice that in the case of arrays, the code not only is more readable (just one line of code), but it is also faster than with lists. This time advantage will be larger with bigger arrays/lists. \n", - "\n", - "(Your timing results may vary to the ones we show in this notebook, because you will be computing in a different machine.)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercise\n", - "\n", - "1. Try the comparison between lists and arrays, using bigger arrays; for example, of size 10,000. \n", - "2. Repeat the analysis, but now computing the operation that raises each element of an array/list to the power two. Use arrays of 10,000 elements. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Time to Plot\n", - "\n", - "You will love the Python library **Matplotlib**! You'll learn here about its module `pyplot`, which makes line plots. \n", - "\n", - "We need some data to plot. Let's define a NumPy array, compute derived data using its square, cube and square root (element-wise), and plot these values with the original array in the x-axis. " - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 0. 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55\n", - " 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1. 1.05 1.1 1.15\n", - " 1.2 1.25 1.3 1.35 1.4 1.45 1.5 1.55 1.6 1.65 1.7 1.75\n", - " 1.8 1.85 1.9 1.95 2. ]\n" - ] - } - ], - "source": [ - "xarray = np.linspace(0, 2, 41)\n", - "print(xarray)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "pow2 = xarray**2\n", - "pow3 = xarray**3\n", - "pow_half = np.sqrt(xarray)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To plot the resulting arrays as a function of the orginal one (`xarray`) in the x-axis, we need to import the module `pyplot` from **Matplotlib**." - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "from matplotlib import pyplot\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The line `%matplotlib inline` is an instruction to get the output of plotting commands displayed \"inline\" inside the notebook. Other options for how to deal with plot output are available, but not of interest to you right now. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We'll use the `pyplot.plot()` function, specifying the line color (`'k'` for black) and line style (`'-'`, `'--'` and `':'` for continuous, dashed and dotted line), and giving each line a label. Note that the values for `color`, `linestyle` and `label` are given in quotes." - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "#Plot x^2\n", - "pyplot.plot(xarray, pow2, color='k', linestyle='-', label='square')\n", - "#Plot x^3\n", - "pyplot.plot(xarray, pow3, color='k', linestyle='--', label='cube')\n", - "#Plot sqrt(x)\n", - "pyplot.plot(xarray, pow_half, color='k', linestyle=':', label='square root')\n", - "#Plot the legends in the best location\n", - "pyplot.legend(loc='best')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To illustrate other features, we will plot the same data, but varying the colors instead of the line style. We'll also use LaTeX syntax to write formulas in the labels. If you want to know more about LaTeX syntax, there is a [quick guide to LaTeX](https://users.dickinson.edu/~richesod/latex/latexcheatsheet.pdf) available online.\n", - "\n", - "Adding a semicolon (`';'`) to the last line in the plotting code block prevents that ugly output, like ``. Try it." - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "#Plot x^2\n", - "pyplot.plot(xarray, pow2, color='red', linestyle='-', label='$x^2$')\n", - "#Plot x^3\n", - "pyplot.plot(xarray, pow3, color='green', linestyle='-', label='$x^3$')\n", - "#Plot sqrt(x)\n", - "pyplot.plot(xarray, pow_half, color='blue', linestyle='-', label='$\\sqrt{x}$')\n", - "#Plot the legends in the best location\n", - "pyplot.legend(loc='best'); " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "That's very nice! By now, you are probably imagining all the great stuff you can do with Jupyter notebooks, Python and its scientific libraries **NumPy** and **Matplotlib**. We just saw an introduction to plotting but we will keep learning about the power of **Matplotlib** in the next lesson. \n", - "\n", - "If you are curious, you can explore all the beautiful plots you can make by browsing the [Matplotlib gallery](http://matplotlib.org/gallery.html)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercise:\n", - "\n", - "Pick two different operations to apply to the `xarray` and plot them the resulting data in the same plot. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## What we've learned\n", - "\n", - "* How to import libraries\n", - "* Multidimensional arrays using NumPy\n", - "* Accessing values and slicing in NumPy arrays\n", - "* `%%time` magic to time cell execution.\n", - "* Performance comparison: lists vs NumPy arrays\n", - "* Basic plotting with `pyplot`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## References\n", - "\n", - "1. _Effective Computation in Physics: Field Guide to Research with Python_ (2015). Anthony Scopatz & Kathryn D. Huff. O'Reilly Media, Inc.\n", - "\n", - "2. _Numerical Python: A Practical Techniques Approach for Industry_. (2015). Robert Johansson. Appress. \n", - "\n", - "2. [\"The world of Jupyter\"—a tutorial](https://github.com/barbagroup/jupyter-tutorial). Lorena A. Barba - 2016" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Execute this cell to load the notebook's style sheet, then ignore it\n", - "from IPython.core.display import HTML\n", - "css_file = '../style/custom.css'\n", - "HTML(open(css_file, \"r\").read())" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# Thanks" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "###### Content under Creative Commons Attribution license CC-BY 4.0, code under BSD 3-Clause License © 2017 L.A. Barba, N.C. Clementi" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Play with NumPy Arrays\n", - "\n", - "Welcome to **Lesson 4** of the first course module in _\"Engineering Computations_.\" You have come a long way! \n", - "\n", - "Remember, this course assumes no coding experience, so the first three lessons were focused on creating a foundation with Python programming constructs using essentially _no mathematics_. The previous lessons are:\n", - "\n", - "* [Lesson 1](http://go.gwu.edu/engcomp1lesson1): Interacting with Python\n", - "* [Lesson 2](http://go.gwu.edu/engcomp1lesson2): Play with data in Jupyter\n", - "* [Lesson 3](http://go.gwu.edu/engcomp1lesson3): Strings and lists in action\n", - "\n", - "In engineering applications, most computing situations benefit from using *arrays*: they are sequences of data all of the _same type_. They behave a lot like lists, except for the constraint in the type of their elements. There is a huge efficiency advantage when you know that all elements of a sequence are of the same type—so equivalent methods for arrays execute a lot faster than those for lists.\n", - "\n", - "The Python language is expanded for special applications, like scientific computing, with **libraries**. The most important library in science and engineering is **NumPy**, providing the _n-dimensional array_ data structure (a.k.a, `ndarray`) and a wealth of functions, operations and algorithms for efficient linear-algebra computations.\n", - "\n", - "In this lesson, you'll start playing with NumPy arrays and discover their power. You'll also meet another widely loved library: **Matplotlib**, for creating two-dimensional plots of data." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Importing libraries\n", - "\n", - "First, a word on importing libraries to expand your running Python session. Because libraries are large collections of code and are for special purposes, they are not loaded automatically when you launch Python (or IPython, or Jupyter). You have to import a library using the `import` command. For example, to import **NumPy**, with all its linear-algebra goodness, we enter:\n", - "\n", - "```python\n", - "import numpy\n", - "```\n", - "\n", - "Once you execute that command in a code cell, you can call any NumPy function using the dot notation, prepending the library name. For example, some commonly used functions are:\n", - "\n", - "* [`np.linspace()`](https://docs.scipy.org/doc/numpy/reference/generated/np.linspace.html)\n", - "* [`np.ones()`](https://docs.scipy.org/doc/numpy/reference/generated/np.ones.html#np.ones)\n", - "* [`np.zeros()`](https://docs.scipy.org/doc/numpy/reference/generated/np.zeros.html#np.zeros)\n", - "* [`np.empty()`](https://docs.scipy.org/doc/numpy/reference/generated/np.empty.html#np.empty)\n", - "* [`np.copy()`](https://docs.scipy.org/doc/numpy/reference/generated/np.copy.html#np.copy)\n", - "\n", - "Follow the links to explore the documentation for these very useful NumPy functions!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Warning:\n", - "\n", - "You will find _a lot_ of sample code online that uses a different syntax for importing. They will do:\n", - "```python\n", - "import numpy as np\n", - "```\n", - "All this does is create an alias for `numpy` with the shorter string `np`, so you then would call a **NumPy** function like this: `np.linspace()`. This is just an alternative way of doing it, for lazy people that find it too long to type `numpy` and want to save 3 characters each time. For the not-lazy, typing `numpy` is more readable and beautiful. \n", - "\n", - "We like it better like this:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import numpy" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Creating arrays\n", - "\n", - "To create a NumPy array from an existing list of (homogeneous) numbers, we call **`np.array()`**, like this:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 3, 5, 8, 17])" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.array([3, 5, 8, 17])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "NumPy offers many [ways to create arrays](https://docs.scipy.org/doc/numpy/reference/routines.array-creation.html#routines-array-creation) in addition to this. We already mentioned some of them above. \n", - "\n", - "Play with `np.ones()` and `np.zeros()`: they create arrays full of ones and zeros, respectively. We pass as an argument the number of array elements we want. " - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 1., 1., 1., 1., 1.])" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.ones(5)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 0., 0., 0.])" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.zeros(3)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Another useful one: `np.arange()` gives an array of evenly spaced values in a defined interval. \n", - "\n", - "*Syntax:*\n", - "\n", - "`np.arange(start, stop, step)`\n", - "\n", - "where `start` by default is zero, `stop` is not inclusive, and the default\n", - "for `step` is one. Play with it!\n" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0, 1, 2, 3])" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.arange(4)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([2, 3, 4, 5])" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.arange(2, 6)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([2, 4])" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.arange(2, 6, 2)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. , 5.5])" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.arange(2, 6, 0.5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`np.linspace()` is similar to `np.arange()`, but uses number of samples instead of a step size. It returns an array with evenly spaced numbers over the specified interval. \n", - "\n", - "*Syntax:*\n", - "\n", - "`np.linspace(start, stop, num)`\n", - "\n", - "`stop` is included by default (it can be removed, read the docs), and `num` by default is 50. " - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 2. , 2.02040816, 2.04081633, 2.06122449, 2.08163265,\n", - " 2.10204082, 2.12244898, 2.14285714, 2.16326531, 2.18367347,\n", - " 2.20408163, 2.2244898 , 2.24489796, 2.26530612, 2.28571429,\n", - " 2.30612245, 2.32653061, 2.34693878, 2.36734694, 2.3877551 ,\n", - " 2.40816327, 2.42857143, 2.44897959, 2.46938776, 2.48979592,\n", - " 2.51020408, 2.53061224, 2.55102041, 2.57142857, 2.59183673,\n", - " 2.6122449 , 2.63265306, 2.65306122, 2.67346939, 2.69387755,\n", - " 2.71428571, 2.73469388, 2.75510204, 2.7755102 , 2.79591837,\n", - " 2.81632653, 2.83673469, 2.85714286, 2.87755102, 2.89795918,\n", - " 2.91836735, 2.93877551, 2.95918367, 2.97959184, 3. ])" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.linspace(2.0, 3.0)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "50" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(np.linspace(2.0, 3.0))" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 2. , 2.2, 2.4, 2.6, 2.8, 3. ])" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.linspace(2.0, 3.0, 6)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-1. , -0.75, -0.5 , -0.25, 0. , 0.25, 0.5 , 0.75, 1. ])" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.linspace(-1, 1, 9)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Array operations\n", - "\n", - "Let's assign some arrays to variable names and perform some operations with them." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "x_array = np.linspace(-1, 1, 9)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "Now that we've saved it with a variable name, we can do some computations with the array. E.g., take the square of every element of the array, in one go:" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 1. 0.5625 0.25 0.0625 0. 0.0625 0.25 0.5625 1. ]\n" - ] - } - ], - "source": [ - "y_array = x_array**2\n", - "print(y_array)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also take the square root of a positive array, using the `np.sqrt()` function:" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 1. 0.75 0.5 0.25 0. 0.25 0.5 0.75 1. ]\n" - ] - } - ], - "source": [ - "z_array = np.sqrt(y_array)\n", - "print(z_array)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now that we have different arrays `x_array`, `y_array` and `z_array`, we can do more computations, like add or multiply them. For example:" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 0. -0.1875 -0.25 -0.1875 0. 0.3125 0.75 1.3125 2. ]\n" - ] - } - ], - "source": [ - "add_array = x_array + y_array \n", - "print(add_array)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Array addition is defined element-wise, like when adding two vectors (or matrices). Array multiplication is also element-wise:" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[-1. -0.5625 -0.25 -0.0625 0. 0.0625 0.25 0.5625 1. ]\n" - ] - } - ], - "source": [ - "mult_array = x_array * z_array\n", - "print(mult_array)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also divide arrays, but you have to be careful not to divide by zero. This operation will result in a **`nan`** which stands for *Not a Number*. Python will still perform the division, but will tell us about the problem. \n", - "\n", - "Let's see how this might look:" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "//anaconda/envs/future/lib/python3.5/site-packages/ipykernel/__main__.py:1: RuntimeWarning: invalid value encountered in true_divide\n", - " if __name__ == '__main__':\n" - ] - }, - { - "data": { - "text/plain": [ - "array([-1. , -1.33333333, -2. , -4. , nan,\n", - " 4. , 2. , 1.33333333, 1. ])" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x_array / y_array" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Multidimensional arrays\n", - "\n", - "### 2D arrays \n", - "\n", - "NumPy can create arrays of N dimensions. For example, a 2D array is like a matrix, and is created from a nested list as follows:" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[1 2]\n", - " [3 4]]\n" - ] - } - ], - "source": [ - "array_2d = np.array([[1, 2], [3, 4]])\n", - "print(array_2d)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "2D arrays can be added, subtracted, and multiplied:" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "X = np.array([[1, 2], [3, 4]])\n", - "Y = np.array([[1, -1], [0, 1]])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The addition of these two matrices works exactly as you would expect:" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[2, 1],\n", - " [3, 5]])" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X + Y" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "What if we try to multiply arrays using the `'*'`operator?" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 1, -2],\n", - " [ 0, 4]])" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X * Y" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The multiplication using the `'*'` operator is element-wise. If we want to do matrix multiplication we use the `'@'` operator:" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1, 1],\n", - " [3, 1]])" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X @ Y" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Or equivalently we can use `np.dot()`:" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1, 1],\n", - " [3, 1]])" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.dot(X, Y)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3D arrays\n", - "\n", - "Let's create a 3D array by reshaping a 1D array. We can use [`np.reshape()`](https://docs.scipy.org/doc/numpy/reference/generated/np.reshape.html), where we pass the array we want to reshape and the shape we want to give it, i.e., the number of elements in each dimension. \n", - "\n", - "*Syntax*\n", - " \n", - "`np.reshape(array, newshape)`\n", - "\n", - "For example:" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "a = np.arange(24)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[[ 0 1 2 3]\n", - " [ 4 5 6 7]\n", - " [ 8 9 10 11]]\n", - "\n", - " [[12 13 14 15]\n", - " [16 17 18 19]\n", - " [20 21 22 23]]]\n" - ] - } - ], - "source": [ - "a_3D = np.reshape(a, (2, 3, 4))\n", - "print(a_3D)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can check for the shape of a NumPy array using the function `np.shape()`:" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(2, 3, 4)" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.shape(a_3D)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Visualizing the dimensions of the `a_3D` array can be tricky, so here is a diagram that will help you to understand how the dimensions are assigned: each dimension is shown as a coordinate axis. For a 3D array, on the \"x axis\", we have the sub-arrays that themselves are two-dimensional (matrices). We have two of these 2D sub-arrays, in this case; each one has 3 rows and 4 columns. Study this sketch carefully, while comparing with how the array `a_3D` is printed out above. \n", - "\n", - " \n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "When we have multidimensional arrays, we can access slices of their elements by slicing on each dimension. This is one of the advantages of using arrays: we cannot do this with lists. \n", - "\n", - "Let's access some elements of our 2D array called `X`." - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1, 2],\n", - " [3, 4]])" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Grab the element in the 1st row and 1st column \n", - "X[0, 0]" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Grab the element in the 1st row and 2nd column \n", - "X[0, 1]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercises:\n", - "\n", - "From the X array:\n", - "\n", - "1. Grab the 2nd element in the 1st column.\n", - "2. Grab the 2nd element in the 2nd column." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Play with slicing on this array:" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1, 3])" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Grab the 1st column\n", - "X[:, 0]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "When we don't specify the start and/or end point in the slicing, the symbol `':'` means \"all\". In the example above, we are telling NumPy that we want all the elements from the 0-th index in the second dimension (the first column)." - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1, 2])" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Grab the 1st row\n", - "X[0, :]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercises:\n", - "\n", - "From the X array:\n", - "\n", - "1. Grab the 2nd column.\n", - "2. Grab the 2nd row." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's practice with a 3D array. " - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[[ 0, 1, 2, 3],\n", - " [ 4, 5, 6, 7],\n", - " [ 8, 9, 10, 11]],\n", - "\n", - " [[12, 13, 14, 15],\n", - " [16, 17, 18, 19],\n", - " [20, 21, 22, 23]]])" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a_3D" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we want to grab the first column of both matrices in our `a_3D` array, we do:" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 0, 4, 8],\n", - " [12, 16, 20]])" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a_3D[:, :, 0]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The line above is telling NumPy that we want:\n", - "\n", - "* first `':'` : from the first dimension, grab all the elements (2 matrices).\n", - "* second `':'`: from the second dimension, grab all the elements (all the rows).\n", - "* `'0'` : from the third dimension, grab the first element (first column).\n", - "\n", - "If we want the first 2 elements of the first column of both matrices: " - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 0, 4],\n", - " [12, 16]])" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a_3D[:, 0:2, 0]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Below, from the first matrix in our `a_3D` array, we will grab the two middle elements (5,6):" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([5, 6])" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a_3D[0, 1, 1:3]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercises:\n", - "\n", - "From the array named `a_3D`: \n", - "\n", - "1. Grab the two middle elements (17, 18) from the second matrix.\n", - "2. Grab the last row from both matrices.\n", - "3. Grab the elements of the 1st matrix that exclude the first row and the first column. \n", - "4. Grab the elements of the 2nd matrix that exclude the last row and the last column. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## NumPy == Fast and Clean! \n", - "\n", - "When we are working with numbers, arrays are a better option because the NumPy library has built-in functions that are optimized, and therefore faster than vanilla Python. Especially if we have big arrays. Besides, using NumPy arrays and exploiting their properties makes our code more readable.\n", - "\n", - "For example, if we wanted to add element-wise the elements of 2 lists, we need to do it with a `for` statement. If we want to add two NumPy arrays, we just use the addtion `'+'` symbol!\n", - "\n", - "Below, we will add two lists and two arrays (with random elements) and we'll compare the time it takes to compute each addition." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Element-wise sum of a Python list\n", - "\n", - "Using the Python library [`random`](https://docs.python.org/3/library/random.html), we will generate two lists with 100 pseudo-random elements in the range [0,100), with no numbers repeated." - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "#import random library\n", - "import random" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "lst_1 = random.sample(range(100), 100)\n", - "lst_2 = random.sample(range(100), 100)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[69, 21, 55, 9, 12, 57, 75, 81, 15, 17]\n", - "[57, 29, 94, 67, 51, 71, 78, 55, 41, 72]\n" - ] - } - ], - "source": [ - "#print first 10 elements\n", - "print(lst_1[0:10])\n", - "print(lst_2[0:10])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We need to write a `for` statement, appending the result of the element-wise sum into a new list we call `result_lst`. \n", - "\n", - "For timing, we can use the IPython \"magic\" `%%time`. Writing at the beginning of the code cell the command `%%time` will give us the time it takes to execute all the code in that cell. " - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 36 µs, sys: 1 µs, total: 37 µs\n", - "Wall time: 38.9 µs\n" - ] - } - ], - "source": [ - "%%time\n", - "res_lst = []\n", - "for i in range(100):\n", - " res_lst.append(lst_1[i] + lst_2[i])" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[126, 50, 149, 76, 63, 128, 153, 136, 56, 89]\n" - ] - } - ], - "source": [ - "print(res_lst[0:10])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Element-wise sum of NumPy arrays\n", - "\n", - "In this case, we generate arrays with random integers using the NumPy function [`np.random.randint()`](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/np.random.randint.html). The arrays we generate with this function are not going to be like the lists: in this case we'll have 100 elements in the range [0, 100) but they can repeat. Our goal is to compare the time it takes to compute addition of a _list_ or an _array_ of numbers, so all that matters is that the arrays and the lists are of the same length and type (integers)." - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "arr_1 = np.random.randint(0, 100, size=100)\n", - "arr_2 = np.random.randint(0, 100, size=100)" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[31 13 72 30 13 29 34 64 26 56]\n", - "[ 3 57 63 51 35 75 56 59 86 50]\n" - ] - } - ], - "source": [ - "#print first 10 elements\n", - "print(arr_1[0:10])\n", - "print(arr_2[0:10])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we can use the `%%time` cell magic, again, to see how long it takes NumPy to compute the element-wise sum." - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 20 µs, sys: 1 µs, total: 21 µs\n", - "Wall time: 26 µs\n" - ] - } - ], - "source": [ - "%%time\n", - "arr_res = arr_1 + arr_2" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Notice that in the case of arrays, the code not only is more readable (just one line of code), but it is also faster than with lists. This time advantage will be larger with bigger arrays/lists. \n", - "\n", - "(Your timing results may vary to the ones we show in this notebook, because you will be computing in a different machine.)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercise\n", - "\n", - "1. Try the comparison between lists and arrays, using bigger arrays; for example, of size 10,000. \n", - "2. Repeat the analysis, but now computing the operation that raises each element of an array/list to the power two. Use arrays of 10,000 elements. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Time to Plot\n", - "\n", - "You will love the Python library **Matplotlib**! You'll learn here about its module `pyplot`, which makes line plots. \n", - "\n", - "We need some data to plot. Let's define a NumPy array, compute derived data using its square, cube and square root (element-wise), and plot these values with the original array in the x-axis. " - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 0. 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55\n", - " 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1. 1.05 1.1 1.15\n", - " 1.2 1.25 1.3 1.35 1.4 1.45 1.5 1.55 1.6 1.65 1.7 1.75\n", - " 1.8 1.85 1.9 1.95 2. ]\n" - ] - } - ], - "source": [ - "xarray = np.linspace(0, 2, 41)\n", - "print(xarray)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "pow2 = xarray**2\n", - "pow3 = xarray**3\n", - "pow_half = np.sqrt(xarray)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To plot the resulting arrays as a function of the orginal one (`xarray`) in the x-axis, we need to import the module `pyplot` from **Matplotlib**." - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "from matplotlib import pyplot\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The line `%matplotlib inline` is an instruction to get the output of plotting commands displayed \"inline\" inside the notebook. Other options for how to deal with plot output are available, but not of interest to you right now. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We'll use the `pyplot.plot()` function, specifying the line color (`'k'` for black) and line style (`'-'`, `'--'` and `':'` for continuous, dashed and dotted line), and giving each line a label. Note that the values for `color`, `linestyle` and `label` are given in quotes." - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW8AAAEACAYAAAB8nvebAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8TPf++PHXJ7FTS+yRiDTcCmqrpUQllqKWqipVtXPb\nanFD63JvLfGjSkuput2oXWlpr+Xat0hslVpiSzSWRsSaRGRf5/P7I3q+QjCRTCaTvJ+Px3mYkznL\ne86M93zmcz6L0lojhBDCtthZOwAhhBDZJ8lbCCFskCRvIYSwQZK8hRDCBknyFkIIGyTJWwghbJBZ\nyVspNVYpdUYpdUoptVopVczSgQkhhHi0JyZvpZQjMBpoqrVuCBQB+lk6MCGEEI9WxMzt7IHSSikT\nUAq4ZrmQhBBCPMkTS95a62vAXOAKEA5Ea613WzowIYQQj2ZOtUl5oCfgAjgCZZRS/S0dmBBCiEcz\np9qkI3BJax0FoJT6FWgN/Hj/RkopGSRFCCGySWutnmY/c1qbXAFeVEqVUEopoAMQ9IggZMmFZerU\nqVaPoSAtcj3leubXJSfMqfM+CqwHTgCBgAK+z9FZhRBC5IhZrU201tOAaRaORQghhJmkh2U+5OXl\nZe0QChS5nrlLrmf+oHJa72IcSCmdW8cSQoiCKDw8nEqVKlG8eHEAlFJoC96wzJFatWqhlJLFRpda\ntWpZ+iMiRKExZMgQfvzxxydvaAaLl7zvfbPkyjlE3pP3T4jc4efnx9ChQwkODqZo0aJAPi95CyFE\nYae1ZvLkyUyZMsVI3DklyVsIISxsz5493Lhxg7fffjvXjinJWwghLOivUrePjw9Fipg7FuCTSZ23\neCx5/4TIGa01e/bsoX379tjZZS4v56TOW5K3eCx5/4SwHLlhacMkMQohnkahT96zZ8/GycmJsmXL\n4u7uzr59+0hKSmLIkCE4ODjQoEED5syZg7Ozs7GPnZ0dly5dMtaHDh3KlClTAIiOjqZHjx5UqVKF\nihUr0qNHD8LDw41t27Vrx6RJk2jTpg2lS5fm8uXLxMTEMHz4cBwdHXF2dmby5MmS1IUQj1Wok/cf\nf/zBf/7zH44dO0ZMTAw7duygVq1aTJs2jcuXL3P58mV27NjB8uXLyRhQMcP9jx9kMpkYNmwYYWFh\nXLlyhVKlSjFq1KhM26xatYrFixcTGxtLzZo1GTRoEMWLF+fSpUucOHGCXbt2sXjxYou9biGE7bN6\n8s6tnoBPw97enpSUFM6cOUNaWho1a9bE1dWVn3/+mUmTJlGuXDlq1KjBmDFjMu33uFKxg4MDvXr1\nonjx4pQuXZp//etf+Pn5ZdpmyJAh1K1bFzs7O6Kioti+fTvz5s2jRIkSVKpUCW9vb9asWfNUr0kI\nYX2pqanMmTOH9PR0i53D6snbmuPiurm5MX/+fHx8fKhSpQr9+/fn+vXrXLt2DScnJ2M7FxcXs4+Z\nmJjIu+++S61atShfvjyenp5ER0dnivH+KpjQ0FBSU1OpXr06Dg4OVKhQgffee4+IiIinek1CCOtb\ntGgRu3btwt7e3mLnsHrytrZ+/frh7+/PlStXAJgwYQKOjo6EhYUZ24SGhmbap1SpUiQkJBjrN27c\nMB7PmTOHkJAQAgICiI6ONkrd9yfv+38pODs7U6JECSIjI4mKiuLOnTtER0dz6tSp3H2hQog8ERcX\nx/Tp05k9e7ZFz1Ook/cff/zBvn37SElJoVixYpQsWZIiRYrQt29fZs6cSXR0NFevXmXhwoWZ9mvS\npAk//vgjJpOJ7du3s3//fuO5uLg4SpYsSdmyZYmKisLHx+exMVSrVo1OnToxduxYYmNj0Vpz6dKl\nh6pahBC24YsvvqBDhw40btzYoucp1Mk7OTmZiRMnUrlyZRwdHbl9+zYzZ85kypQpuLi44OrqSpcu\nXRg0aFCm/ebPn8+mTZuoUKECa9asoVevXsZz3t7eJCQkUKlSJVq3bk3Xrl0z7ZtV/fyKFStISUmh\nXr16ODg40KdPn0yleSGEbbh16xYLFixg+vTpFj+XdNIxw/79+xk4cKBRtVKYFIT3T4i88t133xEU\nFMT8+fPN2j4nnXRyr6O9EEIUcu+++65FW5jc74nVJkqpvymlTiiljt/7965SasyT9hNCiMLIki1M\n7petahOllB1wFWiptQ574LkCW21SmMn7J4Tl5OXYJh2Biw8mbiGEEHkru8n7TUC6/gkhxD1paWlW\nOa/ZyVspVRR4FVhnuXCEEMJ2mEwmPDw8CAwMzPNzZ6e1ySvAMa317UdtcH+HFC8vL7y8vJ46MCGE\nyO/Wrl0LQMOGDc3a3tfXF19f31w5t9k3LJVSa4DtWuvlj3heblgWQPL+CZG15ORk3N3dWbp0KZ6e\nnk91DIvfsFRKlSTjZuWvT3OSgqZdu3YsWbLE2mEIIazou+++w93d/akTd06ZVW2itU4EKls4FiGE\nsAnR0dF88skn7Nq1y2oxFOqxTYQQ4mmkpKTw6aefml3XbQmFPnlfvXqV3r17U6VKFSpXrsyYMWOY\nNm0aAwcONLYJDQ3Fzs4Ok8lk/O3ChQu0bNmS8uXL06tXL6Kjo43njhw5goeHBxUqVKBJkyaZRh0U\nQti+KlWqMGzYMKvGUKiTt8lkonv37ri6uhIaGkp4eDj9+vUDHh7978H1lStXsmzZMq5fv469vT2j\nR48GIDw8nO7duzNlyhTu3LnDnDlz6N27N5GRkXnzooQQhYLVk7ePj0+W05o9ahzsrLZ/0pjZj3L0\n6FGuX7/OZ599RsmSJSlWrBitW7c2a9+BAwfi7u5OyZIlmT59OuvWrUNrzerVq+nWrRudO3cGoEOH\nDjRr1oytW7c+VYxCCJGVfJG8s5rW7HHJ29xtnyQsLAwXFxfs7LJ/Ge6fyszFxYXU1FQiIiIIDQ3l\n559/xsHBwZjW7ODBg1y/fv2pYhRCiKwU6iFhnZ2duXLlCiaTKVMCL126dKZpzrJKvA9Ok1a0aFEq\nVaqEs7MzgwYN4rvvvrNs8EKIPLVt2zZcXV2pW7eutUMB8kHJ25patGhB9erVmThxIgkJCSQnJ3Po\n0CEaN26Mn58fYWFh3L17l1mzZj2076pVqwgODiYhIYGpU6fSp08flFIMGDCAzZs3s3PnTkwmE0lJ\nSezfv59r165Z4RUKIXJDTEwMw4YNIz4+3tqhGAp18razs2Pz5s2EhIRQs2ZNnJ2d+fnnn+nYsSN9\n+/alYcOGNG/enB49emTaTynFwIEDGTx4MI6OjqSkpPDll18C4OTkxMaNG5k5cyaVK1fGxcWFOXPm\nZGqpIoSwLTNnzqRLly688MIL1g7FINOgiceS908UdpcuXaJ58+acPn0aR0fHXD12Xo7nLYQQhcqE\nCRMYN25crifunCrUNyyFEOJxrl+/zvnz51mxYoW1Q3mIVJuIx5L3TxR2D7ZGy01SbSKEEBZiqcSd\nU/kzKiGEEI8lyVsIIWyQJG8hhLhPdHS0TdznkeQthBD3aK154403jLkp8zNJ3kIIcc/69eu5desW\nffr0sXYoTyTJu5Czs7Pj0qVL1g5DCKuLi4tj3Lhx/Oc//6FIkfzfBcbcCYjLKaXWKaWClFJnlVIt\nLR1YYZHTurX09PQc7f/gJBNCFFbTp0+nXbt2vPTSS9YOxSzmlry/BLZqrd2BRkCQ5ULKO7Nnz8bJ\nyYmyZcvi7u7Ovn37AEhKSmLIkCE4ODjQoEED5syZk2n87gdLq0OHDmXKlClAxs2OHj16UKVKFSpW\nrEiPHj0IDw83tm3Xrh2TJk2iTZs2lC5dmsuXLxMTE8Pw4cNxdHTE2dmZyZMnPzKpT5s2jT59+jBw\n4EDKly/P8uXLSUlJwdvbmxo1auDk5MTYsWNJTU019lm0aBF16tShUqVKvPbaa9y4cQMAT09PtNY0\nbNiQsmXLsm7duty7uELYkD/++IMlS5bw2WefWTsU82U1EcL9C/AMcNGM7XRWHvV3azt//rx2dnbW\nN27c0FprHRoaqi9duqS11nrChAm6bdu2Ojo6Wl+9elU3aNBAOzs7G/va2dnpixcvGutDhgzRkydP\n1lprHRkZqX/99VedlJSk4+LidN++ffVrr71mbOvl5aVdXFx0UFCQTk9P16mpqbpnz5565MiROjEx\nUd++fVu3bNlSf//991nG7ePjo4sVK6Y3bdqktdY6MTFRT548Wbdq1UpHREToiIgI3bp1az1lyhSt\ntdZ79uzRlSpV0idPntQpKSl69OjRum3btsbxlFLG685Kfn3/hMhNKSkp+vjx43l+3nv/v56Yh7Na\nzEnejYDfgKXAceB7oGQW2z0uuEeaOnWqnjp1aq6tm+vChQu6atWqevfu3To1NTXTc88++6zeuXOn\nsf79999nSt5KqUcm7wedOHFCOzg4GOteXl6Z4r1586YuXry4TkpKMv62Zs0a3a5duyyP5+Pjoz09\nPTP9zc3NTW/fvt1Y37Fjh3Z1ddVaaz18+HA9YcIE47m4uDhdtGhRHRoamuVreZAkbyEsJyfJ25xa\n+SJAU+ADrfXvSqn5wERg6oMb3j8dmZeXF15eXk88+INTmOV03Vxubm7Mnz8fHx8fzp07R+fOnfni\niy+oVq0a165dw8nJydjWxcXF7OMmJibi7e3Njh07jPaicXFxaK2N+uX7q2BCQ0NJTU2levXqwP99\nmdasWfOR57h/f4Br165l2t7FxcWY/OHatWuZxiAuXbo0FStWJDw8/LHnEELkPl9fX3x9fXPlWOYk\n76tAmNb693vr64EJWW34tInUWvr160e/fv2Ii4vjnXfeYcKECSxfvpzq1asTFhaGu7s7kJFg71eq\nVKlM06TduHHDSKhz5swhJCSEgIAAKleuTGBgIE2bNs2UvO+/Sejs7EyJEiWIjIw0++bhg9vVqFGD\n0NDQTPH+NXylo6Njpvjj4+OJjIzM9OUkhMgbDxZqp02b9tTHeuINS631TSBMKfW3e3/qAJx76jPm\nE3/88Qf79u0jJSWFYsWKUbJkSezt7QHo27cvn376KdHR0Vy9epWFCxdm2rdJkyb8+OOPmEwmtm/f\nzv79+43n4uLiKFmyJGXLliUqKuqJX2jVqlWjU6dOjB07ltjYWLTWXLp0CT8/P7NfS79+/ZgxYwYR\nERFEREQwffp0Bg4cCED//v1ZunQpp06dIjk5mX//+9+8+OKLxpdNtWrVpKmgEDbI3NYmY4DVSqmT\nZNSBz7RcSHkjOTmZiRMnUrlyZRwdHbl9+zYzZ2a8rKlTp1KzZk1cXV3p0qULgwYNyrTv/Pnz2bRp\nExUqVGDNmjX06tXLeM7b25uEhAQqVapE69at6dq1a6Z9sypdr1ixgpSUFOrVq4eDgwN9+vQxWoSY\nY9KkSTRr1oyGDRvSqFEjmjVrxscffwxA+/btmT59Oq+//jo1atTg8uXLmXqP+fj4MGjQIBwcHFi/\nfr3Z5xTClmmt6d+/P0FBtttwTsbzNsP+/fsZOHAgV65csXYoea4gvH9CPOinn35i5syZHDt2zKod\ncnIynnf+70YkhBC5KDo6mnHjxvHzzz/bRE/KR5Hu8UKIQmXChAm8+uqreHh4WDuUHJFqE/FY8v6J\ngsTf35+33nqLs2fPUq5cOWuHI9OgCSGEOUqUKMGSJUvyReLOKSl5i8eS908Iy5GStxBCFDIWv9Xq\n4uIiw47asOwMDSCEyDsWrzYRQgiRNak2EUKILFy7do2JEydaOwyLkOQthCiwRo8eTdGiRa0dhkXY\nbvciIYR4jA0bNnDmzBlWr15t7VAsQuq8hRAFTkxMDPXr12fVqlV4enpaO5xHykmdtyRvIUSBM2rU\nKJKSkli8eLG1Q3ksuWEphBD3mEwm7O3t+fzzz60dikVJyVsIIaxESt5CCFHISPIWQggbJMlbCCFs\nkCRvIYTN+/zzzwvdRNpmJW+l1J9KqUCl1Aml1FFLByWEEObatWsXCxcupGLFitYOJU+Z28PSBHhp\nre9YMhghhMiOu3fvMnz4cBYvXlwgJljIDrOaCiqlLgPNtNaRj9lGmgoKIfLUiBEjsLe357vvvrN2\nKE8lL2aP18AOpZQGvtdaL3qakwkhRG7Ztm0bu3fv5vTp09YOxSrMTd6ttdY3lFKVgV1KqSCt9YEH\nN/Lx8TEee3l54eXllStBCiHEg2JiYli6dCnPPPOMtUMxm6+vL76+vrlyrGz3sFRKTQVitdZfPPB3\nqTYRQohssGgPS6VUKaVUmXuPSwOdgDNPczIhhBC5w5xqk6rAf+/VdxcBVmutd1o2LCGEEI8jA1MJ\nIYSVyMBUQogC75tvvmHjxo3WDiPfkJK3ECLfCwwMpGPHjhw5cgQ3Nzdrh5NrpOQthCiwEhMT6d+/\nP3Pnzi1QiTunpOQthMjXRo8eze3bt1mzZg1KPVUhNd/Kix6WQgiR57Zs2cKmTZsIDAwscIk7p6Tk\nLYTIt86dO0dsbCwtW7a0digWIbPHCyGEDZIblkIIUchI8hZCCBskyVsIkW+kpqYi1a/mkeQthMgX\ntNaMGDGCxYsXWzsUmyDJWwiRLyxdupTff/+d/v37WzsUmyCtTYQQVnfq1Ck6dOjA/v37qVevnrXD\nyTPS2kQIYbNiY2Pp06cP8+bNK1SJO6ek5C2EsKqJEycSFRXF999/b+1Q8px00hFC2KyEhASUUpQs\nWdLaoeQ5Sd5CCGGDpM5bCCEKGUneQghhg8xO3kopO6XUcaXUJksGJIQo2LZv305cXJy1w7B52Sl5\n/wM4Z6lAhBAF34EDBxg8eDARERHWDsXmmZW8lVJOQFdA+q0KIZ5KWFgYffv2ZcWKFdSqVcva4dg8\nc0ve84DxgDQnEUJkW2JiIr169cLb25vOnTtbO5x8ITU1NUf7P3EaNKVUN+Cm1vqkUsoLeGSzFh8f\nH+Oxl5cXXl5eOQpOCGH7tNa899571KlTh/Hjx1s7HKvy9fXF19eX69evs3Hjxhwdy5w5LD2AV5VS\nXYGSwDNKqRVa60EPbnh/8hZCCID09HRcXV355z//WejnoWzVqhV79uzhv//9L5999hlDhw596mNl\nq5OOUsoT+FBr/WoWz0knHSGEeISAgACGDh2Km5sb33zzDY6OjtJJRwgh8qvExEQmTJhA9+7d+fjj\nj9mwYQOOjo45Pq451SYGrfV+YH+OzyqEEIXAoUOHGDZsGA0bNuTUqVNUrVo1146dreQthBBPorUm\nPj6eMmXKWDsUq4mLi2PSpEn89NNPLFy4kN69e+f6OaTaRAiRq2bPns17771n7TCsZvv27TRo0IDo\n6GjOnDljkcQNUvIWQuSiLVu2sGDBAo4ePWrtUPJcREQE3t7eHDp0iEWLFvHyyy9b9HxS8hZC5IrA\nwECGDh3KL7/8gpOTk7XDyTNaa1avXk2DBg2oWrUqp0+ftnjiBil5CyFyQXh4OD169GDhwoW0atXK\n2uHkmdDQUEaOHEl4eDibN2+mefPmeXZuKXkLIXJszZo1vP/++/Tt29faoeSJ9PR0FixYwAsvvECb\nNm34/fff8zRxg8ykI4TIBX/93y8MPShPnDjBO++8Q6lSpfj+++957rnnnvpY0klHCGFVSqkCn7jj\n4uL48MMP6dKlC++//z6+vr45Stw5JclbCCGeYPPmzdSvX5+IiAjOnDnD0KFDrf5lJTcshRDZZjKZ\nsLMr+GW/8PBwxowZw+nTp1m6dCnt27e3dkiGgn/1hRC56tixY7Rq1Yq0tDRrh2Ix6enpfPXVVzRu\n3JgGDRpw6tSpfJW4QUreQohsCAsLo2fPnixYsIAiRQpm+jh69CgjR47kmWeewd/fn7p161o7pCxJ\nyVsIYZY7d+7QrVs3vL29ef31160dTq6Liorivffeo2fPnowdO5Z9+/bl28QNkryFEGZISEigR48e\ndOjQgQ8//NDa4eQqk8nE0qVLqVevHkWKFCEoKIgBAwZY/YbkkxTM3z1CiFz13//+l2effZa5c+fm\n+6SWHadOneL9998nJSWFLVu28MILL1g7JLNJJx0hhFkKUguT2NhYfHx8WLlyJdOnT2fEiBHY29vn\neRzSSUcIYXEFIXH/NYiUu7s7UVFRnD17lnfffdcqiTunpNpECFEoBAYGMnr0aOLj41m3bp3ND6Bl\n+1+lQohcl5CQYO0Qck1UVBSjRo2iU6dODBgwgKNHj9p84gYzkrdSqrhS6jel1Aml1Gml1NS8CEwI\nYR3r1q3D09MTW7+HlZ6ezqJFi3B3d0drTVBQEO+8845NVpFk5YnVJlrrZKVUO611glLKHjiolNqm\ntS58U2UIUcDt3r2bDz74gJ07d9p0q5IjR44watQoSpQowY4dO2jcuLG1Q8p1ZtV5a63/+g1V/N4+\ntv2VLIR4yJEjR3jrrbdYv369zSa78PBwJk6cyN69e5k9ezZvv/22TX8JPY5Zdd5KKTul1AngBrBL\nax1g2bCEEHkpICCAV199lWXLluHp6WntcLItMTGRGTNm0KhRI5ydnQkODraJjjY5YW7J2wQ0UUqV\nBTYopepprc89uJ2Pj4/x2MvLCy8vr1wKUwhhSUePHuWHH36gW7du1g4lW7TWrF+/nvHjx9OsWTMC\nAgJwdXW1dliP5Ovri6+vb64cK9uddJRSU4A4rfUXD/xdOukIIfLMiRMn+Mc//kFMTAzz58+3ycKi\nRTvpKKUqKaXK3XtcEugIBD/NyYQQIqdu3rzJiBEjeOWVVxgwYADHjh2zycSdU+bUeVcH9imlTgK/\nATu01lstG5YQQmSWkJDAjBkzqFevHuXLl+f8+fMFqulfdpnTVPA00DQPYhFC5IFz5zJuV9WrV8/K\nkZjHZDKxatUqPv74Y1588UWOHj2Km5ubtcOyOulhKUQhcv78eV5++WVOnTpl7VDM4uvrS/Pmzfn6\n669Zu3Yt69atk8R9j4xtIkQhERISQseOHfnkk0/o16+ftcN5rODgYP75z39y+vRpZs2aRd++fQt0\ns7+nISVvIQqBs2fP0q5dO3x8fBgyZIi1w3mkW7duMWrUKNq0acNLL71EUFAQb775piTuLEjyFqKA\ni4qKomPHjnz++ecMHz7c2uFkKS4ujmnTpuHu7o69vT1BQUGMHz+eEiVKWDu0fEuqTYQo4BwcHDh4\n8CDPPvustUN5SGpqKosXL+b//b//R7t27QgICMiXceZHkryFKATyW0LUWvPLL7/w73//GxcXF7Zs\n2ULTptKoLTskeQsh8pSfnx///Oc/SU5OZuHChXTq1MnaIdkkSd5CFDDR0dGUL1/e2mE85Pjx43z8\n8ccEBwczY8YM3nrrrQIxtZq1yJUTogD56quv6NChQ76aSOH8+fP07duX7t270717d86fP8/bb78t\niTuH5OoJUQBorfnkk0/48ssv+eWXX/JF07orV64wfPhw2rRpQ9OmTQkJCeGDDz6gWLFi1g6tQJBq\nEyFsXHp6OmPGjMHf3x9/f3+qV69u1Xhu3brFzJkzWblyJe+99x4hISH5shrH1knyFsKGaa3p27cv\nd+/exd/fn3LlylktlqioKObOncu3337LgAEDOHfuHFWrVrVaPAWdJG8hbJhSipEjR9K2bVurVUdE\nR0czf/58Fi5cSK9evTh+/DguLi5WiaUwkTpvIWxcx44drZK4Y2JimDFjBnXq1CE0NJTffvuNRYsW\nSeLOI5K8hRDZEhcXx+zZs6lduzbBwcEcPHiQpUuXymh/eUyStxA2JCoqymrnjo+PZ+7cudSuXZsT\nJ06wf/9+Vq1axd/+9jerxVSYSfIWwkbMnz+fl156ifT09Dw9b2xsLLNnz+bZZ5/lyJEj7Nq1i7Vr\n1+Lu7p6ncYjM5IalEPlcamoq3t7e7Nu3j61bt+bZtF93795l4cKFfPnll3Ts2JG9e/dSv379PDm3\neDJJ3kLkY7dv36ZPnz6UKVOGw4cP50lTwDt37vDll1+ycOFCunbtip+fH3Xr1rX4eUX2mDN7vJNS\naq9S6pxS6rRSakxeBCZEYZeSkkKbNm1o3bo1GzdutHjijoiIYNKkSdSuXZsrV65w5MgRVqxYIYk7\nnzKn5J0GjNNan1RKlQGOKaV2aq2DLRybEIVasWLF2LFjB7Vq1bLoea5evcrcuXNZvnw5ffr04fff\nf8fV1dWi5xQ598SSt9b6htb65L3HcUAQUMPSgQkhsGjiDgkJYcSIETRs2BB7e3vOnDnDd999J4nb\nRmSrzlspVQtoDPxmiWCEEJZ38uRJPv30U/bu3csHH3xASEgIFStWtHZYIpvMTt73qkzWA/+4VwJ/\niI+Pj/HYy8sLLy+vHIYnROEQEhLCxYsX6dKli0WOr7XmwIEDzJo1i5MnTzJu3DgWL17MM888Y5Hz\niaz5+vri6+ubK8dS5oz7q5QqAvwP2Ka1/vIR2+j8NIawELZi3bp1vP/++8yaNSvXJwhOT09n48aN\nfPbZZ0RGRvLRRx8xePBgmdg3n1BKobV+qvF7zS15LwHOPSpxCyGyLzk5mQ8//JCtW7eybds2mjVr\nlmvHTkxMZPny5cydO5eKFSsyfvx4XnvttTxrIy4s74nJWynlAbwNnFZKnQA08G+t9XZLBydEQXXp\n0iX69OlDrVq1OH78eK6Ndx0ZGcnXX3/NwoULadGiBUuWLKFNmzb5YnIGkbuemLy11gcB+boWIhfd\nuXOHIUOGMGrUqFxJrBcvXmT+/PmsWrWKXr16sW/fPurVq5cLkYr8yqw6b7MOJHXeQuQprTV+fn7M\nmzePgwcPMmLECEaPHo2jo6O1QxNmyos6byFEPpGSksLPP//MF198QXx8PN7e3qxevZrSpUtbOzSR\nh6TkLYQFaa05fPgwrVu3zvGxIiMj+e677/jPf/6Du7s7Y8eO5ZVXXpFZ2G1YTkre8q4LYSERERG8\n8cYbvPvuu8TFZdk1wiynTp3inXfeoXbt2oSEhLB161Z2795Nt27dJHEXYvLOC2EBW7ZsoWHDhjz7\n7LMEBARQpkyZbO2flpbG+vXr8fT05JVXXsHZ2Zng4GCWLl1Ko0aNLBS1sCVS5y1ELoqLi2PcuHHs\n2rWLNWvW4Onpma39b9++zaJFi/jmm2+oVasWo0ePplevXhQtWtRCEQtbJclbiFxkMpkoX748gYGB\nlC1b1uxf/DVnAAAVoElEQVT9fv/9dxYuXMjGjRvp3bs3mzZtokmTJhaMVNg6uWEphJXEx8ezdu1a\nvvnmGyIjIxk5ciTDhw+XQaIKkZzcsJTkLUQeO3fuHN9++y2rV6/Gw8ODkSNH0rlzZ7n5WAhJaxMh\n8lh0dDRTpkwhKSnJrO2Tk5ONOvAOHTpQrlw5Tpw4waZNm6S5n3gq8okRIhu01vzyyy/Ur1+fW7du\nkZqa+tjtz58/z/jx46lZsyaLFy9m9OjRXLlyhenTp1OzZs08ilrkJ1pr0tPTc3wcSd5CmCksLIye\nPXsyefJkfvrpJ7799tssx8NOSEhgxYoVtG3bFk9PT+zs7PD392fPnj288cYb0nLExiUnJ2f6xXX6\n9Gn+/PNPY/3XX3/lyJEjxvqsWbPYsGGDsf73v/+dFStW5DgOaW0ihBkuXbpEy5YtGTNmDOvWraN4\n8eIPbXP8+HEWL17M2rVradWqFWPHjqV79+6SrPOZxMREtNaUKlUKyOgEVbJkSerUqQPAL7/8QsWK\nFY3JZGbPno2zszP9+/cHYOLEidSvX58RI0YA4Ofnh6urqzFlXalSpTKNl/7GG29k+pJftGhRrgxG\nJjcshTCD1pqwsLCHqjqioqJYs2YNS5YsISIiguHDhzN06FCcnZ2tFGnBl5ycTHp6upF8z549i729\nvTHL/caNGyldujQdO3YEYO7cuVSoUIFhw4YB8PHHH+Pk5MTIkSMBWLJkCZUrV6ZHjx5Axmw35cqV\nM5pqhoWFUbJkSSpVqpTrr0VamwiRh9LS0tixYwfLli1j586ddO3alSFDhtCxY0eZ7MAMJpOJtLQ0\nihUrBmRMAWcymXjuuecA2L59O0opOnfuDMDXX3+Nvb097777LgDTpk3jmWeeYdy4cQCsXLmSUqVK\n0bt3bwAOHjxIiRIleOGFFwC4du0axYoVs0jyzSlJ3kLkkqSkJAICAnjppZceeu7s2bMsW7aMVatW\nUatWLYYMGcKbb76ZaxMp2KqrV6+SmppqzDrv7+9PcnKyUfJduXIlCQkJRvL95JNPSE9PZ8qUKQCs\nXr0arTUDBgwA4NChQyilaNWqFZCRfO3t7alatWpevzSLk+QtRA5prfn111/56KOP8PDwYOXKlSil\nuH37Nj///DPLly8nPDycQYMGMXjwYOMnekFw9+5dkpKSjOQYGBhITEyM8QW2adMmbt26ZdTxfvnl\nl4SHh/PZZ58BsGrVKmJiYnj//fcBOHDgAElJSUbyDgsLw2Qy4eLiktcvLd+T5C1EDgQGBuLt7U1k\nZCTz58/nxRdfZNOmTaxatQp/f3+6du3K4MGDefnll/NltYjWmrS0NOPG6JUrV7hz544xgJW/vz9X\nr17lrbfeAjJKusHBwUyfPh2A5cuXExoaapSE9+3bR0REBH369AHgwoULJCUl0aBBAyBjPHE7OzuK\nFJH2Djll0eStlPoB6A7c1Fo3fMx2kryFzfnmm2/w8fFhypQpuLm5sXbtWjZu3EiLFi0YMGAAr732\nWpbNAS0pLi6O2NhYqlevDkBQUBBXrlwx6oB37drFyZMnGT9+PJBxw+3IkSN8//33QEadcUhICKNH\njwbgzJkzREREGK0noqOjSUtLy5d1wIWNpZN3GyAOWCHJWxQkWmu2b9/Oli1b+PXXX3F0dGTAgAG8\n+eabRuLMDREREdy8eZP69esDGU3TTp48yaBBgwDYtm0bO3bsYP78+QBs2LCB/fv3M2/ePAACAgII\nDg5m4MCBAISHh3Pnzh2jJKy1lgmGbZTFq02UUi7AZknewtZprTl9+jQ//fQTa9euxc7OjjfffJO3\n334bd3f3R+6Xnp5uVJncvHmTixcvGrPjnDhxgn379hmtH7Zt28by5ctZu3YtkNEOeOfOncyYMQPI\n6HUZHBxMz549gYw65/j4eJl7shCS5C3EY8THxzNlyhRSU1PZvXs3cXFx9O7dmwEDBtC0aVNu3bpF\nYGAgnTp1AjJKxuvWrTPqhHfv3s3nn3/Ojh07gIzOOJs3b2bq1KlARmuL4OBg4wbdg+2QhXgUSd6i\nUNNak5iYaCTL27dv89tvv+Hk5MSkSZPYvn07AAMHDuSdd94hLS0NHx8f9uzZA0BwcDDr1q1j8uTJ\nxv7BwcFGawuTyYRSSqomRK7LN8n7r5IIgJeXl3GDRIjsur+aIjo6moMHD9KtWzcA/vzzT+bOnctX\nX30FZFRbvP/++xw6dIgzZ87w9ddfs2LFCpKSknBxcWHMmDE0adLEmNVG6oiFtfj6+uLr62usT5s2\n7amTN1rrJy5ALeD0E7bRQpgjPj5e792711i/ceOG9vb2NtZDQkJ03bp1jfXw8HA9btw4Yz0mJsbY\n32Qy6YCAAP2vf/1L16lTR9esWVOPGDFCv/LKK/r06dN58GqEeHr38qZZefjB5YmjCiqlfgQOAX9T\nSl1RSg19qm8JUWClpaVx7tw5Yz02Npb7f4XdvHkz083AhIQEfvjhB2O9TJkytG3b1lh3c3Pj7Nmz\nxrqjoyNz58411kuUKIHWmn/84x+4urry1ltvYTKZWL16NX/++SeLFi1i69atRmsMIQoi6aQjspSS\nkmKMPZGSksKKFSuMHnbx8fF06dIFf39/IKNd8ssvv8zhw4eBjBt2ixYtYtSoUUBGnXF0dDQODg5P\nHU9sbCzbt29n48aNbNu2jWeffZbmzZvTsWNHevXqJdUgwibJTDoiW7TWHD169K/qLkwmE3//+98x\nmUxARknawcHBGDC+SJEiHD9+3Ni+VKlSzJs3z1gvU6aMkbgBihcvbiRuADs7u6dK3GFhYXz77be8\n8sor1KhRgx9++IEXX3yRGTNmULx4cf73v/9hZ2cniVsUSpK8C6jVq1eTkpJirHt6ehIfHw9kfNt/\n9NFHxoDydnZ2tGnTxkjeRYoUISYmxrhhaGdnx9dff20kSaUUzZo1y/WkmZaWxoEDB/jXv/5Fo0aN\naNKkCQcOHGDYsGGcO3eOl156iVmzZvHTTz8xduxYLl26xGuvvZarMQhhK2RwAhuRkJBA8eLFjYT6\nxRdfMHz4cMqVKweAu7s7e/bsMTp6HDlyhO7duxtVH/PnzzceQ0bHkfsNHjw403pezakYERFh9HLc\nuXMnNWvWpGvXrnzzzTe0bNnSeL0xMTFcvXqVrVu30rDhIxs9CVFoSJ13PnHjxg0qVKhgzNAybdo0\n/v73vxvJuFGjRvzyyy/Url0bgAULFjBgwACjOiI6Oppy5crl+yqEtLQ0fvvtN3bu3MmOHTsICgqi\nXbt2dOvWja5du1KjRg1rhyhEnpE6bxtw7do1o9oCMpLzH3/8YawPHz6c4OBgY71evXqZSsonT540\nEjfAmDFjMtUjly9fPt8m7suXL/Ptt9/y+uuvU7lyZUaNGkVSUhKffPIJt27dYsOGDcbr79+/P7/+\n+qu1QxYi35OSdy6JioqiWLFilClTBsiYeql9+/bGVEoDBw5k5MiRxngYO3bsoHHjxgVygPmoqCj2\n79/Pnj172LFjB7GxsXTq1IlOnTrRsWNHqlWrZmz7559/smzZMpYtW2ZMVdW/f38qVqxoxVcgRN6Q\n8bzzwINTN61YsYLnnnuOli1bAvDOO+/w2muv0bVrVyBjTOQ6derg5ORktZjzSlxcHP7+/uzdu5e9\ne/cSEhKCh4cH7du3p1OnTjz//PNZ1qH7+fnx+uuv89ZbbzFs2DDji06IwkKStwX4+vpSpkwZmjVr\nBsCoUaNo0qQJw4cPBzLGVHZycnrsSHQFVUJCAkeOHMHX15c9e/YQGBhI8+bNad++Pe3bt6d58+aZ\nqnweJTU1lfT09EwzbQtRmEjyfgrXr18nKSnJmHfvq6++Ij09HW9vbyBjBuqyZcvSrl07IKPknVct\nMPKbv8YW8fPzw8/Pj1OnTtG4cWM8PT1p3749Hh4elCxZ8qH9YmJi2LRpE+vXr2fZsmWFfq5HIR4k\nydsMfn5+XLlyxZjkdOXKlcTExPDBBx8AGSPJFS1aVBIMGYP9Hzp0CH9/f/z8/Lh48SItWrSgbdu2\ntG3blpYtWz5yuNOwsDD+97//sXnzZg4cOEDbtm158803eeONN7JM8EIUZpK8yeg+fe3aNZ577jkA\nNm/ezKZNm1i0aBGQMfN3RESEMbKcyJCamkpgYCCHDh3i0KFDHD58mPj4eFq1asVLL71E27Ztadq0\nqVnVIABjx44lIiKCHj160LlzZ6MduhDiYYUyeV+/fh1/f3/69u0LwMGDB/npp59YsGABkDH+Rnp6\nOmXLls2zmPI7rTXh4eEEBATw22+/cfjwYY4dO4arqyutW7emdevWtGrVijp16jy22WFkZCR37tzJ\n1HRRCJF9OUneNtPD8vr163z++ed88cUXQMZ4z5cuXTKe9/DwwMPDw1gvXbp0nseY30RFRREQEGAs\nR48eJT09nebNm9OiRQs+/vhjWrZs+cTScUJCAgcOHGD37t3s2bOHkJAQPvzww0wjBwoh8la+LXkn\nJCTQu3dvtmzZgp2dHUlJSWzZsoXevXvn2jkKktu3b3PixAlOnDjB8ePHOXbsGLdu3eKFF16gefPm\nRsKuWbNmtjrzBAYG0qZNGxo3bkzHjh3p0KEDLVq0MLsaRQjxaAWi2kRrjYeHB1u2bKFChQoA+Pv7\n07p1a2N8C5HR6iU0NJSTJ08ayfrEiRPEx8fTuHFjmjRpQpMmTWjatCl169Y169rdvHmTkydP0rlz\n54eeS0tLIykpyeh8JITIPTabvEePHs17771H/fr1gYy5BGvXrk2RIjZTm2NRERERnDlzhtOnTxvL\n2bNnKVu2bKZE3aRJE2rVqmV2ifrYsWMEBAQYNykjIyNp3bo1GzZsoGjRohZ+VUKIv9hM8l6/fj2O\njo5GF/GAgAD+9re/FeoWCVprbt++TVBQEMHBwQQFBXHu3DlOnz5NYmIiDRo04Pnnn8/0b04mNQDo\n3r07lSpVonXr1nh4eODu7l5o27ALYU02k7x37dpF5cqVady4ca6c05YkJydz+fJlQkJCOH/+vJGo\ng4KCgIwhXd3d3albty7u7u48//zzODs7m1WaTktL4+LFi5w9e5Zz585x9uxZTp06xZIlS4zu+0KI\n/CffJu9r164xYsQINm/eXCjqrePj4/nzzz+5cOGCsYSEhHDhwgVu3LhBzZo1cXNz47nnnsuUrCtX\nrmxWktaPmPX8jTfe4OTJk9SrV4/69etTr149GjRoQIMGDaQaRIh8zOLJWynVBZhPxhCyP2itZ2ex\nzUPJW2tNYGBggSlpx8bGEhYWxp9//pnlEhsbi4uLC7Vr16Z27drUqVPHeOzi4mJ2XX5wcDBHjx7l\n4sWLXLx4kQsXLnDx4kVmzZpljK1yv8LcdV8IW2bR5K2UsgP+ADoA14AAoJ/WOviB7bTWmuvXr3Pm\nzBlefvnlp4nHKtLS0rh9+zY3b94kPDyc8PBwrl69aix/raelpeHs7EytWrWyXKpUqfLIJJqUlMTN\nmzeNc4SFhdG0aVPatGnz0LZjx47l5s2buLm5Ubt2bdzc3HBzc6NatWr5dszu/MzX1xcvLy9rh1Fg\nyPXMPZbupNMCCNFah9472VqgJxCc1ca3bt0iMDDQqsk7PT2dqKgoIiMjMy0RERFGAr1x44bx7507\nd6hYsSJVq1alRo0a1KhRAycnJzw8PIzHTk5Oxkw1JpOJmJgYoqKijMXX1xc3NzeaN2/+UDyffvop\nPj4+VKlSxTiHk5MTzz//fJbxlytXjnnz5ln6MhUakmxyl1zP/MGc5F0DCLtv/SoZCT1LjRo1olGj\nRtkORGtNUlISCQkJxMfHEx8fbzz+69+7d+8SExPD3bt3s1zu3LlDZGQkMTExlC1bFgcHBypUqED5\n8uUpV64cVapUwdXVlYYNG1KtWjWqVq1KtWrVuHHjBocPHyYhIYHY2FhiY2MJDw+ndu3adOnS5aFY\n582bx/Tp03FwcMi09O7dO8vk/dFHHzFx4kQpNQshco05yTurjJNlXUuVKlXQWvNXVYyDgwPVqlUj\nPT2dtLQ0kpOTSUlJISoqiujoaEwmE1prTCYTJpMJe3t7ypYtS+nSpSlVqhSlS5emdOnSxMTEcOXK\nFezs7DLNYP7iiy8ycOBAypUrR7ly5ahQoQIVK1Zk9erVjB07lsTERCIiIihevDjFihVjxIgRjB8/\n/qG4T506xcmTJylZsiTPPPMMVatWpU6dOtSpUyfLCzJu3Dg+/PBDMy5dBrlpKITIbebUeb8I+Git\nu9xbnwjoB29aKqXy73iwQgiRT1nyhqU9cJ6MG5bXgaPAW1rroKc5oRBCiJx7YrWJ1jpdKTUK2Mn/\nNRWUxC2EEFaUa510hBBC5J1s9exQSnVRSgUrpf5QSk3I4vliSqm1SqkQpdRhpVTN3Au14DHjeg5W\nSt1SSh2/twyzRpy2QCn1g1LqplLq1GO2WXDvs3lSKVUweo5ZyJOup1LKUykVfd9nc1Jex2grlFJO\nSqm9SqlzSqnTSqkxj9gue5/Pv1qHPGkhI9FfAFyAosBJoO4D24wEvr73+E1grbnHL2yLmddzMLDA\n2rHawgK0ARoDpx7x/CvAlnuPWwJHrB1zfl7MuJ6ewCZrx2kLC1ANaHzvcRky7iE++H8925/P7JS8\njc46WutU4K/OOvfrCSy/93g9GTc5RdbMuZ6QdVNN8QCt9QHgzmM26QmsuLftb0A5pVTVvIjNFplx\nPUE+m2bRWt/QWp+89zgOCCKj/8z9sv35zE7yzqqzzoMBGNtordOBaKVUzsYvLbjMuZ4Ar9/7GfWz\nUsopb0IrkB683uFkfb2F+V5USp1QSm1RStWzdjC2QClVi4xfNL898FS2P5/ZSd7mdNZ5cBuVxTYi\ngznXcxNQS2vdGNjD//2qEdlndmczYZZjgIvWugmwENhg5XjyPaVUGTJqJP5xrwSe6eksdnns5zM7\nyfsqcP8NSCcyBqq6XxjgfC9Qe6Cs1vpJP70KqydeT631nXtVKgCLgBfyKLaC6Cr3Ppv3ZPX5FWbS\nWsdprRPuPd4GFJVf2Y+mlCpCRuJeqbXemMUm2f58Zid5BwC1lVIuSqliQD8ySob320zGTTaAPsDe\nbBy/sHni9VRKVbtvtSdwLg/js0WKR9fDbgIGgdFrOFprfTOvArNRj7ye99fHKqVakNHsOCqvArNB\nS4BzWusvH/F8tj+fZk8WqR/RWUcpNQ0I0Fr/D/gBWKmUCgEiyUhIIgtmXs8xSqlXgVQgChhitYDz\nOaXUj4AXUFEpdQWYChQjYyiH77XWW5VSXZVSF4B4YKj1os3/nnQ9gTeUUiPJ+GwmktG6TGRBKeUB\nvA2cVkqdIKM65N9ktDR76s+ndNIRQggbJNOvCCGEDZLkLYQQNkiStxBC2CBJ3kIIYYMkeQshhA2S\n5C2EEDZIkrcQQtggSd5CCGGD/j+RWiKuPrsMFQAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "#Plot x^2\n", - "pyplot.plot(xarray, pow2, color='k', linestyle='-', label='square')\n", - "#Plot x^3\n", - "pyplot.plot(xarray, pow3, color='k', linestyle='--', label='cube')\n", - "#Plot sqrt(x)\n", - "pyplot.plot(xarray, pow_half, color='k', linestyle=':', label='square root')\n", - "#Plot the legends in the best location\n", - "pyplot.legend(loc='best')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To illustrate other features, we will plot the same data, but varying the colors instead of the line style. We'll also use LaTeX syntax to write formulas in the labels. If you want to know more about LaTeX syntax, there is a [quick guide to LaTeX](https://users.dickinson.edu/~richesod/latex/latexcheatsheet.pdf) available online.\n", - "\n", - "Adding a semicolon (`';'`) to the last line in the plotting code block prevents that ugly output, like ``. Try it." - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW8AAAEACAYAAAB8nvebAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlclNX+wPHPEVxwxRX3FXctl7TMVFJb3KLsplm2qHUz\nM6/V9dq9ueCrrt3qV7esW9atXMq0sq4rLqWS+y6iAopLLqQgiAKCKHB+fxwQRJABZuaZGb7v1+u8\n5hnm4Xm+8zh+OXOesyitNUIIIdxLGasDEEIIUXSSvIUQwg1J8hZCCDckyVsIIdyQJG8hhHBDkryF\nEMIN2ZS8lVKvKKUOKqXClFILlFLlHB2YEEKIghWavJVS9YGXgS5a69sAb+BxRwcmhBCiYN427ucF\nVFJKZQIVgT8cF5IQQojCFFrz1lr/AbwPnAKigYta618dHZgQQoiC2dJs4gsEAk2A+kBlpdQTjg5M\nCCFEwWxpNukPHNdaXwBQSv0M3A18l3snpZRMkiKEEEWktVbF+T1bepucAu5SSlVQSimgHxBRQBBS\n7FCmT59ueQyeVOR6yvV0tXIg5gB13qtTnJxte/LWWu8EFgP7gP2AAr4o0VmFEKIUmx4ynb/d/bcS\nHcOmft5a6xla67Za69u01s9ora+V6KxCCFFK7T27l22nt/FitxdLdBwZYemCAgICrA7Bo8j1tC+5\nniUzbcM0/tHrH1QsW7FEx1Fa2+c+o1JK2+tYQgjhibaf2c6wH4cR9XIU5b3Lo5RCO/CGZYk0bdoU\npVSpK02bNnX0pRVCuJlpG6YxpfcUynuXL/GxbB1hWWwnT56kNNbITcccIYQwNp7cyNELRxnVaZRd\njidt3kII4WBaa6ZumMq0PtMo61XWLseU5C2EEA627sQ6ziWfY+RtI+12TEneQgjhQNm17qA+QXiX\nsV9LtSRvIYRwoOCoYJLSkhjeYbhdj+vwG5bu6ujRoxw4cICDBw8yaNAgunTpYnVIQgg3o7VmWsg0\nZgTMoIyyb11Zat4FWL58OQ0aNGDixIn83//9n9XhCCHc0JLIJWiteaTtI3Y/ttS8C/DKK68AEBER\nQbNmzSyORgjhbjJ1JtNCpvF2v7ftXusGqXkXasmSJbzxxhtWhyGEcDM/HPqBSmUrMajlIIccX5L3\nLSxfvpzx48cTHR1tdShCCDdyLeMaU9ZP4a2+bzlswJ7D5zbJGrtvl3M4wrJly/D29mbjxo107NiR\n1atXM2XKFMLDw5k5cybVq1enT58+Ra59u/r7FkI4zqe7PmXp4aWsGbnmlvuVZG4T65O3vf4qFeN9\nnDp1iqtXr+Lv70/Xrl1Zt24dW7ZsoW/fvvj4+JQoHEneQpROSWlJtPqkFcFPBNO5Xudb7luS5G39\nDUsLE1zjxo0BiI2NpWrVqvj6+jJokGPap4QQpcMH2z6gb7O+hSbukrI+eVsoMjKStLQ09u3bR+/e\nvQFYsWIFgwcPtjgyIYQ7ikmOYdbOWex+frfDz1Wqk/fatWtJTk6mXr16XLlyhSVLltCgQQOrwxJC\nuKm3Nr7FU7c9RbPqju9ebH2bt4cqre9biNLq2IVj3PnlnUS8FEHtSrVt+h2HLsaglGqllNqnlNqb\n9XhJKTWhOCcTQghPNWXDFCbeNdHmxF1SRap5K6XKAGeAO7XWp/O8JjXvXErr+xaiNNrzxx6GLBxC\n1MtRVCpXyebfc+YyaP2BY3kTtxBClGavr3udaX2mFSlxl1RRk/dwYKEjAhFCCHe09thaTl06xZjO\nY5x6XpuTt1KqLPAQ8KPjwhFCCPeRqTOZ/OtkZvadabflzWxVlK6CA4A9WuvzBe0QFBR0fTsgIICA\ngIBiByaEEK5u0cFFlPMqx9C2Q23aPyQkhJCQELuc2+YblkqphcBqrfW8Al6XG5a5lNb3LURpkZae\nRtv/tGVO4Bz6NO1TrGM4/IalUsoHc7Py5+KcRAghPM3nez6nbe22xU7cJSWDdByktL5vIUqDi1cu\n0uaTNqx9ai23+d1W7OM4s6ugEEKUem9tfIshrYaUKHGXVKme2+RWTp48yc6dO4mMjJQFiIUQ10XF\nRzE3dC6Hxh2yNA6peRdgy5Yt1KpVizZt2nDkyBGrwxFCuIhJv0xi0t2T8KvsZ2kckrwL8MQTT1C/\nfn127tzJo48+anU4QggXsP7EesJiwvjLXX+xOhRJ3rfSunVrhg4dyvTp060ORQhhsYzMDF5Z8wrv\n3vcuFbwrWB2OJO+CTJ48mYiICHx8fKTZRAjB1/u+plr5ajza1jW+iZf6roIFLUCckJBAbGws4eHh\nDBkyhPbt2xfpuK7+voUQtktMS6T1J61ZMWIFXet3tdtx3XoBYjXDPgsQ6+myALEQwjFe//V1Yi7H\nMCdwjl2P69bJ2xXExsYyfPhwNmzYYLdjusP7FkIU7njCcbr9txsHXjxA/Sr17XpsGaRTTJGRkezf\nv5/g4OAbFiAWQohsk3+dzKt3vWr3xF1SpXqQjixALIS4lY0nN7IzeifzH55vdSg3kWYTBymt71sI\nT5GpM+n2325MunsSj3d43CHnkGYTIYSws/n751PeqzzD2w+3OpR8lepmEyGEyE/y1WTeWP8G/xv+\nP5SyT484e5OatxBC5PHmb2/Sr1k/ujfobnUoBZKatxBC5BJxPoKvQ7/mwIsHrA7llqTmLYQQWbTW\nvLzqZab0mkLdynWtDueWJHkLIUSWH8N/JPZyLC91f8nqUAolzSZCCIG5Sfna2tf4buh3eJdx/dRo\n6wLE1ZRSPyqlIpRSh5RSdzo6MCGEcKY3f3uTe5veS68mvawOxSa2/nn5CAjWWj+mlPIGKjowJiGE\ncCp3uUmZW6EjLJVSVYBQrXWLQvaTEZa5lNb3LYS70VrT/5v+BLYOZMKdE5x6bkePsGwOxCml5iil\n9iqlvlBKlWy+VBe3bt06ypQpg5eX1y1L9j5CCPf1Y/iPxKXEMa7bOKtDKRJbmk28gS7AS1rr3Uqp\nD4HXgZvWBgsKCrq+HRAQQEBAgH2idLJLly6RmZlpdRhCCAdLSkty6k3KkJAQQkJC7HIsW5pN/IBt\nWuvmWc/vASZrrYfk2c8jmk327dtHzZo1ady4cYmO427vW4jS6G+//I2YyzHMe3ieJecvSbNJoX9q\ntNYxSqnTSqlWWusjQD8gvDgncwcnTpygc+fOVochhHCwiPMRzAmdw8EXD1odSrHY+j1hArBAKVUW\nOA6MclxIzrV37166dOkCwOnTp2natOkNrxe0xmXr1q0tiFYIYQ9aa8avGs/U3lPxq+xndTjFYlPy\n1lrvB7o5IgB7TdhVnBaK1NRUli1bRsWKFWnTpg27d+/mkUceuf76qVOnaNeuHf7+/kydOpXXX38d\nX1/fEjepCCGs9cOhH9zyJmVulg+P19o+pTh8fHyYOHEi8+bNIykpiWrVqt3weuPGjfH39yc2Npaq\nVavi6+vLoEGDSrw4sRDCOgmpCby69lU+HfipW4ykLIjlydtqvr6+pKamEhwcTN++fW94Tda4FMLz\nvP7r6zzU6iF6Nu5pdSgl4r5/duxo+PDhhIWF3fRzWeNSCM+y8eRGVkat5NC4Q1aHUmKyhqWDlNb3\nLYSrSktP4/bZtzOz30yGth1qdTiArGEphBCFmrlpJm1qteGRNo8UvrMbkGYTIYTHCz8fzn92/YfQ\nsaEuuyZlUUnNWwjh0TJ1Js8vf54ZATNoWLWh1eHYjSRvIYRH+2LPF2itebHbi1aHYlfSbCKE8FjR\nidFM3TCVDc9soIzyrLqqZ70bIYTIZcLqCYztOpYOdTpYHYrdSc1bCOGRlkQu4WDsQRYMXWB1KA7h\n8OTdpEkTj7m7WxRNmjSxOgQhSq3EtETGB49nwdAFVPCuYHU4DuHwQTpCCOFs44PHcyX9Cl8+9KXV\nodySQ+fzFkIId7Lx5EZ+jvjZI4bA34rcsBRCeIzkq8mMWjqK2YNnU92nutXhOJQ0mwghPMb44PEk\nXU2ybFmzopJmEyFEqbf+xHqWRC7hwIsHrA7FKaTZRAjh9pLSkhizbAxfDPnC45tLskmziRDC7Y1d\nMZZrGdf4KvArq0MpEoc3myilfgcuAZnANa119+KcTAgh7G3tsbUERwWXmuaSbLa2eWcCAVrrBEcG\nI4QQRXHpyiWeW/YcXz70JdUqVCv8FzyIrW3eqgj7CiGEU7y29jUG+A/g/hb3Wx2K09la89bAGqWU\nBr7QWv/XgTEJIUShVkWt4tfjv5a65pJstibvu7XW55RStYFflFIRWuvNeXcKCgq6vh0QEEBAQIBd\nghRCiNwSUhP484o/MzdwLlXKV7E6HJuFhIQQEhJil2MVubeJUmo6kKS1/iDPz6W3iRDCKZ5Z8gyV\ny1bmP4P+Y3UoJeLQ3iZKqYpAGa11slKqEnA/MKM4JxNCiJJaGrmUTSc3EfZimNWhWMqWZhM/4H9Z\n7d3ewAKt9VrHhiWEEDc7m3SWF1a8wE/DfqJyucpWh2MpGaQjhHALmTqTAQsGcFeDu5hxr2d8+S9J\ns4l0/xNCuIWPtn9EYloiU/tMtToUlyATUwkhXN7+c/uZuXkmO57bgXcZSVsgNW8hhItLvZbKEz8/\nwfv3v0/z6s2tDsdlSJu3EMKljQ8eT3xqPN8N/c7j1sOV+byFEB5pxZEVrDiygtCxoR6XuEtKkrcQ\nwiWdSz7H88uf54c//YBvBV+rw3E50uYthHA5WmtGLR3FmM5j6NWkl9XhuCRJ3kIIl/Pxzo+5kHqB\n6X2mWx2Ky5JmEyGESzkQc4A3N77JtjHbKOtV1upwXJbUvIUQLuPy1cuM+GkE7933Hv41/K0Ox6VJ\nV0EhhEvQWvPs0mcBmBs4t1T0LpGugkIItzcndA67/9jNzud2lorEXVKSvIUQlguLCWPyr5PZ+OxG\nKpWrZHU4bkHavIUQlkpMS+SxHx/j3w/8m7a121odjtuQNm8hhGW01oz4aQRVy1fliyFfWB2O00mb\ntxDCLc3ePZvIuEi2jdlmdShuR5K3EMISe/7Yw7SQaWwdvRWfsj5Wh+N2pM1bCOF0F69cZNjiYXw6\n8FNa1mxpdThuSdq8hRBOpbVm6A9DaVS1EbMGzLI6HEs5pc1bKVUG2A2c0Vo/VJyTCSHEh9s/JDox\nmkWPLrI6FLdWlDbvvwDhQFUHxSKE8HCbTm7iX1v+xY7ndlDeu7zV4bg1m9q8lVINgYHAl44NRwjh\nqU5fOs3wxcOZ//B8mvo2tToct2frDct/A5MAadQWQhRZ6rVUHvn+ESbeNZEH/B+wOhzXcO1aiX69\n0GYTpdQgIEZrHaqUCgAKbFwPCgq6vh0QEEBAQECJghNCuD+tNS+seIGWNVsy6e5JVodjqZCQEEJC\nQuDsWVi6tETHKrS3iVJqJjASSAd8gCrAz1rrp/PsJ71NhBA3+XD7h8zbP48to7dQsWxFq8OxVloa\nvPUWfP45vPsuatSoYvc2KVJXQaVUH+C1/HqbSPIWQuS17vg6Rv5vJNvGbJN27l27YNQoaNECPvsM\n6tcvUVdBGaQjhHCIEwknePLnJ/lu6HelO3GnpsLkyTB4MLzxBixZAvXrl/iwRRoer7X+DfitxGcV\nQni0y1cv8/D3D/OPXv/g3mb3Wh2OdbZuhdGj4bbbICwM/PzsdmgZYSmEsCutNcMXD6di2YrMCZxT\nOhdWSE6GKVPg++/hk0/g0Ufz3U2aTYQQLuOdLe/w+8XfmT14dulM3KtXQ4cOcPEiHDxYYOIuKZlV\nUAhhNyuPrOTjnR+z47kdVPCuYHU4zhUXBxMnmqaS//4X7rvPoaeTmrcQwi72n9vPqKWjWPzYYhpW\nbWh1OM6jNSxYYGrbfn5w4IDDEzdIzVsIYQfRidEMWTiETwZ+Qo9GPawOx3lOnoQXX4ToaFi+HLp1\nc9qppeYthCiR5KvJDF44mHHdxjGs/TCrw3GOjAyYNQu6doV77oHdu52auEFq3kKIEsjIzODxxY/T\ntV5XJvecbHU4zrFvH/z5z1CxImzZAq1bWxKG1LyFEMX2yppXuJJ+hc8Gfeb5PUuSk+G11+DBB2Hc\nOAgJsSxxgyRvIUQxzdoxi3Un1rF42GLKepW1OhzHWr4c2rc3PUoOHjTD3C3+YyXNJkKIIlt2eBnv\nbHmHLaO34FvB1+pwHCc6GiZMMD1I5syBvn2tjug6qXkLIYpkzx97GLNsDP8b/j/PnbMkIwM+/hg6\ndTJdAMPCXCpxg9S8hRBFcPrSaQIXBfLF4C/o3qC71eE4xs6dpvtflSqwaRO0aWN1RPmSmrcQwiYJ\nqQkM+m4QE++ayCNtH7E6HPu7cAHGjoXAQHjlFdiwwWUTN0jyFkLYIOVaCkMWDqFfs3681uM1q8Ox\nr8xM057drh14e0NEBIwcafkNycLIrIJCiFu6lnGNR75/hOo+1Zn38DzKKA+q84WFmW5/V6+aBRK6\ndnXq6WVWQSGEQ2TqTEYvGw3A1w997TmJOynJ9Nnu3x+eegq2bXN64i4pD/mXEELYm9aa19a8xomE\nE/zw2A+e0Zc7exKptm1NG/ehQ/DCC+DlZXVkRSa9TYQQ+Xp789usO7GOjaM2esbCwfv3w8svw+XL\n8OOP0MO9J9CSmrcQ4iaf7/6cr/Z9xZqRa9x/EM6FCzB+PNx/v7kRuXOn2ydusCF5K6XKK6V2KKX2\nKaUOKKWmOyMwIYQ1FocvZsZvM1gzcg31qtSzOpziy8gwiyK0bWuaSyIizIRSbthEkp9Cm0201mlK\nqXu11ilKKS9gi1JqldZ6pxPiE0I40a/Hf2XcynGsfWot/jX8rQ6n+LZvN7XtChVgzRozUtLD2NTm\nrbVOydosn/U70idQCA+z/cx2Rvw0gsWPLaZTXTdNdtHR8PrrsH49vPMOPPmky/fXLi6b2ryVUmWU\nUvuAc8AvWutdjg1LCOFMu6J38dDCh5gbOJc+TftYHU7RpabCW2/B7bdDo0YQGekWA21KwtaadybQ\nWSlVFViilGqntQ7Pu19QUND17YCAAAICAuwUphDCUfb8sYfBCwfz1UNfMajVIKvDKRqtYfFimDQJ\n7rgDdu2CZs2sjqpAISEhhISE2OVYRR5hqZSaBiRrrT/I83MZYSmEmwk9F8oD3z7A54M/5+E2D1sd\nTtHs2wd/+QskJsKHH4IbVhYdOsJSKVVLKVUta9sH6A9EFudkQgjXERYTxoPfPsinAz91r8QdEwPP\nPQcDBpimkT173DJxl5Qtbd71gA1KqVBgB7BGax3s2LCEEI50MPYgD3z7ALMGzOLRdo9aHY5tUlJM\nu3a7duDrC4cPe1TXv6KypavgAaCLE2IRQjhBxPkI7v/mft6//333WO09MxO+/RbeeAPuussMsmnR\nwuqoLCfD44UoRQ7HHab/N/159753eaLjE1aHU7iQEDOBVNmysGgR9OxpdUQuQ5K3EKVEVHwU/b/p\nz8y+Mxl520irw7m1yEj429/M2pH/+hcMG+bR3f6KQ+Y2EaIUOBR7iHvn3UtQnyCe6fSM1eEULDbW\njIy85x7o1csMaR8+XBJ3PiR5C+Hhdv+xm37z+/Hefe8xpssYq8PJX3IyzJhh5iHx8jJJe9IkM7xd\n5EuStxAebOPJjQxcMJAvhnzBiI4jrA7nZteumRVsWrY0vUd27YKPPoLata2OzOVJm7cQHmr10dU8\n/b+nWfjoQvo172d1ODfSGn76Cf7xD2jSBFauhC7Sqa0oJHkL4YEWhy/mpeCXWPr4Uno0crG5qzdu\nNDcj09Lgk0/MPNuiyCR5C+Fh5obO5e/r/s6akWtca3bAvXtNX+3ISDPYZsQIKCMtt8UlV04ID/Lx\njo+ZtmEaG57Z4DqJ+/Bh09Vv8GBTDh82U7VK4i4RuXpCeACtNf/c+E8+2vERG0dtpE2tNlaHBKdO\nwZgxpttfly4QFQUvvQTlylkdmUeQZhMh3FxGZgYTVk1g06lNbBq1yfqly2JjYeZM+OYbGDvWJG1f\nN18H0wVJ8hbCjaVcS2HETyO4fPUym0ZtolqFatYFc+ECvP8+zJ5tZvsLDwc/P+vi8XDSbCKEm4q9\nHMu98+7Ft4IvwU8GW5e4L16EoCBo1crUuvfuNX21JXE7lCRvIdzQkfgj9PiqBw+0eIC5gXMp52VB\nO3Jiouk10rIlnDwJO3aY1dqbNHF+LKWQNJsI4Wa2nt7K0O+H8lbft3iuy3PODyA5Gf7zH9NEcv/9\nsGWLqXULp5LkLYQb+Sn8J8auHMv8h+czoOUA55788mXTnv3ee2blmt9+M3ORCEtI8hbCTXy4/UPe\n2/oea0auoUs9Jw4lT0qCTz+FDz6A3r3hl1+gY0fnnV/kS5K3EC7uWsY1Jq6eyIbfN7Bl9Baa+jZ1\nzokvXTLD1z/6CPr3h/XroX1755xbFEqStxAu7Pzl8zz242NUKleJbWO2OadHSUKCSdiffAIDB5q5\nSNq4wKAfcQNbVo9vqJRar5QKV0odUEpNcEZgQpR2oedC6f5ld+5udDfLHl/m+MQdFwdTpoC/vxkd\nuX07zJ8vidtF2VLzTgde1VqHKqUqA3uUUmu11pEOjk2IUuvHQz8yLngcHw/4mMc7PO7Yk505Y3qO\nzJsHjz0Gu3dDs2aOPacoMVtWjz8HnMvaTlZKRQANAEneQthZps5k2oZpfBP2jeNvTEZFwTvvwM8/\nw+jRcPAg1K/vuPMJuypSm7dSqinQCdjhiGCEKM0S0xIZ+fNILl65yK7nd1GnUh3HnCg0FN5+29yA\nfOklk8Rr1nTMuYTD2Jy8s5pMFgN/0Von57dPUFDQ9e2AgAACAgJKGJ4QpUNUfBSBiwLp06QPi4ct\ntv+ISa1h82azEntoKLz6Knz5JVSpYt/ziFsKCQkhJCTELsdSWuvCd1LKG1gBrNJaf1TAPtqWYwkh\nbpTdvv3mvW8y9o6x9j14RgYsXQrvvgvx8fDXv8Izz8jCvi5CKYXWWhXnd22teX8NhBeUuIUQRZeW\nnsZra18jOCqYVU+u4o76d9jv4Kmp5gbk+++bJpFJk+Dhh83K7MIjFJq8lVI9gSeBA0qpfYAG/qG1\nXu3o4ITwVMcuHGPY4mE09W3K3hf24lvBTvNdx8eb0ZCffALdu8PXX5vFEFSxKnfChdnS22QLIH+u\nhbCTxeGLGbdyHFN7T2V89/EoeyTWY8fgww/h22/hkUdgwwZo167kxxUuS0ZYCuEkaelp/HXtX1kZ\ntZKVT6ykW4NuJTug1mb047//bWb2e+45OHRIuvuVEpK8hXCCYxeOMXzxcJr4Nil5M8nVq/DDD2ai\nqMuXYeJEWLAAKlWyX8DC5dnU28SmA0lvEyFuorXm27BveW3ta0zpPYWXu79c/GaS+Hj4/HMzl3bb\ntvDKKzBggKzC7sac0dtECFFEcSlxjF0xlsi4SNY+tZZOdTsV70BhYeYG5I8/mh4jwcFw++32DVa4\nHfmTLYQDrDyykttn304z32bs/vPuoifu9HRYvBj69DG160aNIDIS5syRxC0AqXkLYVfJV5N5dc2r\n/HL8F74b+h19mvYp2gHOnzfrQH72GTRtCi+/bHqPlC3rkHiF+5KatxB2svnUZm6ffTvpmensH7u/\naIl792549lmzFuTx47BsGWzaBMOGSeIW+ZIblkKUUFp6GtNDpjNv/zxmD5pNYJtA237x8mVYtMjU\nsuPj4cUXYcwYmSSqFJEblkJYZPOpzfx5+Z9pXas1+8fut20mwPBws5DvggXQsye8+SY88ID0GhFF\nIslbiGK4eOUif//17yw7soyPHvyIR9s+eusugGlpZt7s2bPhyBEzoGbfPmjc2HlBC48iyVuIItBa\n83PEz0xYPYEhrYZwaNyhWw+4OXzYTL06fz506GBuQAYGSjt2KaY1JCeb9Z1LQpK3EDY6fek041eN\nJyo+iu//9D33NL4n/x1TUkw3vy+/NLXsZ54xNx9btXJuwMIhrlyBixdN8s1+zL2d389yP09MNDPy\nVivhkqRyw1KIQmRkZvDprk+Z8dsMJtw5gck9J1Peu/zNO+7daxL2okXQo4dpGhk8WGrZLkRrc5/4\n4sWckp1U8yt5k/LFi+Y4vr4m+eZ9zC63el61as5HQm5YCuEg289sZ8KqCfiU9WHz6M20qZVnJfUL\nF2DhQjP1alyc6S2yf78ZVCPsTmtT801IuDHJFvY8dzIuXz4noeYt1apB7drQsuXN+2Q/d5V1LKTm\nLUQ+ohOj+fu6v7PuxDre7vc2I28bSRmV1RskPR3WrIG5c2HtWhg40PTR7t9fFjuwQWamSaLZCTYh\n4eaSXxLO3i5TxiTR6tVvTK6FPc9OwK70RUhq3kLYyZX0K3yw7QM+2PYBL3R9gcPjD1O5XGXz4qFD\nJmF/+60Z/fjss2Y0pK+dFlJwI7kTcEKC+QKSXxLOryQlQeXKOQk2u+R+3qjRzQk4e9tVar5Wk+Qt\nBDm9SP76y1/pUq8LO5/fSfPqzc1w9R/mmSXFoqPh6afNQgdt2hR+UDeQmpqTfLNL7ucFbScmmrWL\ns5NtjRo3JuLq1aF585t/Vr26qf3KF5SSk2YTUertP7efiWsmEp8Sz4cPfkhfv7vM8PRvvzW9RAYO\nND1G7rvPJbNO9k243Ak4Pv7G5wWVzEwzoDN38q1Z88aEXKPGja/XqGESsLdU/UqsJM0mhSZvpdRX\nwGAgRmt92y32k+Qt3MrvF39nxm8zCI4KJqj3NJ6/2ALv7xaZ1da7d4eRI80UrFWqOC2mq1dzkm/u\nkvtn+W17eZmkmp2I827n97Pq1cHHR5a3tJKjk/c9QDIwX5K38AQxyTH8c9M/WXBgAeMaPMxf9/pQ\nbeHPZvmwkSNh+HCoV6/E50lJMR1Q4uJMgs1+zC55n8fHm2aM7CSbnWizt/P+LPejj48dLoxwOofe\nsNRab1ZKNSnOwYVwJQmpCfzf1veYveNTnr7SioifqlDn6kaTrNetM6vTFODKlZyEm7ecP39jgs7e\n1hpq1TIlO/Fmb7doYSr3uV+rWdP0AZaasLCFTW3eWcl7udS8hTu6fPUys1ZM5YMDnxN4vCxTd1ai\n2n1jOH/vMM7Xac/5OHVDEj5//sbtuDjTnJGdiPMr2Yk5d6lY0ep3LlydQ5tNsk4gyVu4LK1N74fz\n5yE2NudDOLxXAAAOj0lEQVQx+sBZNuzayc5LKVRNqEONdH8SqUdcYlnKlVPUrk2+pVatG7dr1ZIa\nsXAMl+nnHRQUdH07ICCAgIAAex5elCJXr5oEnF1iYm58nreUKwd16mjqVE7F98rvnL+6j4i6p2hR\nMYM3etxNt/59qF3X63pSlr7CwgohISGEhITY5Vi21rybYmreHW+xj9S8xS1duWKScEwMnDuXs51f\nSU42SbZOHfDzM6VOnZtL7VqaOtH78Fm5mJgVi/h3y3j+2+EqgxsEMDnwPdr5dbD6bQtRIEf3NvkO\nCABqAjHAdK31nHz2k+RdCmVkmDbhs2dNQs4u2c+zE/W5c6YnRZ06ULduTkKuW/fGBJ1dqle/xdoE\n166Z/tdLl8LSpfzuC+8NqcF3FY7yRKeRTOr5N5r6NnXmZRCiWBze5m1jEJK8PUhaWk4SvlWJizOJ\ntm5dU+rVy9n28zPPs5N09eolaDdOSoLVq03CXrUKmjdnz0N38FHDM6w8v5XnuzzPxLsmUrdyXbte\nByEcSZK3sFl6uknKf/xxczl7Nmf70qWc5HurUqeOAyf6OX0aVq40CXvLFrj7bq49NJifO3gx6+i3\nnL50mnHdxvFC1xeo7lPdQUEI4TiSvAVghkhHR5ucd+aM2c5bzp83vSfq14cGDcxjfqVWLQuWVExP\nh+3bTcIODjYBP/ggBAYS26sLXxxZyGe7P6NljZa83P1lAtsE4l1GxmgL9yXJuxRITTVJ+dSpnOR8\n5syN2ykp0LBhTmnQ4OZSt65rTYlJXJxpDlm50kyv2rixmUtk0CC48072xIQya+cslh1exp/a/onx\n3cdze93brY5aCLuQ5O3mMjNNU8bJk6acOpWTpLMTdnKymSYzd8mdqBs2NANFXL4vcno67NhhEvWa\nNRARAffea5L1wIHQoAEJqQksPLiQr/d9zfmU87zU7SXGdB5DzYo1rY5eCLuS5O3iMjJMO/KJE/D7\n76acPJnzeOaMmaWtSZOc0rhxTpJu3Nh0m3P5xFyQEydMol671kyn2rQp3H+/KffcA+XLk6kzWX9i\nPV/v+5rgqGAe8H+A0Z1G0795f7zKuN5MfkLYgyRvi2ltZnc7dsyU7CR94oQpZ86YWnHTptCsmXnM\nm6g9amKhCxfgt9/MfCFr1pieItnJun9/03aT5feLvzM3dC5zQ+fiW8GXMZ3H8ETHJ6SWLUoFSd5O\nkJlpkvDRozlJOrscP25qxS1amAnomzfPSdTNmpnk7NEj+pKTTb/r9etNiYqCnj2hb1+TsDt2vOHu\nZ1xKHD+F/8T3h74nLCaMER1GMLrzaDrX62zhmxDC+SR524nWZlBJVBQcOXLj47Fjpp+yv79J0nlL\njRpWR+9EKSmmV0hIiKld798P3bqZZN23r9kuV+6GX0lITWBJ5BK+P/Q9285s40H/BxnefjgDWw6k\ngrcn/2UTomCSvIsoPd3UliMickpkpCnlypmVo1u1uvHR39+su1cqXbxo+llv3GhKWBh06gR9+phk\n3bNnvu0+iWmJLDu8jO8Pfc/Gkxvp16wfw9sPZ3CrwVQqV8mCNyKEa5HkXYCMDFNjPnDAlIMHTaI+\nftwMMGnb1pQ2bXK2S1UNuiDR0bB1q2kK2bjRXMTu3aF3b1PuvLPA+U5PXzrNiiMrWH5kOZtPbaZ3\nk94Mbz+cwDaBVC1f1clvRAjXJskb0104NDQnUYeFmURdp45pcu3YETp0gHbtTG3ao24QlsS1a6bZ\nY+tWU7ZtM6N9evSAXr1Msu7S5aZmkGyZOpPdf+xm+eHlLD+ynDOJZxjQcgBDWg3hgRYPUK1CNSe/\nISHcR6lL3ufPw549N5ZLl8w3+exE3bEjtG9v5mEWWbQ2tepdu0xf623bzMVr1gzuvtuUHj1MO9Et\n+iXGp8Sz4fcNrD66mpVRK/Gt4MuQVkMY0moIPRr1kFGPQtjIo5N3aqrJNZs3m8c9e8zE+126QNeu\nptxxh+nh4fTh3K7uwgVz0bLLzp2mLalbN9MM0qOHaQKpduvaccq1FDaf2syvx39l3Yl1RMVHcU/j\ne7iv+X0MaT0E/xr+TnpDQngWj0reCQk5za2bNpmmkPbtzViO7t0lURfo/HnYt8+UvXvNX7nYWPPX\nrVu3nITduHGho33S0tPYc3YP60+sZ92JdeyK3kXnep3p16wf/Zr1486Gd1LOK/9mFCGE7dw6eaem\nmt5mq1aZZH3ihMkxvXqZcuedpbiXR34yM82wzNDQnGS9b59pp+7UCTp3NqVLF3Mn1qvw0YkxyTFs\nPb3VlDNbCT0XSptabQhoEkD/5v3p1aQXlcvJP4IQ9uZ2yTsuLmemz3XrTM4ZPNj0POvc2cUmTrJS\nXJzpIpN9F/bAATh0yDTk507UnTubUUE2jJ9PS0/jYOxBdv2x63rCjk+Np0fDHtzd6G56NupJtwbd\nJFkL4QRukbyPHoVly0zCDg2Ffv0gMNDMR1Srll1CcE9amyaP7M7mEREQHm4SdWqq6SKT3VUm+9HG\n/oyXr14mLCaMvWf3mnJuL4fjDuNfw58u9bpcT9Zta7eljJJ2KCGczaWTd0wMPPus+WY/ZIhJ2P36\nlcKuemlppk0oKgoOH85J1BER5vW8nc47djSzUtlQm07PTOfohaOEnw8n/Hw4h84fIiwmjBMJJ2hX\nux1d6nW5XjrW6YhP2dJ28YVwTS6bvNevh6eeglGjICgIvD29B9nly2ZGqqNHc0pUlHk8d87cLGzR\nAlq3vjFZ2zhlYGJaIscuHOPohaNExEVcT9RHLxylQZUGtKvdjna129G+dns61OlA+zrt5caiEC7M\n4clbKfUg8CFQBvhKa/1OPvtcT94ZGfDmm/D55zB/Ptx3X3FCc0FJSWaC7ex5XfOWpCQzTaC/vynZ\n4+r9/c3PC/nrlZGZwbnkc5y8dPJ6kj6WcIxjCWY75VoKLaq3oEWNFrSt1Zb2tdvTrnY72tRqI7Vp\nIdyQo1ePLwMcAfoBfwC7gMe11pF59tNaa86ehSeeMBXJBQvMMHSXl55u2p1jYnLWC8teniZ7PbEz\nZ8x+jRqZm4P5lTp1CuzDeCX9CjHJMcRcjiE6MZrTiac5fem0eczaPpd8jpoVa+J7zpfOd3XGv4b/\n9WTtX8Mfv0p+KLed1Ns6ISEhBAQEWB2Gx5DraT8lSd62NGR0B6K01iezTrYICAQi8+74yy/w9NPw\nwgswdapNvdQcIyPDDFCJj7+xxMWZBB0TY5oxsh8TEsyE235+OeuFNWxoJlzK3m7Y0AxmUYpMnUli\nWiIXUi9cL/HnN3Dh1AXiU+OJvRxLzOWY68n6XPI5rqRfoU6lOvhV8qNB1QY0qtqIRlUb0aluJxpV\nM9sNqjagnFc5goKCCHo0yKKL53kk2diXXE/XYEvybgCczvX8DCah3+TZZ01tu2/fYkSiNVy5YqYb\nvXzZlOzt7MdLl8zwykuX8i8JCSZJJyaS7luVq7VrkFarOldr+pJWsxppNaqSWtuXlFbNSKnekdSq\nPqRUqUBKBW9SM9NIuZZCUloSSVeTSEyLJulqJIkXEkk6m0Ti5kSSriZx6colLl65SOVylanhUyPf\n0qpmK3o36Y1fJT/8KvvhV8kP3wq+UmsWQtiNLck7v4yTb1tLu4Ht+WBpLB8syXo5q0lG60zQGp2Z\nabYzM69va62vP8/0UmR6eZHpXcY8epXJKopMrzKke5Uh3UuR7gXpvor0GpoMBelKk640V3U6V3U6\naRkarS9S3juV8l5xlPcuTzmvcpT3Kk/FshXxKeNDxZSKVLxWEZ9LPlQsW9H83NuHKuWr4FfJj5Y1\nWlKlfBWqlq9K1fJVqVIuZ7u6T3WZv0MIYSlb2rzvAoK01g9mPX8d0HlvWiqlXGs+WCGEcAOOvGHp\nBRzG3LA8C+wERmitI4pzQiGEECVX6Hd/rXWGUmo8sJacroKSuIUQwkJ2G6QjhBDCeYo0oYVS6kGl\nVKRS6ohSanI+r5dTSi1SSkUppbYppRrbL1TPY8P1fEYpFauU2ptVRlsRpztQSn2llIpRSoXdYp9Z\nWZ/NUKVUJ2fG524Ku55KqT5KqYu5PptTnB2ju1BKNVRKrVdKhSulDiilJhSwX9E+n1prmwom0R8F\nmgBlgVCgTZ59XgQ+zdoeDiyy9filrdh4PZ8BZlkdqzsU4B6gExBWwOsDgJVZ23cC262O2ZWLDdez\nD7DM6jjdoQB1gU5Z25Ux9xDz/l8v8uezKDXv64N1tNbXgOzBOrkFAvOythdjbnKK/NlyPSH/rpoi\nD631ZiDhFrsEAvOz9t0BVFNK+TkjNndkw/UE+WzaRGt9TmsdmrWdDERgxs/kVuTPZ1GSd36DdfIG\ncH0frXUGcFEpJeux58+W6wkwNOtr1A9KqYbOCc0j5b3e0eR/vYXt7lJK7VNKrVRKtbM6GHeglGqK\n+UazI89LRf58FiV52zJYJ+8+Kp99hGHL9VwGNNVadwLWkfOtRhSdzYPNhE32AE201p2BT4AlFsfj\n8pRSlTEtEn/JqoHf8HI+v3LLz2dRkvcZIPcNyIaYiapyOw00ygrUC6iqtS7sq1dpVej11FonZDWp\nAPwX6Oqk2DzRGbI+m1ny+/wKG2mtk7XWKVnbq4Cy8i27YEopb0zi/kZrvTSfXYr8+SxK8t4F+Cul\nmiilygGPY2qGuS3H3GQDeAxYX4TjlzaFXk+lVN1cTwOBcCfG544UBbfDLgOehuujhi9qrWOcFZib\nKvB65m6PVUp1x3Q7vuCswNzQ10C41vqjAl4v8ufT5gk6dAGDdZRSM4BdWusVwFfAN0qpKCAek5BE\nPmy8nhOUUg8B14ALwLOWBezilFLfAQFATaXUKWA6UA4zlcMXWutgpdRApdRR4DIwyrpoXV9h1xP4\nk1LqRcxnMxXTu0zkQynVE3gSOKCU2odpDvkHpqdZsT+fMkhHCCHckKw6K4QQbkiStxBCuCFJ3kII\n4YYkeQshhBuS5C2EEG5IkrcQQrghSd5CCOGGJHkLIYQb+n+g7Wzwwi3JtwAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "#Plot x^2\n", - "pyplot.plot(xarray, pow2, color='red', linestyle='-', label='$x^2$')\n", - "#Plot x^3\n", - "pyplot.plot(xarray, pow3, color='green', linestyle='-', label='$x^3$')\n", - "#Plot sqrt(x)\n", - "pyplot.plot(xarray, pow_half, color='blue', linestyle='-', label='$\\sqrt{x}$')\n", - "#Plot the legends in the best location\n", - "pyplot.legend(loc='best'); " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "That's very nice! By now, you are probably imagining all the great stuff you can do with Jupyter notebooks, Python and its scientific libraries **NumPy** and **Matplotlib**. We just saw an introduction to plotting but we will keep learning about the power of **Matplotlib** in the next lesson. \n", - "\n", - "If you are curious, you can explore all the beautiful plots you can make by browsing the [Matplotlib gallery](http://matplotlib.org/gallery.html)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercise:\n", - "\n", - "Pick two different operations to apply to the `xarray` and plot them the resulting data in the same plot. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## What we've learned\n", - "\n", - "* How to import libraries\n", - "* Multidimensional arrays using NumPy\n", - "* Accessing values and slicing in NumPy arrays\n", - "* `%%time` magic to time cell execution.\n", - "* Performance comparison: lists vs NumPy arrays\n", - "* Basic plotting with `pyplot`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## References\n", - "\n", - "1. _Effective Computation in Physics: Field Guide to Research with Python_ (2015). Anthony Scopatz & Kathryn D. Huff. O'Reilly Media, Inc.\n", - "\n", - "2. _Numerical Python: A Practical Techniques Approach for Industry_. (2015). Robert Johansson. Appress. \n", - "\n", - "2. [\"The world of Jupyter\"—a tutorial](https://github.com/barbagroup/jupyter-tutorial). Lorena A. Barba - 2016" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Execute this cell to load the notebook's style sheet, then ignore it\n", - "from IPython.core.display import HTML\n", - "css_file = '../style/custom.css'\n", - "HTML(open(css_file, \"r\").read())" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1.7976931348623157e+308" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.finfo('float64').max" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# Freefall Model (revisited)\n", - "## Octave solution (will run same on Matlab)\n", - "\n", - "## Create function called `freefall.m`\n", - "\n", - "Define time from 0 to 12 seconds with `N` timesteps \n", - "function defined as `freefall`\n", - "\n", - "m=60 kg, c=0.25 kg/m" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "### Set default values in Octave for linewidth and text size" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": true, - "slideshow": { - "slide_type": "fragment" - } - }, - "outputs": [], - "source": [ - "set (0, \"defaultaxesfontsize\", 18)\n", - "set (0, \"defaulttextfontsize\", 18) \n", - "set (0, \"defaultlinelinewidth\", 4)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "## Freefall example\n", - "\n", - "Estimated the function with a $1^{st}$-order approximation, so \n", - "\n", - "$v(t_{i+1})=v(t_{i})+v'(t_{i})(t_{i+1}-t_{i})+R_{1}$\n", - "\n", - "$v'(t_{i})=\\frac{v(t_{i+1})-v(t_{i})}{t_{i+1}-t_{i}}-\\frac{R_{1}}{t_{i+1}-t_{i}}$\n", - "\n", - "$\\frac{R_{1}}{t_{i+1}-t_{i}}=\\frac{v''(\\xi)}{2!}(t_{i+1}-t_{i})$\n", - "\n", - "or the truncation error for a first-order Taylor series approximation is\n", - "\n", - "$R_{1}=O(\\Delta t^{2})$\n" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "function [v_analytical,v_terminal,t]=freefall(N)\n", - " % help file for freefall.m\n", - " % N is number of timesteps between 0 and 12 sec\n", - " % v_an...\n", - " t=linspace(0,12,N)';\n", - " c=0.25; m=60; g=9.81; v_terminal=sqrt(m*g/c);\n", - "\n", - " v_analytical = v_terminal*tanh(g*t/v_terminal);\n", - " v_numerical=zeros(length(t),1);\n", - " delta_time =diff(t);\n", - " for i=1:length(t)-1\n", - " v_numerical(i+1)=v_numerical(i)+(g-c/m*v_numerical(i)^2)*delta_time(i);\n", - " end\n", - " % Print values near 0,2,4,6,8,10,12 seconds\n", - " indices = round(linspace(1,length(t),7));\n", - " fprintf('time (s)|vel analytical (m/s)|vel numerical (m/s)\\n')\n", - " fprintf('-----------------------------------------------\\n')\n", - " M=[t(indices),v_analytical(indices),v_numerical(indices)];\n", - " fprintf('%7.1f | %18.2f | %15.2f\\n',M(:,1:3)');\n", - " plot(t,v_analytical,'-',t,v_numerical,'o-')\n", - "end\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "time (s)|vel analytical (m/s)|vel numerical (m/s)\n", - "-----------------------------------------------\n", - " 0.0 | 0.00 | 0.00\n", - " 2.0 | 18.62 | 18.62\n", - " 4.0 | 32.46 | 32.46\n", - " 6.0 | 40.64 | 40.65\n", - " 8.0 | 44.85 | 44.85\n", - " 10.0 | 46.85 | 46.85\n", - " 12.0 | 47.77 | 47.77\n" - ] - }, - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "Gnuplot\n", - "Produced by GNUPLOT 5.0 patchlevel 3 \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t \n", - "\t \n", - "\t\n", - "\t\n", - "\t \n", - "\t \n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\t\n", - "\t\t0\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t10\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t20\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t30\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t40\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t50\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t0\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t2\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t4\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t6\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t8\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t10\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t12\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\n", - "\tgnuplot_plot_1a\n", - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\tgnuplot_plot_2a\n", - "\n", - "\t\t \n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "[v_analytical,v_terminal,t]=freefall(10000);" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ans = 1.4400e-06\r\n" - ] - } - ], - "source": [ - "(12/10000)^2" - ] - } - ], - "metadata": { - "celltoolbar": "Slideshow", - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/02_Roundoff-Truncation errors/octave-workspace b/02_Roundoff-Truncation errors/octave-workspace deleted file mode 100644 index 8c437bb..0000000 Binary files a/02_Roundoff-Truncation errors/octave-workspace and /dev/null differ diff --git a/05_consistent coding/.ipynb_checkpoints/05_consistent-coding and functions-checkpoint.ipynb b/05_consistent coding/.ipynb_checkpoints/05_consistent-coding and functions-checkpoint.ipynb deleted file mode 100644 index b4918d4..0000000 --- a/05_consistent coding/.ipynb_checkpoints/05_consistent-coding and functions-checkpoint.ipynb +++ /dev/null @@ -1,1041 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": true, - "slideshow": { - "slide_type": "skip" - } - }, - "outputs": [], - "source": [ - "%plot --format svg" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "# Good coding habits\n", - "## naming folders and files" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "# [Stanford file naming best practices](https://library.stanford.edu/research/data-management-services/data-best-practices/best-practices-file-naming)\n", - "\n", - "1. Include information to distinguish file name e.g. project name, objective of function, name/initials, type of data, conditions, version of file, \n", - "2. if using dates, use YYYYMMDD, so the computer organizes by year, then month, then day\n", - "3. avoid special characters e.g. !, #, \\$, ...\n", - "4. avoid using spaces if not necessary, some programs consider a space as a break in code use dashes `-` or underscores `_` or CamelCase" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## Commenting your code\n", - "\n", - "Its important to comment your code \n", - "\n", - "- what are variable's units,\n", - "\n", - "- what the is the function supposed to do, \n", - "\n", - "- etc. \n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "function i=code(j)\n", - " % Example of bad variable names and bad function name\n", - " for w=1:j\n", - " i(w)=w;\n", - " end\n", - "end" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "'code' is a command-line function\n", - "\n", - " Example of bad variable names and bad function name\n", - "\n", - "\n", - "Additional help for built-in functions and operators is\n", - "available in the online version of the manual. Use the command\n", - "'doc ' to search the manual index.\n", - "\n", - "Help and information about Octave is also available on the WWW\n", - "at http://www.octave.org and via the help@octave.org\n", - "mailing list.\n" - ] - } - ], - "source": [ - "help code" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## Choose variable names that describe the variable" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [], - "source": [ - "function count_vector=counting_function(max_value)\n", - " % Good variable names and better help documentation\n", - " % \n", - " % counting function creates a vector from 1 to max_value where each \n", - " % index, i, is stored in each vector spot\n", - " for i=1:max_value\n", - " count_vector(i)=i; % set each element in count_vector to i\n", - " end\n", - "end " - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "'counting_function' is a command-line function\n", - "\n", - " Good variable names and better help documentation\n", - " \n", - " counting function creates a vector from 1 to max_value where each \n", - " index, i, is stored in each vector spot\n", - "\n", - "\n", - "Additional help for built-in functions and operators is\n", - "available in the online version of the manual. Use the command\n", - "'doc ' to search the manual index.\n", - "\n", - "Help and information about Octave is also available on the WWW\n", - "at http://www.octave.org and via the help@octave.org\n", - "mailing list.\n" - ] - } - ], - "source": [ - "help counting_function" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true, - "slideshow": { - "slide_type": "slide" - } - }, - "source": [ - "## Putting it all together" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "0. Use (https://github.uconn.edu/) to create an account and create your first repository \"01_ME3255_repo\"\n", - "1. Create a new file in your github repo with the default plot settings:\n", - " \n", - " ` set (0, \"defaultaxesfontsize\", 18)\n", - " set (0, \"defaulttextfontsize\", 18) \n", - " set (0, \"defaultlinelinewidth\", 4)`\n", - "1. Clone your \"01_ME3255_repo\" repository to your computer\n", - "2. open Matlab (cli, jupyter or gui)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "5\\. Change working directory to 01_ME3255_repo *e.g.* \n", - " Windows:`cd('C:\\Users\\rcc02007\\Documents\\Github\\01_ME3255_repo')`, \n", - " Mac: `cd('/Users/rcc02007/Documents/Github/01_ME3255_repo')`" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "6\\. Run `>> setdefaults.m`\n", - "\n", - "7\\. Create a new m-file called nitrogen_pressure.m\n", - "\n", - "8\\. Create a function based upon the ideal gas law for nitrogen, Pv=RT\n", - " 1. R=0.2968 kJ/(kg-K)\n", - " 2. inputs to function are v (specific volume m^3/kg), and T, temperature (K)\n", - " 3. output is P, pressure (kPa)\n", - "\n", - "9\\. Once the function works, commit the change to the repository (add a message, like 'added file nitrogen_pressure.m'\n", - "\n", - "10\\. After file is 'committed', 'push' the changes to your github account" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "for the command-line git user, this is steps 8 and 9:\n", - "1. `$ git add *`\n", - "2. `$ git commit -m 'added file nitrogen_pressure.m'`\n", - "3. `$ git push -u origin master\n", - " Username for 'https://github.uconn.edu':rcc02007 \n", - " Password for 'https://rcc02007@github.uconn.edu': `\n", - " " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true, - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "Now, use this function to plot the range of pressures that a pressure vessel would experience if it is 1000 gallons (3.79 m^3) with 10-20 kg of Nitrogen and temperatures range from -10 to 35 degrees C. \n", - "\n", - "```matlab\n", - "v=0.379/linspace(10,20,10);\n", - "T=273.15+linspace(-10,35,10);\n", - "[v_grid,T_grid]=meshgrid(v,T);\n", - "P = nitrogen_pressure(v,T);\n", - "pcolor(v_grid,T_grid,P)\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false, - "slideshow": { - "slide_type": "subslide" - } - }, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "Gnuplot\n", - "Produced by GNUPLOT 5.0 patchlevel 3 \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t\n", - "\t \n", - "\t \n", - "\t\n", - "\t\n", - "\t \n", - "\t \n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\tgnuplot_plot_1a\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\t\n", - "\t\t\n", - "\t\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\n", - "\n", - "\t\t\n", - "\t\t0.15\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\t\n", - "\t\t0.2\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\t\n", - "\t\t0.25\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\t\n", - "\t\t0.3\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\t\n", - "\t\t0.35\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\t\n", - "\t\t0.4\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\tspecific volume (m3/kg)\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\t\n", - "\t\t-10\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\t\n", - "\t\t-5\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\t\n", - "\t\t0\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\t\n", - "\t\t5\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\t\n", - "\t\t10\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\t\n", - "\t\t15\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\t\n", - "\t\t20\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\t\n", - "\t\t25\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\t\n", - "\t\t30\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\t\n", - "\t\t35\n", - "\t\n", - "\n", - "\n", - "\t\n", - "\t\tTemperature (C)\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\t\t\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\t\n", - "\t\tPressure (kPa)\n", - "\t\n", - "\n", - "\n", - "\n", - "\tgnuplot_plot_1b\n", - "\n", - "\n", - "\n", - ";\n", - "\n", - "\t\n", - "\n", - "\n", - "\n", - "\t\t\n", - "\t\t150\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t200\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t250\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t300\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t350\n", - "\t\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\t\n", - "\n", - "\n", - "\n", - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "setdefaults;\n", - "v=3.79./linspace(10,20,10);\n", - "T=273.15+linspace(-10,35,10);\n", - "[v_grid,T_grid]=meshgrid(v,T);\n", - "P = nitrogen_pressure(v_grid,T_grid);\n", - "pcolor(v_grid,T_grid-273.15,P-100)\n", - "h=colorbar();\n", - "xlabel('specific volume (m^3/kg)')\n", - "ylabel('Temperature (C)')\n", - "ylabel(h,'Pressure (kPa)')\n", - "scale=0.1; % these lines are used to keep xlabel from being cutoff in jupyter\n", - "pos = get(gca, 'Position'); % these lines are used to keep xlabel from being cutoff in jupyter\n", - "pos(2) = pos(2)+scale*pos(4); % these lines are used to keep xlabel from being cutoff in jupyter\n", - "pos(4) = (1-scale)*pos(4); % these lines are used to keep xlabel from being cutoff in jupyter\n", - "set(gca, 'Position', pos) % these lines are used to keep xlabel from being cutoff in jupyter\n", - "%colormap winter\n", - "%colormap summer\n", - "%colormap jet\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "celltoolbar": "Slideshow", - "kernelspec": { - "display_name": "Octave", - "language": "octave", - "name": "octave" - }, - "language_info": { - "file_extension": ".m", - "help_links": [ - { - "text": "MetaKernel Magics", - "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" - } - ], - "mimetype": "text/x-octave", - "name": "octave", - "version": "0.19.14" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/05_consistent coding/gp_image_01.png b/05_consistent coding/gp_image_01.png deleted file mode 100644 index ef291b5..0000000 Binary files a/05_consistent coding/gp_image_01.png and /dev/null differ diff --git a/05_consistent coding/my_caller.m b/05_consistent coding/my_caller.m deleted file mode 100644 index f0cd536..0000000 --- a/05_consistent coding/my_caller.m +++ /dev/null @@ -1,23 +0,0 @@ -function [ax,ay]=my_caller(x,y,t) - % Help documentation of "my_caller" - % This function computes the acceleration in the x- and y-directions given - % three vectors of position in x- and y-directions as a function of time - % x = x-position - % y = y-position - % t = time - % output - % ax = acceleration in x-direction - % ay = acceleration in y-direction - - function v=diff_match_dims(x,t) - v=zeros(length(t),1); - v(1:end-1)=diff(x)./diff(t); - v(end)=v(end-1); - end - - [vx,vy]=my_function(x,y,t); - - ax = diff_match_dims(vx,t); - ay = diff_match_dims(vy,t); - -end diff --git a/05_consistent coding/my_function.m b/05_consistent coding/my_function.m deleted file mode 100644 index 5953061..0000000 --- a/05_consistent coding/my_function.m +++ /dev/null @@ -1,21 +0,0 @@ -function [vx,vy] = my_function(x,y,t) - % Help documentation of "my_function" - % This function computes the velocity in the x- and y-directions given - % three vectors of position in x- and y-directions as a function of time - % x = x-position - % y = y-position - % t = time - % output - % vx = velocity in x-direction - % vy = velocity in y-direction - - vx=zeros(length(t),1); - vy=zeros(length(t),1); - - vx(1:end-1) = diff(x)./diff(t); % calculate vx as delta x/delta t - vy(1:end-1) = diff(y)./diff(t); % calculate vy as delta y/delta t - - vx(end) = vx(end-1); - vy(end) = vy(end-1); - -end diff --git a/05_consistent coding/nitrogen_pressure.m b/05_consistent coding/nitrogen_pressure.m deleted file mode 100644 index a76abf3..0000000 --- a/05_consistent coding/nitrogen_pressure.m +++ /dev/null @@ -1,10 +0,0 @@ -function P=nitrogen_pressure(v,T) - % function to calculate Pressure of Nitrogen using ideal gas law given the specific - % volume, v (m^3/kg), and temperature, T (K) - % Pv = RT - % R=0.2968; % kJ/kg-K - % P [in kPa] = nitrogen_pressure(v [in m^3/kg], T[in K]) - R=0.2968; % kJ/kg-K - P=R*T./v; -end - diff --git a/05_consistent coding/octave-workspace b/05_consistent coding/octave-workspace deleted file mode 100644 index 22452b7..0000000 Binary files a/05_consistent coding/octave-workspace and /dev/null differ diff --git a/05_consistent coding/setdefaults.m b/05_consistent coding/setdefaults.m deleted file mode 100644 index 8c3c5c8..0000000 --- a/05_consistent coding/setdefaults.m +++ /dev/null @@ -1,3 +0,0 @@ -set(0, 'defaultAxesFontSize', 16) -set(0,'defaultTextFontSize',14) -set(0,'defaultLineLineWidth',3) diff --git a/data/carpet_age.csv b/data/carpet_age.csv deleted file mode 100644 index 53ab011..0000000 --- a/data/carpet_age.csv +++ /dev/null @@ -1,24 +0,0 @@ -age,cys_acid -120,0.88 -128,1.03 -170,1.19 -250,1.21 -140,1.22 -300,1.32 -400,1.49 -400,1.53 -550,1.87 -1050,3.12 -1400,3.54 -1400,3.65 -1400,3.72 -1400,3.81 -1550,3.82 -1500,3.93 -1550,3.97 -1550,3.99 -1600,4.01 -1600,4.27 -1600,4.3 -1600,4.33 -1750,4.39 diff --git a/data/life_exp_avg_continent_year.csv b/data/life_exp_avg_continent_year.csv deleted file mode 100644 index 6bb7360..0000000 --- a/data/life_exp_avg_continent_year.csv +++ /dev/null @@ -1,13 +0,0 @@ -year,Africa,Americas,Asia,Europe,Oceania -1952,39.136,53.280,46.314,64.409,69.255 -1957,41.266,55.960,49.319,66.703,70.295 -1962,43.319,58.399,51.563,68.539,71.085 -1967,45.335,60.411,54.664,69.738,71.310 -1972,47.451,62.395,57.319,70.775,71.910 -1977,49.580,64.392,59.611,71.938,72.855 -1982,51.593,66.229,62.618,72.806,74.290 -1987,53.345,68.091,64.851,73.642,75.320 -1992,53.630,69.568,66.537,74.440,76.945 -1997,53.598,71.150,68.021,75.505,78.190 -2002,53.325,72.422,69.234,76.701,79.740 -2007,54.806,73.608,70.728,77.649,80.720 diff --git a/data/mae_bulletin.txt b/data/mae_bulletin.txt deleted file mode 100644 index 738afe6..0000000 --- a/data/mae_bulletin.txt +++ /dev/null @@ -1,431 +0,0 @@ -MAE 1004. Engineering Drawing and Computer Graphics. 0-3 Credits. - -Introduction to technical drawing, including use of instruments, lettering, geometric construction, sketching, orthographic projection, section view, dimensioning, tolerancing, and pictorial drawing. Introduction to computer graphics, including topics covered in manual drawing and computer-aided drafting. (Fall and spring). - -MAE 2117. Engineering Computations. 3 Credits. - -Numerical methods for engineering applications. Round-off errors and discretization errors. Methods for solving systems of linear equations, root finding, curve fitting, numerical Fourier transform, and data approximation. Numerical differentiation and integration and numerical solution of differential equations. Computer applications. Prerequisite: MATH 1232. (Fall, Every Year). - -MAE 2124. Linear Systems Analysis for Robotics. 3 Credits. - -Properties of linear systems. Mathematical modeling of dynamic systems. State space, state variables, and their selection. Linearization of non-linear behavior. Matrix functions. Solution of state equations in the time domain and using transformations. System stability and frequency response. - -MAE 2131. Thermodynamics. 3 Credits. - -Fundamentals of equilibrium thermodynamics; Zeroth, First, and Second Laws. Work, heat, internal energy, enthalpy, thermodynamic potential functions; heat transfer mechanisms, phase diagrams, equations of state and property tables, power systems, refrigeration, heat pump systems. Reversible and irreversible processes, Carnot cycle, entropy, exergy. Prerequisite: PHYS 1021. - -MAE 2170. History and Impact of the US Patent System. 3 Credits. - -Economic systems and emergence of the free market; role of the patent system in the industrial development of the United States; constitutional foundations; evolution of the U.S. patent system; landmark litigation; impact on future innovation; international aspects; the likely future of the patent system. - -MAE 3120. Methods of Engineering Experimentation. 0-3 Credits. - -Acquisition and analysis of experimental data. Laws of modeling and simulation. Report formulation and presentation. Basic principles of measuring instruments and sensors. Fundamentals of digital data acquisition and use of computer-based data systems. Strain gages, oscilloscopes, transducers, and computerized data systems. Prerequisite: MAE 2117. - -MAE 3126. Fluid Mechanics I. 0-3 Credits. - -Fluid properties, fluid statics, integral and differential formulations of conservation of mass, momentum, and energy. Bernoulli’s equation. Dimensional analysis and similitude. Inviscid flow. Viscous flow. Experimental and computational methods in fluid mechanics. Prerequisite: APSC 2058. (Fall, Every Year). - -MAE 3128. Biomechanics I. 3 Credits. - -Mechanical analysis of biological systems. Characterization of living tissue. Applications of statics, solid mechanics, kinematics, and elementary dynamics to the human musculoskeletal system. May be taken for graduate credit with departmental approval. Prerequisites: APSC 2057, CE 2220. (Spring, Every Year). - -MAE 3134. Linear System Dynamics. 3 Credits. - -Modeling of linear mechanical, electrical, and fluid systems as transfer functions and in state space. Linearization, discretization. Laplace and z-transforms. Natural frequencies and damping, free vibration, forced vibration. Measurement techniques, parameter estimation, and computer simulation. Time and frequency domain analysis. Prerequisite: APSC 2113; corequisite: APSC 2058. - -MAE 3145. Orbital Mechanics and Spacecraft Dynamics. 3 Credits. - -Coordinate systems and transformations, rocket equation, two-body problem, orbit transfers, orbit perturbations, attitude dynamics and stability of symmetric spacecraft, environmental and control torques. Prerequisite: APSC 2058. (Fall). - -MAE 3155. Aerodynamics. 3 Credits. - -Subsonic and supersonic aerodynamics: potential flow, lift and form drag, viscous effects, compressible flow. Prerequisite: MAE 3126. - -MAE 3162. Aerospace Structures. 3 Credits. - -Basic structural theory of lightweight aerospace structures; analysis of typical monocoque structures; load transfer in stiffened panel structures; virtual work and energy methods of structural analysis, bending of open and closed, thin walled beams, shear and torsion of beams, and structural idealization. Restricted to juniors and seniors; permission of the instructor may be substituted. Prerequisites: APSC 2057 and CE 2220. (Fall, Every Year). - -MAE 3166W. Materials Science and Engineering. 3 Credits. - -Mechanical properties, plastic deformation dislocation theory, yielding, strengthening mechanisms, microstructure and properties, heat treatment of steel, composites, amorphous materials, viscoelastic deformation, creep, fracture, fatigue, fatigue crack propagation. Includes a significant engagement in writing as a form of critical inquiry and scholarly expression to satisfy the WID requirement. Prerequisites: CHEM 1111 and PHYS 1022. (Fall, Every Year). - -MAE 3167W. Mechanics of Materials Lab. 1 Credit. - -Measurement of strains and study of failure resulting from applied forces in ductile, brittle, anisotropic, elastomeric, plastic, and composite materials. Tension, compression, bending, impact, and shear failures. Prerequisites: MAE 3166W. (Spring). - -MAE 3171. Patent Law for Engineers. 3 Credits. - -Types of patents; international patents; inventorship; prosecution process; basic references for patents; detailed structure of a patent; patentability requirements; reexamination and reissue; litigation; infringement and invalidity; copyrights, trademarks, and trade dress. May be taken for graduate credit with approval of department. - -MAE 3184. Robotics Lab. 1 Credit. - -Forward and inverse kinematics modeling of robots, control design, trajectory planning, and force rendering. Corequisite: MAE 3197. - -MAE 3187. Heat Transfer. 3 Credits. - -Steady- and unsteady-state heat conduction problems. Analytical and numerical solution methods. Convective heat transfer, boundary-layer approach, analogy between heat and momentum transfer. Thermal radiation; fundamental concepts and laws. Heat-exchanger design. Prerequisite: MAE 3126, MAE 2131. - -MAE 3190. Analysis and Synthesis of Mechanisms. 3 Credits. - -Kinematics and dynamics of mechanisms. Displacements, velocities, and accelerations in linkage, cam, and gear systems by analytical, graphical, and computer methods. Synthesis of linkages to meet prescribed performance requirements. Prerequisite: APSC 2058. (Fall). - -MAE 3191. Mechanical Design of Machine Elements. 3 Credits. - -Strength of materials in a design context; stresses and deflections in engineering structures; theories of failure; design of mechanical components, such as fasteners, shafts, and springs; the use of computers in mechanical engineering design. Prerequisite: CE 2220. (Fall, Every Year). - -MAE 3192. Manufacturing Processes and Systems. 3 Credits. - -Introduction to manufacturing techniques for metals, polymers, ceramics, and composites. Relationships between properties of materials and techniques for processing them. Process selection, design, control, and integration. Computer-integrated manufacturing, robotics and assembly automation. Prerequisite or concurrent registration: MAE 1004. - -MAE 3193. Mechanical Systems Design. 3 Credits. - -Creative engineering design, problem definition, and concept generation; design of mechanisms and mechanical systems; safety, reliability, manufacturability, material selections, cost, and integration in the design process; finite element analysis of mechanical systems, computer-aided design, and optimization. Prerequisite: MAE 3191. (Spring, Every Year). - -MAE 3195. Computer-Aided Engineering of Mechanical Systems. 3 Credits. - -Presentation of the major elements of computer-aided engineering systems: interactive computer graphics, finite element analysis, and design optimization. Consideration of economics, safety, and reliability factors. Prerequisite: MAE 4193; concurrent registration: MAE 3196. - -MAE 3196. Computer-Aided Engineering Laboratory. 1 Credit. - -Instruction and hands-on applications of computer-aided engineering systems to the design, analysis, and optimization of mechanical engineering components and systems. Concurrent registration: MAE 3195. - -MAE 3197. Robotic Systems Design and Applications. 3 Credits. - -Modeling and analysis of robot designs. Kinematics, statics, and dynamics of linkages. Design and selection of mechanical structures, actuators, transmissions, and sensors. Design of robotic control systems. Relevant computer hardware and software. Industrial applications and limitations of robot systems. Lab experiments. Same as ECE 4730. Prerequisite: MAE 3134. - -MAE 4129. Biomechanics II. 3 Credits. - -Mechanical analysis of physiological fluid dynamics. Application of fluid flow analysis techniques to cardiovascular, pulmonary, respiratory, and phonatory flows. Introduction to biomedical devices that manipulate physiological flows. May be taken for graduate credit with approval of department. Prerequisite: MAE 3128. - -MAE 4149. Thermal Systems Design. 3 Credits. - -Completion of a thermal systems design project that requires integration of engineering science, economics, reliability, safety, ethics, professional responsibility, and social considerations. Development and use of design methodology, optimization, feasibility considerations, detailed system descriptions, and presentation of results. Prerequisite: MAE 3187. - -MAE 4157. Aerodynamics Laboratory. 1 Credit. - -Subsonic and supersonic wind tunnel experiments and simulations. Prerequisite: MAE 3155. (Fall). - -MAE 4163. Airplane Performance. 3 Credits. - -Lift and drag estimation methods. Airplane performance measures, such as range and endurance, turning flight, specific excess power and acceleration, takeoff and landing performance. Longitudinal and lateral-direction static and dynamic stability. Control surface effectiveness. Prerequisites: MAE 3134. (Fall). - -MAE 4168. Intro to Biomaterials. 3 Credits. - -Fundamentals of materials science and engineering applied to artificial materials in the human body. Topics include biocompatibility, techniques to minimize corrosion or other degradation of implant materials, and the use of artificial materials in various tissues and organs. Prerequisite: Approval of department. Course not open to MAE students. - -MAE 4172. Engineering Design and the Patent System. 3 Credits. - -Design experience in group projects involving following precisely the teachings of a licensed patent; or avoiding infringement of a provided patent while offering a competitive alternative; or evaluating a provided patent in light of prior art or by attempting to design a competitive product. May be taken for graduate credit with approval of department. Prerequisite: MAE 3171 and senior status. - -MAE 4182. Electromechanical Control System Design. 3 Credits. - -Application of control theory to the design of electromechanical systems. Transducers, valves, and other control components. Mathematical models of open- and closed-loop electromechanical systems. Root locus and frequency response methods; application to the synthesis of feedback systems by both manual and computer-aided techniques. Prerequisite: MAE 2117, MAE 3134. - -MAE 4183. Controls Lab. 1 Credit. - -Modeling, control design, simulation, implementation, tuning, and operation of a control system. Corequisite: MAE 4182. - -MAE 4193. Engineering Systems Design. 3 Credits. - -Creative engineering design, problem definition, and concept generation. Design of journal and roller element bearings, fasteners and permanent joints, and springs. Design project incorporating design selection, and optimization. Project presentation using graphical and computer resources. Prerequisite: MAE 3191. (Fall, Every Year). - -MAE 4194. Mechatronics Design. 3 Credits. - -Data acquisition and digital signal processing. Sensors and their characteristics—displacement, position/velocity, force/pressure, piezoelectric. Actuators—mechanical, electrical, pneumatic, hydraulic. Modeling and simulation of dynamic systems. Mechanism design. Digital control systems. Microprocessors, digital logic/circuits, motor drives. Lab experiments. Prerequisite: MAE 4182. - -MAE 4195. Mechatronics Lab. 1 Credit. - -Corequisite: MAE 4194. - -MAE 4198. Research. 1-3 Credits. - -Applied research and experimentation projects, as arranged. Prerequisite: junior or senior status. - -MAE 4199. Student Design Project. 1-3 Credits. - -Student projects involving extensive design of various mechanical engineering systems. May be taken for graduate credit with the expectation that additional work will be required. Prerequisites: seniors. (Fall and spring, Every Year). - -MAE 6194. Mechatronics Design. 3 Credits. - -Review of data acquisition and digital signal processing; mathematical models, design, and applications of sensors and actuators in mechatronic systems; theory and applications of mechanism design; microprocessor-based design integration, motor drives, and digital logic/circuits. Corequisite: MAE 6195. Restricted to graduate students. (Same as MAE 4194) (Spring, Every Year). - -MAE 6195. Mechatronics Lab. 0 Credits. - -Designing and building a mechatronic system based around a programmable microcontroller; using sensors and actuators to create devices capable of sensing their surrounding environment and reacting to stimuli from that environment. Corequisite: MAE 6194. Restricted to graduate students. (Same as MAE 4195) (Spring, Every Year). - -MAE 6201. Intro to Manufacturing. 3 Credits. - -Fundamentals of modern manufacturing. Processes for manufacturing mechanical and electronic components from metals, polymers, ceramics, and silicon. Manufacturing systems, CAD, robotics, and design for assembly. Current capabilities, technological needs, and competitiveness. Examples from high-tech industries. Prerequisite: approval of department. - -MAE 6203. Adv Experimentation Tech. 3 Credits. - -Sensors; measurement of displacement, temperature, pressure and velocity. Optical methods. Signal conditioning. Computer data acquisition. Uncertainty analysis. Case studies of instrumentation systems such as hot-wire anemometers, laser-doppler anemometers, shlieren/shadowgraph and interferometers. Laboratory projects. (As arranged). - -MAE 6204. Tissue Engineering. 3 Credits. - -No course description. - -MAE 6207. Theory of Elasticity I. 3 Credits. - -Introduction to Cartesian tensors; deformation, stress, constitutive relations for linear elasticity; formulation of boundary value problems, variational principles, torsion and bending of prismatial rods, plane problems. Prerequisite: approval of department. Same as CE 6207. - -MAE 6210. Continuum Mechanics. 3 Credits. - -Tensor analysis; fundamental concepts of continuum mechanics; kinematics of continuum; derivation of balance laws of mass, linear momentum, angular momentum, energy and entropy; axioms of constitutive theory; formulation of constitutive theories; Onsager’s principle; objectivity; representation theorem for isotropic functions; plasticity, including concepts of internal variables, yield surface, return mapping algorithm. Departmental approval required. (Fall, Every Year). - -MAE 6220. Applied Computational Fluid Dynamics. 3 Credits. - -Basic principles of fluid dynamics and aerodynamics. Finite difference and finite volume methods. Fluid flow and heat transfer analysis of thermo-fluid mechanical systems. Computational aerodynamics codes. Individual hands-on experience with a commercial CFD code such as FLUENT. Prerequisite: approval of department. - -MAE 6221. Fluid Mechanics. 3 Credits. - -Continuum, kinematics of fluids; stress and strain rate tensors; fundamental equations of viscous compressible flows. Irrotational flows; sources, sinks, doublets, and vortices. Laminar flow of viscous incompressible fluids; boundary-layer concept. Prerequisite: approval of department. - -MAE 6222. Applied Aerodynamics. 3 Credits. - -Introduction to practical and computational methods for solving two-dimensional and three-dimensional aerodynamics problems. Linear methods, nonlinear potential methods, coordinate transforms, and boundary-layer methods. Prerequisite: MAE 6221, MAE 6286. - -MAE 6223. Turbomachinery. 3 Credits. - -Turbine, compressor, and pump types and uses; dimensional analysis of turbomachines; cycle analysis of gas and steam turbines; energy interchange in fluid machinery; design, characteristics, and performance of turbines, compressors, and pumps; comparison of types of turbines, compressors, and pumps. Prerequisite: MAE 6221. - -MAE 6224. Viscous Flow. 3 Credits. - -Exact solutions of Navier–Stokes equations; the laminar boundary-layer theory. Reynolds stresses and turbulence; internal, boundary-layer, and mixing flows. Applications to heat and mass transfer and to reacting flows. Prerequisite: APSC 6213, MAE 6221, . - -MAE 6225. Computational Fluid Dynamics. 3 Credits. - -Theory of discrete methods for solving the governing equations of fluid dynamics. Potential flow, Euler equations, Navier-Stokes equations. Emphasis on algorithm development appropriate to modern supercomputers. Prerequisite: MAE 6221, MAE 6286. - -MAE 6226. Aero/Hydrodynamics. 3 Credits. - -Inviscid flows in two and three dimensions and irrotational flow theory; conformal mapping and applications. Helmoltz theorems and vorticity dynamics. Applications such as airfoil theory, finite wing theory, panel methods, instabilities, free surface flow. Prerequisite: MAE 6221 . - -MAE 6227. Aeroelasticity. 3 Credits. - -Static and dynamic structural deformations; static aeroelasticity (structural deformation, divergence, control effectiveness, and reversal); dynamic aeroelasticity (flutter, response to gusts and turbulence); unsteady aerodynamics for 2-D wings; strip theory for 3-D lifting surfaces; piston and Newtonian-flow theories. Prerequisite: MAE 6221, MAE 6257. - -MAE 6228. Compressible Flow. 3 Credits. - -Thermodynamics and equations of compressible inviscid flow. One-dimensional flow. Isentropic flow. Normal and oblique shock waves. Quasi-one-dimensional flow. Unsteady one-dimensional and steady two-dimensional flow. Introduction to transonic flow. Prerequisite: APSC 6213, MAE 6221 . - -MAE 6229. Propulsion. 3 Credits. - -Basic concepts of propulsion: energy transformations in propulsive flows, gas dynamics of combustion. Thermal and propulsive efficiencies. Cycle and engine component analysis. Intake, nozzle performance. Drag and thrust generation. Augmentation. Propellers, turbojets, turbofans, ramjets, and rockets. Prerequisite: Graduate Standing or MAE 2131 and MAE 3126. (Spring). - -MAE 6230. Space Propulsion. 3 Credits. - -Advanced chemical propulsion: dynamic combustion and instabilities in solid propellants. Injection, atomization, mixing in liquid propellant engine performance. Plasma propulsion: electrostatic, electromagnetic, and electrothermal instabilities (laser and microwave). Nuclear propulsion. Prerequisite: MAE 6229. - -MAE 6231. Structure and Transformations in Materials. 3 Credits. - -Structure of crystals, crystal binding, crystal defects, dislocations, solid solutions, phases, diffusion, phase transformations, deformation twinning, and martensite. Prerequisite: APSC 2130. - -MAE 6232. Fracture Mechanics. 3 Credits. - -Concepts, history, and recent developments of fracture mechanics. Singularity at the crack tip; solutions around crack tip; stress intensity factors; energy release rate; J-integral; direction of crack extension; Plasticity and slow crack growth; dynamic crack propagation; molecular dynamics simulation of fracture. Prerequisite: approval of department. - -MAE 6233. Mechanics of Composite Materials. 3 Credits. - -Stress-strain relationship for orthotropic materials, invariant properties of an orthotropic lamina, biaxial strength theory for an orthotropic lamina. Mechanics of materials approach to stiffness, elasticity approach to stiffness. Classical lamination theory, strength of laminates. Statistical theory of fatigue damage. Same as CE 6209. Prerequisite: approval of department. - -MAE 6234. Composite Materials. 3 Credits. - -Principles of composites and composite reinforcement. Micromechanics and failure, interface reactions in various composites, reinforcing materials. Structure of composites: fiber-reinforced polymers, filler-reinforced polymers, fiber-reinforced metals, directionally solidified alloys, dispersion-strengthened metals. Prerequisite: approval of department. - -MAE 6235. Deformation and Failure of Materials. 3 Credits. - -Elastic and plastic deformation, yield, dislocation theory, strengthening mechanisms, creep, polymers, fracture, transition temperature, microstructure, fatigue. (Spring, odd years). - -MAE 6237. Applied Electrochemistry. 3 Credits. - -Charged interfaces, electrochemical cells, corrosion thermodynamics, electrode kinetics, general corrosion, crevice corrosion, pitting, stress-corrosion cracking, corrosion protection, batteries and fuel cells, energy storage. May include current and potential distribution in electrochemical cells and scaling effects in modeling. Prerequisite: approval of department. - -MAE 6238. Biomaterials. 3 Credits. - -Applications of materials science and engineering to artificial materials in the human body with the objective of detailed understanding of synthetic materials and biopolymers. Biocompatibility and its consequences on tissue–implant interfaces. Design and development of new implant materials, drug delivery systems, and biosensors. Prerequisite: MAE 3166 or MAE 4168. - -MAE 6239. Computational Nanosciences. 3 Credits. - -Introduction to surface force measurements in nanosciences; continuum contact mechanics in nanoscience research; intermolecular forces; empirical potentials for transition metals; surface forces in liquids; large-scale atomic/molecular massively parallel simulator; force field development from quantum mechanical density–functional theory for organic/metal molecular systems. Prerequisite: approval of department. - -MAE 6240. Kinematic Synthesis. 3 Credits. - -Techniques for the analysis and synthesis of function, path, and motion generating mechanisms. Methods for the dimensional design of mechanisms. Computer-aided techniques for the optimal design of planar linkages. Review of recent developments and current research. Term project. Prerequisite: MAE 3190 . - -MAE 6241. Computer Models of Physical and Engineering Systems. 3 Credits. - -Reduction of physical and engineering systems to simplified physical and mathematical models. Manipulation of models using C/C programming. Numerical algorithms for optimization, graph identification, mini-sum arithmetic, and searching. Styles of problem solving. Prerequisite: MAE 2117. - -MAE 6242. Advanced Mechanisms. 3 Credits. - -Emphasis on spatial kinematics. Analysis and synthesis of mechanisms. Analytical techniques using matrices, dual numbers, quaternion algebra, finite and instantaneous screws, theory of envelopes. Applications to design of linkages, cams, gears. Use of digital computers in mechanism analysis and design. (Spring, even years). - -MAE 6243. Advanced Mechanical Engineering Design. 3 Credits. - -Design of mechanical engineering components and systems emphasizing computer-aided engineering (CAE), including interactive computer graphics, finite element analysis, and design optimization. Creation of a complete design on an engineering workstation. Prerequisite: approval of department. - -MAE 6244. Computer-Integrated Engineering Design. 3 Credits. - -Design of engineering components and systems on engineering workstations using I-DEAS. Interactive computer graphics, finite element analysis, computer-based design optimization, and other relevant computer-based tools. Students apply design concepts in a computer-aided engineering environment to a selected project. Prerequisite: approval of department. - -MAE 6245. Robotic Systems. 3 Credits. - -Classification, features, and applications of industrial robots. Spatial descriptions and transformations, forward and inverse kinematics. Jacobian matrix, velocities and static forces, manipulator dynamics and controls. Robot actuators, transmissions, sensors, end effectors, and programming. Prerequisite: MAE 4182 . - -MAE 6246. Electromechanical Control Systems. 3 Credits. - -State–space representations of dynamic systems; dynamics of linear systems; controllability and observability; linear observers; compensator design by separation principle; linear–quadratic optimal control; Riccati equations; random processes; Kalman filter; applications of optimal stochastic control theory to robotics and earthquake engineering. Prerequisite: approval of department. - -MAE 6247. Aircraft Design I. 3 Credits. - -Conceptual design methods used in response to prescribed mission and performance requirements, alternate configuration concepts. Configuration general arrangement and empennage sizing. Estimation of aircraft size, weight, and balance; lift, thrust and drag; system level tradeoff and sensitivity studies. Prerequisite: Graduate Standing or MAE 4163. (Spring). - -MAE 6249. Spacecraft Design. 3 Credits. - -Computer-aided design of spacecraft and satellites to meet specific mission requirements. Environment, propulsion, structure, heat transfer, orbital mechanics, control considerations. Use of modern computer codes for design studies. Prerequisite: MAE 3145 or graduate student standing. (Spring, Every Year). - -MAE 6251. Computer-Integrated Manufacturing. 3 Credits. - -Automation techniques for processing metals, polymers, and composites. Use of sensing and process modeling in process control. Numerical control and robot applications and limitations. Integration, scheduling, and tool management in the computer-integrated factory. Quality control. Social and economic considerations in CIM. Prerequisite: MAE 3192 . - -MAE 6252. Projects in Computer-Integrated Design and Manufacturing. 3 Credits. - -Applications of the concepts of computer-integrated manufacturing to group projects, culminating in written and oral presentations. Robot programming, vision-guided assembly, force sensing, fixturing, and end-effector design for practical applications. Factory simulation, part scheduling, and NC program-verification algorithms. Prerequisite: MAE 6251. - -MAE 6253. Aircraft Structures. 3 Credits. - -Statics of thin-walled beams and panels, force interplay between stiffeners and skin in the analysis and design of stiffened thin-walled structures. Strength and stiffness of locally buckled stiffened structures. Design considerations. Critical evaluation of various design procedures. Prerequisite: approval of department. - -MAE 6254. Applied Nonlinear Control. 3 Credits. - -Dynamic characteristics of nonlinear systems. State stability and input-output stability. Lyapunov stability theory and invariance principle. Nonlinear control systems, including feedback linearization, back-stepping, sliding mode control, and passivity-based design. Applications to robotics, aircraft, and spacecraft control systems. Geometric controls and hybrid systems. Prerequisite: approval of department. - -MAE 6255. Plasma Engineering in Aerospace and Nanotechnology. 3 Credits. - -Plasma fundamentals, electromagnetic waves in plasma, plasma–wall interactions, modeling and experimental techniques in plasmas, electrical discharge, plasma propulsion, plasma-based nanotechnology. Prerequisite: MAE 3126. - -MAE 6257. Theory of Vibration. 3 Credits. - -Damped and undamped natural vibration, response of single- and multiple-degrees-of-freedom systems to steady-state and transient excitations, modal analysis, nonproportional damping and complex modes, variation formulation of equations of motion, discretization of structural systems for vibrational analysis. Prerequisite: approval of department. - -MAE 6258. Advanced Vibration Analysis and Control. 3 Credits. - -Passive and active vibration control of discrete and continuous systems, dynamic vibration absorbers, random vibrations, failure analysis, modal analysis, nonlinear vibrations. Prerequisites: MAE 3134 and MAE 4182 or graduate standing. (Spring). - -MAE 6260. Nanomechanics. 3 Credits. - -Introduction to crystallography; interatomic potentials; phonon dispersion relations; molecular dynamics simulation; Nose–Hoover thermostat; coarse grained non-equilibrium molecular dynamics; multiple length/time scale theory of multi-physics; microcontinuum field theories; applications to nano materials/structures. Prerequisite: approval of department. - -MAE 6261. Air Pollution. 3 Credits. - -Introductory course on the generation, monitoring, and control of air pollution. Atmospheric pollutants; current levels and health problems. Combustion chemistry and mixing. Photochemical processes; smog and measurements. Atmospheric dispersion; inversion and acid rain. Prerequisite: approval of department. - -MAE 6262. Energy Systems Analysis I. 3 Credits. - -Analysis of energy resources and conversion devices. Statistical data analysis, forecasting, I/O, and net energy analyses, mathematical modeling. Prerequisite: approval of department. - -MAE 6263. Advances in Energy Engineering. 3 Credits. - -Review of thermodynamics, heat transfer, fluid dynamics, and materials technology used in the energy industries. New energy-efficient technologies in transportation and buildings; renewable energy (wind, solar, and biomass). Climate change and sustainability issues, such as carbon capture, cap and trade, carbon sequestration. - -MAE 6270. Theoretical Acoustics. 3 Credits. - -Basic acoustic theory in stationary and uniformly moving media; waves in infinite space; sound transmission through interfaces; sound radiation from simple solid boundaries, source and dipole fields; propagation in ducts and enclosures; elements of classical absorption of sound. Prerequisite: APSC 6213, MAE 6221. - -MAE 6271. Time Series Analysis. 3 Credits. - -Harmonic analysis of random signals; auto- and cross-correlations and spectra; coherence; modern techniques for spectral estimation, including fast Fourier transform, maximum entropy, and maximum likelihood; bias and variability; randomly sampled data; digital filtering; applications. Prerequisite: approval of department. - -MAE 6274. Dynamics/Cntrl of Spacecraft. 3 Credits. - -Fundamentals of satellite attitude dynamics and passive stabilization. Spacecraft attitude representation, rotational kinematics and kinetics. External torques. Dynamics of gyroscopes. Gravity gradient stabilization. Effect of internal energy dissipation on stability of spinning bodies and methods of despin. Dual spin satellites. Prerequisite: approval of department. - -MAE 6275. Dynamics and Control of Aircraft. 3 Credits. - -Derivation of equations of motion, Euler transformations and direction cosines, stability derivatives and linearization of equations of motion, stability of linear systems with application to longitudinal and lateral dynamics, Laplace transform techniques, and frequency-response analysis. Departmental approval required prior to registration. (Fall, even years). - -MAE 6276. Mechanics of Space Flight. 3 Credits. - -Coordinate and time systems. Newton’s laws; 2-, 3-, and n-body problems, Lagrange points, gravity-assisted trajectories, variation of parameters and orbit perturbations, non-central gravity effects, drag, sun-synchronous, and formation orbits. Numerical applications using MatLab. Prerequisite: approval of department. - -MAE 6277. Spacecraft Attitude Control. 3 Credits. - -Control of spinning and three-axis stabilized spacecraft. Elements of linear control theory for single-input, single-output systems and basic feedback control laws. Momentum management and actuator desaturation. Sensors for attitude determination. Application of modern control for multi-input, multi-output systems. Control system simulations using MatLab. (As arranged). - -MAE 6280. Thermodynamics. 3 Credits. - -Review of First and Second Laws of Thermodynamics and combining the two through exergy; entropy generation minimization and applications. Single phase systems, exergy analyses, multiphase systems, phase diagrams and the corresponding states principle. Prerequisite: approval of department. - -MAE 6281. Advanced Thermodynamics. 3 Credits. - -Development of classical and quantum statistical mechanics, including Maxwell–Boltzman distributions and microscopic origins of entropy and other thermodynamic variables. Partition functions and micro- and grand-canonical ensembles; Fermi–Dirac, Bose–Einstein, and intermediate statistics. Einstein and Debye models of solids. Prerequisite: MAE 6280 . - -MAE 6282. Convective Heat/Mass Transfer. 3 Credits. - -Heat and momentum transfer in laminar and turbulent flow. The laminar boundary-layer solution. Similarity and nondimensional parameters. Mass-momentum heat transfer analogy. Convective heat transfer at high velocity. Stability, transition, and turbulence. Free convection. Prerequisite: MAE 6221 . - -MAE 6283. Radiative Heat Transfer. 3 Credits. - -Basic concepts of heat transfer by thermal radiation starting from Planck’s equation for blackbody radiation. Realistic engineering problems are addressed, some involving radiative heat transfer with a variety of surfaces, geometries, and enclosures. Radiative heat flow combined with conduction and convection boundaries. Prerequisite: approval of department. - -MAE 6284. Combustion. 3 Credits. - -Basic combustion phenomena. Rate processes and chemical kinetics. Chain reaction theory. Detonation, deflagration, diffusion flames, heterogeneous combustion. Experimental measurements. Impact of pollution regulations and alternate fuels. Prerequisite: approval of department. - -MAE 6286. Numerical Solution Techniques in Mechanica land Aerospace Engineering. 3 Credits. - -Development of finite difference and finite element techniques for solving elliptic, parabolic, and hyperbolic partial differential equations. Prerequisite: APSC 6213. - -MAE 6287. Applied Finite Element Methods. 3 Credits. - -Review of theory of elasticity. Basic aspects of theory and application of finite element methods. Utilization of MSC/NASTRAN for static, dynamic, linear, and nonlinear analyses of problems in mechanical, aeronautical, and astronautical engineering. Course emphasizes individual hands-on experience with the MSC/NASTRAN code. Prerequisite: approval of department. - -MAE 6288. Advanced Finite Element Analysis. 3 Credits. - -Review of variational formulation of the finite element method. Finite element analysis of large-strain thermomechanics. Applications to static and dynamic problems in finite elasticity, Fung elasticity (biomechanics), nonlocal theory, active stress in living biological tissues, biological growth, and large-strain plasticity. Recent developments in finite element methods. Same as CE 8330. Prerequisite: approval of department. - -MAE 6290. Special Topics in Materials Science. 3 Credits. - -Selected subjects of current interest. Arranged by consultation between department faculty and students. Typical topics include experimental methods in materials science and nondestructive inspection of materials. Prerequisite: approval of department. - -MAE 6291. Special Topics in Mechanical Engineering. 3 Credits. - -Selected subjects of current interest. Arranged by consultation between department faculty and students. Typical topics include tribology, power systems design, solar heating systems, HVAC, and plasticity theory. Prerequisite: approval of department. - -MAE 6292. Special Topics in Aerospace Engineering. 3 Credits. - -Selected subjects of current interest. Arranged by consultation between department faculty and students. Typical topics include environmental noise control, aeroacoustics, hypersonic flow, and flight vehicle aerodynamics. May be repeated for credit. Prerequisite: approval of department. - -MAE 6298. Research. 1-6 Credits. - -Basic research projects as arranged. May be repeated for credit. - -MAE 6998. MS Thesis Research. 3 Credits. - -No course description. - -MAE 6999. MS Thesis Research. 3 Credits. - -No course description. - -MAE 8350. Advanced Topics in Materials Science. 3 Credits. - -Topics such as surface science that are of current research interest. Selected after consultation between department faculty and students. Prerequisite: approval of department. - -MAE 8351. Advanced Topics in Mechanical Engineering. 3 Credits. - -Topics such as advanced analytical mechanics, advanced mechanics of continua, and advanced theory of elasticity that are of current research interest. Selected after consultation between department faculty and students. Prerequisite: approval of department. - -MAE 8352. Advanced Topics in Aerospace Engineering. 3 Credits. - -Topics such as nonsteady flow, physical gas dynamics, turbulence, and nonlinear wave propagation that are of current research interest. Selected after consultation between department faculty and students. Prerequisite: approval of department. - -MAE 8998. Advanced Reading & Research. 1-12 Credits. - -Limited to students preparing for the Doctor of Philosophy qualifying examination. May be repeated for credit. - -MAE 8999. Dissertation Research. 1-12 Credits. - -Limited to Doctor of Philosophy candidates. May be repeated for credit. diff --git a/data/maunaloa_CO2.csv b/data/maunaloa_CO2.csv deleted file mode 100644 index c9ab73b..0000000 --- a/data/maunaloa_CO2.csv +++ /dev/null @@ -1,703 +0,0 @@ -#Data from NOAA Earth System Research Laboratory -#monthly mean CO2 mole fraction determined from daily averages (ppm) with -#missing values interpolated -#decimal_date, monthly mean CO2 mole fraction (ppm) -1958.208,315.71 -1958.292,317.45 -1958.375,317.5 -1958.458,317.1 -1958.542,315.86 -1958.625,314.93 -1958.708,313.2 -1958.792,312.66 -1958.875,313.33 -1958.958,314.67 -1959.042,315.62 -1959.125,316.38 -1959.208,316.71 -1959.292,317.72 -1959.375,318.29 -1959.458,318.15 -1959.542,316.54 -1959.625,314.8 -1959.708,313.84 -1959.792,313.26 -1959.875,314.8 -1959.958,315.58 -1960.042,316.43 -1960.125,316.97 -1960.208,317.58 -1960.292,319.02 -1960.375,320.03 -1960.458,319.59 -1960.542,318.18 -1960.625,315.91 -1960.708,314.16 -1960.792,313.83 -1960.875,315.00 -1960.958,316.19 -1961.042,316.93 -1961.125,317.7 -1961.208,318.54 -1961.292,319.48 -1961.375,320.58 -1961.458,319.77 -1961.542,318.57 -1961.625,316.79 -1961.708,314.8 -1961.792,315.38 -1961.875,316.1 -1961.958,317.01 -1962.042,317.94 -1962.125,318.56 -1962.208,319.68 -1962.292,320.63 -1962.375,321.01 -1962.458,320.55 -1962.542,319.58 -1962.625,317.4 -1962.708,316.26 -1962.792,315.42 -1962.875,316.69 -1962.958,317.69 -1963.042,318.74 -1963.125,319.08 -1963.208,319.86 -1963.292,321.39 -1963.375,322.25 -1963.458,321.47 -1963.542,319.74 -1963.625,317.77 -1963.708,316.21 -1963.792,315.99 -1963.875,317.12 -1963.958,318.31 -1964.042,319.57 -1964.125,320.07 -1964.208,320.73 -1964.292,321.77 -1964.375,322.25 -1964.458,321.89 -1964.542,320.44 -1964.625,318.7 -1964.708,316.7 -1964.792,316.79 -1964.875,317.79 -1964.958,318.71 -1965.042,319.44 -1965.125,320.44 -1965.208,320.89 -1965.292,322.13 -1965.375,322.16 -1965.458,321.87 -1965.542,321.39 -1965.625,318.81 -1965.708,317.81 -1965.792,317.3 -1965.875,318.87 -1965.958,319.42 -1966.042,320.62 -1966.125,321.59 -1966.208,322.39 -1966.292,323.87 -1966.375,324.01 -1966.458,323.75 -1966.542,322.39 -1966.625,320.37 -1966.708,318.64 -1966.792,318.1 -1966.875,319.79 -1966.958,321.08 -1967.042,322.07 -1967.125,322.5 -1967.208,323.04 -1967.292,324.42 -1967.375,325.00 -1967.458,324.09 -1967.542,322.55 -1967.625,320.92 -1967.708,319.31 -1967.792,319.31 -1967.875,320.72 -1967.958,321.96 -1968.042,322.57 -1968.125,323.15 -1968.208,323.89 -1968.292,325.02 -1968.375,325.57 -1968.458,325.36 -1968.542,324.14 -1968.625,322.03 -1968.708,320.41 -1968.792,320.25 -1968.875,321.31 -1968.958,322.84 -1969.042,324.00 -1969.125,324.42 -1969.208,325.64 -1969.292,326.66 -1969.375,327.34 -1969.458,326.76 -1969.542,325.88 -1969.625,323.67 -1969.708,322.38 -1969.792,321.78 -1969.875,322.85 -1969.958,324.11 -1970.042,325.03 -1970.125,325.99 -1970.208,326.87 -1970.292,328.13 -1970.375,328.07 -1970.458,327.66 -1970.542,326.35 -1970.625,324.69 -1970.708,323.1 -1970.792,323.16 -1970.875,323.98 -1970.958,325.13 -1971.042,326.17 -1971.125,326.68 -1971.208,327.18 -1971.292,327.78 -1971.375,328.92 -1971.458,328.57 -1971.542,327.34 -1971.625,325.46 -1971.708,323.36 -1971.792,323.57 -1971.875,324.8 -1971.958,326.01 -1972.042,326.77 -1972.125,327.63 -1972.208,327.75 -1972.292,329.72 -1972.375,330.07 -1972.458,329.09 -1972.542,328.05 -1972.625,326.32 -1972.708,324.93 -1972.792,325.06 -1972.875,326.5 -1972.958,327.55 -1973.042,328.54 -1973.125,329.56 -1973.208,330.3 -1973.292,331.5 -1973.375,332.48 -1973.458,332.07 -1973.542,330.87 -1973.625,329.31 -1973.708,327.51 -1973.792,327.18 -1973.875,328.16 -1973.958,328.64 -1974.042,329.35 -1974.125,330.71 -1974.208,331.48 -1974.292,332.65 -1974.375,333.2 -1974.458,332.13 -1974.542,330.99 -1974.625,329.17 -1974.708,327.41 -1974.792,327.21 -1974.875,328.34 -1974.958,329.5 -1975.042,330.68 -1975.125,331.41 -1975.208,331.85 -1975.292,333.29 -1975.375,333.91 -1975.458,333.4 -1975.542,331.74 -1975.625,329.88 -1975.708,328.57 -1975.792,328.35 -1975.875,329.34 -1975.958,330.59 -1976.042,331.66 -1976.125,332.75 -1976.208,333.46 -1976.292,334.78 -1976.375,334.78 -1976.458,334.06 -1976.542,332.95 -1976.625,330.64 -1976.708,328.96 -1976.792,328.77 -1976.875,330.18 -1976.958,331.65 -1977.042,332.69 -1977.125,333.23 -1977.208,334.97 -1977.292,336.03 -1977.375,336.82 -1977.458,336.1 -1977.542,334.79 -1977.625,332.53 -1977.708,331.19 -1977.792,331.21 -1977.875,332.35 -1977.958,333.47 -1978.042,335.1 -1978.125,335.26 -1978.208,336.61 -1978.292,337.77 -1978.375,338.01 -1978.458,337.98 -1978.542,336.48 -1978.625,334.37 -1978.708,332.33 -1978.792,332.41 -1978.875,333.76 -1978.958,334.83 -1979.042,336.21 -1979.125,336.65 -1979.208,338.13 -1979.292,338.94 -1979.375,339.00 -1979.458,339.2 -1979.542,337.6 -1979.625,335.56 -1979.708,333.93 -1979.792,334.12 -1979.875,335.26 -1979.958,336.78 -1980.042,337.8 -1980.125,338.28 -1980.208,340.04 -1980.292,340.86 -1980.375,341.47 -1980.458,341.26 -1980.542,339.34 -1980.625,337.45 -1980.708,336.1 -1980.792,336.05 -1980.875,337.21 -1980.958,338.29 -1981.042,339.36 -1981.125,340.51 -1981.208,341.57 -1981.292,342.56 -1981.375,343.01 -1981.458,342.49 -1981.542,340.68 -1981.625,338.49 -1981.708,336.92 -1981.792,337.12 -1981.875,338.59 -1981.958,339.9 -1982.042,340.92 -1982.125,341.69 -1982.208,342.86 -1982.292,343.92 -1982.375,344.67 -1982.458,343.78 -1982.542,342.23 -1982.625,340.11 -1982.708,338.32 -1982.792,338.39 -1982.875,339.48 -1982.958,340.88 -1983.042,341.64 -1983.125,342.87 -1983.208,343.59 -1983.292,345.25 -1983.375,345.96 -1983.458,345.52 -1983.542,344.15 -1983.625,342.25 -1983.708,340.17 -1983.792,340.3 -1983.875,341.53 -1983.958,343.07 -1984.042,344.05 -1984.125,344.77 -1984.208,345.46 -1984.292,346.77 -1984.375,347.55 -1984.458,346.98 -1984.542,345.55 -1984.625,343.2 -1984.708,341.35 -1984.792,341.68 -1984.875,343.06 -1984.958,344.54 -1985.042,345.25 -1985.125,346.06 -1985.208,347.66 -1985.292,348.2 -1985.375,348.92 -1985.458,348.4 -1985.542,346.66 -1985.625,344.85 -1985.708,343.2 -1985.792,343.08 -1985.875,344.4 -1985.958,345.82 -1986.042,346.54 -1986.125,347.13 -1986.208,348.05 -1986.292,349.77 -1986.375,350.53 -1986.458,349.9 -1986.542,348.11 -1986.625,346.09 -1986.708,345.01 -1986.792,344.47 -1986.875,345.86 -1986.958,347.15 -1987.042,348.38 -1987.125,348.7 -1987.208,349.72 -1987.292,351.32 -1987.375,352.14 -1987.458,351.61 -1987.542,349.91 -1987.625,347.84 -1987.708,346.52 -1987.792,346.65 -1987.875,347.96 -1987.958,349.18 -1988.042,350.38 -1988.125,351.68 -1988.208,352.24 -1988.292,353.66 -1988.375,354.18 -1988.458,353.68 -1988.542,352.58 -1988.625,350.66 -1988.708,349.03 -1988.792,349.08 -1988.875,350.15 -1988.958,351.44 -1989.042,352.89 -1989.125,353.24 -1989.208,353.8 -1989.292,355.59 -1989.375,355.89 -1989.458,355.3 -1989.542,353.98 -1989.625,351.53 -1989.708,350.02 -1989.792,350.29 -1989.875,351.44 -1989.958,352.84 -1990.042,353.79 -1990.125,354.88 -1990.208,355.65 -1990.292,356.28 -1990.375,357.29 -1990.458,356.32 -1990.542,354.88 -1990.625,352.89 -1990.708,351.28 -1990.792,351.59 -1990.875,353.05 -1990.958,354.27 -1991.042,354.87 -1991.125,355.68 -1991.208,357.06 -1991.292,358.51 -1991.375,359.09 -1991.458,358.1 -1991.542,356.12 -1991.625,353.89 -1991.708,352.3 -1991.792,352.32 -1991.875,353.79 -1991.958,355.07 -1992.042,356.17 -1992.125,356.93 -1992.208,357.82 -1992.292,359.00 -1992.375,359.55 -1992.458,359.32 -1992.542,356.85 -1992.625,354.91 -1992.708,352.93 -1992.792,353.31 -1992.875,354.27 -1992.958,355.53 -1993.042,356.86 -1993.125,357.27 -1993.208,358.36 -1993.292,359.27 -1993.375,360.19 -1993.458,359.52 -1993.542,357.42 -1993.625,355.46 -1993.708,354.1 -1993.792,354.12 -1993.875,355.4 -1993.958,356.84 -1994.042,358.22 -1994.125,358.98 -1994.208,359.91 -1994.292,361.32 -1994.375,361.68 -1994.458,360.8 -1994.542,359.39 -1994.625,357.42 -1994.708,355.63 -1994.792,356.09 -1994.875,357.56 -1994.958,358.87 -1995.042,359.87 -1995.125,360.79 -1995.208,361.77 -1995.292,363.23 -1995.375,363.77 -1995.458,363.22 -1995.542,361.7 -1995.625,359.11 -1995.708,358.11 -1995.792,357.97 -1995.875,359.4 -1995.958,360.61 -1996.042,362.04 -1996.125,363.17 -1996.208,364.17 -1996.292,364.51 -1996.375,365.16 -1996.458,364.93 -1996.542,363.53 -1996.625,361.38 -1996.708,359.6 -1996.792,359.54 -1996.875,360.84 -1996.958,362.18 -1997.042,363.04 -1997.125,364.09 -1997.208,364.47 -1997.292,366.25 -1997.375,366.69 -1997.458,365.59 -1997.542,364.34 -1997.625,362.2 -1997.708,360.31 -1997.792,360.71 -1997.875,362.44 -1997.958,364.33 -1998.042,365.18 -1998.125,365.98 -1998.208,367.13 -1998.292,368.61 -1998.375,369.49 -1998.458,368.95 -1998.542,367.74 -1998.625,365.79 -1998.708,364.01 -1998.792,364.35 -1998.875,365.52 -1998.958,367.08 -1999.042,368.12 -1999.125,368.98 -1999.208,369.6 -1999.292,370.96 -1999.375,370.77 -1999.458,370.33 -1999.542,369.28 -1999.625,366.86 -1999.708,364.94 -1999.792,365.35 -1999.875,366.68 -1999.958,368.04 -2000.042,369.25 -2000.125,369.5 -2000.208,370.56 -2000.292,371.82 -2000.375,371.51 -2000.458,371.71 -2000.542,369.85 -2000.625,368.2 -2000.708,366.91 -2000.792,366.99 -2000.875,368.33 -2000.958,369.67 -2001.042,370.52 -2001.125,371.49 -2001.208,372.53 -2001.292,373.37 -2001.375,373.83 -2001.458,373.18 -2001.542,371.57 -2001.625,369.63 -2001.708,368.16 -2001.792,368.42 -2001.875,369.69 -2001.958,371.18 -2002.042,372.45 -2002.125,373.14 -2002.208,373.94 -2002.292,375.00 -2002.375,375.65 -2002.458,375.5 -2002.542,374.00 -2002.625,371.83 -2002.708,370.66 -2002.792,370.51 -2002.875,372.2 -2002.958,373.71 -2003.042,374.87 -2003.125,375.62 -2003.208,376.48 -2003.292,377.74 -2003.375,378.5 -2003.458,378.18 -2003.542,376.72 -2003.625,374.32 -2003.708,373.2 -2003.792,373.1 -2003.875,374.64 -2003.958,375.93 -2004.042,377.00 -2004.125,377.87 -2004.208,378.73 -2004.292,380.41 -2004.375,380.63 -2004.458,379.56 -2004.542,377.61 -2004.625,376.15 -2004.708,374.11 -2004.792,374.44 -2004.875,375.93 -2004.958,377.45 -2005.042,378.47 -2005.125,379.76 -2005.208,381.14 -2005.292,382.2 -2005.375,382.47 -2005.458,382.2 -2005.542,380.78 -2005.625,378.73 -2005.708,376.66 -2005.792,376.98 -2005.875,378.29 -2005.958,379.92 -2006.042,381.35 -2006.125,382.16 -2006.208,382.66 -2006.292,384.73 -2006.375,384.98 -2006.458,384.09 -2006.542,382.38 -2006.625,380.45 -2006.708,378.92 -2006.792,379.16 -2006.875,380.18 -2006.958,381.79 -2007.042,382.93 -2007.125,383.81 -2007.208,384.56 -2007.292,386.4 -2007.375,386.58 -2007.458,386.05 -2007.542,384.49 -2007.625,382.00 -2007.708,380.9 -2007.792,381.14 -2007.875,382.42 -2007.958,383.89 -2008.042,385.44 -2008.125,385.73 -2008.208,385.97 -2008.292,387.16 -2008.375,388.5 -2008.458,387.88 -2008.542,386.42 -2008.625,384.15 -2008.708,383.09 -2008.792,382.99 -2008.875,384.13 -2008.958,385.56 -2009.042,386.94 -2009.125,387.42 -2009.208,388.77 -2009.292,389.44 -2009.375,390.19 -2009.458,389.45 -2009.542,387.78 -2009.625,385.92 -2009.708,384.79 -2009.792,384.39 -2009.875,386.00 -2009.958,387.31 -2010.042,388.5 -2010.125,389.94 -2010.208,391.09 -2010.292,392.52 -2010.375,393.04 -2010.458,392.15 -2010.542,390.22 -2010.625,388.26 -2010.708,386.83 -2010.792,387.2 -2010.875,388.65 -2010.958,389.73 -2011.042,391.25 -2011.125,391.82 -2011.208,392.49 -2011.292,393.34 -2011.375,394.21 -2011.458,393.72 -2011.542,392.42 -2011.625,390.19 -2011.708,389.04 -2011.792,388.96 -2011.875,390.24 -2011.958,391.83 -2012.042,393.12 -2012.125,393.6 -2012.208,394.45 -2012.292,396.18 -2012.375,396.78 -2012.458,395.82 -2012.542,394.3 -2012.625,392.41 -2012.708,391.06 -2012.792,391.01 -2012.875,392.81 -2012.958,394.28 -2013.042,395.54 -2013.125,396.8 -2013.208,397.31 -2013.292,398.35 -2013.375,399.76 -2013.458,398.58 -2013.542,397.2 -2013.625,395.15 -2013.708,393.51 -2013.792,393.66 -2013.875,395.11 -2013.958,396.81 -2014.042,397.81 -2014.125,397.93 -2014.208,399.62 -2014.292,401.34 -2014.375,401.88 -2014.458,401.2 -2014.542,399.04 -2014.625,397.1 -2014.708,395.35 -2014.792,395.95 -2014.875,397.27 -2014.958,398.84 -2015.042,399.96 -2015.125,400.26 -2015.208,401.52 -2015.292,403.26 -2015.375,403.94 -2015.458,402.8 -2015.542,401.3 -2015.625,398.93 -2015.708,397.63 -2015.792,398.29 -2015.875,400.16 -2015.958,401.85 -2016.042,402.52 -2016.125,404.02 -2016.208,404.83 -2016.292,407.42 -2016.375,407.7 diff --git a/notebooks_en/.ipynb_checkpoints/4_NumPy_Arrays_and_Plotting-checkpoint.ipynb b/notebooks_en/.ipynb_checkpoints/4_NumPy_Arrays_and_Plotting-checkpoint.ipynb deleted file mode 100644 index 5f86da8..0000000 --- a/notebooks_en/.ipynb_checkpoints/4_NumPy_Arrays_and_Plotting-checkpoint.ipynb +++ /dev/null @@ -1,1644 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "###### Content under Creative Commons Attribution license CC-BY 4.0, code under BSD 3-Clause License © 2017 L.A. Barba, N.C. Clementi" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Play with NumPy Arrays\n", - "\n", - "Welcome to **Lesson 4** of the first course module in _\"Engineering Computations_.\" You have come a long way! \n", - "\n", - "Remember, this course assumes no coding experience, so the first three lessons were focused on creating a foundation with Python programming constructs using essentially _no mathematics_. The previous lessons are:\n", - "\n", - "* [Lesson 1](http://go.gwu.edu/engcomp1lesson1): Interacting with Python\n", - "* [Lesson 2](http://go.gwu.edu/engcomp1lesson2): Play with data in Jupyter\n", - "* [Lesson 3](http://go.gwu.edu/engcomp1lesson3): Strings and lists in action\n", - "\n", - "In engineering applications, most computing situations benefit from using *arrays*: they are sequences of data all of the _same type_. They behave a lot like lists, except for the constraint in the type of their elements. There is a huge efficiency advantage when you know that all elements of a sequence are of the same type—so equivalent methods for arrays execute a lot faster than those for lists.\n", - "\n", - "The Python language is expanded for special applications, like scientific computing, with **libraries**. The most important library in science and engineering is **NumPy**, providing the _n-dimensional array_ data structure (a.k.a, `ndarray`) and a wealth of functions, operations and algorithms for efficient linear-algebra computations.\n", - "\n", - "In this lesson, you'll start playing with NumPy arrays and discover their power. You'll also meet another widely loved library: **Matplotlib**, for creating two-dimensional plots of data." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Importing libraries\n", - "\n", - "First, a word on importing libraries to expand your running Python session. Because libraries are large collections of code and are for special purposes, they are not loaded automatically when you launch Python (or IPython, or Jupyter). You have to import a library using the `import` command. For example, to import **NumPy**, with all its linear-algebra goodness, we enter:\n", - "\n", - "```python\n", - "import numpy\n", - "```\n", - "\n", - "Once you execute that command in a code cell, you can call any NumPy function using the dot notation, prepending the library name. For example, some commonly used functions are:\n", - "\n", - "* [`numpy.linspace()`](https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html)\n", - "* [`numpy.ones()`](https://docs.scipy.org/doc/numpy/reference/generated/numpy.ones.html#numpy.ones)\n", - "* [`numpy.zeros()`](https://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html#numpy.zeros)\n", - "* [`numpy.empty()`](https://docs.scipy.org/doc/numpy/reference/generated/numpy.empty.html#numpy.empty)\n", - "* [`numpy.copy()`](https://docs.scipy.org/doc/numpy/reference/generated/numpy.copy.html#numpy.copy)\n", - "\n", - "Follow the links to explore the documentation for these very useful NumPy functions!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Warning:\n", - "\n", - "You will find _a lot_ of sample code online that uses a different syntax for importing. They will do:\n", - "```python\n", - "import numpy as np\n", - "```\n", - "All this does is create an alias for `numpy` with the shorter string `np`, so you then would call a **NumPy** function like this: `np.linspace()`. This is just an alternative way of doing it, for lazy people that find it too long to type `numpy` and want to save 3 characters each time. For the not-lazy, typing `numpy` is more readable and beautiful. \n", - "\n", - "We like it better like this:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import numpy" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Creating arrays\n", - "\n", - "To create a NumPy array from an existing list of (homogeneous) numbers, we call **`numpy.array()`**, like this:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 3, 5, 8, 17])" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "numpy.array([3, 5, 8, 17])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "NumPy offers many [ways to create arrays](https://docs.scipy.org/doc/numpy/reference/routines.array-creation.html#routines-array-creation) in addition to this. We already mentioned some of them above. \n", - "\n", - "Play with `numpy.ones()` and `numpy.zeros()`: they create arrays full of ones and zeros, respectively. We pass as an argument the number of array elements we want. " - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 1., 1., 1., 1., 1.])" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "numpy.ones(5)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 0., 0., 0.])" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "numpy.zeros(3)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Another useful one: `numpy.arange()` gives an array of evenly spaced values in a defined interval. \n", - "\n", - "*Syntax:*\n", - "\n", - "`numpy.arange(start, stop, step)`\n", - "\n", - "where `start` by default is zero, `stop` is not inclusive, and the default\n", - "for `step` is one. Play with it!\n" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0, 1, 2, 3])" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "numpy.arange(4)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([2, 3, 4, 5])" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "numpy.arange(2, 6)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([2, 4])" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "numpy.arange(2, 6, 2)" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. , 5.5])" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "numpy.arange(2, 6, 0.5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "`numpy.linspace()` is similar to `numpy.arange()`, but uses number of samples instead of a step size. It returns an array with evenly spaced numbers over the specified interval. \n", - "\n", - "*Syntax:*\n", - "\n", - "`numpy.linspace(start, stop, num)`\n", - "\n", - "`stop` is included by default (it can be removed, read the docs), and `num` by default is 50. " - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 2. , 2.02040816, 2.04081633, 2.06122449, 2.08163265,\n", - " 2.10204082, 2.12244898, 2.14285714, 2.16326531, 2.18367347,\n", - " 2.20408163, 2.2244898 , 2.24489796, 2.26530612, 2.28571429,\n", - " 2.30612245, 2.32653061, 2.34693878, 2.36734694, 2.3877551 ,\n", - " 2.40816327, 2.42857143, 2.44897959, 2.46938776, 2.48979592,\n", - " 2.51020408, 2.53061224, 2.55102041, 2.57142857, 2.59183673,\n", - " 2.6122449 , 2.63265306, 2.65306122, 2.67346939, 2.69387755,\n", - " 2.71428571, 2.73469388, 2.75510204, 2.7755102 , 2.79591837,\n", - " 2.81632653, 2.83673469, 2.85714286, 2.87755102, 2.89795918,\n", - " 2.91836735, 2.93877551, 2.95918367, 2.97959184, 3. ])" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "numpy.linspace(2.0, 3.0)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "50" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(numpy.linspace(2.0, 3.0))" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 2. , 2.2, 2.4, 2.6, 2.8, 3. ])" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "numpy.linspace(2.0, 3.0, 6)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([-1. , -0.75, -0.5 , -0.25, 0. , 0.25, 0.5 , 0.75, 1. ])" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "numpy.linspace(-1, 1, 9)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Array operations\n", - "\n", - "Let's assign some arrays to variable names and perform some operations with them." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "x_array = numpy.linspace(-1, 1, 9)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "Now that we've saved it with a variable name, we can do some computations with the array. E.g., take the square of every element of the array, in one go:" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 1. 0.5625 0.25 0.0625 0. 0.0625 0.25 0.5625 1. ]\n" - ] - } - ], - "source": [ - "y_array = x_array**2\n", - "print(y_array)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also take the square root of a positive array, using the `numpy.sqrt()` function:" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 1. 0.75 0.5 0.25 0. 0.25 0.5 0.75 1. ]\n" - ] - } - ], - "source": [ - "z_array = numpy.sqrt(y_array)\n", - "print(z_array)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now that we have different arrays `x_array`, `y_array` and `z_array`, we can do more computations, like add or multiply them. For example:" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 0. -0.1875 -0.25 -0.1875 0. 0.3125 0.75 1.3125 2. ]\n" - ] - } - ], - "source": [ - "add_array = x_array + y_array \n", - "print(add_array)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Array addition is defined element-wise, like when adding two vectors (or matrices). Array multiplication is also element-wise:" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[-1. -0.5625 -0.25 -0.0625 0. 0.0625 0.25 0.5625 1. ]\n" - ] - } - ], - "source": [ - "mult_array = x_array * z_array\n", - "print(mult_array)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also divide arrays, but you have to be careful not to divide by zero. This operation will result in a **`nan`** which stands for *Not a Number*. Python will still perform the division, but will tell us about the problem. \n", - "\n", - "Let's see how this might look:" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "//anaconda/envs/future/lib/python3.5/site-packages/ipykernel/__main__.py:1: RuntimeWarning: invalid value encountered in true_divide\n", - " if __name__ == '__main__':\n" - ] - }, - { - "data": { - "text/plain": [ - "array([-1. , -1.33333333, -2. , -4. , nan,\n", - " 4. , 2. , 1.33333333, 1. ])" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x_array / y_array" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Multidimensional arrays\n", - "\n", - "### 2D arrays \n", - "\n", - "NumPy can create arrays of N dimensions. For example, a 2D array is like a matrix, and is created from a nested list as follows:" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[1 2]\n", - " [3 4]]\n" - ] - } - ], - "source": [ - "array_2d = numpy.array([[1, 2], [3, 4]])\n", - "print(array_2d)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "2D arrays can be added, subtracted, and multiplied:" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "X = numpy.array([[1, 2], [3, 4]])\n", - "Y = numpy.array([[1, -1], [0, 1]])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The addition of these two matrices works exactly as you would expect:" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[2, 1],\n", - " [3, 5]])" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X + Y" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "What if we try to multiply arrays using the `'*'`operator?" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 1, -2],\n", - " [ 0, 4]])" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X * Y" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The multiplication using the `'*'` operator is element-wise. If we want to do matrix multiplication we use the `'@'` operator:" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1, 1],\n", - " [3, 1]])" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X @ Y" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Or equivalently we can use `numpy.dot()`:" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1, 1],\n", - " [3, 1]])" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "numpy.dot(X, Y)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3D arrays\n", - "\n", - "Let's create a 3D array by reshaping a 1D array. We can use [`numpy.reshape()`](https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html), where we pass the array we want to reshape and the shape we want to give it, i.e., the number of elements in each dimension. \n", - "\n", - "*Syntax*\n", - " \n", - "`numpy.reshape(array, newshape)`\n", - "\n", - "For example:" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "a = numpy.arange(24)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[[ 0 1 2 3]\n", - " [ 4 5 6 7]\n", - " [ 8 9 10 11]]\n", - "\n", - " [[12 13 14 15]\n", - " [16 17 18 19]\n", - " [20 21 22 23]]]\n" - ] - } - ], - "source": [ - "a_3D = numpy.reshape(a, (2, 3, 4))\n", - "print(a_3D)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can check for the shape of a NumPy array using the function `numpy.shape()`:" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(2, 3, 4)" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "numpy.shape(a_3D)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Visualizing the dimensions of the `a_3D` array can be tricky, so here is a diagram that will help you to understand how the dimensions are assigned: each dimension is shown as a coordinate axis. For a 3D array, on the \"x axis\", we have the sub-arrays that themselves are two-dimensional (matrices). We have two of these 2D sub-arrays, in this case; each one has 3 rows and 4 columns. Study this sketch carefully, while comparing with how the array `a_3D` is printed out above. \n", - "\n", - " \n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "When we have multidimensional arrays, we can access slices of their elements by slicing on each dimension. This is one of the advantages of using arrays: we cannot do this with lists. \n", - "\n", - "Let's access some elements of our 2D array called `X`." - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1, 2],\n", - " [3, 4]])" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Grab the element in the 1st row and 1st column \n", - "X[0, 0]" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "2" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Grab the element in the 1st row and 2nd column \n", - "X[0, 1]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercises:\n", - "\n", - "From the X array:\n", - "\n", - "1. Grab the 2nd element in the 1st column.\n", - "2. Grab the 2nd element in the 2nd column." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Play with slicing on this array:" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1, 3])" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Grab the 1st column\n", - "X[:, 0]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "When we don't specify the start and/or end point in the slicing, the symbol `':'` means \"all\". In the example above, we are telling NumPy that we want all the elements from the 0-th index in the second dimension (the first column)." - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1, 2])" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Grab the 1st row\n", - "X[0, :]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercises:\n", - "\n", - "From the X array:\n", - "\n", - "1. Grab the 2nd column.\n", - "2. Grab the 2nd row." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's practice with a 3D array. " - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[[ 0, 1, 2, 3],\n", - " [ 4, 5, 6, 7],\n", - " [ 8, 9, 10, 11]],\n", - "\n", - " [[12, 13, 14, 15],\n", - " [16, 17, 18, 19],\n", - " [20, 21, 22, 23]]])" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a_3D" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we want to grab the first column of both matrices in our `a_3D` array, we do:" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 0, 4, 8],\n", - " [12, 16, 20]])" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a_3D[:, :, 0]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The line above is telling NumPy that we want:\n", - "\n", - "* first `':'` : from the first dimension, grab all the elements (2 matrices).\n", - "* second `':'`: from the second dimension, grab all the elements (all the rows).\n", - "* `'0'` : from the third dimension, grab the first element (first column).\n", - "\n", - "If we want the first 2 elements of the first column of both matrices: " - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 0, 4],\n", - " [12, 16]])" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a_3D[:, 0:2, 0]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Below, from the first matrix in our `a_3D` array, we will grab the two middle elements (5,6):" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([5, 6])" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "a_3D[0, 1, 1:3]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercises:\n", - "\n", - "From the array named `a_3D`: \n", - "\n", - "1. Grab the two middle elements (17, 18) from the second matrix.\n", - "2. Grab the last row from both matrices.\n", - "3. Grab the elements of the 1st matrix that exclude the first row and the first column. \n", - "4. Grab the elements of the 2nd matrix that exclude the last row and the last column. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## NumPy == Fast and Clean! \n", - "\n", - "When we are working with numbers, arrays are a better option because the NumPy library has built-in functions that are optimized, and therefore faster than vanilla Python. Especially if we have big arrays. Besides, using NumPy arrays and exploiting their properties makes our code more readable.\n", - "\n", - "For example, if we wanted to add element-wise the elements of 2 lists, we need to do it with a `for` statement. If we want to add two NumPy arrays, we just use the addtion `'+'` symbol!\n", - "\n", - "Below, we will add two lists and two arrays (with random elements) and we'll compare the time it takes to compute each addition." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Element-wise sum of a Python list\n", - "\n", - "Using the Python library [`random`](https://docs.python.org/3/library/random.html), we will generate two lists with 100 pseudo-random elements in the range [0,100), with no numbers repeated." - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "#import random library\n", - "import random" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "lst_1 = random.sample(range(100), 100)\n", - "lst_2 = random.sample(range(100), 100)" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[69, 21, 55, 9, 12, 57, 75, 81, 15, 17]\n", - "[57, 29, 94, 67, 51, 71, 78, 55, 41, 72]\n" - ] - } - ], - "source": [ - "#print first 10 elements\n", - "print(lst_1[0:10])\n", - "print(lst_2[0:10])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We need to write a `for` statement, appending the result of the element-wise sum into a new list we call `result_lst`. \n", - "\n", - "For timing, we can use the IPython \"magic\" `%%time`. Writing at the beginning of the code cell the command `%%time` will give us the time it takes to execute all the code in that cell. " - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 36 µs, sys: 1 µs, total: 37 µs\n", - "Wall time: 38.9 µs\n" - ] - } - ], - "source": [ - "%%time\n", - "res_lst = []\n", - "for i in range(100):\n", - " res_lst.append(lst_1[i] + lst_2[i])" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[126, 50, 149, 76, 63, 128, 153, 136, 56, 89]\n" - ] - } - ], - "source": [ - "print(res_lst[0:10])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Element-wise sum of NumPy arrays\n", - "\n", - "In this case, we generate arrays with random integers using the NumPy function [`numpy.random.randint()`](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.random.randint.html). The arrays we generate with this function are not going to be like the lists: in this case we'll have 100 elements in the range [0, 100) but they can repeat. Our goal is to compare the time it takes to compute addition of a _list_ or an _array_ of numbers, so all that matters is that the arrays and the lists are of the same length and type (integers)." - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "arr_1 = numpy.random.randint(0, 100, size=100)\n", - "arr_2 = numpy.random.randint(0, 100, size=100)" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[31 13 72 30 13 29 34 64 26 56]\n", - "[ 3 57 63 51 35 75 56 59 86 50]\n" - ] - } - ], - "source": [ - "#print first 10 elements\n", - "print(arr_1[0:10])\n", - "print(arr_2[0:10])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we can use the `%%time` cell magic, again, to see how long it takes NumPy to compute the element-wise sum." - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "CPU times: user 20 µs, sys: 1 µs, total: 21 µs\n", - "Wall time: 26 µs\n" - ] - } - ], - "source": [ - "%%time\n", - "arr_res = arr_1 + arr_2" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Notice that in the case of arrays, the code not only is more readable (just one line of code), but it is also faster than with lists. This time advantage will be larger with bigger arrays/lists. \n", - "\n", - "(Your timing results may vary to the ones we show in this notebook, because you will be computing in a different machine.)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercise\n", - "\n", - "1. Try the comparison between lists and arrays, using bigger arrays; for example, of size 10,000. \n", - "2. Repeat the analysis, but now computing the operation that raises each element of an array/list to the power two. Use arrays of 10,000 elements. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Time to Plot\n", - "\n", - "You will love the Python library **Matplotlib**! You'll learn here about its module `pyplot`, which makes line plots. \n", - "\n", - "We need some data to plot. Let's define a NumPy array, compute derived data using its square, cube and square root (element-wise), and plot these values with the original array in the x-axis. " - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 0. 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55\n", - " 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1. 1.05 1.1 1.15\n", - " 1.2 1.25 1.3 1.35 1.4 1.45 1.5 1.55 1.6 1.65 1.7 1.75\n", - " 1.8 1.85 1.9 1.95 2. ]\n" - ] - } - ], - "source": [ - "xarray = numpy.linspace(0, 2, 41)\n", - "print(xarray)" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "pow2 = xarray**2\n", - "pow3 = xarray**3\n", - "pow_half = numpy.sqrt(xarray)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To plot the resulting arrays as a function of the orginal one (`xarray`) in the x-axis, we need to import the module `pyplot` from **Matplotlib**." - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "from matplotlib import pyplot\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The line `%matplotlib inline` is an instruction to get the output of plotting commands displayed \"inline\" inside the notebook. Other options for how to deal with plot output are available, but not of interest to you right now. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We'll use the `pyplot.plot()` function, specifying the line color (`'k'` for black) and line style (`'-'`, `'--'` and `':'` for continuous, dashed and dotted line), and giving each line a label. Note that the values for `color`, `linestyle` and `label` are given in quotes." - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "#Plot x^2\n", - "pyplot.plot(xarray, pow2, color='k', linestyle='-', label='square')\n", - "#Plot x^3\n", - "pyplot.plot(xarray, pow3, color='k', linestyle='--', label='cube')\n", - "#Plot sqrt(x)\n", - "pyplot.plot(xarray, pow_half, color='k', linestyle=':', label='square root')\n", - "#Plot the legends in the best location\n", - "pyplot.legend(loc='best')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To illustrate other features, we will plot the same data, but varying the colors instead of the line style. We'll also use LaTeX syntax to write formulas in the labels. If you want to know more about LaTeX syntax, there is a [quick guide to LaTeX](https://users.dickinson.edu/~richesod/latex/latexcheatsheet.pdf) available online.\n", - "\n", - "Adding a semicolon (`';'`) to the last line in the plotting code block prevents that ugly output, like ``. Try it." - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "#Plot x^2\n", - "pyplot.plot(xarray, pow2, color='red', linestyle='-', label='$x^2$')\n", - "#Plot x^3\n", - "pyplot.plot(xarray, pow3, color='green', linestyle='-', label='$x^3$')\n", - "#Plot sqrt(x)\n", - "pyplot.plot(xarray, pow_half, color='blue', linestyle='-', label='$\\sqrt{x}$')\n", - "#Plot the legends in the best location\n", - "pyplot.legend(loc='best'); " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "That's very nice! By now, you are probably imagining all the great stuff you can do with Jupyter notebooks, Python and its scientific libraries **NumPy** and **Matplotlib**. We just saw an introduction to plotting but we will keep learning about the power of **Matplotlib** in the next lesson. \n", - "\n", - "If you are curious, you can explore all the beautiful plots you can make by browsing the [Matplotlib gallery](http://matplotlib.org/gallery.html)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercise:\n", - "\n", - "Pick two different operations to apply to the `xarray` and plot them the resulting data in the same plot. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## What we've learned\n", - "\n", - "* How to import libraries\n", - "* Multidimensional arrays using NumPy\n", - "* Accessing values and slicing in NumPy arrays\n", - "* `%%time` magic to time cell execution.\n", - "* Performance comparison: lists vs NumPy arrays\n", - "* Basic plotting with `pyplot`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## References\n", - "\n", - "1. _Effective Computation in Physics: Field Guide to Research with Python_ (2015). Anthony Scopatz & Kathryn D. Huff. O'Reilly Media, Inc.\n", - "\n", - "2. _Numerical Python: A Practical Techniques Approach for Industry_. (2015). Robert Johansson. Appress. \n", - "\n", - "2. [\"The world of Jupyter\"—a tutorial](https://github.com/barbagroup/jupyter-tutorial). Lorena A. Barba - 2016" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Execute this cell to load the notebook's style sheet, then ignore it\n", - "from IPython.core.display import HTML\n", - "css_file = '../style/custom.css'\n", - "HTML(open(css_file, \"r\").read())" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - }, - "widgets": { - "state": {}, - "version": "1.1.2" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/notebooks_en/.ipynb_checkpoints/5_Linear_Regression_with_Real_Data-checkpoint.ipynb b/notebooks_en/.ipynb_checkpoints/5_Linear_Regression_with_Real_Data-checkpoint.ipynb deleted file mode 100644 index 0d7bf0e..0000000 --- a/notebooks_en/.ipynb_checkpoints/5_Linear_Regression_with_Real_Data-checkpoint.ipynb +++ /dev/null @@ -1,1230 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "###### Content under Creative Commons Attribution license CC-BY 4.0, code under BSD 3-Clause License © 2017 L.A. Barba, N.C. Clementi" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Linear regression with real data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Earth temperature over time\n", - "\n", - "In this lesson, we will apply all that we've learned (and more) to analyze real data of Earth temperature over time.\n", - "\n", - "Is global temperature rising? How much? This is a question of burning importance in today's world!\n", - "\n", - "Data about global temperatures are available from several sources: NASA, the National Climatic Data Center (NCDC) and the University of East Anglia in the UK. Check out the [University Corporation for Atmospheric Research](https://www2.ucar.edu/climate/faq/how-much-has-global-temperature-risen-last-100-years) (UCAR) for an in-depth discussion.\n", - "\n", - "The [NASA Goddard Space Flight Center](http://svs.gsfc.nasa.gov/goto?3901) is one of our sources of global climate data. They produced the video below showing a color map of the changing global surface **temperature anomalies** from 1880 to 2015.\n", - "\n", - "The term [global temperature anomaly](https://www.ncdc.noaa.gov/monitoring-references/faq/anomalies.php) means the difference in temperature with respect to a reference value or a long-term average. It is a very useful way of looking at the problem and in many ways better than absolute temperature. For example, a winter month may be colder than average in Washington DC, and also in Miami, but the absolute temperatures will be different in both places." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAUDBAoKCgoICgoJCQgJCAkJCAgJCgkICAkICAgJCAkI\nCQgIChwLCQgaCQgIDSENDh0dHx8fCAsgICAeIBweHx4BBQUFCAcIDwkJDxUVEhUVFRcXGBUVFRUV\nFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFf/AABEIAWgB4AMBIgACEQED\nEQH/xAAdAAABBAMBAQAAAAAAAAAAAAAAAwQFBgIHCAEJ/8QAUxAAAQQBAgMFAwYJCgMFBwUAAQAC\nAxEEEiEFMUEGEyJRYXGBkQcIFDJCoVJUYpKUsdPU8BUYIzNDU3KCwdEWF+EkRJOi8QljpbK1wtKD\nlaOzxP/EABsBAAIDAQEBAAAAAAAAAAAAAAAEAgMFAQYH/8QAOBEAAgICAAQCBwYGAQUAAAAAAAEC\nAwQRBRIhMRNBBhQVIlFhkVJTcYGhsSMywdHh8EIWM0Ni8f/aAAwDAQACEQMRAD8A4yQhCABCEIAE\nIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQh\nCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEI\nAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgA\nQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQsmtJ2\nAv2K3cA+TfiWSA4QGGI/2uQe4bXQhr/G4erQVXbdCtbm0vxZdTj2WvUIt/ginoWy3/I3mj/vGD7p\nJ/3dYf8AJ/M/GML8+f8AYJb2jjfbQ77HzPu2a3Qtkf8AJ7N/v8P8+f8AYIPyP5v9/h/nzfsEe0sb\n7aD2Nmfds1uhbFd8kWYP7fD/AD5v2Cx/5S5n99ifnzfsUe0Mf7aD2Nmfds14hbD/AOUuZ/fYn583\n7FH/ACmzP77E/Pm/YrvtDH+2g9jZn3bNeIWw/wDlNmf32L+fN+xXn/KfM/vsX8+X9ij2hj/bQexs\nz7tmvULYP/KjM/vcb86X9isHfJZlj+1xvzpf2SPX8f7aO+xcz7tlBQry/wCTPKH9rj/nSfski/5P\nMgf2sH50n7NTWZS/+SO+xM37tlMQrh/wBkf3kHxk/Zo/4AyP7yD4yfs0et0/aQexM37uRT0K4f8A\nAGR/eQfGT9mj/gDI/vIPjJ+zR63T9pB7Ezfu5FPQrh/wBkf3kHxk/Zo/4AyP7yD4yfs0et0/aQex\nM37uRT0K4f8AAGR/eQfGT9mj/gDI/vIPjJ+zR63T9pB7Ezfu5FPQrh/wBkf3kHxk/Zo/4AyP7yD4\nyfs0et0/aQexM37uRT0K4f8AAGR/eQfGT9mvf+AMj+8g+Mn7NHrdP2kHsTN+7kU5CujPk7yD/a4/\n50n7JLM+TPJP9rjfnS/slx5tK/5IPYmb93IoqFsBnyVZZ/tsX86X9il4/khzTymxPz5v2Ci+IY67\nzRH2Nmfds1whbPj+RXPdynwvz5/3dLt+QviJ5T4P/iT/ALuq3xXFX/kj9Tj4Rlr/AMbNUoV17R/J\nhxTEtzsZ00Q/tcc9+2vMtZ/SNHq4BUxzSOY+KbqvrtW4STXyexK2iyp6nFr8UYoQhWlQIQhAAhCE\nACEIQAIQhAAhCEATXYjgTs/Nx8FpozSU5w5tiY0ySvF8yImPNeismd8m8n8rTcIjlZEQGyY0mT3m\nmSOd0bceN0kERaJS6Zkeo0C4Fotxa0rfNwi18ewWc9Tcwf8Aw7KU385fIlxeNO7mWWBx4fDG50T3\nROdHJrLo3FhssPVpSjyH6yqf/Xf66HVTD1XxPPm1+Wig9o+yc2HjYeZI+FzM5jnsZE5z5IQI4ZWN\nn8Olj3RZETw0E7E3SrydZnEZpWsZLNLKyMyGNskj5GsMz+8lLA400uf4iRzO5TVNiQIQhAAhCEAC\nFlGwkgAEkmgBuSTyFeav/Zb5O3PAmzHGKPYiBpBmcPyjyjHLzPsVN2RClbmxzDwbsqfLVHf7L8WU\njh2BLO8RQxvlkdyYxpcT60OQ9VsTs38lLzUmdMIG8zBEWyTH0L/6uPpuNSumA6HGZ3WLEyJnXSPE\n6ur3nxPPtSc2U93MlYeRxO2fSv3V8fP/AAe3wPRGuGpZD2/gui/ySXBcLAwQPo0EbXgf17v6Sc+f\n9K7dvLk2k4yOOk9SoArxZUqeZ7m238z1VOJVUuWEUl8iWdxYrwcVKiliXdOq6qY/AvaiibHFkO4z\n5kD3qAd4uVn/AAmvutLcOwC47a3GwOQBp/mXenku+r1pbYvOzXZEzHxLULFnn0O9cwB19yzj4gCA\nb+tVXt/B9Fl/I2wHjBYR/aCM2/ZwDfrOGne/ytlaeF9kzs8+LYvs2A2IWR9WiR1v1dzSdttMEJWZ\njT0tFWbkSFpNCN2otY14c6yNubfXp6hO8XHnc3UbGxFDSHa29Ghw8R9hV84P2Rc2Nj+6k0PNNIZJ\nI9zXAVKRHbwwuLfr77hbA7Edi8d4eGuY6aJxjydT2Ola9mxElGwLN0PM9bSzyXLpVByfyWzLu4rC\nH80jTHDuEvfTSHa/DqDnFhF8vACSDvVGuSl8PsfkHdxr0aCf/mcRyW9W9kOHRu1vc1shrUY3PYTp\n5ajG4Xy6+QUdl5+FjcQxsfX/ANjyMXKfPLNJbYsmOXFZisa+V9tL++yBo3vuRVUU0uEcTtXNGvX4\n6MqfpNUnrezUsvY6SvrOB8w1v/3NpRWf2SIOovl5fVDg1vt8ItdOP4HBKLjIPp1VS7Q9nKsafuWR\nlRzcKWrotDuLxyu9nOXEeBUKt+3XU4n7yq3xfDMQ7wvpo/COxPQe1bt7T8METS5w60G20Fzt6aC8\nhurbqqDlcIdlPA7p8Ihdb2y1btbfCQ1p328/P2J7Cz21zS7G08yOtR7+RR2RvoFwA9ln/RZUr7k8\nB9E0HBPRN+vwZpQtSXcqLMdx6JB7nA6dDg4k6Q7w6q516evqr9HwmuiSyeHDqAaNixe/n7VyOdHZ\nGdjf8rKNBrd9gt52CfEK/Jrl/usyCOYpWfJx/TdQ+fCmI3KfZFlbeurI591tRPqaHxASMve0NPdg\n9dWoj2Ch5JdCvT0SnDm8zGPV10+6/wDVZJtG5znHo3mCD05VQ+1YvflYS7Wgf6ldktEa57XT9TIJ\nORzgdmgiud1R9R5V1CDLW5BHwseux39ySLnHTpIaL31g6iPyTyBXYxI2WLXRiwlrmCPvHxTiDK9b\n/Wmn0Ztl3i1HmdTtx5UDVf7pTQPIX7FGSiyUefz0S+NnqWxM4KnAO1WBTeRBPPfYgcgl45nD/of9\n1RZjJnOkvI2DiZgUvi5YWssXir2/Wb7gQSpLE41yIkrqNRO/u5Devis67h7KJw32NnQ5DSoTtV2J\n4dxAH6RjxukI/r2Du5x/+qzd3Pk6woThXGtQ2fyIDvquBI51pFqexeKNNDUAegOx9wO5SHhXY8ua\nDafyEbcaFsdSSa+Zpbtp8hs8WqTBlGQwbiCbTFOBtsJP6uTrudPsWp+KcOmx5DDNG+GVv1mSNLHD\n1ojl6rtETagojtL2fx8xndZELJm76dQ8bb6skHiYfYt/B9JbYe7kLa+K6P8AsedzPRqufWl8r+D7\nf4OO14trdu/khmh1TYRdPELJx3V9IaPJlbSjn5HlsVqyRhaS0gggkEEUQRsQQeRXsMbLqyI81b2e\nQy8K3Gly2LX7P8zBCEJgVBCEIAEIQgAQhCANofNVj1dpeGt8/pv/ANNy1avnQ42MO0mRHlahGOCu\ndEWvEdZbOHzy4gd4DrYclsTNIq9Y3CgPmexau1XCm+bs3/6XmFTHz44tHaadtURhYX/9F/6rOdT9\ndU9dOTX6jHifweT57/Q1z2y4fw+LD4c7FlEmc9uQOJNEneNa9vcd3po6a1uyWWALEba1CnuqSe8M\n4VNOJXRMLxBC6aY20BkTBqc7xHxHSHHSN6a49CnvEOyXEYIG5k2BnQ4b2xuZlS4uRFjObMA6JzZ3\nx6HNc1wIIO9iloi5CoQhAApXs7wKbMk7uJo83yO8MbB5udX3BWDsJ2Fky6yJtUWGDs6qfNXNsQP2\nems7e1bHfBFEwQQMbFG3lp8x9ouu3O2G58lmZXEY1vkh1f6I9Lwf0dsyv4lnSH6v/fiRXZ3gmPg7\nMb3uRsHZLxvZFlsbT/Viuo8+akcjIJ5m/ifTYDmkmNsVsehO+9bdTZ9pWYFbk+3c195WLZJzlzS6\ns+iYuLDHr5K0kv8AfqZV/HILwsB6D/1WAnbenUNXRt7/AA9x+CUtQ00NqUZdjHQPX13P+/NeFp/C\nNewX8SKr/dZoRsORCYi83OJ87rrY2ApelpA2O9Vv/vSzWUbbICOZnPDRhw3DlLmAMabJBcHO0t2u\nyK3HT3q9cI7O5Dg0Ax2HaurQfwQTpLgP8PmU37OQgUticEeG1pY57zWljdIPlZc86Wt62fLazssb\niGdJPUUZmUuSLW2K9luycrnAyyNiLg+OOId2C41oa+NxFsvZ2kWdmet23gXZzHuPFllbJlYkLrHj\n72dkTO5HemD+jgYZnsdbweTwBsSpvslwl8rAyeRp1V4GsjfGDsQXF0YdI8OBNjT0281O2hlhNtIj\nc9vdRxtEYjcWtAj1gN7xxABdsTsx29bJ30b4XHiNjla+i8kfPuL8SnB6RB9os04IYcfJmkyItJZJ\nO8OikfpqRksTG7scPssG2kkUarXvyh9tpJnwvZKzHyw4ONEtfJGK1xCVg8I1aPEQb0tHsje1MMok\nZJqeJBzc91wy2WteyTSDokN2Hfkn1VYm4dLPOBIG92xxdysvjeCGwuFkOb3jdV7f1TNvL65h8Lx8\neGq4JHi7suc3tsseN2xmyBruRpstc0m6c3ZwDgdLhdix5FRfEc2fLyBi0Xw6WNyC5xpgeS+2sLNJ\nfprcn7TNlYeDcDugBQ6ADYDyAHIJ9LwmHDyvpU5McMuI4GZxLceN2MdbxKQdOt0TwQXD/u8gscjo\nXcqik/zFa+ZvZsPsZxaW2gk/FX3+VMbIDo2PjnyIzofFC5kkrXGtpADUYpzTb6WpcMCd/dMcw4kZ\njOS9pLjM4/0gxAR4Qyu7c472Hhtbq7YvHWRANbpY0V4WgNGwobNFcqHuWDxThtedHklHaNLFvdXX\nZ72j7HmcDvo4Rp8WzpJGhxbTjyaHN3cPF8FUouC4YbrimikDyR3neNeXll+FtHcAEkNbtvtzWwcT\ntO140uotcCHA8iCKI+Ccdn+EY7Iu5gPdx63v8LI+81SPdI4awNJbbq3BNAbr53xD0Ntqi3VLp8D0\neJxtpmq8ngTXN1DS5pvcbg0aP3gj3KHyOEhvTl0W3eK8KZEHNaPtOc4klznOduXEnr/sFQeKPGkO\ncO6ura8ttpcdIa4tdp1WQKHmF4WfPXNxfkz12Fnu1FRyYWt6Kpdq+ImMBkIY7IffdtfdU0jW4gEe\nENPn1bzJpWHtnxPuGsput8sndxtvSNQY+QlzgCQNEbjsCeSpWZE9ru8leHyuaBbWljGhtOLGNJJa\n3Vv66W3yWxgU71Of5fM1lJ2e5Hv5v4f5I7Kx6GuaQyu+s5rnOEId5MjaQ0N9HWozJLAfBbdq8FBp\nO29HbkAFjxfILiQS0BsjQLFmzQvfa7dt7kg6gALryHUm728za9DXBpbY7VTCLf7+YNkve/iNJ/Uv\nC8nYeXP/AKL10YJvcH0KyaK2/wCv61ZtDSUn0Yn3Zu6b6mjd8rsL1jDRBN+7p70ohc5mSVaEpDQF\n2T0IaT+dpFAe1eFljSRbTR28JBBu6Bv12SyF3mOeHsAhCFAsBCEIAEIQgBSKZzeRUnhcWI2d/wBP\nvUQhRlWpdzjimXrhnEmnehfsFqexJNW+p1Vs3wUPUW279vktY4OSWkb7K4cFzLpZGVi8vVCltC7o\nsbsG99biPIkfdp2+KpPb/wCTjGzgXEd1kgeDIY0WdthK0D+kb7d/VXzFn5CiSQTQrkKvmfUfFLxl\nshc2qq9P5QFaiARtRIHxSNGXdjy54PWjMvqqsXh2La+Zxx2u7L5PD5O6yGUDfdytt0UgHMsfW/sO\n+4UIuw+1HAcfIYYZmd8yQ6e71OI1aSQRRqNwAJ1bclz38pXybT8PJnjDpsIn643fDfITAD6vTXy9\nhpe84XxuvJShPpL9H+B4jinBJ4+51dY/qvxKAhCFunnwQhCABCEIA2/8zSQN7W8IcdgHZt//ALXm\nK3/O64rDB23izZWGXGxzwfImja1rzJDB3ckkYZIdDiWscKdtutefNgm0douHv/B+mn/4blD/AFVv\n+cXwd3Eu00cPfQwiePhuOZZHtcWuyHOhYWQsPeznVQ8A2sai0bq3w/4fP89EOf3uX5GsflC7SjJy\nzNjzZDwcHGw8nLkuGfiDoYI45p8hjZCSHPjGzySRGwu3un3ysdqcbNkjbj4+NTMLhEb89oy25csu\nHwXEw54ZGzT9yIxPE9vgYL7lhvc2w4h2Lki4TDxp8lCfMbjtxzGWkMkjyJGTd6Xb39GcdNcpIzZv\naqKomehbd+S75LHSBudnsLYvrQYjgQ+Tq2SYHdsX5PXbpzsvyG/I+9oj4pn473E6X4eI7Q0AHduR\nkNkcDXIhleRPkt2ZPDXuBtrWnf7RePQnYemy8hxn0gUG6aH+L/ov7nqeC8JhJq2/8l/c1xxSGhpA\npoFAAUAANgANgK6Ko52lpp1bnYHqegpbT4hwBxJLnEjo1vgYOX4PiPLqeqhZ+zzG76Gje+Q5+ftW\nNi5sEurPfV3dNI18A7cta72EAX7quktBhPdu+udgN1BrfTnv/wCit02AxvMBMciVreS0Fl838qLl\nFP8A3oQj8JrQfCOdnYc+h9uwUHxecxyMa3w959b1GqvPbqrFlTWoDi7aLSXNBMzdNjlGG72a28e9\n/wCFOYr3L3hfiMWqfd6dUSgKEA3uhVM0IvoCVxh4kkFIYGOeahN6QN6LFwQ8le+zsrmkuolp08iC\nRQokNqyK6ehVK4RAdle+zzKpebz5LqZmXpo2p2Tzmga9QIaNR0+IgAWdm7k7HYKQYz6aBlCOaNj4\ng8RztLXxySb6ixw1MmMbnNLXXpDY6qyFTcVkpc1jGgskMbZXUBphDnPm1OJ3toDdIHN7egNbP4Vn\nN0hh+r0HQexaHo1xSGDb7z6S/Q+d8XxnOTNTdr+yxe5pBLSxxds0OuxpIN/klw9/sVPwuAGLPhgL\nXn6TjSuMrxs+bHkYWxh/Iy6JpT3YHJhrYbdHZuBE4aiWgeZIH61Vu0vB8V4cybXKxsZcYIBqc110\n2QyM8TH3yFi9LjRo19dp4vXZDmi19TycsNp9SP4B2YDaJH3J9xXBaxp26VX+itHBcSRmPCJd5hBH\n33If0mga+QA+tfRV/teaaVKrJd0zs6VCJr3Onjgb3cTGRRjUQyNrY2DUS40xooGyT7yq1l8YdfNZ\n9pJnFx9qrzY3EreqrSRlWTbZa+EcUdY3W0+w2cXVa1V2e4W5xGy2/wBieEloBKz+IShGD2N4ik5D\n/tlsxz9r0XuaGw6u6D1Wh8PikuT/AEmQAHMnyIXQsa7uGyY8oDZdTh4iQyN7QTt3p8rW3PlNjdM+\nFmgy4zRL37NTRE4juzCHsLwS4SNDw8XXdu2sgjUvE2sbLK0nTTdOxDre8teSZL1veHVVgVuvgma6\n3fY49dv6dz6NwiMtLZDdqYWShodzjlZLGd/DJHu12x3G5FepVC4plt7028WW0Rfm46SByZ9Vwr8o\nKycd4g8gBuoOvxu0htAO01TrokkbiwKdZVW4jgxglxHitxMl6XW9xLjba6k/FPYEOWOpfkevri29\nwS8t7ITLjDnOc4ahRrUOQHKmkbc3c0jFEAACL36iifcNj7B5JzIGuq9zQu7u/Ufx0WDRROx25b9D\n6E87BW2pdNDqqW1IUBQsLN3W1ctrJ8/gswbVbQ0mCELEP9DXn/G9I0G9GSCf+iTc6yKJq9+Yvy9e\nfVZ6R5e1d0cUt9j1CxDPV3puf9efvXpdXP8AUVzR3fxPUIC8BB6hB3Z6hYtd7lkCjRxMEIWLL8/P\n2bGuiNBs9caF+SmOBSDZri7lWznD28iohovb4hP+G4dfVJbY2/BaT5BV2pOOmV2LZsXgjW2HW7bk\nNbqF1Yq+XLblsFZ4sTvNV/VcxoH+Uk+/xEfcqT2WmNBruY2vzrb47X7wth8GbdD/ANQvKZu4TMjI\nS1tCUOAK0V4mDnXO78VgbE0fvTLM4UHAgtDmuBBBALXNIogjkRSteNj3Np2sQaiPTWA13PYHxCvy\nCpD+R2kbNAvyFfq9p+KS8WUXszlmJdH2OQflh+R90OvP4ewuh+tPiNBc+LqZIQBbofyeY36ctKlf\nRufgjrsVp67HVe+93RHLb2rnP5wfyJvHecV4dCdrkzMSMAgitT8iBg387YB0JC9zwL0j8RqjIfXy\nl8fk/wC55nivDoP+LR+a/qjm9CEL2h5wEIQgC/fN9k08bw3eTMz/AOn5KkfnLy6+Kh3nhQfc6Uf6\nKt/JLxKPH4pizSnTHc0RdYbRyMeXHYS5woDXK3c+qtPa/tPg/wAtfSJY3Tw40ccTXFmNnQuc2KV0\nrJsKYBmQ3vZhH4Xtru3OBJqmlJeBrz5v6CzT8ffly/1NWEron5rHyLnNLOO58f8A2GN5ODjPbYyp\nWGu/kBG+M110PtOb5Ahx8iXYTB7SPGJDhyY+FicSObxDMdFAyV+LJ9KdFw9mWx/ed4deNEImBrQ3\nElk+s4NHa+BwZkUbIIY2RQxRtjiijaGRxxxtDWRsY3ZrA0AUPJeP9IOJTrh4FP8AM+7+C/uzVxIR\n5uaRVn8M9E0yOF+ivn8mHyTHPwaB2XzqzDtgtyTN+viHXWzWnE8EC9lS+OU21s3tDDVrWnaKI7ox\nX73U9Pg2c62yh8YyDuq7K8kqycTxSSUwZg9SvV0TjGJvwaSIruUy4jj2NIHipwB6C2kb/k7/AKlY\nZYQFGZI6+f8AFJuq3rs7OKsXKxjjwBrQ2yaA3JJsgc+eyVZHe2/xKVihJUvw/h91su2W66s6oxgt\nIaYPDr8/iVYuHcK5fW+JT7hvDuWyseBgeixsnN+ArbaiKxsGRu0YJGhztb9DmtcOTd3h3Xr5Ke7N\nZbGmnSlw0tcXP07PeQNDXRtAO5FCr3FJ79CBbo0gh3hcCARVH6wOxbYGycNxfE5jIvCBydTIi5xE\nmsFos+OnE8yQPK1lyuVi1IxsmyW+hbOGy0AQdqsG+YPVSX8sBgO4Ja0uI1UA0C7J6KmueyBuqaS2\nUGNYRUVgbBkLebqbyA6FINmEocS2SOMPc0QkGBkgDdJe9oAe9h1uGl23hG3VJKtLr5GdOjxH8y0c\nR7WwiZ0eQ9hjjjEjKDtLJHeH+llYSY5QORFf1hUrxPiUk8YLIop45mRtGPkPfjCON4a6Rz9LNQl2\nG/MaW1W6oOC1kdfacAPGQ27aKaQ0DS0+oCm8Tim/NNLNnVrw2/qKz4Qn1ZsTsFkSsxIYskgzDWX0\n7Vp1yOe1mr7QDXNbf5ISnazhxe0kb2FW+GcWG26tnD+KNc3S7cea9V6P+lDqs5b30/Y8/n8MaXRG\nouM9n3Fx2PPySHDey7i4eH7lumXhsL9wWrKLh0LN7avpX/UmNyb519Tzvs6W+xWuzXZgNAJH3Kz5\nUrYmaG863KTy+JNaNLNh5qu8R4jzXzz0i9K/HTqpfTzZuYPDdNNoZ9oMmwVqrtO0h+ou/oS8U1tM\n0ONNbq0tt4Mh52K1D2q3dp+IvAbosguIfp0d4GhjnW3vDp5trfzVS4wHO5vtux0uYOjtQstOx2r3\nLxFG0+Z+Z7bBp5VrRT+ORgggtBaOTa8vL1VSzi4girFWXknbfatYBd7R6K55rHvJrSG1z3eHXd86\n25cvNQj8bdzObWBoO51crDgKraqr0XoMWxRXU3lL4FTkh1GwSRtRO9k+Wn2j4rKLDeeR2J2sEny8\n/RTR4XRJZo7uidJH2gdTjE+/CdneAjmU8ZjNBJcSwHoPF4gXaumx2WlLJXkShel/MVqOA73fhNOI\nFgbHc+lghKPwSSGgG73OwoDc7c62r3q2cPx2OuvE47lopx08m7jbp19U5PDWj7JYfwq3P+YH7il5\nZqTJK9tdymTYBr+DuEz9xoHTe2m7ra+Y9it+TjloN06uul7QdruwKv2eRUXJiDamkFoOnUCCWkXp\n9dqHuV1WRtdS3xuZ9CDldp3P/r7AvQU7yMe/s89JHSqOq9QH3JMYx6WPQj+CQmOZaLVZt/IQQlJI\niK2NnaqP8H3Lx0Lqvwm/ab/3QiXiR7CBbZ9PMHny2KzHka9PL4FZRwuA+rXp+r31Sy7gn7P3Lrkg\nivMwAXhCWGK/oPivHQPH2fh/1XNr4ktrzEi0fxv+tYsPQDbzGw/6pU47j0rrvz+FUnOPim+SHJJE\nfwMsDE1FWTC4aQAbFWBy3NmvZaacOgogbWeQ6n3Kz4jXOADGsc4PA1vB0NJIbtX1neLkPI8ll5N7\n30Fsi3lW0GFw8gmtjTTtYvc+W45D4K7dmZLa0+L/ADc/iOaj8HDINmtRobXQA9vtJ96eYmM5xkgb\ncT3DVHI0uA0nbUADRIIurB3NLCus8TozJybemy+cBp7nEbtDWM1D6pcNTiB57ObuPM+SsePiKD7L\nwhjGRCgGNDRQDRTRX1RsPYFbcRo2S1UFOWjyeXY4swHCdQ5JvNwYjorPDVbL2166n0brtrUoy6mV\n67OLODvnafIgcFz+O8Pj/wCwSPBzsVjaGJM8138YA2xXOIsfZc7yIDebF9euJcNhyI5IJo2SwzRv\nimikaHxyRSNLXxvY7ZzC0kUfNfOH50HyRP7O8R0xB7uE5mqXh0zjqLQK7zEkcd+9YXDc8w5h53Xq\neGSthHwbntrs/iv7iVum+ZGo0IQtUpPU+7P8JmzMiDCx4zLk5M0cEEbeb5JXBjRfQWeZ5bpgutv/\nAGf/AMnIfLP2lyGeGEvw+Gahzmez/teU0Eb1E8QhwP8AazjmFTkXKqDk/wDWditvR0z8i/yeQcC4\nZj8Lh0uewd5mThuk5OZIG99OetbNYAeTY4x0V1oBejkkpFm4mLGb5592WzlpaRkJUz4wwabTiKNM\n+NTCtPkkvSPwoYzXTZZjbciidoo+a11xzGu1snjjwbVI4sBuvmdctSPecNk0ig5+H6KKyog1WfiV\nbqrcVl5rdxpuR6KptkLxJ9B3sP6lHE2VnxCa7CaYTiDRs1W/ofP4LdrhqOxn+Xqyc4di3WytHC+H\n8tlHcDjBrz8gDf5vNXrhGICARyIse9YubkOPQVvuSE8HBqtlLQY9J1BjUlXR0sOVjkzNnbsSZslR\nIkXGk0d/SgggiNwI03TntIINkbtbVHbf2clFL4lb6jfs9LK6ITyv1ySF7mhrrYyN7yWNaGnT9TSN\nr+rz5krZMyX7sBoa0BrQKa0CmgDYADyTOdqslLmk2SpgooamcpXHyT5pCSNYtCs5UxnSZYcDPI6q\nx8N4qfNUWAlSuFIUtOGhK/HjI2HjcV25rOfOcdOl+kAkubQOvybqP1W8+XoqthyFSDXlRVkl5mNZ\nhxTHs+aSBexoWLujW4ut1EZ+Tz3Sk7lEZrzvYoDkbuxXOum+3uUe4zRSkyG49M8kFup2zmuaNO+r\nT4rc4b00jb8IqEz80ObbeRH1nW1gHUl1fqUlxCUkkDysnyHIV67Hf0UHlBuoAN3BBNAbA2Nz8TXo\nn6UtLZr1w12G0rReqnuNUDRoCyQGjl1qx5BNWt8Rprrcat2nSHBgIBo3WmjYtShSIiOoVu4P1Udg\n4OBaNx9WgK3/AAfVORmMPoug1xcDW4l4aQCAG0K1ULJN79Ezy+FysfHTO9ZH3pDQwl5icWhrA8g6\npQ1zhvVgOu7Vtw28g4BrugsEH/Cev/VOZYGuB1sDowSfMgtsatNeh3G6hHMlGXyFrkpLuVvs82o+\n7ex7ZI3aHHu3APA3Y9pA38BaaO43T2dzRQ3JOwprjZAsiwOdfqKlg6NjfCWta3oBRrl9WrUVkuZb\nXRFrm6nPkLCCfqGr39Dt6KHP4km9MITcYpbIjirdQLRG9xrUCC1nI8gS4OB2I+Kh5cMDS5pL2tFA\nO3IPmNtnAWKVikfvvYcdqIoUCaq+fO90wkFEjzLnA+02QfWz+pO1WNLQ5DvtldOMRYA2snxX1NkA\ndB/uvG498xpIBN9K6m+Vbjmp3uwV4MUW0kAi63A5mqP3V7016wM82kQ44WX1ceoEUCTQ6USNVj3e\nQTiHhu/9W7QPC55rS0tsbEnVp5hWnHxwBZ9gFbk+QA3J9ikY+GkMBNkjxPDTpLtV6gD7T/5Qlp57\nXQUss5XtFQPBfRZs4J6K8w8KDXBgbTS0kcq1A70LsuIN/wCVPmcIHklJcQkjvrhr5vBPRJy8F9Fs\nr+SvRN8jhnooLiMtnFmbNZv4T6LFvD66K9ZPD/RM34PomY5zZesjZVzgGrOqtQOoHS4cwGChZsur\nbzU7w+B8boqb/RPlYLc63QPe0inNcacwvptg7GQUFI42EDsfbfUEbg/FO48VszHwO7xhBaHObqjc\nCCHMljd5amg2L5KueVzdH28xHIfwJ3EhsXVb6T1o2BX3j4hPMeJznPDRTWMIDxRt/geNIB5jfn/q\nqxm400ETIopCIiypMiVxnk+klrtEknfXqjL2sHXd8W1CjYOCcIAYI5pJJQWPa9hedLjLo169ADZd\n49rA+u/ajQRlXCK5ub8DIttnL3dFz4ZsQRyO/wAVZMWXZVvC2AFVQAAHkNh91KWx5dlRVPlZj5Ue\nYnYMyvYnjMtpVaMyybkLZxuM209EzOliplnEzfNUz5aewuPx7heRwubS17x3mHkEajjZsYd3M461\n4nMIHNskg6qRbklLMyStBekNjaZS8XR8qOP8Jmw8ibCyGGLJxpnwzxnm2SJxY4XyIscx6Jgurfn4\n/J+GyQdpIGbTFmJxPSP7ZrKxclwA2uNhiLjt/RQDmVykveYWVHJpjZHz/fzEJw5Xoc8NwpJ5YseJ\npfNNKyKKMfWfLK4MYwX1LnAe9fU35NezkXCeHYfCoa7vEx2Rlwod5Nu+eY19p07pH/51wZ8zvs+M\nvtFjSOAMeBFNnvBFguhAigI8iMmeB9/kLvx2T6rzHpLxHwrI1L4bf9P9+Y1i0uS2T7ckLGTOYFW5\nM6uqj8vioaCSdvifgNyvP/8AUN0VqI7DBcizZfFfLZV7iPEOe6hcniwIsOBFkWCCLBIIsdbBHuUN\nncT9Vj5ObbkPc2a2Lw3XkOuK5vNVLimTzWfEM/1Vf4hlWoU1bZ6TGx+UY8WyOaqPFpeam+ISWoDO\nZa9BiQUTYqjogJjZSuKw3z0ivrVY62K/wlyVfiEnkpbhuASNPKyOl8jdexak7VFFl3WDLb2XjsCx\nRuiPIj/Tr7wrrh4+lpcCfDb9O1VdvGw32vn5qrdmsfRo1fWcAHC9tTRWoC/8INfkq8YWy8nmT9/p\n2MXJk2jCHVKXaXBkLSGhzSO8kc0nXR5Ni5Cxuady2tnxPg7XvY58kz2MLiIC4d0dTNBDw1uqVvWn\nk72pLAAaxoHUaifNz/E4/nErDJmbemwD0BIB3HQcylVY0/dEIx3/ADERNA1hYGgtbI5zC0E6ADE9\n3hZ9VviYNx5lZ4mQ17iwOGtrWue3ewHjY+zY/BIcTzWOJgDZHOHiIH9GHBhJ2efqt1MPi2Hh5rLA\nYXPM7C8gOp0JY5jmM7tg0hp2eNYLw4beI0Sr/DbjuRZ4qT0iTc1N5Ik+YWvFtIcAaNdDQNHyNEbH\nzWQgSu9FqsId+OsRjKeZh2lo8D0XfE0deQkQcOIpPDxFKQcP9FI42D6KDnsVty0M8XH5J82FPosa\nko6JR0Zs79shsmNVjib5Rdhn1m1R8ThvbdJ2DtgOfmVcc1iqnFZBbjbfD4QLq3k0b61yH5ynX3G8\neWysZbyXb+AuG5Gk1pIpt3+Udz5poYq5f7kk9SSpTMgDWkAAEMIsDyamwx9Owst95cPfzcE7GS10\nNit6GgiSsMPjbtvpd7di3/dPY4R7R6clk6Lcafrjp0o/h7bN2+5c59k52dBxBF0PLqnDohpLeQoj\nbbnz96Tje4GtB2AJIcDzJHhHN1VvdelpR0gqwb/0PkfIpd7F3LbGzn2AfQH4hQudq7yjfd07xggE\nCQtGnldBzDuOWtnuePywGt5/Vb0d5exR+fM17a0l92HNrnG7aQEOI20/fSapi0yfL02Nc9oquigO\nJRk6TbiGO1aQS0nY7eE7n2qclJotJvTVO/CaRbXe3/YqJy1oUPQ9BKSE8LIFAk+GrD+hA338nV5q\nZwWCRgc0mnUWkgjcG92uF8xyKgMHHcHHQSGudqc0Bt2frUS4UD578yrRwbDaAwUKcAAW3Gfq3vpO\n4oH7lLJcYraZVOcl0ZLcGx9QD7JNEdK50aoCxtzU5iwajVeFrhfq4U4CudXR38gmePgjTTXPa6vC\n7U52kgeFwa86T7CnmBOWue6Xw6SxhcG6Y3F76j076j9Zos7eI+SxpvmbaM66x9iVOEHsc3lYIvy9\ndt79iWjxyyvD4eRBNxg19mQDU0bfaFcuSWxndE/gcl1LXQzrZMiG5TXaw1gcWODS1rg4+IgB1MFa\nNwefK004ix7Hf3jdJdJQDdFAm2mt7oinH7KO1fFxA/TG1080hjaYou9M8YkBZ3oEO3dgsjJ1eu+w\nBcSO72JzrrvbDTR2aPCLs24GibFfXTEq+WKlroymm2TlrZEZcITB8Kc5meB4Xf1llpY3nYNBwBOz\nDbSL/CCafTWihIWxE1pD3MAde9NN0TtyUYwkbVdnQVggSUGK12YHt5xYrxKATu7Iki7sltUTpxX7\n+vqlGcSZ3ghY18z9JJ7oB0bPSSW9EZ60T0KdYeE9jtbiS+Z7TK5rnFrS13giDaoQiIvGrqdzuVZH\ncdt9NroU3WqXYdZDW02M6SZHta1jjQeB43jlZAja416Kax4d7TfDhI5ku3J5AUL2AA9NlKYzP4+7\n/RKyfkK2zHeMKF+Q/Un7CkMZqdsauIyrZdTAlFpQMXojUtFe0DCnEZSbGJZjFZFMqk0Q/b7s1FxT\nh+ZwuatGXjujDiAe7l+vBML+02Zsb/8AIvmJxLCkglkx5Wlk0Mr4pWHmySJxY9hrqHNI9y+qwXAf\nzxOzow+0WTI0AR58UOewAVTpgYpyfMnJgndf5a9t6J5b5p0P8V+z/wB+Rl5kOnMbN+YpwwR4/EuI\nnnLPDhsPkIGGeUX6nIg/NC6Mmz/Vab+bZj/RuA4bSAHTmfJfXUyzvDCfXumRK9ZGcvNcdud2dY/g\n9fTp/Q9Hw/B/gx38N/UmsniPqorK4j6qKyMxMMjKWXGts2qsVIXkn0ve8EAPrU0CreNtZPnpoe5M\n8rN9U0nyEymlTcK99x+ulIzyslReTJaUlem0idrgkNRQ0nFpq/HtSBasmRplT0Wp6I6LBtS/DcOq\n2SuPCFJ4sYVF17K52dB9hQbAirabF8jz2P8AHkp7EnHLk78E7GvPyI9QonHcnRlBFEX/ABzHkVlT\n6vqZ1sWx1JO9jTTQ4NDi0lxaNIsgGmkgjYbJjHPqlEYb4Wt72R52tzj4BQ2Isk7+Q8knKB9kAE1q\nu7kA+y93M+0ppjC3lpjAc6nB+o91pZ4GtDWnd4bXQX6KyEVpi8oNFliFjn7dr2TNmFTX6I3ghx0R\n95GI3B2xAcWktj+0WHbms+HSU2i7Vu4A/k6iACb3Pr7E6fOAFSpOL0iEq+Yb4TpmtaHN1HxB4JjB\nto8GgsAFbAbjqE+wskmtcZj1ODW7h9k8r0bAb/ceSi/5RYeT2mxY3HLz9ieNlDmFuxJLNNixr1tL\nCR1GrSfciXV9UQlU4x2mWTHgtP4cNJcMcDX8fqU7DHsqYx2ZN9zi9DGPF9E5ZAAnBYsHGlZy6FHY\n5GJam+VK1o1OIaLAJJoeIgDf2kD3rKWZNJ5bBF1YIvbr1o7fFRbROEGxtnuvl/H8bqq5MLQ6TZtm\nTWBTbFsYXV1+tbr/AC1YJzQq75myALJNknSKVSyMtrnvjc3S9srgJvCTrAJY4hviaO7bVO6A9N1K\nuLe9GnR7utiWRFdpLHitrT+SD91rOANdVPcXaQSNe49oaed/6LOJpPhZ4WN8JefETQ5Ms+6z5FT1\nroanidBL6OWkaSAHHcEWAac620duXJOI4gP9T1J8ysIXbhpJdKAbY4gVXN+zfq7jcfhrMynloff+\nWvztWn3LktnFIHDxD/C/9bEx4oNnOBLXBpOptXsORBFO96dwSWXA7PGklpokMN6OW3R3vtMuLC6b\nvTnU6rGwa51WOW4A95XYL3iUOpE5j6FeQAs/Dek1inSnEuqjBLV30+PuHmtCuG0aMYrRlLIA3XYa\nI9nnkx0IsB2+23P/ACuTedrXCwbFX7b5VfNDsQu0SEjVGxzdLbaHMc2nNcboivPqnmDGHMYAx1ta\nANQLQKBZ9YjfkeSZbUVtFcJuL0xniREEaqY09bujzG52Bq/grRwSEHS7fSG0zcjbq4tujtXPyTPH\nxg3xOO4HKthfkALPL9asGHHSSyLtroQtlsfwhZZMYe1wppcWOaNQsWQQL95WAcvdaz1tCUo7JHEn\nsA+YB+O/xT1uTVAfWPIegq3H8ncfcoLEfRLfI23/AAu3r87UPgnWJILceuqifMUCB6DeqHquOItO\nvZORP0tqydySTzJJsnbbmTyVek/oHSgv/wCzkGaMOJPc1/XMB59zbmODemp4G1ASPf8AqoXiBill\npzA5+Ppexzq8JkDuVH8kbHyClW97T7eZVGnT6EZObqXeUvaA76pAoXTSdmtuxsmeNCC4hwBl0OZG\n9wbegkGRjL+qdx8G86XkOewGaNvi7qZ7XaBsyo2yBprkAx8TbHmEsyEuLXOdEWOLCKBDi4mg5hLq\n+o7n+SE7px7/AJDq04k1wPH7uKOP8Boa0GiQ0fVbYFGm0L9FJTkhh0gFxGkAkhtuIaLI3rfomnDH\n6mNd5gX8N/vS3FCBE91tGgd40v0hjXxnWxzi7YDU0c0l1lPr8SifRdCRwTbQSKNbjycNiPiCpfEY\nqN2W4+XSDFkaxliQwvDt3hk3dhjmhta9zvfRX7CCLqZVy0xCyzceg8gjToM2/j4LyJqXOwNCzRpu\n2/pvsuwiZk5bZgG9fgvdCyYKAB5gAXtzrnsK+CC9T0kQ2etC9tJmRJSzI5tHOVsVfIuXfn78ID8f\nhnERzinmw5D5ieMTxD3HHn/OK6QyMlaj+dPh/Sez+aAAXwGDJZ6d1Oxrz7e5klWjwTJ8LOrfxevr\n0JX4zlVL8Br2J/oeH4MHWPAxWH/EIGatum9p7NlqKgk0sYz8FjW7cvC0Db02SUkyosj4ljm/Nt/U\n9vTQoRS+A/kyk2kmTKSSxXT4fqWBkU41DChocvkTd7lgXrAuVsY6JpA8pFxWbikXK1ImjwlZMekH\nuSJkVnLslolYpgnkWUFXDkI+mV1UXj7OOvZbGZo80oM31VQGf6rNvEPVVPDIugthy15JKXCg7Q4E\nFrtzVdCAQaqx71WWZ/qneNneqg8Zx7Fc6emiZh4zI1pZ3XjYdo9VuMQ8ifA40K2P4NpxLnd4wyEH\nTVsa6xsCdT/UkXR/w8rUV9OAFk0ALJJ2AG5PsSeNkHQzp4G7e5RdS7paFlj9dNkjiloDarUBRc0g\n3tVF1bigPgE/xg4DvGySGjrewuGl7QADGOjBTefqVXAac0jbxUQCQD4XdBt5fBTGDI51t0gUbLnG\n2jTTmnQN3ez2qNkGupG2qPLo2XwHL1AHceh2IPUEdCrbiu2C1hw7Ka0Oe53dksa4DUWAuc0m7Dqc\n/Vt/kCuHCeKblhdqDa0P2t45OBDRVg0LHms/l5Xs85mUtvoWV6Z5BWDc9vmkpsgFclJNCMKpJ9Rt\nPImUsqWndaZPVJo1wEp39FX+J4TI3vy42NbM/Q2Z9E6meGMPeAdy1tG/Jrh1U88JF7VOubi+g2ki\nvvcXPY3xB4c9veN0eKItcS9u58OtkbfbXRKxYpBDC8uZodVamOHibWpzHU47nfbkn0uGbBYQADyN\n02/raaPI7eH0Xhx33esDajTPeCCXbHnz81c5ryLE35kdwyLYcvCy3Hq90rrLief2OZ806kAG52Hn\n7rSv0JrR4BTtqNk8jYB3+rzFepSBYS+pGNLdALT9ZjXAm93AEurSbA+yVxtSeyUZ8qGzGlrtTrGt\npIaG2eYoHTvYBA28ym+dA5wJqqBLG2bLgbaX7bch4fUqVeadfPWA1tVu5upxAs19Wz/kKScx7gCA\nynAOskgtsXWn7XtsLvM+5OE0uhV8uLULHsI6gjmCPNQuTB4mto7nVfTw7gX53Rr8kq35WDICXAsc\nSN2kFgscjdnoK9/oonLxi4CmltuFOdoIa4cjQdv4hXvTlVuh+F3TTI+GO9jyOx9hTzCxwwBpDtAu\ntJNCze4b4id/1rN0Tm/YJPoRR6CievIUU6jjIouq/stH4XSz15XyROeyU5JjnDx2gnSKAptAVvzJ\n9eY+CkGbJpAKH6/adz96V1JOb2yjQuXrEvSBesC9cUQ5RxrqiN9NiuZ0noPeG/Be4GQ+3NdX1nFt\neVMJB8zbufomGA6mny7yU+8yOJ+8lOGkXq6+0106XV7Df0U2tbRW699SU75NJZAHnbd41X56Kb8a\nLVgJEllbtO+k0adQtu3PcKuKDkSIrGgDMud17zlr9JBAAEUcYc131XbxkHqNUfmnuHglr9nP7sAa\nfF9RpLi+NnUCwzc7jkPRtOGyBr3UQHNLJGkfVcAXttv5ID9uYAUlDMG+Cy52ssFAuIJYZG63AeHw\nD6zvTqU1ZKWvy19CtJLoSMBAAaNgBQ9AkeJMEunHJphLZJd6c5kbw5rAOZBe1t9KBHVIx5Apv4Tg\nTo5m20Ht222cavlyTOGOYvY7TGJXSSN78OcQ2NhvudJbbxXS+bHnZU1we9ld2tHvEOEh2S10UgZJ\nDGJBqFsY+MW0vc93Lu9XI34nbjmtocNcHNa4cnNa4exwvp7VVeFcJjjgc1xc/wALpJpSSZJH93pc\n91ne2DTp5VsrZgCgG0Glv2AQdLLIYaHIFrf1rt9viJL4GNcuVv5kjG4bgEagBY8rur+CWuuf8BJM\nPxKHOUdpCGtg96R767roaO4O9A9D6okem8j1XKRbCBlLICCDRFURz59CPYmOZL9qgSPM1+ob7F3x\nRI4CztZ3PqareuewA9wTHJlVfMOVU7Y3kzd6JBsammx4gTv4efOvzgqr8pA7/hvEIOsvD8pg6+I4\n79O3+KlLZr633Jv1PPatvs8tlCcWfqZIzbxxvab5U5pG/pur6JclkZryaf0NOGMpQa+RWDdD2JJ4\nKk8XH1sY8faY11jl4mg7fFBwjv8A7J7xEmbasWiHc1Y6f+iln4Z8lj9E9FNWonzojNKO7UkMX0WQ\nxfRHioOdEX3SxdCphuIfJZ/Qj5LnjJB4iK5LAmk0RVsfw/0TWfhvorYZKJRtRUZmFNZAVap+GHyT\nKXhh8k3XkRLo2orptehxUw/hp8kk7h58kwrolimiLlmeB4RZsbE1t196dwZBSj8MpP6OQuuUWjnQ\ndifUQ0nnvz50RQ/19yfY+QQfEQW7DVypx6O3ry3/ACgobuLe3pQNGvwtnURydX+qmcbYAADcgNHT\nf/SrPuKWtSSF5Lux7jQNe4uvV9UtI0nTXVprnYU7w2PT52dyTzJ9f9lGcOg02SdRc7UTQb0AoAdN\nuqlYjSzL5b6IWaJLDLGfZF1VnxHSfsgu3Da6JPinFpY5IpGGPumBzXM0PfNI+QhoYxzNo2cjZ2sC\n+Sjp8qlE5fFa6quqpt77lEsRTLpB2oGvun6o5CLaHUWyC6PdvBp25G2x3Gym8bid9Vp/+VWucCQ0\nkAtBIBoOrUBfnQ+CtHA8sbFlA9RyaR7uR9Vy/E5VtELcHS6mycebUlZI1GcAl1gH2gjnuDR39oKn\n+7We1oxrfclojSxYmNSToVg6BcOK0jHRJJ0aknxJvKxBdGzYyc1MZse3s1Hwtje52w0ucXsOrxfV\nA0//AMiknBN8uIPaWnqDXvFfCjXvKshLTLO6GUEUfjLA12px7tzSHU6RhLgHE+HfUaHQqREW1KOw\np3nS+QUDpLaa1rWueNPiPeFx5kf5lKQzNJLQQSOYBFj2jmFK3eziekM86Gmud5A1/i5NH51D3qMk\nxgWsIa7RYcXHSbG5BOl1nxUb9qseZEHMcKB2sWNQtviHh+1uOSxMLQ0Bv1Q0Addq25LkZaR2Nz2V\nXPiDW6ugLCKrxeNtBt7FxOwHqFgyCtyPERv1r8keikcqMiZrAPAWSSHnQeCxnhNVye7b1tYSMVm9\nJDtc+YaUsHFKyiv489v9UgQd7N7mtqodBz39vqhFyZg5yRdIs5U3kKsiixIzidV8uZO23M/rSzHp\no0paNdkjuh2wpZoSMSdxNVLKpEeIA2RzXBro5WjYtsE6twSdqDnNNf8AvHeSQ4NiOx55onTve2YR\nux2SOD3M0NeH1TKa3SIx4uZaTzO82cdrq1C6Nj0NFtivyXOH+YptnRNc6OCaLvWu1PDqa9vhaRRB\nOrvBr6DzPsvhbtOPxXX8hKxJPZjgYjXukcRI13ePafE6PUNVteKOoCtIv8jyUiYhs0A/0Le96fW8\nQjBLtzZEl15HfdIiOAbu0sDWsGsu7qmbtDS8uBFeR9FIY0DS1zmObI5+kAmQE6oxqjaHN5nVR381\nBtt76lNk1rR7w2YiQQzuyAytZfp1xukiMLnxudGzVGdUgOkGqaeSefSsiF+ROyMyCXLx2MB1ASY3\ncsPeQu0+Kbu9exuy0C72WXZeGZspf4for4Iw0B39I2Ul8kmttVsXEWPwgpI8MhY502oskDQ50kkr\n3aI2B1Gnv0tj875hptXKcIvTXkYlqbexQ9pYQQ29XjYyQwnvWwmVpfH3tDXGTy0uF2QpBuW1wsG6\nqxR1NJ28TK1N3vmq1wyHTLN3MT4pmRRSd1OG9zcrZI2QxzwfV0shDdtQAkFDc3Ixzxz6ZBRHdk21\n3iaXGnN1xnZwLXAgHoVVdCK7HK4t9x4/NZYaTTy0uEZ/rC1vMiP6x5dFi6SwCNwRYPoVGzZUsZMe\nl0xNmN3h1Bm39YAbdTtrA5aeZtMcWAwmXI0NijeWudAwABoDrkyCQB4vE55Fb15lVeGmv2+ZfFaJ\nadyjctyemQOAc0hzTfiBsbGq/X8E0yWqjWmPU6ILiA1At8//AFtQ2USQfPe1YsiFRfEotLJHn7Eb\n3b8qa0u39NldW/I1K5pIT+T/AB+/4bw/IreXh+I93+J2Owu3rfxWph3CfRQ/zUsn6X2dwXEguxzk\nYslcwYch7o22f/cPi+IW0Dwokkg7VWktFAjfUHDc7ED3dE3xCiVeTZD4Sf7mHRxT3I7fkigS8L9E\ng/hnp/H8fqWxJeFeibS8K9EjuSHIcSTKCeHeiBw/0V0l4cBd0ABZJ5AeaaZWIWiw2xV6uYAsXsNz\n4b5Lqk2XevoqruHHYjmOm1EVyPlvW/onTOH+inseFrvqkHZpOnetXK65cjsU7Zhei5KT7M48wrje\nGei8fwj0VviwgnDeHjyXE2UPiGjX8vBvRNJOCei2WeGDyST+FDyUlOSJx4oawk4J6JtLwX0W0ZOE\njyTSfhA8lNXyQxDiaZqvI4P6KPyOGV0W0cvhPoobM4X6K+GY0PVZil5mupcDy59Pb0+9LQQWARsb\ntpI5EdD9495VnyeHUmJxNBN/VO9gbNPXV6db9qaWTzIZdqY3xnnkW+K+QvTXnrI5J02S2313seoN\nH7wvRD4m/wCB9fFiMjH6jwu8x12rxDk4e1VNple+pHZ8irPE3ndWfIbqFj3+hq69u6g+IYtp7GaT\n6jdTRWWSu1e9Xbs7OQBzPKh5k7AfEqtxYXi5K2cCxQHs9Gu9nNm9cr/3KYzJxcSeRJcpsvsmaAv2\nn2k2fdZVvjCqXZ1tUrRBIvLyfU8hmr3+g60LF0ayY5ZErpnbaY0kjTOeNSciavF/D2c/Q7hRaL65\nsipY01kClpI1G8Q8ILjyAJPuFoQ9XPZFNqnNP4br6c3F4quWzh8F61zWFrgNm6gSAXOAcHE78yNX\n602fbQAedeI+bvtE++00knBLWkmiTdOc29jtbTfnt6K5LqOeFuJYIc5rw0Ndu4jbdrwOvhPiaduq\n8yZ+7LWlw7oj7X1m7gNGq/EN+u+x3UdJIxzQHC9wG0AXX5NtevyyS2S28w0M3D2up5DTqF2dWmq/\nBXYxQrKtxZ7lTNL43N8V64w5v1AXN13q5H+prbzSUhvdpB3IPtFtIvodQ+4pzmG3RjmdZd7Ghjml\n3xc0f5kyzjRcyMHvn7aw0lsZP9o9xGiwDqo7mghLehiEuUHNSL41ngQta0saCGNe5oJ+0RWt3qe8\n17+dpZ7Vx9HoYhLZGysTWRik5Y01kYpxkXxkMgz+P9EvEF6Y1mwKbeybYvCnkaZRlOI3qplMh7EU\nuADsQCPUAj4FMmPSrZVWUThsejFjIojw/ggnRYNg6L03YBSEvB3GnMyspr2f1fjjoCgCyzFu00Nz\nvsN14ydLxZKlGyUewrZjqQvFgPLgO8yG7AySGZwZz+o2KEhryQHW94vdvXk9zTiwxtEx8HQO7yTV\n3REu0bBvRYHUAoTJ4w4ytxccsM9h073jUzHgG5c5rXAvkJLWhgPUk7BSOPrkNzsYWx33e4cHOJe0\nymMimHu9Nbn+skCtbl0cn+XmZ8qVvoSTuKwyBgbI13fMcWNDiHuaB4yGjxNIuj5H1UPxDFaNGOwv\nEUx0yM1ybMja5xIk16mgktaRv9YeqR4qQMmKZ3hDIpWh2lha50mm9cn1o3AMAA5HvJElkT6i57C0\nuaxmhzt2WD3h3abojR9y4vdacX/9Jwo2upJ5bXs3gYw6W+CO9FUP6toJ092Rp8NiiwHdK8FneWhs\noc2XQ1zmOb9UuFuAkaS17dRI9K5nmkcPJ1Bp5agDXOrF1fvUnE7ZVOzppr8zs6uVkHPwowEHGc6z\nI6R0DnanSs1tL2NL3AFovYvsjWa8lKTN3Da2de97WK28y7TqP+Up6E2zJdL4GeKpXltjTpvbwODj\nZ21O2/uyu8zs0mV8ygInFvooD5R29xwviORW8XDst7enibjyFu9beKlfYcRaw+djxSPE7PZrNbGz\n5XcY0TC4B7xJkRul0tvUf6BkqZ4bju3JrjrvJfuVZGbywf4FN/8AZ2cTa+HinDzQdFPBljay+OeN\n0D632p+PDv8A+8XWGO1pdKCBTHtaOXWNjze/5XIr55fMq7SjB7S4rHENi4hFNw95JoB0zRNAB5uO\nVBAyvy19D5XL61PhlFs3OUVtnk1a4rR6cVhHr6cr/wBAkJ+GitiPehkydRSJLJ9Hcaa6LROGTIhp\nuHnqK/j0TF2CASaO/Pc1ttsCab7lbXNBHJRWbDXL77PReL4lwf1fquw/VktlakwAKoaa6CwNj6fx\nuUMiA25bnbzN3tYslSU4TKR3T+B/1XnpLRowk2KxMCdRtCj2zpePJRCSRGcJEi2MIMITePJSrchN\nKUBZxkD4Am8uOE575YueoyUWdUpIicrEChs3BCtMrVH5UKUnDQ/Re0UrMwVGTYSueVjqMycVRUmj\naqyehTJcTQ8EXpO1dBrPi26eIR/FGRFQ5eQ8uZA/1U1xLGona/AduX2m73Vg7j4JjJw9o/xCvF+U\nN9VctV/FMqaaTY3C3fYhJMcl5sAeAEUSQfEfTmNvzgmeThX0U9kQWdJFOo6Hj0q9rsb1t7EgwBw6\nWCWmgRu01yPx94V0bWuqGa7ddCuR8P3U1wnH8d/ggN9LPiP3aViMcyUWudGy+bWjW+j07xpDWc+l\n8qIUxgY4aOp3uzzPqf46KV1u11Z2y1yJ3hLqU3DOoDENJ9HKs1mTdDmZOR5CVE6h2TJUTLgnKkkj\nKvNVpi2VLRvQQdehfSo3isQLXNPIgg+w7f6qTYUz4kNvchHan7xSMyBlfVaCNiAKAI2NAexQ8zLc\nW6ngANIpx527ezv0CnuIt8Tx/hNe0V/9v3KuvkAc49dZbsCSabfTeqv709Vtm7Uk49ST4a/SdJLi\ndywucXHTsSLcbu6/8qkBOdVAXqcyMEjwtcGvk1HqeYHtIULit1kOcPCPqDkb5a9t/YFI8PkD2hrf\nEGybu5gFj9VEk2XVXxXJLrsrtiS8MQF1zO7nH6zj5uPVJREAOPQOcR6gc/8AzAj3BLNKbsOzWUdq\nDjRAAZuKJ2O4by8yl11KTOKKgB7z/iJt33krDUDyst0tcHfZOq9h1vb7wldSxe5c2WJMbvamsrE7\neUhKpIuixo4LAlKSlNZXq1LZchXvFk2RMHSr1sqlyEuUk2ypQTKPjelwVBxIOKHEuWGguJoAWT6L\nGDOLvqtd/ie0sF7j6rvEfh1CjnTMfKY7BfC1ry38EyWGurldA/Ep1G5ScEl1RDl2THDy1vIC3Vqd\nQBcR1dXM8/ipFuQoTHcnJk2VElti8qkK584ILSAQQQQeRBFEV1CYxTgbDl7bPxO5SOVImzX7qcY9\nC6FS0SfBMs39HcD3kTI7dsGSMNtD2Vy3Ybb09easuPLt7OSpVBkjMirIb3LgLJc2R40AC62kI5/h\nlWfElXLl5oStr8iYfPpa59F2lpdpbWpwaLIbZrV/0TvFlbLXduDi10Um+oDQ4/W/KGjvK9W+YTHF\nepjhGM1gpjQ0Ek0Lq3GzQ6CyTQ8yoQa/MyclaRMYkNrln5/07ceHh2C0kuysrJzpBZpjYWNhiGm6\n3flZRv8AJA6LrThsXJfP3563aUZvaXKjaQ6Lh0UPD4yDduhaZpwR0cMnInZX5C9v6MYe7PEfkefy\n7PI05w3NkgliyIXGOaCVk0Mja1MlieHseL6hzQfcvqV8n/aqLivDsPikNd3l47JS0G+7l3ZPCa21\nNmZIz/IvlYurvmGfKLofP2byH+GYvzOGajyma3/teM23dY2NmDQP7Kc8yvf1vqZsux1+nmKmAen2\nI5W29iEe48JoWonOnT/PdTVXcyVfMvSHMfiOBr4texDLlUTk5KyzplBZuQvHyltnoMbHJB2Z6r1u\nd6qszZaTGb6o5WaXqey4x5/ql2Z/qqWzNPmnEed6o00VTwS5x5n8fcnMeTap0GcpLGzF3mYpZh6L\nKJLWEoTDGyE8DrUubYk6+VjSZiY5UalXhM8ph/j/ANPJQaGKplY4tGNQBBpw07XydLGHDb0r702y\nGbqQ4w0ij1aHu/NAd8LAHvKZ5A3Un2RqUSIbizWgazqsbN0l4PiI2pm5bsD/AJVHySMiZq1W3w+I\neLUXENbWnpdDb0UrxWwA4Au0uBIFXW4NWauioXKiDnB2k6Wu10QQO8AIa4DkdiTf+FMVdV1Hod+g\nvit0gN62T5/WcXUPyRde4KSxyodkm6ksR6jYi6cdIlYSnUaaY6fRNS7EZ9BRiVavYo0qAoi7Z41O\nYQk2BO4GWgonI9akczknehN8lmyCmDWyn8bidYc2rJDXagaLd63G4Nn/AMygji0bIbrJNkepurqy\nOQ9wVt4vAS12n61bDYXW9Wdhyq1DTRuPJhA/KLWn4Nv70zXN6NmixEbGSHadNtDbcaPry6c9q57q\nV4fDpHKiSXEXe59Tz5c1hj4xsF1bcmiyAaqySNzzUhHGuTn5InOW+pkOSTc5KlqReFUiuOjEuWLn\nLErwrvcsSPHFN5Sl3BIytUkTQznKj53p/O1R87UxAZiN3OWcZWOlLwRFXNpIsbHEATprV7jQp4yB\nKyl1F5TI4R+NxoWWs3rfYvG56paONLtZ4j4XaiaAo6dLSaOs+HqT57paLHeTRDWj8JrtZI9jmUES\nZV4qMYWLKQpU4Q6jV/iJd9x2UVkTGN5g8dvkZ3bn+INjcGh2lzj4gCHc+Woc1yEefsVuxLuZypJj\nU9kiSUjCOQt5+oDYBNcyQNm+q6mMc6SBrLLW77ODzRrZvIGumrp6FTeIeSj8TGrmdRPM8rPoOjfR\nS2FCq5yFbZIlcAclZeGs5KI4Zj8lYODU9z2C9UbgHAgjmLDmnk5vMWOrXKWPU5y6I89m2pCfbftP\nFwjhmZxaau7w8Z8oaSB3kxpkEIv7Tp3xM/zhfLDiebJPLLkyuMk08sk00h+s+WV5e95rqXOJ966s\n+f58ooc/H7MY7/DAWZnFNJ2Mz2XiYriHb1G90xaRX9LjnmFyUvrHBsV0Y633Z5i6XNIE+4DxWbEy\nIczHeYsjGmZNDI3m2SNwe01yIscj6pihaxUfS75Je38PGuHQcSi0tc8aMqAO1HHy2Ad9CetWWuBP\nNsjD1V6wcpfOX5vHynv4FnXIXO4ZlaY86IDUW1fd5UbefeNLjsOYc8c6rvHhHGGyhskZEkEkccsO\nQxzXwzRyN1NdG5p3FEG/yhS0atWx+YtPcGX941sr0Vb4jERafcK4hyFp9n4okGpvOl4L0o4JKX8W\nC/E1cLJSKFntKgM9pV24jheir+dg+i+byi4vTPWYl8SnZVppan8zBPko2TDKsjJG1Xamho1xS8by\ns2YqcR4h8l1yRKUkELypHFlKbx4hTyDHKrbFbJRZK4cql8Z9qFxY1MYYUUZOQkOw1EsFhOYI7UjD\nhWE3Vjys6JGZK7lKDx3GqyboxytroTp7y69kZHvTPJxSpb5WR9GwZ8oukibjhsr5Imue9kbXASOD\nWm3DQ51+lrLh0bZYmyNJLdLfE5rmFw0Nc15DwCLY5rv8y5ZjThBNrzaHsfNWyq5Ebi5zAy9LWu1l\nwDSH6ug8XNh6KKysMtAHkK/gdFfOC8I/ozuHBz36CGNZUbXFrG+H61AfW62kOI8F57KttxNLHzo7\n6muTCbT7DaVM5PCCDyXkGBXRErNmk8iLRlhsUrBEscPE9FKwYypb2Zl1yEYYkoYN0+igShh3RoRd\n3UZQ4/v/AF+0p9i46XhhT/FgVtdXMxW2/oRz4E0yIlPTQphkRLtlTiQqu2VnLhUbNjqyZEKZSQKn\nsa1VxCtx0uyFSH0f0Sjcdc2WyvIp8SbSxKdfjJtLjLuzsLiEdEsO6Us7GXgxvRd5i9XEV3STkhU1\n9FWD8X0RzEleV2WBM5cdWaTD9E3fheisVmi+N6K63FT3Gw/RS8XD/RSeJw30RK0jZlJIicbD9E8Z\nieinYeH+iXGF6KttiE8xEA3D9Eq3E9FOtwvRZHE9FzqUvLK+/F9EwzcKwaoHbci9g4O0nrp2r3q0\ny4yZy4vohNplkMhMp8jn6mmo+7c8xF1uLmzatLRprxCwdvfdJ7Dgm7O5O3KgAOgF+/4KQ4dwdwdr\nkEWsDbuxZLiKfI+QtBc6y7YAUHHmpWLC9FbZJdok1k9NsisfEUzw/B9E6gwwAXOIa1oJc5xAa1oF\nkknYChd+im+G4hNFrTR3BIokDqGEg16urmFPHxrL5KMUIZWckjDBxQ0E1ZDdWkburlYbzIVa+VDt\nPi9m8PN447T3sojayIu2zeIBj2Y+PDbthoDS54H1cZx3PK45sWLDH9NyhDF9GidM+aZzaxmNYXyv\nfNyoNBs8tjWy+enzm/lbf2h4hqiL28Kw9UXDoXDTqBI7zLkb0leWjY8mtYOd39J4PwCONHns7s8x\nkZLsZrTtBxefMyJ83JkMuTkzSTzyO5vllcXuNcgLPIeiYIQvSCgIQhAAuhPmtfK/9Eezgee+sKV5\nGFkvNDFmeb7iQk7YzncnfZc7yJLefF4rK7HCW0RlFSWmfULFnLSrLwriHQrjz5svy4B3dcE4rLTv\nDHgZ8jtj0Zi5Lz15Bsh9AehXU8JLStJ8l0BVbrZbp8dsgsbFQmdwyuiXwM4jZS8U7XiivD8Y9F4W\ntzr6M1cbOcSjZfDPRRU/DPRbIyOHtdyUVlcNrovAZfCb8d6kjdo4l8yjt4b6fcnMXDfRWQ4Polos\nL0SCpkxmXECus4b6fclRgeitDMA+Sxkwq6K54ViW9C7ztldjxqT7HjpO5MelixiqVbTOSu5kP8CK\n1MtAaFD4D6KmH7he09GoVuXXuZGS2Q3bDCGTiZMHdNmkdA8xQvOmOWVjdcUUhqu6MjWNIO1E2qv8\nj2bHxLhkGVpZHqjbDPjs1aYJ4I2wT4p1tDw9rmaDYG4KuMtgrVfaDgmdwnOm4twwSZHD817peKcM\njY2R8GQ5sbZM/EhbH3kttia4wtJNh1A6tvWZXBMe7q0JwyJRNpcMx2BpeXB7S492bBuPkCSBR3BP\nsI3WUuNDJsKB+5a+7KfKDjZUDR38fftAa+BwdDksOm9EuJIO9ieNLxRH2LtN8UPZluyxlZRZIL+i\nOkBxLLGtDmxllt+qXVfN5Ktr9GMSdfLykJZ04y3sumfwDqACPMKLfweuimeE8ZJq1Nt0PG4XlOJe\nhjre6n+TNKji0mupT4uHV0TuPDU7mxsjbrLXltgHu2OlLQftFjBqLfUJY4YWC+AXQ7oYlm8xAtx1\n6ca1KyQUV42NKvBafKznjsZwYaf42NpTmGFLaFtYnCdLm0Lzu2RmWxReQ1T2TDfwUZkY6y+IYsoy\n7FtM0Qk7E1dEps4trEcPJ6FZHgTfZGhHISRDCFKNg+7p03/1/wB1MfyY7yKVZwt/krI4Vz7Rf0OP\nKj8SEMCQlxQd/wDUjzG/nzVnbwl38UvHcIcrvZeTrfI/oRWZFeZVDio+iKzHhTvJZx8Id5V9yrjw\n69vSg/oWevRS7lN4O/v4mTd1NDrv+iyGGKZulxaQ5h5bg79diE6diK1t4Qb3LQKFb73vdiuXL717\n/JHq1NPguU+qrZBcRivMp7sJYjh/p9yuP8jerVkzhA6uauR4HmN/9t/Ql7TivMq2Nw30UnjcP9FY\nIsBg5utOmRsHJaWP6MZMusloUt4lvsV8YPovfoforFoajuWpiXo1Yhf1wr30X0WD8ZWPuWrF2K0q\nqfo9al0R1ZRV5cVIHCVpdghYnh4SU+B3r/iXRzNeZWW4ScQYXop1mAP4+CX+isAIIDgQQQRYIOxB\nB5jmrsb0fuslprRyeb0IiXgDJo9EtiMujedJpxMbxI2nVbTqa06hvttSkJHNjFNHoSSXONcrc46j\nzSk0xquvoK+AvZce/Ov+cF/XcC4RNZ8UXEeIxO/yvxMV7T7Q6UeoHUr6BwvhFWHDb7mVdfKxlf8A\nnf8Ay4HOkk4Bw+S8CJ4GflMdYzJmEHuI3A0cRrxu77Tm/ggF3M6ELTlLbKkgQhCidBCEIAEIQgAX\nTPzb/nCfR+64RxmQuxfqYvE3kufj2QGQ5ZO78bmBLzbsDbd28zIU4TcXtHHFPufVeFgIa9pDmOAc\n17SHNcxwtrmuGxaQQbCfY0hC4I+bv8vuTwNzcHL7zM4K539TeqfCJPikxC813fUwHY7kUSb7n7J8\nfxOI40efgzx5OLKLZLGTseZjkYRqilF0WOAI6ptWqaKeTlLJjzJ1seajIn0ncUwSGVixtWmi6E2j\nybEHREEAThsoXuoLzFnA+WfNFDau2jIABeFoOyxfKPNNJs4N6rXq4epw5XEplbrzDLxBzCjZISCn\n0fFmcjSV/o38jS89xL0Zt3zVoYqy0RsMZtTOIDW68ja1u9gptmcRa3qruDcBtrlzy6Eb8iLFshoT\nUpuOIg9U4ikBXtlW4LqIcyZGZ2AxzhIWMMg+rIWt1jYjZ9WNiR71DZnDN7AVy7kFR/HZY8eF88nJ\njSQANb3uALgyNgNyPoHwjfYq2vJUCEquYhuHYpBVkwjQ32A5k7AKtcFOVJJGDjudGXl00uQ5kRxy\n0OaI2Y8Td3fWF26jz9LmyAVRAIqiDVV7FTkZUWiddTRkCvda9DABQAAGwA2AA6AeSa5UlJCtRtL2\n2hYEEkHltv6nmB6cviV7paFCvzwDzSUnEh5rr4NVKXM4kPWdE5JkALGPIBVZm4j6rPF4gPNPxwVG\nOkirx+pamvBWMkIKioMxORlrNyeEwt6NF8L9DpsLW81hLlNb5KI4hxOlWOJ8bPmr8LgVUO0Su3LL\nrJxVo6pnPx5o6rW+b2grqoHO7SHzW3XwqHwEpZrNq5Xado6pBnaxvmtJ5vaQ39b76TU9oXeadXDI\na7C7zXs307tg0DmozO7ctGwd960dkdo3fhfeoybjrj1KlDhdS66IyzZM3i/tuPwvvXje235X3rRP\n8snzSkfFz5/er/Ua/gV+tTN7N7aflfelou1t9fvWjYeLmwC6ieQJolTGDxEmjex6qLwofA6sqRua\nHtJfVPIu0I81qTG4kfO/enA4ufNUSw4stWSzbcXaAeaew8cb5rTkfGSNyeXM+Xv6LN3aA1YdsRt7\nFVLh8WWLLZuKXtDGOoTGXtU3kCtPS8cc40CnOBkPceZQuG1x7g8yT7G3cbtAHdVK43EgVrrg0TjX\nNW7huOa3Sd+NWhiq2TLE3JBSWTkta1z3Oa1jWlz3OIa1rWi3Oc47NbQuyoPtT2hxOG40mfnTx42L\nCLfLIeZrZkbGjXLKa2YwEnouFfnGfOByuOudg4ne4XBWu/qdWmfNLT4ZMwsNd31EA2GxNkAjNcIw\n7DSbZdfnO/OSOT3vB+CSOZibx5fFGEskyaJD4cQjdmLyBl5u3Apu7uWUIUG9ktAhCFwAQhCABCEI\nAEIQgAQhCABXH5K/lJ4jwLI+lYE2kOoT4suqTEyWjkJoQ4WR0e0hws0RZVPQu7A+jvyJfLdwztAx\nsUbvonFA25eGzOGskC3OxZaAyotidvEOoHM7TYvklBM5jmyMc5j2Oa9j2Etex7Tqa5rhu1wIBseS\n6X+Rb51uViaMPjbH5+KKa3PjoZ8Qsi5gToy21W+ztjZcVbGz4kHE7baUPVd7D9tOH8Wh+k8Py4cu\nKhr7t1SxE7hs0DwJYXejwFPkqejg1yXFQnEJ3bqenIAJcQB1JNAe0lVrtNxjFxw0ySDxkNaGeOyS\nBvp2aN+vkUzVJLuUzi32IXN4g5vmkcbtK5polP58YytD42sdE5mpkmvUHWBpruwQW7ne+igeIcBn\ncbaWt23G7m3fMAssfHoFpQlXJdRSSmuxZMftTYolNc3jd9VV28Iym8yw+uh3kR0f50fcUscSaiHB\nvSiNTem5og17N1JVVrqjjnPzJaHjJBq//VWLhPFrrdazxuyo7wvIIsjTpcWuiLeRaWt3PPn5q3cF\n4O4EHvJjXK3mveK3681CyMWiUJPZsXEzPCSAXkCw1unU70GsgX7Sofikjcp7HxvI7h12x4fEInFr\nXyyxiMlszTuBsQWNPK0rh4j9Nd69o6uAYHVpI2dp287PklMbAhc6zkue4gttphY42HA6pImBxJDj\n186WDk1rfQ0a5dCQ4Y1mPphMcUbZHeCWFumOWQgDxg7tlNDmTe26lbURxKJpjOP3T5AQPDboxd6g\n5sxI0uDvFbNxQS7HuDWhx1ODWhzqrU4AW6um+/vSSw1J72W+JoeSyKE4nk80vPOVD8QcStTGx1AX\nts2QPE80glRjuKHknnE2i6J8XPSPE+rAvSN63G6jXYLz0LB6gF366HTna2YKOjPlvYu3PurcBfKz\nV/H3fFOsTiEYIHeNtxpovqBfu2I5+YTSDh9EEgkjkT6iia5XRPxKk8WGhVbcq6V5V5Ino7ElsXMA\n/CPq1rnD4tFJ4c0eT/8Aw5P/AMaTLGaU9bGUlNIYiyM4jkA9H/8Ahyf/AIqrcVBN0159wb9zyCrx\nNikqLz+Gk9FfTYkV2Q2as4prG2nfzBGke3e/Pl5KtcQDt/ER/hA/+61tHivBSb2VY4hwA+S06rEx\nCyDNdSM08rPmXEuJoVuXbpkWuGwLq6C7r3uFq9zdnHHok29lnn7KY54lXLIoNvJI3I5D8InqdhQH\nt9VkMZ59PvP+wWxYeyDz9lSGN2Kcfs/co+JFeZ3w5PyNXs4c419bb1I/+XmPan2Pwdx6E+2yttYP\nYUn7Kn8DsMBzb9yqllVxLI482acweAnamddvD5qWxuCOG+j7tj6kciVuSLso1vRE3Z4DkFQ86D7F\nqxZI1FJw5w3og+Ytt8hvpO/IJBuBW1Hc3zdd3zsm9Xqtqz9nSeib/wDCpPRSWTA54EjWhg/JB9SA\nSfaTzWH8nPds0Ob/AISWj20NltaDskOoUhD2ajZRdQ6DbcmiaAG5NAmh5FQlmQR1Y0mas4VwGWgP\nrHzddnfqb8lb+BcODb7xroy00S5rtFXs4SadJb6q58O4VdlrY2sBpryRKTXO2xnS3f1Tbtl2i4bw\nmE5HEsyLHhI8LJS3VKWiy2HHib3uQ78kApK7P+AzXi67kjwnhbWbjezq8xyA29wVG+Wr5beGdnmG\nKRwy+KFtxcNhcA8Ei2vypQCMWLcHxW49Aea57+Wb51eVlB+HwRjsDFNsdnyAfT5W7C4Wg6MRtXuL\nduKLeS5pnmc9zpHuc973F73vJc973G3Oc47ucSSbPmsq29yHoVpFu+VX5SuJceyfpWfNqDLGPixa\no8TGaebYYS40fN7iXGhZNBU1CEsWAhCEACEIQAIQhAAhCEACEIQAIQhAAhCEACEIQBI9nuN5OFMz\nKxMibFyYz4JoJHRSDcEjUw7t23adiujvkx+d3mwaIOMYzc+IUDmYwZj5rRv4nw7Y+Qfqiho67lcw\nrxdUmjmj6c9g/lV4JxlrRh8QhM7t/okj/omaDVFv0eUh0o3+xqHJXODHjYK1eE8mksDR6BoFV1Xy\nVa4gggkEGwRsQRuCD5raXYT5wXaLhgayPPflQNFDHzx9NjroGySHv2NFcmOAU/EOcp9G5ICTTTGR\nX1nN1uv1awgV7FmcOIC3Fg8yaYL9jjYXDJ+eFx7rh8EPtxs0/wD+9Dfnh8eH/cuB/ouZ+/rjsl5M\n7yo7l+gQHkWH2Fp39x5pOTg8B8lxF/PH4/8AifBP0bN/f1i/54vHjzw+Cfo+b+/pK63NX/bkvzJK\nFfmjtn+QoehanEHCWt5ELho/O+47+J8G/R839/QPnf8AHfxTg/8A4Gb+/KpZXEuzUPqzvh0+R3nF\njAJOfhzXHUDodYNhsbgSDqvTI0gG+oXCbfnh8fH/AHXg/wD4Gb+/LIfPH4/+KcG/R839/XHLLl3S\n+pJKCO58rh7XeINYXi/q64rs8nFjvFy5FN54cg7U1t14mgEgeVOfRK4h/nk8f/FOC/o+b+/r3+eV\n2g/FOC/o+b+/q2h5Ef5tEZcrO0ZsBzrtpdYILn02gQAQwsfbBt0TPG4VIzULBaTbWl73BnoC9uoj\n3rjo/PK7QfinBf0fO/f1gfnjcf8AxPgn6Pnfv60o5El5FTrTOxXcFPRxb4tRDQdJ3sinO9vxXruF\n+i44PzxeP/inBf0fO/f15/PD49+KcF/R839/Vyy2iDpR2OOGeiWj4f6LjH+eFx78U4L+j5v7+vR8\n8Pj34nwX9Hzv39Dy2c8FHbEOGnkWIuHR88bj/wCKcF/R839/WX88jtB+KcF/R879/VMr2yxVpHcw\nw147h4K4bHzyu0H4pwX9Hzv39e/zy+0H4pwX9Hzv39UO63yJckTtmbggd0TSTsu0+S4w/nldoPxT\ngv6Pnfv6P55PaD8U4L+j537+uet5S7JfU46a2dmN7JM9EvH2WiHQLiz+eV2g/FOC/o+d+/r3+eX2\ng/FOC/o+b+/rvrmW/gHg1/A7bj7PxjoE4j4RGOgXDf8APL7QfinBf0fO/f0fzy+0H4pwX9Hzv39R\nd2Q+7JckF5HdrMNg6BZmJoXBx+eT2g/FOC/o+b+/rE/PH7QfivBv0fN/f1xKf/KR3p5I7vewJB8Q\nXCp+eJx/8V4N+j5v7+vP54XH/wAV4N+j5v7+r4y15kWjuZ0DViYguGv54PH/AMV4N+j5v7+j+eDx\n78U4N+j5v7+rPFI8p2w2Z2tzXMkYzbQWt16x1JdHeg3Y0+gN9BTflE+UvgPChfEMyD6RGPDiNJys\n2yCK+itJfHe+8lDnuuIu3XzgO0XEg5kme/FgcKOPgD6FHXVrpIz372+j3ELVziSSSbJNkncknqfV\nRdoKJ058pnzucyfXBwbGbgQmwMzJDMjNI28TId8fHdzFHX03C5y7Q8byc2Z+VlzzZWTJ9eaeR0sh\n3JDdTzs3fZo2HRRyFU5Nk9AhCFwAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABC\nEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQ\ngAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCA\nBCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAE\nIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQh\nCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEIAEIQgAQhCABCEI\nAEIQgAQhCAP/2Q==\n", - "text/html": [ - "\n", - " \n", - " " - ], - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from IPython.display import YouTubeVideo\n", - "YouTubeVideo('gGOzHVUQCw0')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "How would we go about understanding the _trends_ from the data on global temperature?\n", - "\n", - "The first step in analyzing unknown data is to generate some simple plots using **Matplotlib**. We are going to look at the temperature-anomaly history, contained in a file, and make our first plot to explore this data. \n", - "\n", - "We are going to smooth the data and then we'll fit a line to it to find a trend, plotting along the way to see how it all looks.\n", - "\n", - "Let's get started!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Step 1: Read a data file\n", - "\n", - "We took the data from the [NOAA](https://www.ncdc.noaa.gov/cag/) (National Oceanic and Atmospheric Administration) webpage. Feel free to play around with the webpage and analyze data on your own, but for now, let's make sure we're working with the same dataset.\n", - "\n", - "\n", - "We have a file named `land_global_temperature_anomaly-1880-2016.csv` in our `data` folder. This file contains the year on the first column, and averages of land temperature anomaly listed sequentially on the second column, from the year 1880 to 2016. We will load the file, then make an initial plot to see what it looks like.\n", - "\n", - "\n", - "##### Note:\n", - "\n", - "If you downloaded this notebook alone, rather than the full collection for this course, you may not have the data file on the location we assume below. In that case, you can download the data if you add a code cell, and execute the following code in it:\n", - "\n", - "```Python\n", - "from urllib.request import urlretrieve\n", - "URL = 'http://go.gwu.edu/engcomp1data5?accessType=DOWNLOAD'\n", - "urlretrieve(URL, 'land_global_temperature_anomaly-1880-2016.csv')\n", - "```\n", - "The data file will be downloaded to your working directory, and you will then need to remove the path information, i.e., the string `'../../data/'`, from the definition of the variable `fname` below.\n", - "\n", - "Let's start by importing NumPy." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import numpy" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To load our data from the file, we'll use the function [`numpy.loadtxt()`](https://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html), which lets us immediately save the data into NumPy arrays. (We encourage you to read the documentation for details on how the function works.) Here, we'll save the data into the arrays `year` and `temp_anomaly`. " - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "fname = '../data/land_global_temperature_anomaly-1880-2016.csv'\n", - "\n", - "year, temp_anomaly = numpy.loadtxt(fname, delimiter=',', skiprows=5, unpack=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercise\n", - "\n", - "Inspect the data by printing `year` and `temp_anomaly`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Step 2: Plot the data\n", - "\n", - "Let's first load the **Matplotlib** module called `pyplot`, for making 2D plots. Remember that to get the plots inside the notebook, we use a special \"magic\" command, `%matplotlib inline`:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "from matplotlib import pyplot\n", - "%matplotlib inline" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The `plot()` function of the `pyplot` module makes simple line plots. We avoid that stuff that appeared on top of the figure, that `Out[x]: [< ...>]` ugliness, by adding a semicolon at the end of the plotting command." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "pyplot.plot(year, temp_anomaly);" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "Now we have a line plot, but if you see this plot without any information you would not be able to figure out what kind of data it is! We need labels on the axes, a title and why not a better color, font and size of the ticks. \n", - "**Publication quality** plots should always be your standard for plotting. \n", - "How you present your data will allow others (and probably you in the future) to better understand your work. \n", - "\n", - "We can customize the style of our plots using parameters for the lines, text, font and other plot options. We set some style options that apply for all the plots in the current session with [`pyplot.rc()`](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.rc.html)\n", - "Here, we'll make the font of a specific type and size (serif and 16 points). You can also customize other parameters like line width, color, and so on (check out the documentation)." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "pyplot.rc('font', family='serif', size='18')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We'll redo the same plot, but now we'll add a few things to make it prettier and **publication quality**. We'll add a title, label the axes and, show a background grid. Study the commands below and look at the result!" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "#You can set the size of the figure by doing:\n", - "pyplot.figure(figsize=(10,5))\n", - "\n", - "#Plotting\n", - "pyplot.plot(year, temp_anomaly, color='#2929a3', linestyle='-', linewidth=1) \n", - "pyplot.title('Land global temperature anomalies. \\n')\n", - "pyplot.xlabel('Year')\n", - "pyplot.ylabel('Land temperature anomaly [°C]')\n", - "pyplot.grid();" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": true - }, - "source": [ - "Better, no? Feel free to play around with the parameters and see how the plot changes. There's nothing like trial and error to get the hang of it. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Step 3: Least-squares linear regression \n", - "\n", - "In order to have an idea of the general behavior of our data, we can find a smooth curve that (approximately) fits the points. We generally look for a curve that's simple (e.g., a polynomial), and does not reproduce the noise that's always present in experimental data. \n", - "\n", - "Let $f(x)$ be the function that we'll fit to the $n+1$ data points: $(x_i, y_i)$, $i = 0, 1, ... ,n$:\n", - "\n", - "$$ \n", - " f(x) = f(x; a_0, a_1, ... , a_m) \n", - "$$\n", - "\n", - "The notation above means that $f$ is a function of $x$, with $m+1$ variable parameters $a_0, a_1, ... , a_m$, where $m < n$. We need to choose the form of $f(x)$ a priori, by inspecting the experimental data and knowing something about the phenomenon we've measured. Thus, curve fitting consists of two steps: \n", - "\n", - "1. Choosing the form of $f(x)$.\n", - "2. Computing the parameters that will give us the \"best fit\" to the data. \n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### What is the \"best\" fit?\n", - "\n", - "When the noise in the data is limited to the $y$-coordinate, it's common to use a **least-squares fit**, which minimizes the function\n", - "\n", - "$$\n", - "\\begin{equation} \n", - " S(a_0, a_1, ... , a_m) = \\sum_{i=0}^{n} [y_i - f(x_i)]^2\n", - "\\end{equation} \n", - "$$\n", - "\n", - "with respect to each $a_j$. We find the values of the parameters for the best fit by solving the following equations:\n", - "\n", - "$$\n", - "\\begin{equation}\n", - " \\frac{\\partial{S}}{\\partial{a_k}} = 0, \\quad k = 0, 1, ... , m.\n", - "\\end{equation}\n", - "$$\n", - "\n", - "Here, the terms $r_i = y_i - f(x_i)$ are called residuals: they tell us the discrepancy between the data and the fitting function at $x_i$. \n", - "\n", - "Take a look at the function $S$: what we want to minimize is the sum of the squares of the residuals. The equations (2) are generally nonlinear in $a_j$ and might be difficult to solve. Therefore, the fitting function is commonly chosen as a linear combination of specified functions $f_j(x)$, \n", - "\n", - "$$\n", - "\\begin{equation*}\n", - " f(x) = a_0f_0(x) + a_1f_1(x) + ... + a_mf_m(x)\n", - "\\end{equation*}\n", - "$$\n", - "\n", - "which results in equations (2) being linear. In the case that the fitting function is polynomial, we have have $f_0(x) = 1, \\; f_1(x) = x, \\; f_2(x) = x^2$, and so on. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Linear regression \n", - "\n", - "When we talk about linear regression we mean \"fitting a straight line to the data.\" Thus,\n", - "\n", - "$$\n", - "\\begin{equation}\n", - " f(x) = a_0 + a_1x\n", - "\\end{equation}\n", - "$$\n", - "\n", - "In this case, the function that we'll minimize is:\n", - "\n", - "$$\n", - "\\begin{equation}\n", - " S(a_0, a_1) = \\sum_{i=0}^{n} [y_i - f(x_i)]^2 = \\sum_{i=0}^{n} (y_i - a_0 - a_1x_i)^2 \n", - "\\end{equation} \n", - "$$\n", - "\n", - "Equations (2) become:\n", - "\n", - "$$\n", - "\\begin{equation}\n", - " \\frac{\\partial{S}}{\\partial{a_0}} = \\sum_{i=0}^{n} -2(y_i - a_0 - a_1x_i) = 2 \\left[ a_0(n+1) + a_1\\sum_{i=0}^{n} x_i - \\sum_{i=0}^{n} y_i \\right] = 0\n", - "\\end{equation} \n", - "$$\n", - "\n", - "$$\n", - "\\begin{equation}\n", - " \\frac{\\partial{S}}{\\partial{a_1}} = \\sum_{i=0}^{n} -2(y_i - a_0 - a_1x_i)x_i = 2 \\left[ a_0\\sum_{i=0}^{n} x_i + a_1\\sum_{i=0}^{n} x_{i}^2 - \\sum_{i=0}^{n} x_iy_i \\right] = 0\n", - "\\end{equation} \n", - "$$\n", - "\n", - "Let's divide both equations by $2(n+1)$ and rearrange terms.\n", - "\n", - "Rearranging (6) and (7):\n", - "\n", - "$$\n", - "\\begin{align}\n", - " 2 \\left[ a_0(n+1) + a_1\\sum_{i=0}^{n} x_i - \\sum_{i=0}^{n} y_i \\right] &= 0 \\nonumber \\\\ \n", - " \\frac{a_0(n+1)}{n+1} + a_1 \\frac{\\sum_{i=0}^{n} x_i}{n+1} - \\frac{\\sum_{i=0}^{n} y_i}{n+1} &= 0 \\\\\n", - "\\end{align}\n", - "$$\n", - "\n", - "$$\n", - "\\begin{align}\n", - " a_0 = \\bar{y} - a_1\\bar{x}\n", - "\\end{align}\n", - "$$\n", - "\n", - "where $\\bar{x} = \\frac{\\sum_{i=0}^{n} x_i}{n+1}$ and $\\bar{y} = \\frac{\\sum_{i=0}^{n} y_i}{n+1}$.\n", - "\n", - "Rearranging (7):\n", - "\n", - "$$\n", - "\\begin{align}\n", - " 2 \\left[ a_0\\sum_{i=0}^{n} x_i + a_1\\sum_{i=0}^{n} x_{i}^2 - \\sum_{i=0}^{n} x_iy_i \\right] &= 0 \\\\\n", - " a_0\\sum_{i=0}^{n} x_i + a_1\\sum_{i=0}^{n} x_{i}^2 - \\sum_{i=0}^{n} x_iy_i &=0 \\\\\n", - "\\end{align}\n", - "$$\n", - "\n", - "Now, if we replace $a_0$ from equation (8) into (9) and rearrange terms:\n", - "\n", - "$$\n", - "\\begin{align*}\n", - " (\\bar{y} - a_1\\bar{x})\\sum_{i=0}^{n} x_i + a_1\\sum_{i=0}^{n} x_{i}^2 - \\sum_{i=0}^{n} x_iy_i &= 0 \\\\ \n", - "\\end{align*}\n", - "$$\n", - "\n", - "Replacing the definitions of the mean values into the equation, \n", - "\n", - "$$\n", - "\\begin{align*}\n", - " \\left[\\frac{1}{n+1}\\sum_{i=0}^{n} y_i - \\frac{a_1}{n+1}\\sum_{i=0}^{n} x_i \\right]\\sum_{i=0}^{n} x_i + a_1\\sum_{i=0}^{n} x_{i}^2 - \\sum_{i=0}^{n} x_iy_i &= 0 \\\\ \n", - " \\frac{1}{n+1}\\sum_{i=0}^{n} y_i \\sum_{i=0}^{n} x_i - \\frac{a_1}{n+1}\\sum_{i=0}^{n} x_i \\sum_{i=0}^{n} x_i + a_1\\sum_{i=0}^{n} x_{i}^2 - \\sum_{i=0}^{n} x_iy_i &= 0 \\\\ \n", - "\\end{align*}\n", - "$$\n", - "\n", - "Leaving everything in terms of $\\bar{x}$, \n", - "\n", - "$$\n", - "\\begin{align*}\n", - " \\sum_{i=0}^{n} y_i \\bar{x} - a_1\\sum_{i=0}^{n} x_i \\bar{x} + a_1\\sum_{i=0}^{n} x_{i}^2 - \\sum_{i=0}^{n} x_iy_i = 0 \n", - "\\end{align*}\n", - "$$\n", - "\n", - "Grouping the terms that have $a_1$ on the left-hand side and the rest on the right-hand side:\n", - "\n", - "$$\n", - "\\begin{align*}\n", - " a_1\\left[ \\sum_{i=0}^{n} x_{i}^2 - \\sum_{i=0}^{n} x_i \\bar{x}\\right] &= \\sum_{i=0}^{n} x_iy_i - \\sum_{i=0}^{n} y_i \\bar{x} \\\\\n", - " a_1 \\sum_{i=0}^{n} (x_{i}^2 - x_i \\bar{x}) &= \\sum_{i=0}^{n} (x_iy_i - y_i \\bar{x}) \\\\\n", - " a_1 \\sum_{i=0}^{n} x_{i}(x_{i} -\\bar{x}) &= \\sum_{i=0}^{n} y_i(x_i - \\bar{x}) \n", - "\\end{align*}\n", - "$$\n", - "\n", - "Finally, we get that:\n", - "\n", - "$$\n", - "\\begin{align}\n", - " a_1 = \\frac{ \\sum_{i=0}^{n} y_{i} (x_i - \\bar{x})}{\\sum_{i=0}^{n} x_i (x_i - \\bar{x})}\n", - "\\end{align}\n", - "$$\n", - "\n", - "Then our coefficients are:\n", - "\n", - "$$\n", - "\\begin{align}\n", - " a_1 = \\frac{ \\sum_{i=0}^{n} y_{i} (x_i - \\bar{x})}{\\sum_{i=0}^{n} x_i (x_i - \\bar{x})} \\quad , \\quad a_0 = \\bar{y} - a_1\\bar{x}\n", - "\\end{align}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Let's fit!\n", - "\n", - "Let's now fit a straight line through the temperature-anomaly data, to see the trend over time. We'll use least-squares linear regression to find the slope and intercept of a line \n", - "\n", - "$$y = a_1x+a_0$$\n", - "\n", - "that fits our data.\n", - "\n", - "In our case, the `x`-data corresponds to `year`, and the `y`-data is `temp_anomaly`. To calculate our coefficients with the formula above, we need the mean values of our data. Sine we'll need to compute the mean for both `x` and `y`, it could be useful to write a custom Python _function_ that computes the mean for any array, and we can then reuse it.\n", - "\n", - "It is good coding practice to *avoid repeating* ourselves: we want to write code that is reusable, not only because it leads to less typing but also because it reduces errors. If you find yourself doing the same calculation multiple times, it's better to encapsulate it into a *function*. \n", - "\n", - "Remember the _key concept_ from [Lesson 1](http://go.gwu.edu/engcomp1lesson1): A function is a compact collection of code that executes some action on its arguments. \n", - "\n", - "Once *defined*, you can *call* a function as many times as you want. When we *call* a function, we execute all the code inside the function. The result of the execution depends on the *definition* of the function and on the values that are *passed* into it as *arguments*. Functions might or might not *return* values in their last operation. \n", - "\n", - "The syntax for defining custom Python functions is:\n", - "\n", - "```python\n", - "def function_name(arg_1, arg_2, ...):\n", - " '''\n", - " docstring: description of the function\n", - " '''\n", - " \n", - "```\n", - "\n", - "The **docstring** of a function is a message from the programmer documenting what he or she built. Docstrings should be descriptive and concise. They are important because they explain (or remind) the intended use of the function to the users. You can later access the docstring of a function using the function `help()` and passing the name of the function. If you are in a notebook, you can also prepend a question mark `'?'` before the name of the function and run the cell to display the information of a function. \n", - "\n", - "Try it!" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "?print" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Using the `help` function instead:" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Help on built-in function print in module builtins:\n", - "\n", - "print(...)\n", - " print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n", - " \n", - " Prints the values to a stream, or to sys.stdout by default.\n", - " Optional keyword arguments:\n", - " file: a file-like object (stream); defaults to the current sys.stdout.\n", - " sep: string inserted between values, default a space.\n", - " end: string appended after the last value, default a newline.\n", - " flush: whether to forcibly flush the stream.\n", - "\n" - ] - } - ], - "source": [ - "help(print)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's define a custom function that calculates the mean value of any array. Study the code below carefully. " - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def mean_value(array):\n", - " \"\"\" Calculate the mean value of an array \n", - " \n", - " Arguments\n", - " ---------\n", - " array: Numpy array \n", - " \n", - " Returns\n", - " ------- \n", - " mean: mean value of the array\n", - " \"\"\"\n", - " sum_elem = 0\n", - " for element in array:\n", - " sum_elem += element # this is the same as sum_elem = sum_elem + element\n", - " \n", - " mean = sum_elem / len(array)\n", - " \n", - " return mean\n", - " " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Once you execute the cell above, the function`mean_value()` becomes available to use on any argument of the correct type. This function works on arrays of any length. We can try it now with our data." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1948.0\n" - ] - } - ], - "source": [ - "year_mean = mean_value(year)\n", - "print(year_mean)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.0526277372263\n" - ] - } - ], - "source": [ - "temp_anomaly_mean = mean_value(temp_anomaly)\n", - "print(temp_anomaly_mean)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Neat! You learned how to write a Python function, and we wrote one for computing the mean value of an array of numbers. We didn't have to, though, because NumPy has a built-in function to do just what we needed: [`numpy.mean()`](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.mean.html).\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercise \n", - "\n", - "Calculate the mean of the `year` and `temp_anomaly` arrays using the NumPy built-in function, and compare the results with the ones obtained using our custom `mean_value` function." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now that we have mean values, we can compute our coefficients by following equations (12). We first calculate $a_1$ and then use that value to calculate $a_0$.\n", - "\n", - "Our coefficients are:\n", - "\n", - "$$\n", - " a_1 = \\frac{ \\sum_{i=0}^{n} y_{i} (x_i - \\bar{x})}{\\sum_{i=0}^{n} x_i (x_i - \\bar{x})} \\quad , \\quad a_0 = \\bar{y} - a_1\\bar{x}\n", - "$$ \n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We already calculated the mean values of the data arrays, but the formula requires two sums over new derived arrays. Guess what, NumPy has a built-in function for that: [`numpy.sum()`](https://docs.scipy.org/doc/numpy/reference/generated/numpy.sum.html). Study the code below." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "a_1 = numpy.sum(temp_anomaly*(year - year_mean)) / numpy.sum(year*(year - year_mean)) " - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.0103702839435\n" - ] - } - ], - "source": [ - "print(a_1)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "a_0 = temp_anomaly_mean - a_1*year_mean" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-20.1486853847\n" - ] - } - ], - "source": [ - "print(a_0)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Exercise\n", - "\n", - "Write a function that computes the coefficients, call the function to compute them and compare the result with the values we obtained before. As a hint, we give you the structure that you should follow:\n", - "\n", - "```python\n", - "def coefficients(x, y, x_mean, y_mean):\n", - " \"\"\"\n", - " Write docstrings here\n", - " \"\"\"\n", - "\n", - " a_1 = \n", - " a_0 = \n", - " \n", - " return a_1, a_0\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We now have the coefficients of a linear function that best fits our data. With them, we can compute the predicted values of temperature anomaly, according to our fit. Check again the equations above: the values we are going to compute are $f(x_i)$. \n", - "\n", - "Let's call `reg` the array obtined from evaluating $f(x_i)$ for all years." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "reg = a_0 + a_1 * year" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "With the values of our linear regression, we can plot it on top of the original data to see how they look together. Study the code below. " - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nzMzMzEr+D3e5KbvwEdppAAAAAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "pyplot.figure(figsize=(10, 5))\n", - "\n", - "pyplot.plot(year, temp_anomaly, color='#2929a3', linestyle='-', linewidth=1, alpha=0.5) \n", - "pyplot.plot(year, reg, 'k--', linewidth=2, label='Linear regression')\n", - "pyplot.xlabel('Year')\n", - "pyplot.ylabel('Land temperature anomaly [°C]')\n", - "pyplot.legend(loc='best', fontsize=15)\n", - "pyplot.grid();" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Step 4: Apply regression using NumPy" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Above, we coded linear regression from scratch. But, guess what: we didn't have to because NumPy has built-in functions that do what we need!\n", - "\n", - "Yes! Python and NumPy are here to help! With [`polyfit()`](https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.polyfit.html), we get the slope and $y$-intercept of the line that best fits the data. With [`poly1d()`](https://docs.scipy.org/doc/numpy/reference/generated/numpy.poly1d.html), we can build the linear function from its slope and $y$-intercept.\n", - "\n", - "Check it out:" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "# First fit with NumPy, then name the coefficients obtained a_1n, a_0n:\n", - "a_1n, a_0n = numpy.polyfit(year, temp_anomaly, 1)\n", - "\n", - "f_linear = numpy.poly1d((a_1n, a_0n)) " - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.0103702839435\n" - ] - } - ], - "source": [ - "print(a_1n)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "-20.1486853847\n" - ] - } - ], - "source": [ - "print(a_0n)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " \n", - "0.01037 x - 20.15\n" - ] - } - ], - "source": [ - "print(f_linear)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nzMzMzEr+D3e5KbvwEdppAAAAAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "pyplot.figure(figsize=(10, 5))\n", - "\n", - "pyplot.plot(year, temp_anomaly, color='#2929a3', linestyle='-', linewidth=1, alpha=0.5) \n", - "pyplot.plot(year, f_linear(year), 'k--', linewidth=2, label='Linear regression')\n", - "pyplot.xlabel('Year')\n", - "pyplot.ylabel('Land temperature anomaly [°C]')\n", - "pyplot.legend(loc='best', fontsize=15)\n", - "pyplot.grid();" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## \"Split regression\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If you look at the plot above, you might notice that around 1970 the temperature starts increasing faster that the previous trend. So maybe one single straight line does not give us a good-enough fit.\n", - "\n", - "What if we break the data in two (before and after 1970) and do a linear regression in each segment? \n", - "\n", - "To do that, we first need to find the position in our `year` array where the year 1970 is located. Thankfully, NumPy has a function called [`numpy.where()`](https://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html) that can help us. We pass a condition and `numpy.where()` tells us where in the array the condition is `True`. \n" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(array([90]),)" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "numpy.where(year==1970)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To split the data, we use the powerful instrument of _slicing_ with the colon notation. Remember that a colon between two indices indicates a range of values from a `start` to an `end`. The rule is that `[start:end]` includes the element at index `start` but excludes the one at index `end`. For example, to grab the first 3 years in our `year` array, we do:" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 1880., 1881., 1882.])" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "year[0:3]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we know how to split our data in two sets, to get two regression lines. We need two slices of the arrays `year` and `temp_anomaly`, which we'll save in new variable names below. After that, we complete two linear fits using the helpful NumPy functions we learned above." - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "year_1 , temp_anomaly_1 = year[0:90], temp_anomaly[0:90]\n", - "year_2 , temp_anomaly_2 = year[90:], temp_anomaly[90:]\n", - "\n", - "m1, b1 = numpy.polyfit(year_1, temp_anomaly_1, 1)\n", - "m2, b2 = numpy.polyfit(year_2, temp_anomaly_2, 1)\n", - "\n", - "f_linear_1 = numpy.poly1d((m1, b1))\n", - "f_linear_2 = numpy.poly1d((m2, b2))" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\nAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "pyplot.figure(figsize=(10, 5))\n", - "\n", - "pyplot.plot(year, temp_anomaly, color='#2929a3', linestyle='-', linewidth=1, alpha=0.5) \n", - "pyplot.plot(year_1, f_linear_1(year_1), 'g--', linewidth=2, label='1880-1969')\n", - "pyplot.plot(year_2, f_linear_2(year_2), 'r--', linewidth=2, label='1970-2016')\n", - "\n", - "pyplot.xlabel('Year')\n", - "pyplot.ylabel('Land temperature anomaly [°C]')\n", - "pyplot.legend(loc='best', fontsize=15)\n", - "pyplot.grid();" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We have two different curves for two different parts of our data set. A little problem with this and is that the end point of our first regression doesn't match the starting point of the second regression. We did this for the purpose of learning, but it is not rigorously correct. We'll fix in in the next course module when we learn more about different types of regression. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## We learned:\n", - "\n", - "* Making our plots more beautiful\n", - "* Defining and calling custom Python functions\n", - "* Applying linear regression to data\n", - "* NumPy built-ins for linear regression\n", - "* The Earth is warming up!!!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## References\n", - "\n", - "1. [_Essential skills for reproducible research computing_](https://barbagroup.github.io/essential_skills_RRC/) (2017). Lorena A. Barba, Natalia C. Clementi, Gilbert Forsyth. \n", - "2. _Numerical Methods in Engineering with Python 3_ (2013). Jaan Kiusalaas. Cambridge University Press.\n", - "3. _Effective Computation in Physics: Field Guide to Research with Python_ (2015). Anthony Scopatz & Kathryn D. Huff. O'Reilly Media, Inc.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Execute this cell to load the notebook's style sheet, then ignore it\n", - "from IPython.core.display import HTML\n", - "css_file = '../style/custom.css'\n", - "HTML(open(css_file, \"r\").read())" - ] - } - ], - "metadata": { - "anaconda-cloud": {}, - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - }, - "widgets": { - "state": {}, - "version": "1.1.2" - } - }, - "nbformat": 4, - "nbformat_minor": 1 -}