From 54905e9d8cae02187446db010b29e359a336f1fb Mon Sep 17 00:00:00 2001 From: "Ryan C. Cooper" Date: Fri, 20 Dec 2019 16:38:38 -0500 Subject: [PATCH] first commit --- .../01-Introduction-checkpoint.ipynb | 460 + 01_Introduction/octave-workspace | Bin 0 -> 153 bytes .../02_Getting-started-checkpoint.ipynb | 13750 ++++++++++++++++ .../octave-workspace | Bin 0 -> 153 bytes ...tent-coding and functions-checkpoint.ipynb | 1041 ++ 05_consistent coding/gp_image_01.png | Bin 0 -> 170 bytes 05_consistent coding/my_caller.m | 23 + 05_consistent coding/my_function.m | 21 + 05_consistent coding/nitrogen_pressure.m | 10 + 05_consistent coding/octave-workspace | Bin 0 -> 2893 bytes 05_consistent coding/setdefaults.m | 3 + data/carpet_age.csv | 24 + ...d_global_temperature_anomaly-1880-2016.csv | 142 + data/life_exp_avg_continent_year.csv | 13 + data/mae_bulletin.txt | 431 + data/maunaloa_CO2.csv | 703 + ...-IEEE_754_Double_Floating_Point_Format.png | Bin 0 -> 9373 bytes images/3d_array_sketch.png | Bin 0 -> 39240 bytes images/create_notebook.png | Bin 0 -> 31544 bytes images/freefall.png | Bin 0 -> 38559 bytes images/jupyter-main.png | Bin 0 -> 20522 bytes images/new_notebook.png | Bin 0 -> 28706 bytes images/slicing.png | Bin 0 -> 16094 bytes images/variables.png | Bin 0 -> 35249 bytes ...1_Interacting_with_Python-checkpoint.ipynb | 1435 ++ .../02-Numerical_error-checkpoint.ipynb | 567 + .../02_Getting-started-checkpoint.ipynb | 12057 ++++++++++++++ notebooks/01_Interacting_with_Python.ipynb | 1435 ++ notebooks/02-Numerical_error.ipynb | 574 + notebooks/02_Getting-started.ipynb | 12144 ++++++++++++++ .../05_consistent-coding and functions.ipynb | 1017 ++ notebooks/4_NumPy_Arrays_and_Plotting.ipynb | 1644 ++ .../5_Linear_Regression_with_Real_Data.ipynb | 1246 ++ ...NumPy_Arrays_and_Plotting-checkpoint.ipynb | 1644 ++ ...Regression_with_Real_Data-checkpoint.ipynb | 1230 ++ 35 files changed, 51614 insertions(+) create mode 100644 01_Introduction/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb create mode 100644 01_Introduction/octave-workspace create mode 100644 02_Roundoff-Truncation errors/.ipynb_checkpoints/02_Getting-started-checkpoint.ipynb create mode 100644 02_Roundoff-Truncation errors/octave-workspace create mode 100644 05_consistent coding/.ipynb_checkpoints/05_consistent-coding and functions-checkpoint.ipynb create mode 100644 05_consistent coding/gp_image_01.png create mode 100644 05_consistent coding/my_caller.m create mode 100644 05_consistent coding/my_function.m create mode 100644 05_consistent coding/nitrogen_pressure.m create mode 100644 05_consistent coding/octave-workspace create mode 100644 05_consistent coding/setdefaults.m create mode 100644 data/carpet_age.csv create mode 100644 data/land_global_temperature_anomaly-1880-2016.csv create mode 100644 data/life_exp_avg_continent_year.csv create mode 100644 data/mae_bulletin.txt create mode 100644 data/maunaloa_CO2.csv create mode 100644 images/1236px-IEEE_754_Double_Floating_Point_Format.png create mode 100644 images/3d_array_sketch.png create mode 100644 images/create_notebook.png create mode 100644 images/freefall.png create mode 100644 images/jupyter-main.png create mode 100644 images/new_notebook.png create mode 100644 images/slicing.png create mode 100644 images/variables.png create mode 100644 notebooks/.ipynb_checkpoints/01_Interacting_with_Python-checkpoint.ipynb create mode 100644 notebooks/.ipynb_checkpoints/02-Numerical_error-checkpoint.ipynb create mode 100644 notebooks/.ipynb_checkpoints/02_Getting-started-checkpoint.ipynb create mode 100644 notebooks/01_Interacting_with_Python.ipynb create mode 100644 notebooks/02-Numerical_error.ipynb create mode 100644 notebooks/02_Getting-started.ipynb create mode 100644 notebooks/05_consistent-coding and functions.ipynb create mode 100644 notebooks/4_NumPy_Arrays_and_Plotting.ipynb create mode 100644 notebooks/5_Linear_Regression_with_Real_Data.ipynb create mode 100644 notebooks_en/.ipynb_checkpoints/4_NumPy_Arrays_and_Plotting-checkpoint.ipynb create mode 100644 notebooks_en/.ipynb_checkpoints/5_Linear_Regression_with_Real_Data-checkpoint.ipynb diff --git a/01_Introduction/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb b/01_Introduction/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb new file mode 100644 index 0000000..ccd5cd7 --- /dev/null +++ b/01_Introduction/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb @@ -0,0 +1,460 @@ +{ + "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 new file mode 100644 index 0000000000000000000000000000000000000000..8c437bb6e55a5d1b6115661b3a20e86870909d32 GIT binary patch literal 153 zcmeZIE=ep))iu=hVPIxpU`Wg>29gX6|5<=Ua%xV_zyJULGXmL6K+FfkHXuRW)ST4Z s)VvZqpa4)UCy*#Ej4v)J%FIiLX#g3JmQ#{Vk|uVbru4khf}H#k0D5999{>OV literal 0 HcmV?d00001 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 new file mode 100644 index 0000000..c2b832b --- /dev/null +++ b/02_Roundoff-Truncation errors/.ipynb_checkpoints/02_Getting-started-checkpoint.ipynb @@ -0,0 +1,13750 @@ +{ + "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": "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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": "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 new file mode 100644 index 0000000000000000000000000000000000000000..8c437bb6e55a5d1b6115661b3a20e86870909d32 GIT binary patch literal 153 zcmeZIE=ep))iu=hVPIxpU`Wg>29gX6|5<=Ua%xV_zyJULGXmL6K+FfkHXuRW)ST4Z s)VvZqpa4)UCy*#Ej4v)J%FIiLX#g3JmQ#{Vk|uVbru4khf}H#k0D5999{>OV literal 0 HcmV?d00001 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 new file mode 100644 index 0000000..b4918d4 --- /dev/null +++ b/05_consistent coding/.ipynb_checkpoints/05_consistent-coding and functions-checkpoint.ipynb @@ -0,0 +1,1041 @@ +{ + "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 new file mode 100644 index 0000000000000000000000000000000000000000..ef291b593f623b8b543ea653c733167f14e20882 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^OhD|w0V4Oi7>WQXwj^(N7l!{JxM1({$v}~KPZ!4! ziK$D^t>!yyAmDoN<_WI8|2yh)*jZR|8#@>83pLrbn%OLGLC*Y@3f~;{0&>J(ZGL?I zWQ?1fK>9k3yJi=!9DiKzxu#M{rgKq${H)5okGqTf4o%`H6Zy3u_L}#*wM7PU-tvF0 Q0Ig#1boFyt=akR{05-`#_y7O^ literal 0 HcmV?d00001 diff --git a/05_consistent coding/my_caller.m b/05_consistent coding/my_caller.m new file mode 100644 index 0000000..f0cd536 --- /dev/null +++ b/05_consistent coding/my_caller.m @@ -0,0 +1,23 @@ +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 new file mode 100644 index 0000000..5953061 --- /dev/null +++ b/05_consistent coding/my_function.m @@ -0,0 +1,21 @@ +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 new file mode 100644 index 0000000..a76abf3 --- /dev/null +++ b/05_consistent coding/nitrogen_pressure.m @@ -0,0 +1,10 @@ +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 new file mode 100644 index 0000000000000000000000000000000000000000..22452b765ec0a86316ae5fc4d81dae991809e2e5 GIT binary patch literal 2893 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 literal 0 HcmV?d00001 diff --git a/images/3d_array_sketch.png b/images/3d_array_sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..cbd003a49bcbef6a76439e5c0182ad35dd5a053b GIT binary patch literal 39240 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%0AAj%)P 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%0ANj|#azHOvX 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 literal 0 HcmV?d00001 diff --git a/images/freefall.png b/images/freefall.png new file mode 100644 index 0000000000000000000000000000000000000000..09c73532120e4acda126b912b777a98bbec92360 GIT binary patch literal 38559 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 literal 0 HcmV?d00001 diff --git a/images/jupyter-main.png b/images/jupyter-main.png new file mode 100644 index 0000000000000000000000000000000000000000..9df0b1ff204a1bb7885db9760fd0107b17b8b676 GIT binary patch literal 20522 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 Ux06tR{&!32o&4LfHy^+J4{qn%Z~y=R literal 0 HcmV?d00001 diff --git a/images/new_notebook.png b/images/new_notebook.png new file mode 100644 index 0000000000000000000000000000000000000000..824e1805fc79c1d3bf603f2ae7245999bc8fe7b7 GIT binary patch literal 28706 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 literal 0 HcmV?d00001 diff --git a/images/slicing.png b/images/slicing.png new file mode 100644 index 0000000000000000000000000000000000000000..c8d5d6d336792bb17f35ce355f59654d9eb2aa3f GIT binary patch literal 16094 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 PI^wCcf>eQo-uwRpOnoS! literal 0 HcmV?d00001 diff --git a/images/variables.png b/images/variables.png new file mode 100644 index 0000000000000000000000000000000000000000..7f678e12deef8c23f2de6e0a6bea052b0f2250e9 GIT binary patch literal 35249 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 153.9796 Answer exercise 2: 945.45 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Variables and their type\n", + "\n", + "Variables consist of two parts: a **name** and a **value**. When we want to give a variable its name and value, we use the equal sign: `name = value`. This is called an _assignment_. The name of the variable goes on the left and the value on the right. \n", + "\n", + "The first thing to get used to is that the equal sign in a variable assignment has a different meaning than it has in Algebra! Think of it as an arrow pointing from `name` to `value`.\n", + "\n", + "\n", + " \n", + "\n", + "We have many possibilities for variable names: they can be made up of upper and lowercase letters, underscores and digits… although digits cannot go on the front of the name. For example, valid variable names are:\n", + "\n", + "```python\n", + " x\n", + " x1\n", + " X_2\n", + " name_3\n", + " NameLastname\n", + "```\n", + "Keep in mind, there are reserved words that you can't use; they are the special Python [keywords](https://docs.python.org/3/reference/lexical_analysis.html#keywords).\n", + " \n", + "OK. Let's assign some values to variables and do some operations with them: " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "x = 3 " + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "y = 4.5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Exercise:\n", + "Print the values of the variables `x` and `y`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's do some arithmetic operations with our new variables:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "7.5" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x + y" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "2**x" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.5" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y - 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And now, let's check the values of `x` and `y`. Are they still the same as they were when you assigned them?\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3\n" + ] + } + ], + "source": [ + "print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4.5\n" + ] + } + ], + "source": [ + "print(y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### String variables\n", + "\n", + "In addition to name and value, Python variables have a _type_: the type of the value it refers to. For example, an integer value has type `int`, and a real number has type `float`. A string is a variable consisting of a sequence of characters marked by two quotes, and it has type `str`.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "z = 'this is a string'" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "w = '1'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " What if you try to \"add\" two strings?" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'this is a string1'" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "z + w" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The operation above is called _concatenation_: chaining two strings together into one. Insteresting, eh? But look at this: " + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "unsupported operand type(s) for +: 'int' and 'str'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mx\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mw\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'int' and 'str'" + ] + } + ], + "source": [ + "x + w" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "_Error!_ Why? Let's inspect what Python has to say and explore what is happening. \n", + "\n", + "Python is a _dynamic language_, which means that you don't _need_ to specify a type to invoke an existing object. The humorous nickname for this is \"duck typing\":\n", + "\n", + "#### \"If it looks like a duck, and quacks like a duck, then it's probably a duck.\"\n", + "\n", + "In other words, a variable has a type, but we don't need to specify it. It will just behave like it's supposed to when we operate with it (it'll quack and walk like nature intended it to).\n", + "\n", + "But sometimes you need to make sure you know the type of a variable. Thankfully, Python offers a function to find out the type of a variable: `type()`." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "int" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "str" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(w)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "float" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### More assignments\n", + "\n", + "Here we assign a new variable to the result of an operation that involves other variables." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "sum_xy = x + y\n", + "diff_xy = x - y" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The sum of x and y is: 7.5\n", + "The difference between x and y is: -1.5\n" + ] + } + ], + "source": [ + "print('The sum of x and y is:', sum_xy)\n", + "print('The difference between x and y is:', diff_xy)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice what we did above: we used the `print()` function with a string message, followed by a variable, and Python printed a useful combination of the message and the variable value. This is a pro tip! You want to print for humans. Let's now check the type of the new variables we just created above:" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "float" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(sum_xy)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "float" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(diff_xy)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reflection point\n", + "When we created `sum_xy` and `diff_xy` two new variables were created that depended upon previously created variables. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Special variables\n", + "\n", + "Python has special variables that are built into the language. These are: \n", + "`True`, `False`, `None` and `NotImplemented`. \n", + "For now, we will look at just the first three of these.\n", + "\n", + "**Boolean variables** are used to represent truth values, and they can take one of two possible values: `True` and `False`.\n", + "_Logical expressions_ return a boolean. Here is the simplest logical expression, using the keyword `not`:\n", + "\n", + "```Python\n", + " not True\n", + "```\n", + "\n", + "It returns… you guessed it… `False`.\n", + "\n", + "The Python function `bool()` returns a truth value assigned to any argument. Any number other than zero has a truth value of `True`, as well as any nonempty string or list. The number zero and any empty string or list will have a truth value of `False`. Explore the `bool()` function with various arguments.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bool(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bool('Do we need oxygen?')" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bool('We do need oxygen')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**None is not Zero**: `None` is a special variable indicating that no value was assigned or that a behavior is undefined. It is different than the value zero, an empty string, or some other nil value. \n", + "\n", + "You can check that it is not zero by trying to add it to a number. Let's see what happens when we try that:" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "a = None\n", + "\n", + "b = 3" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "unsupported operand type(s) for +: 'NoneType' and 'int'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0ma\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'NoneType' and 'int'" + ] + } + ], + "source": [ + "a + b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Logical and comparison operators\n", + "\n", + "The Python comparison operators are: `<`, `<=`, `>`, `>=`, `==`, `!=`. They compare two objects and return either `True` or `False`: smaller than, smaller or equal, greater than, greater or equal, equal, not equal. Try it!" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "x = 3\n", + "y = 5" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x > y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can assign the truth value of a comparison operation to a new variable name:" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "z = x > y" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "z" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "bool" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(z)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Logical operators are the following: `and`, `or`, and `not`. They work just like English (with the added bonus of being always consistent, not like English speakers!). A logical expression with `and` is `True` if both operands are true, and one with `or` is `True` when either operand is true. And the keyword `not` always negates the expression that follows.\n", + "\n", + "Let's do some examples:" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "a = 5\n", + "b = 3\n", + "c = 10" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a > b and b > c" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Remember that the logical operator `and` is `True` only when both operands are `True`. In the case above the first operand is `True` but the second one is `False`. \n", + "\n", + "If we try the `or` operation using the same operands we should get a `True`. " + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a > b or b > c" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And the negation of the second operand results in …" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "not b > c" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What if we negate the second operand in the `and` operation above?\n", + "\n", + "##### Note: \n", + "\n", + "Be careful with the order of logical operations. The order of precedence in logic is:\n", + "\n", + "1. Negation\n", + "2. And\n", + "3. Or\n", + "\n", + "If you don't rememeber this, make sure to use parentheses to indicate the order you want. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Exercise:\n", + "\n", + "What is happening in the case below? Play around with logical operators and try some examples. " + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a > b and not b > c" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## What we've learned\n", + "\n", + "* Using the `print()` function. The concept of _function_.\n", + "* Using Python as a calculator.\n", + "* Concepts of variable, type, assignment.\n", + "* Special variables: `True`, `False`, `None`.\n", + "* Supported operations, logical operations. \n", + "* Reading error messages." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References\n", + "\n", + "Throughout this course module, we will be drawing from the following 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", + "2. _Python for Everybody: Exploring Data Using Python 3_ (2016). Charles R. Severance. [PDF available](http://do1.dr-chuck.com/pythonlearn/EN_us/pythonlearn.pdf)\n", + "3. _Think Python: How to Think Like a Computer Scientist_ (2012). Allen Downey. Green Tea Press. [PDF available](http://greenteapress.com/thinkpython/thinkpython.pdf)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Recommended Readings\n", + "\n", + "- [\"Yes, Python is Slow, and I Don’t Care\"](https://hackernoon.com/yes-python-is-slow-and-i-dont-care-13763980b5a1) by Nick Humrich, on Hackernoon. (Skip the part on microservices, which is a bit specialized, and continue after the photo of moving car lights.)\n", + "- [\"Why I Push for Python\"](http://lorenabarba.com/blog/why-i-push-for-python/), by Prof. Lorena A. Barba (2014). This blog post got a bit of interest over at [Hacker News](https://news.ycombinator.com/item?id=7760870)." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 45, + "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/.ipynb_checkpoints/02-Numerical_error-checkpoint.ipynb b/notebooks/.ipynb_checkpoints/02-Numerical_error-checkpoint.ipynb new file mode 100644 index 0000000..70d3279 --- /dev/null +++ b/notebooks/.ipynb_checkpoints/02-Numerical_error-checkpoint.ipynb @@ -0,0 +1,567 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Freefall Model\n", + "## Computational solution" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "![](https://lh3.googleusercontent.com/XAQFTSm2fzBMVcnJvMa1EK9a1cj5isp1cJacWEOWejPy3mvf719UFQ6txDAodzJChoZ0NK0Cx9L38fFqr2jUuk4Y35cYwDlRlIf25gXTD05RQEoQptlKoeFfaINlh4FT9Lf9AcA6l7MvTvZOV0cutObEhckh-OYvsj5zNagNmpejxO8TzHe1i2nhTJoOpiAFttAG_W9rhnNfxwXCPQ58I5jnvGFLHyhk5dC3Phe8-V29u-ewy5WhN8TTHBqaz5xUA4zYLytEAVgEY1ssvHkhcD5mkHAxAC5UDuTGI03hpNFaRqPz9ySqS64344QdH7FihEZHLPzQTbLwp381jx59wWx_cAApTrsuMFE7YWHrmbHNCgsD-ZE_FmPK8933TeYiXu9rClhIl2rbs4kx5sNtYcB-qR4U9VX_ANu96gCm5lPLqUS57eQQo7OzxKNuQtuO8QKFWlgbBVSI91XLFYmRLPrpZBYHvHXPBDHiMiGefRwjTj6I4BgElB2tLdO0FY4ZcJbXBoFb1zs776vtBIQypZq5PSlBjIoFMM7-a8X1JuoDF9_RN5emn53AdfhnRMhsjpXCjUqXa0AgLMK3SNTJLfjjryZ8yisY2GKDmx2CxjtpBeIrSc6TT5Tz_Q6YlG20LBTyNVpg9piRHSXWHN9H312LY20MXzf4Ab279rGkim9XxCB7XnzIdHc=w1133-h1014-no)\n", + "\n", + "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": "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": 1, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "t=np.array([0,2,4,6,8,10,12])\n", + "# or \n", + "t=np.linspace(0,12,7)" + ] + }, + { + "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(t)=v_{terminal}\\tanh{\\left(\\frac{gt}{v_{terminal}}\\right)}$" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "at time 0 s, speed is 0.00\n", + "at time 2 s, speed is 18.62\n", + "at time 4 s, speed is 32.46\n", + "at time 6 s, speed is 40.64\n", + "at time 8 s, speed is 44.85\n", + "at time 10 s, speed is 46.85\n", + "at time 12 s, speed is 47.77\n" + ] + } + ], + "source": [ + "c=0.25 \n", + "m=60\n", + "g=9.81 \n", + "\n", + "\n", + "def v_analytical(t,m,g,c):\n", + " v_terminal=np.sqrt(m*g/c)\n", + " v= v_terminal*np.tanh(g*t/v_terminal)\n", + " return v\n", + "\n", + "v_an=v_analytical(t,m,g,c)\n", + "\n", + "for i,v in enumerate(v_an):\n", + " print('at time %2.0f s, speed is %1.2f'%(t[i],v))" + ] + }, + { + "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": 20, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0. , 19.62 , 36.03213 , 44.8328434 ,\n", + " 47.702978 , 48.35986042, 48.49089292])" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v_numerical=np.zeros(len(t));\n", + "for i in range(1,len(t)):\n", + " v_numerical[i]=v_numerical[i-1]+((g-c/m*v_numerical[i-1]**2))*2;\n", + "\n", + "v_numerical" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Display time, velocity (analytical) and velocity (numerical)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time (s)|vel analytical (m/s)|vel numerical (m/s)\n", + "\n", + "-----------------------------------------------\n", + " 0.0 | 0.00 | 0.00\n", + "\n", + " 2.0 | 18.62 | 19.62\n", + "\n", + " 4.0 | 32.46 | 36.03\n", + "\n", + " 6.0 | 40.64 | 44.83\n", + "\n", + " 8.0 | 44.85 | 47.70\n", + "\n", + " 10.0 | 46.85 | 48.36\n", + "\n", + " 12.0 | 47.77 | 48.49\n", + "\n" + ] + } + ], + "source": [ + "print('time (s)|vel analytical (m/s)|vel numerical (m/s)\\n')\n", + "print('-----------------------------------------------')\n", + "for i in range(0,len(t)):\n", + " print('%7.1f | %18.2f | %15.2f\\n'%(t[i],v_an[i],v_numerical[i]));" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Set default values for plotting" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "plt.rcParams.update({'font.size': 22})\n", + "plt.rcParams['lines.linewidth'] = 3\n" + ] + }, + { + "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": 4, + "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": "markdown", + "metadata": {}, + "source": [ + "In order to store the number in a computer you can only use so many bits, shown below is the 64-bit standard for floating point numbers:\n", + "\n", + " \n", + "\n", + "Each time you use an operation, e.g. `+ - / *` you lose some precision as well. \n", + "\n", + "Consider $\\pi$ again\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " no operations 64 bit pi = 3.1415926535897931159979635\n", + "\n", + "1000 operations 64 bit pi = 3.1415926535897922278195438\n", + "\n", + "First 26 digits of pi = 3.14159265358979323846264338\n" + ] + } + ], + "source": [ + "double=np.array([pi],dtype='float64')\n", + "double_operated=double\n", + "for i in range(0,1000):\n", + " double_operated=double_operated*1.0e-16\n", + " double_operated=double_operated*1.0e16\n", + "print(' no operations 64 bit pi = %1.25f\\n'%double) # 64-bit\n", + "print('1000 operations 64 bit pi = %1.25f\\n'%double_operated) # 64-bit after 1000 additions and 1 subtraction\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": "code", + "execution_count": 33, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0,0.5,'velocity (m/s)')" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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DhxIREQEgYGB1KlTh4EDB/LppxVsJxcR0Q8RunTpIhVa3AGR5xqITK8lMr2WzHhyskQ+tkT+t/FQWfeswtu5c2dZd6HcGzRokPj6+kpUVJQMGzZMxowZIxdffLEA4uvrK/Pnz8/Rfvr06QLIxIkTpUmTJtK4cWMZO3asXHnllRIUFCSADB8+PM911qxZI4CEhYXJZZddJtddd50MHjxYatasKYB0795dzp8/n+d9kZGRAsiBAwecda+99poAcsstt+T7NR09elT8/PykZs2acu7cOYmNjZUJEyZIy5YtBZA+ffrIhAkTnB9r1qxxvhfr8UKec8bFxUmvXr0EkMDAQLn88svl+uuvl379+kloaKhERkbmaP/cc88JIC1btpTBgwfLddddJ3369BFfX18B5MEHH8xzjQMHDgiQ51zucOffPLBZivA7tsx/yZeXjwodbOx2kY9GOgPNzqkXS8vHFsmt7/8qdru9rHtX4WmwubDly5fLiRMn8tR//fXX4u/vL3Xq1JHk5GRnfVawAWTSpEmSlpbmPLZz504JDg4WQNauXZvjfEeOHJGVK1dKZmZmjvr4+HgZMmSIADJjxow8/cgv2CQkJEhwcLAEBgZKbGxsnvdMnTpVALnvvvty1E+YMEEA+fDDDwv8fhQUbEaMGCGA9OrVS44dO5bj2Pnz52XZsmU56jZu3Cjbt2/Pc569e/dKRESEALJhw4Ycx8prsPH8pgWq9G37Av5cBYBdDI/bJlE9sJou3iwlzR5fWtZdKLaDM67xyHmGDBmSb/3w4cMZN24cn376KT/++CPXXJPzehEREcycOZOAgABnXbt27bjllluYM2cOK1eupE+fPs5j4eHhhIeH57lOaGgoM2fO5KKLLmLBggU89thjF+xzSEiI8zoffPABU6ZMcR6z2Wy8+66199O99957wXMVxe+//87XX39NcHAwixcvpn79+jmOV6tWjaFDh+ao69atW77nat26NVOnTmXy5MksWLCAHj3Kf4awAoONMeaDEpxXREQTcpaG5DPw7ePO4tzMq/hDWvHSsPY0CtHZZ6r0nD59miVLlrB9+3YSEhKcm8xt374dgL179+YJNpdffjnVq+f9d5r1gP348eN5jokIv/zyCz///DNHjx7l/PnzrqEax3WK6v7772fOnDm89dZbPPLII84ceAsXLuTEiRMMGDCA9u3b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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(t,v_an,'-',label='analytical')\n", + "plt.plot(t,v_numerical,'o-',label='numerical')\n", + "plt.legend()\n", + "plt.xlabel('time (s)')\n", + "plt.ylabel('velocity (m/s)')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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/notebooks/.ipynb_checkpoints/02_Getting-started-checkpoint.ipynb b/notebooks/.ipynb_checkpoints/02_Getting-started-checkpoint.ipynb new file mode 100644 index 0000000..32f369d --- /dev/null +++ b/notebooks/.ipynb_checkpoints/02_Getting-started-checkpoint.ipynb @@ -0,0 +1,12057 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Getting Started\n", + "\n" + ] + }, + { + "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": 14, + "metadata": { + "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": 17, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans =\n", + "\n", + " 1 2\n", + "\n" + ] + } + ], + "source": [ + "code(2,3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Choose variable names that describe the variable" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "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": 20, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cnt_v =\n", + "\n", + " 1 2 3 4 5 6 7 8 9\n", + "\n" + ] + } + ], + "source": [ + "cnt_v=counting_function(9)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "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", + " " + ] + }, + { + "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": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 3])" + ] + }, + "execution_count": 63, + "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": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 2])" + ] + }, + "execution_count": 64, + "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": 65, + "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": 65, + "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": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 4, 8],\n", + " [12, 16, 20]])" + ] + }, + "execution_count": 66, + "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": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 4],\n", + " [12, 16]])" + ] + }, + "execution_count": 67, + "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": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([5, 6])" + ] + }, + "execution_count": 68, + "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": 69, + "metadata": {}, + "outputs": [], + "source": [ + "#import random library\n", + "import random" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [], + "source": [ + "lst_1 = random.sample(range(100), 100)\n", + "lst_2 = random.sample(range(100), 100)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[37, 62, 29, 48, 89, 21, 93, 82, 90, 65]\n", + "[46, 20, 26, 52, 76, 77, 78, 17, 80, 89]\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": 72, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 43 µs, sys: 0 ns, total: 43 µs\n", + "Wall time: 49.1 µ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": 73, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[83, 82, 55, 100, 165, 98, 171, 99, 170, 154]\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": 74, + "metadata": {}, + "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": 75, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[61 75 51 76 48 80 69 79 91 0]\n", + "[87 67 74 97 76 91 37 43 69 11]\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": 76, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 37 µs, sys: 0 ns, total: 37 µs\n", + "Wall time: 42.2 µ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": 77, + "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": 78, + "metadata": {}, + "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": 89, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [], + "source": [ + "def setdefaults():\n", + " plt.rcParams.update({'font.size': 22})\n", + " plt.rcParams['lines.linewidth'] = 3\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [], + "source": [ + "setdefaults()" + ] + }, + { + "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** `plt.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": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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/e9/P9cxlVJs3boVX19fatasybJlywySxMsvv8zXX39NeHg4Y8eOlSSRT8kVhRAFwK1bt+jXrx9btvwzNMnR0ZGWLVtm6XhxcXGsXr2aOXPm8PfffxvVe3t7M3bsWDp27IhOJ99H8ztJFEK84LZt20afPn30y5UCNGjQgB9++IGKFZ85ObOB27dv89///pcFCxYYHA+S73F07tyZUaNG0bhx42yJXeQNkiiEeEE9efKECRMm8Nlnn5F2vNSYMWOYOnVqpu5NHD16lPnz5/PDDz8Y3X8oWrQob7/9Nh988EGmE4/IHyRRCPECCg8Pp1evXhw6dEhfVrJkSb777jtat25t1jGePHnCTz/9xPz589m/f79RfdmyZXn//fcZPHiw3Ht4wUmiEOIFtHz5coMk0bp1a1auXGnQHTY9d+7cYenSpSxcuJCrV68a1Tds2JARI0bg7++fbT2mRN4mU3gI8QKKi4ujXr16hIaGMm3aNP79739neFNZKcWhQ4dYuHAha9euNWpeKlSoEN27d2fEiBE0aNAgp8MXucTcKTzkikKIfE4pxaNHjyhatKi+rHDhwnz33XfExcXh7e2d7r4PHz5k9erVLFy4kGPHjhnVlypVimHDhjF06FDc3J6eBFoUFJIohMjHrl+/ztChQ0lISGDjxo2knf6/du3a6e4XGhrKokWLWLFiBdHR0Ub13t7evPvuuwQEBFC4cOEciV3kH5IohMiHlFKsXr2aESNG6JcmXb58OQMHDkx3n8ePHxMYGMiSJUvYs2ePUX2RIkXo1asXw4cPlzWohQFJFELkM+Hh4YwYMYLffvvNoPz8+fMmtz916hRff/013377rcn1ritXrsw777xDv379cHFxyZGYRf4miUKIfCI+Pp45c+YwefJkYmNj9eWenp4sX77cYC3p2NhY1q1bx5IlS0x2bbWysqJDhw688847tGjRQkZPiwxJohAiH9izZw/Dhw/n1KlT+jJN0xg+fDifffYZ9vb2KKX4888/WbZsGT/++KPRzK2QnFQGDx7MgAED5OZ0PnPkyBHu3btHVFQUHTp0yNV7R5IohMjDkpKSGDx4MMuWLTMor127NosXL8bb25tbt27x3//+l+XLlxMSEmJ0DGtrazp27MiQIUN444035OrBQg4cOMDVq1eJioqiY8eOlCxZ0qC+d+/ehISEEBUVxbZt23jp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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#Plot x^2\n", + "plt.plot(xarray, pow2, color='k', linestyle='-', label='square')\n", + "#Plot x^3\n", + "plt.plot(xarray, pow3, color='k', linestyle='--', label='cube')\n", + "#Plot sqrt(x)\n", + "plt.plot(xarray, pow_half, color='k', linestyle=':', label='square root')\n", + "#Plot the legends in the best location\n", + "plt.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": 93, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "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": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Freefall Model (revisited)\n", + "\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": "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/notebooks/01_Interacting_with_Python.ipynb b/notebooks/01_Interacting_with_Python.ipynb new file mode 100644 index 0000000..65c3837 --- /dev/null +++ b/notebooks/01_Interacting_with_Python.ipynb @@ -0,0 +1,1435 @@ +{ + "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": [ + "# Interacting with Python\n", + "\n", + "These notebooks are a combination of original work and modified notebooks from [Engineers Code](https://github.com/engineersCode/EngComp.git) learning modules. The learning modules are covered under a Creative Commons License, so we can modify and publish *and give credit to L.A. Barba and N.C. Clementi*.\n", + "\n", + "Our first goal is to interact with Python and handle data in Python.\n", + "But let's also learn a little bit of background." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## What is Python?\n", + "\n", + "Python was born in the late 1980s. Its creator, [Guido van Rossum](https://en.wikipedia.org/wiki/Guido_van_Rossum), named it after the British comedy \"Monty Python's Flying Circus.\" His goal was to create \"an easy and intuitive language just as powerful as major competitors,\" producing computer code \"that is as understandable as plain English.\"\n", + "\n", + "We say that Python is a _general-purpose_ language, which means that you can use it for anything: organizing data, scraping the web, creating websites, analyzing sounds, creating games, and of course _engineering computations_.\n", + "\n", + "Python is an _interpreted_ language. This means that you can write Python commands and the computer can execute those instructions directly. Other programming languages—like C, C++ and Fortran—require a previous _compilation_ step: translating the commands into machine language.\n", + "A neat ability of Python is to be used _interactively_. [Fernando Perez](https://en.wikipedia.org/wiki/Fernando_Pérez_(software_developer) famously created **IPython** as a side-project during his PhD. The \"I\" in IPython stands for interactive: a style of computing that is very powerful for developing ideas and solutions incrementally, thinking with the computer as a kind of collaborator. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Why Python?\n", + "\n", + "\n", + "_Because it's fun!_ With Python, the more you learn, the more you _want_ to learn.\n", + "You can find lots of resources online and, since Python is an open-source project, you'll also find a friendly community of people sharing their knowledge. \n", + "_And it's free!_\n", + "\n", + "Python is known as a _high-productivity language_. As a programmer, you'll need less time to develop a solution with Python than with most other languages. \n", + "This is important to always bring up whenever someone complains that \"Python is slow.\"\n", + "Your time is more valuable than a machine's!\n", + "(See the Recommended Readings section at the end of this lesson.)\n", + "And if we really need to speed up our program, we can re-write the slow parts in a compiled language afterwards.\n", + "Because Python plays well with other languages :–)\n", + "\n", + "The top technology companies use Python: Google, Facebook, Dropbox, Wikipedia, Yahoo!, YouTube… Python took the No. 1 spot in the interactive list of [The 2017 Top Programming Languages](http://spectrum.ieee.org/computing/software/the-2017-top-programming-languages), by _IEEE Spectrum_ ([IEEE](http://www.ieee.org/about/index.html) is the world's largest technical professional society). " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### _Python is a versatile language, you can analyze data, build websites (e.g., Instagram, Mozilla, Pinterest), make art or music, etc. Because it is a versatile language, employers love Python: if you know Python they will want to hire you._ —Jessica McKellar, ex Director of the Python Software Foundation, in a [2014 tutorial](https://youtu.be/rkx5_MRAV3A)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Let's get started\n", + "\n", + "You could follow this first lesson using IPython. If you have it installed in the computer you're using, you enter the program by typing `ipython` on the command-line interface (the **Terminal** app on Mac OSX, and on Windows the **PowerShell** or a similar app). \n", + "A free service to try IPython online, right from your browser, is [Python Anywhere](https://www.pythonanywhere.com/try-ipython/). You can execute all the examples of this lesson in IPython using this service. \n", + "\n", + "You can also use Jupyter: an environment that combines programming with other content, like text and images, to form a \"computational narrative.\" All of these lessons are written in Jupyter notebooks. \n", + "\n", + "For this lesson, we will assume you have been guided to open a blank Jupyter notebook, or are working interactively with this lesson. \n", + "On a blank Jupyter notebook, you should have in front of you the input line counter:\n", + "\n", + "`In[1]:`\n", + "\n", + "That input line is ready to receive any Python code to be executed interactively. The output of the code will be shown to you next to `Out[1]`, and so on for successive input/output lines in IPython, or code cells in Jupyter." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Your first program\n", + "\n", + "In every programming class ever, your first program consists of printing a _\"Hello\"_ message. In Python, you use the `print()` function, with your message inside quotation marks." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello world!!\n" + ] + } + ], + "source": [ + "print(\"Hello world!!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Easy peasy!! You just wrote your first program and you learned how to use the `print()` function. Yes, `print()` is a function: we pass the _argument_ we want the function to act on, inside the parentheses. In the case above, we passed a _string_, which is a series of characters between quotation marks. Don't worry, we will come back to what strings are later on in this lesson. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Key concept: function\n", + "\n", + "A function is a compact collection of code that executes some action on its _arguments_. Every Python function has a _name_, used to call it, and takes its arguments inside round brackets. Some arguments may be optional (which means they have a default value defined inside the function), others are required. For example, the `print()` function has one required argument: the string of characters it should print out for you.\n", + "\n", + "Python comes with many _built-in_ functions, but you can also build your own. Chunking blocks of code into functions is one of the best strategies to deal with complex programs. It makes you more efficient, because you can reuse the code that you wrote into a function. Modularity and reuse are every programmer's friends." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Python as a calculator\n", + "\n", + "Try any arithmetic operation in IPython or a Jupyter code cell. The symbols are what you would expect, except for the \"raise-to-the-power-of\" operator, which you obtain with two asterisks: `**`. Try all of these:\n", + "\n", + "```python\n", + "+ - * / ** % //\n", + "```\n", + "\n", + "The `%` symbol is the _modulo_ operator (divide and return the remainder), and the double-slash is _floor division_." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "2 + 2" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4.9" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1.25 + 3.65" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "5 - 3" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "2 * 4" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.5" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "7 / 2" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "2**3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see an interesting case:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4.5" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "9**1/2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Discuss with your neighbor:\n", + "_What happened?_ Isn't $9^{1/2} = 3$? (Raising to the power $1/2$ is the same as taking the square root.) Did Python get this wrong?\n", + "\n", + "Compare with this:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.0" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "9**(1/2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Yes! The order of operations matters! \n", + "\n", + "If you don't remember what we are talking about, review the [Arithmetics/Order of operations](https://en.wikibooks.org/wiki/Arithmetic/Order_of_Operations). A frequent situation that exposes this is the following:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4.5" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "3 + 3 / 2" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.0" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(3 + 3) / 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the first case, we are adding $3$ plus the number resulting of the operation $3/2$. If we want the division to apply to the result of $3+3$, we need the parentheses." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Exercises:\n", + "Use Python (as a calculator) to solve the following two problems:\n", + "\n", + "1. The volume of a sphere with radius $r$ is $\\frac{4}{3}\\pi r^3$. What is the volume of a sphere with diameter 6.65 cm?\n", + "\n", + " For the value of $\\pi$ use 3.14159 (for now). Compare your answer with the solution up to 4 decimal numbers.\n", + "\n", + " Hint: 523.5983 is wrong and 615.9184 is also wrong.\n", + " \n", + "2. Suppose the cover price of a book is $\\$ 24.95$, but bookstores get a $40\\%$ discount. Shipping costs $\\$3$ for the first copy and $75$ cents for each additional copy. What is the total wholesale cost for $60$ copies? Compare your answer with the solution up to 2 decimal numbers.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To reveal the answers, highlight the following line of text using the mouse:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Answer exercise 1: 153.9796 Answer exercise 2: 945.45 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Variables and their type\n", + "\n", + "Variables consist of two parts: a **name** and a **value**. When we want to give a variable its name and value, we use the equal sign: `name = value`. This is called an _assignment_. The name of the variable goes on the left and the value on the right. \n", + "\n", + "The first thing to get used to is that the equal sign in a variable assignment has a different meaning than it has in Algebra! Think of it as an arrow pointing from `name` to `value`.\n", + "\n", + "\n", + " \n", + "\n", + "We have many possibilities for variable names: they can be made up of upper and lowercase letters, underscores and digits… although digits cannot go on the front of the name. For example, valid variable names are:\n", + "\n", + "```python\n", + " x\n", + " x1\n", + " X_2\n", + " name_3\n", + " NameLastname\n", + "```\n", + "Keep in mind, there are reserved words that you can't use; they are the special Python [keywords](https://docs.python.org/3/reference/lexical_analysis.html#keywords).\n", + " \n", + "OK. Let's assign some values to variables and do some operations with them: " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "x = 3 " + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "y = 4.5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Exercise:\n", + "Print the values of the variables `x` and `y`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's do some arithmetic operations with our new variables:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "7.5" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x + y" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "2**x" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.5" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y - 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And now, let's check the values of `x` and `y`. Are they still the same as they were when you assigned them?\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3\n" + ] + } + ], + "source": [ + "print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4.5\n" + ] + } + ], + "source": [ + "print(y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### String variables\n", + "\n", + "In addition to name and value, Python variables have a _type_: the type of the value it refers to. For example, an integer value has type `int`, and a real number has type `float`. A string is a variable consisting of a sequence of characters marked by two quotes, and it has type `str`.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "z = 'this is a string'" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "w = '1'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " What if you try to \"add\" two strings?" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'this is a string1'" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "z + w" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The operation above is called _concatenation_: chaining two strings together into one. Insteresting, eh? But look at this: " + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "unsupported operand type(s) for +: 'int' and 'str'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mx\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mw\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'int' and 'str'" + ] + } + ], + "source": [ + "x + w" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "_Error!_ Why? Let's inspect what Python has to say and explore what is happening. \n", + "\n", + "Python is a _dynamic language_, which means that you don't _need_ to specify a type to invoke an existing object. The humorous nickname for this is \"duck typing\":\n", + "\n", + "#### \"If it looks like a duck, and quacks like a duck, then it's probably a duck.\"\n", + "\n", + "In other words, a variable has a type, but we don't need to specify it. It will just behave like it's supposed to when we operate with it (it'll quack and walk like nature intended it to).\n", + "\n", + "But sometimes you need to make sure you know the type of a variable. Thankfully, Python offers a function to find out the type of a variable: `type()`." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "int" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "str" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(w)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "float" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### More assignments\n", + "\n", + "Here we assign a new variable to the result of an operation that involves other variables." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "sum_xy = x + y\n", + "diff_xy = x - y" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The sum of x and y is: 7.5\n", + "The difference between x and y is: -1.5\n" + ] + } + ], + "source": [ + "print('The sum of x and y is:', sum_xy)\n", + "print('The difference between x and y is:', diff_xy)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice what we did above: we used the `print()` function with a string message, followed by a variable, and Python printed a useful combination of the message and the variable value. This is a pro tip! You want to print for humans. Let's now check the type of the new variables we just created above:" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "float" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(sum_xy)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "float" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(diff_xy)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reflection point\n", + "When we created `sum_xy` and `diff_xy` two new variables were created that depended upon previously created variables `x` and `y`. How else can we accomplish this? Could we make a function? Could we combine the commands in one block as a script?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Special variables\n", + "\n", + "Python has special variables that are built into the language. These are: \n", + "`True`, `False`, `None` and `NotImplemented`. \n", + "For now, we will look at just the first three of these.\n", + "\n", + "**Boolean variables** are used to represent truth values, and they can take one of two possible values: `True` and `False`.\n", + "_Logical expressions_ return a boolean. Here is the simplest logical expression, using the keyword `not`:\n", + "\n", + "```Python\n", + " not True\n", + "```\n", + "\n", + "It returns… you guessed it… `False`.\n", + "\n", + "The Python function `bool()` returns a truth value assigned to any argument. Any number other than zero has a truth value of `True`, as well as any nonempty string or list. The number zero and any empty string or list will have a truth value of `False`. Explore the `bool()` function with various arguments.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bool(0)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bool('Do we need oxygen?')" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bool('We do need oxygen')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "**None is not Zero**: `None` is a special variable indicating that no value was assigned or that a behavior is undefined. It is different than the value zero, an empty string, or some other nil value. \n", + "\n", + "You can check that it is not zero by trying to add it to a number. Let's see what happens when we try that:" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "a = None\n", + "\n", + "b = 3" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "unsupported operand type(s) for +: 'NoneType' and 'int'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0ma\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'NoneType' and 'int'" + ] + } + ], + "source": [ + "a + b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Logical and comparison operators\n", + "\n", + "The Python comparison operators are: `<`, `<=`, `>`, `>=`, `==`, `!=`. They compare two objects and return either `True` or `False`: smaller than, smaller or equal, greater than, greater or equal, equal, not equal. Try it!" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "x = 3\n", + "y = 5" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x > y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can assign the truth value of a comparison operation to a new variable name:" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "z = x > y" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "z" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "bool" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(z)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Logical operators are the following: `and`, `or`, and `not`. They work just like English (with the added bonus of being always consistent, not like English speakers!). A logical expression with `and` is `True` if both operands are true, and one with `or` is `True` when either operand is true. And the keyword `not` always negates the expression that follows.\n", + "\n", + "Let's do some examples:" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "a = 5\n", + "b = 3\n", + "c = 10" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a > b and b > c" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Remember that the logical operator `and` is `True` only when both operands are `True`. In the case above the first operand is `True` but the second one is `False`. \n", + "\n", + "If we try the `or` operation using the same operands we should get a `True`. " + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a > b or b > c" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And the negation of the second operand results in …" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "not b > c" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What if we negate the second operand in the `and` operation above?\n", + "\n", + "##### Note: \n", + "\n", + "Be careful with the order of logical operations. The order of precedence in logic is:\n", + "\n", + "1. Negation\n", + "2. And\n", + "3. Or\n", + "\n", + "If you don't rememeber this, make sure to use parentheses to indicate the order you want. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Exercise:\n", + "\n", + "What is happening in the case below? Play around with logical operators and try some examples. " + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a > b and not b > c" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## What we've learned\n", + "\n", + "* Using the `print()` function. The concept of _function_.\n", + "* Using Python as a calculator.\n", + "* Concepts of variable, type, assignment.\n", + "* Special variables: `True`, `False`, `None`.\n", + "* Supported operations, logical operations. \n", + "* Reading error messages." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## References\n", + "\n", + "Throughout this course module, we will be drawing from the following 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", + "2. _Python for Everybody: Exploring Data Using Python 3_ (2016). Charles R. Severance. [PDF available](http://do1.dr-chuck.com/pythonlearn/EN_us/pythonlearn.pdf)\n", + "3. _Think Python: How to Think Like a Computer Scientist_ (2012). Allen Downey. Green Tea Press. [PDF available](http://greenteapress.com/thinkpython/thinkpython.pdf)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Recommended Readings\n", + "\n", + "- [\"Yes, Python is Slow, and I Don’t Care\"](https://hackernoon.com/yes-python-is-slow-and-i-dont-care-13763980b5a1) by Nick Humrich, on Hackernoon. (Skip the part on microservices, which is a bit specialized, and continue after the photo of moving car lights.)\n", + "- [\"Why I Push for Python\"](http://lorenabarba.com/blog/why-i-push-for-python/), by Prof. Lorena A. Barba (2014). This blog post got a bit of interest over at [Hacker News](https://news.ycombinator.com/item?id=7760870)." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 45, + "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/02-Numerical_error.ipynb b/notebooks/02-Numerical_error.ipynb new file mode 100644 index 0000000..9851be5 --- /dev/null +++ b/notebooks/02-Numerical_error.ipynb @@ -0,0 +1,574 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Freefall Model\n", + "## Computational solution\n", + "\n", + " \n", + "\n", + "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": "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": 1, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "t=np.array([0,2,4,6,8,10,12])\n", + "# or \n", + "t=np.linspace(0,12,7)" + ] + }, + { + "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(t)=v_{terminal}\\tanh{\\left(\\frac{gt}{v_{terminal}}\\right)}$" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "at time 0 s, speed is 0.00\n", + "at time 2 s, speed is 18.62\n", + "at time 4 s, speed is 32.46\n", + "at time 6 s, speed is 40.64\n", + "at time 8 s, speed is 44.85\n", + "at time 10 s, speed is 46.85\n", + "at time 12 s, speed is 47.77\n" + ] + } + ], + "source": [ + "c=0.25 \n", + "m=60\n", + "g=9.81 \n", + "\n", + "\n", + "def v_analytical(t,m,g,c):\n", + " v_terminal=np.sqrt(m*g/c)\n", + " v= v_terminal*np.tanh(g*t/v_terminal)\n", + " return v\n", + "\n", + "v_an=v_analytical(t,m,g,c)\n", + "\n", + "for i,v in enumerate(v_an):\n", + " print('at time %2.0f s, speed is %1.2f'%(t[i],v))" + ] + }, + { + "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": 3, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0. , 19.62 , 36.03213 , 44.8328434 ,\n", + " 47.702978 , 48.35986042, 48.49089292])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v_numerical=np.zeros(len(t));\n", + "for i in range(1,len(t)):\n", + " v_numerical[i]=v_numerical[i-1]+((g-c/m*v_numerical[i-1]**2))*2;\n", + "\n", + "v_numerical" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "Display time, velocity (analytical) and velocity (numerical)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time (s)|vel analytical (m/s)|vel numerical (m/s)\n", + "\n", + "-----------------------------------------------\n", + " 0.0 | 0.00 | 0.00\n", + "\n", + " 2.0 | 18.62 | 19.62\n", + "\n", + " 4.0 | 32.46 | 36.03\n", + "\n", + " 6.0 | 40.64 | 44.83\n", + "\n", + " 8.0 | 44.85 | 47.70\n", + "\n", + " 10.0 | 46.85 | 48.36\n", + "\n", + " 12.0 | 47.77 | 48.49\n", + "\n" + ] + } + ], + "source": [ + "print('time (s)|vel analytical (m/s)|vel numerical (m/s)\\n')\n", + "print('-----------------------------------------------')\n", + "for i in range(0,len(t)):\n", + " print('%7.1f | %18.2f | %15.2f\\n'%(t[i],v_an[i],v_numerical[i]));" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Set default values for plotting" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.rcParams.update({'font.size': 22})\n", + "plt.rcParams['lines.linewidth'] = 3" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0,0.5,'velocity (m/s)')" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(t,v_an,'-',label='analytical')\n", + "plt.plot(t,v_numerical,'o-',label='numerical')\n", + "plt.legend()\n", + "plt.xlabel('time (s)')\n", + "plt.ylabel('velocity (m/s)')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Errors in Numerical Modeling\n", + "\n", + "## 1 - Truncation\n", + "## 2 - Roundoff " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# 1- 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 in two ways\n", + "\n", + "1. Decrease step size -> $\\Delta t$=`delta_time`\n", + "\n", + "2. Increase the accuracy of the approximation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Truncation error as a Taylor series \n", + "\n", + "The freefall problem solution used a first-order Taylor series approximation\n", + "\n", + "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", + "First-order approximation:\n", + "$f(x_{i+1})=f(x_{i})+f'(x_{i})h$\n", + "\n", + "\n", + "We can increase accuracy 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": [ + "In the .gif below, the error in the function is reduced by including higher-order terms in the Taylor series approximation. \n", + "\n", + "![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": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "# 1- Roundoff\n", + "\n", + "## 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": 31, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "double precision 64 bit pi = 3.14159265358979311599796347\n", + "\n", + "single precision 32 bit pi = 3.14159274101257324218750000\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.26f\\n'%double) # 64-bit\n", + "print('single precision 32 bit pi = %1.26f\\n'%single) # 32-bit\n", + "print('First 26 digits of pi = 3.14159265358979323846264338')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to store the number in a computer you can only use so many bits, shown below is the 64-bit standard for floating point numbers:\n", + "\n", + " \n", + "\n", + "Each time you use an operation, e.g. `+ - / *` you lose some precision as well. \n", + "\n", + "Consider $\\pi$ again\n" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "no operations 64 bit pi = 3.14159265358979311599796347\n", + "\n", + "20 operations 64 bit pi = 3.14159265358979089555191422\n", + "\n", + "First 26 digits of pi = 3.14159265358979323846264338\n" + ] + } + ], + "source": [ + "double=np.array([pi],dtype='float64')\n", + "double_operated=double\n", + "for i in range(0,10):\n", + " double_operated=double_operated*(i+1)*1.0e-16\n", + " double_operated=double_operated*1/(i+1)*1.0e16\n", + "print('no operations 64 bit pi = %1.26f\\n'%double) # 64-bit\n", + "print('20 operations 64 bit pi = %1.26f\\n'%double_operated) # 64-bit after 1000 additions and 1 subtraction\n", + "print('First 26 digits of pi = 3.14159265358979323846264338')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the previous block of code, we see $\\pi$ printed for 3 cases:\n", + "\n", + "1. the 64-bit representation of $\\pi$\n", + "\n", + "2. the value of $\\pi$ after it has gone through 20 math operations ($\\times (0..10)10^{-16}$, then $\\times (0..10)10^{16}$)\n", + "\n", + "3. the actual value of $\\pi$ for the first 26 digits\n", + "\n", + "All three (1-3) have the same first 14 digits after the decimal, then we see a divergence between the actual value of $\\pi$ (3), and $\\pi$ as represented by floating point numbers. \n", + "\n", + "We can get an idea for computational limits using some built-in functions:\n", + "\n", + "- `np.info('float64').max`: the largest floating point 64-bit number the computer can represent\n", + "\n", + "- `np.info('float64').tiny`: the smallest non-negative 64-bit number the computer can represent\n", + "\n", + "- `np.info('float64').eps`: the smallest number that can be added to 1" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "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.\n", + "\n", + "In the following example, we will add $eps/2$ to s=1 1,000$\\times$. The result should be $s=1+500\\cdot eps$, but because $eps/2$ is smaller than floating point operations can track, we will get a different result depending upon how we do the addition.\n", + "\n", + "a. We make a `for`-loop and add $eps/2$ 1000 times in the loop\n", + "\n", + "b. We multiply $1000*eps/2$ and add it to the result" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "summation 1+eps/2 over 1000 minus 1 = 0.0\n", + "500.0 *eps= 1.11022302463e-13\n" + ] + } + ], + "source": [ + "s1=1;\n", + "N=1000\n", + "eps=np.finfo('float64').eps\n", + "for i in range(1,N):\n", + " s1+=eps/2;\n", + "\n", + "s2=1+500*eps\n", + "print('summation 1+eps/2 over ',N,' minus 1 =',(s-1))\n", + "print(N/2,'*eps=',(s2-1))" + ] + } + ], + "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/notebooks/02_Getting-started.ipynb b/notebooks/02_Getting-started.ipynb new file mode 100644 index 0000000..46c828f --- /dev/null +++ b/notebooks/02_Getting-started.ipynb @@ -0,0 +1,12144 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Getting Started\n", + "\n" + ] + }, + { + "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": 41, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "def code(i):\n", + " '''Example of bad variable names and bad function name'''\n", + " m=1\n", + " for j in range(1,i+1):\n", + " m*=j;\n", + " return m" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "3628800" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "code(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Choose variable names that describe the variable\n", + "\n", + "You might not have recognized that `code(i)` is meant to calculate the [factorial of a number](https://en.wikipedia.org/wiki/Factorial), \n", + "\n", + "$N!= N*(N-1)*(N-2)*(N-3)*...3*2*1$. \n", + "\n", + "For example, \n", + "\n", + "- 4! = 24\n", + "\n", + "- 5! = 120\n", + "\n", + "- 10! = 3,628,800\n", + "\n", + "In the next block, we have rewritten `code` so the output is unchanged, but another user can read the code *and* help debug if there is an issue. " + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "def factorial_function(input_value):\n", + " '''Good variable names and better help documentation\n", + " \n", + " factorial_function(input_number): calculates the factorial of the input_number\n", + " where the factorial is defined as N*(N-1)*(N-2)*...*3*2*1'''\n", + " factorial_output=1 # define 0! = 1\n", + " for factor in range(1,input_value+1):\n", + " factorial_output*=factor; # mutliply m by 1*2*3*...*N (factor)\n", + " return factorial_output\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "24" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "factorial_function(4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Defining the function with descriptive variable names and inputs helps to make the function much more useable. \n", + "\n", + "Consider the structure of a Python function:\n", + "\n", + "```python\n", + "def factorial_function(input_value):\n", + "```\n", + "This first line declares that we are `def`-ining a function that is named `factorial_function`. The inputs to the line are given inside the parantheses, `(input_value)`. We can define as many inputs as we want and even assign default values. \n", + "\n", + "```python\n", + " '''Good variable names and better help documentation\n", + " \n", + " factorial_function(input_number): calculates the factorial of the input_number\n", + " where the factorial is defined as N*(N-1)*(N-2)*...*3*2*1'''\n", + "```\n", + "The next 4 lines define a help documentation that can be accessed with in a couple ways:\n", + "\n", + "1. `?factorial_function`\n", + "\n", + "2. `factorial_function?`\n", + "\n", + "3. `help(factorial_function)`\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [], + "source": [ + "factorial_function?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + " factorial_output=1 # define 0! = 1\n", + "```\n", + "\n", + "This line sets the variable `factorial_output` to 1. In the next 2 lines we update this value based upon the mathematical formula we want to use. In this case, its $1*1*2*3*...*(N-1)*N$\n", + "\n", + "```python\n", + " for factor in range(1,input_value+1):\n", + " factorial_output*=factor; # mutliply m by 1*2*3*...*N (factor)\n", + "``` \n", + "\n", + "These two lines perform the computation that we set out to do. The `for`-loop is going to start at 1 and end at our input value. For each step in the `for`-loop, we will mulitply the factorial_output by the factor. So when we calculate 4!, the loop updates factorial_output 4 times:\n", + "\n", + "1. i=1: factorial_output = $1*1=1$\n", + "\n", + "2. i=2: factorial_output = $1*2=2$\n", + "\n", + "3. i=3: factorial_output = $2*3=6$\n", + "\n", + "4. i=4: factorial_output = $6*4=24$\n", + "\n", + "\n", + "\n", + "```python\n", + " return factorial_output\n", + "```\n", + "\n", + "This final line in our function returns the calculated value, `factorial_output`. We can also return as many values as necessary on this line, \n", + "\n", + "for example, if we had variables: `value_1`, `value_2`, and `value_3` we could return all three as such,\n", + "\n", + "```python\n", + " return value_1,value_2,value_3\n", + "```" + ] + }, + { + "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", + " " + ] + }, + { + "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": 63, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 3])" + ] + }, + "execution_count": 63, + "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": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 2])" + ] + }, + "execution_count": 64, + "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": 65, + "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": 65, + "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": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 4, 8],\n", + " [12, 16, 20]])" + ] + }, + "execution_count": 66, + "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": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 4],\n", + " [12, 16]])" + ] + }, + "execution_count": 67, + "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": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([5, 6])" + ] + }, + "execution_count": 68, + "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": 69, + "metadata": {}, + "outputs": [], + "source": [ + "#import random library\n", + "import random" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [], + "source": [ + "lst_1 = random.sample(range(100), 100)\n", + "lst_2 = random.sample(range(100), 100)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[37, 62, 29, 48, 89, 21, 93, 82, 90, 65]\n", + "[46, 20, 26, 52, 76, 77, 78, 17, 80, 89]\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": 72, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 43 µs, sys: 0 ns, total: 43 µs\n", + "Wall time: 49.1 µ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": 73, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[83, 82, 55, 100, 165, 98, 171, 99, 170, 154]\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": 74, + "metadata": {}, + "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": 75, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[61 75 51 76 48 80 69 79 91 0]\n", + "[87 67 74 97 76 91 37 43 69 11]\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": 76, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 37 µs, sys: 0 ns, total: 37 µs\n", + "Wall time: 42.2 µ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": 77, + "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": 78, + "metadata": {}, + "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": 89, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [], + "source": [ + "def setdefaults():\n", + " plt.rcParams.update({'font.size': 22})\n", + " plt.rcParams['lines.linewidth'] = 3\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "metadata": {}, + "outputs": [], + "source": [ + "setdefaults()" + ] + }, + { + "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** `plt.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": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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/e9/P9cxlVJs3boVX19fatasybJlywySxMsvv8zXX39NeHg4Y8eOlSSRT8kVhRAFwK1bt+jXrx9btvwzNMnR0ZGWLVtm6XhxcXGsXr2aOXPm8PfffxvVe3t7M3bsWDp27IhOJ99H8ztJFEK84LZt20afPn30y5UCNGjQgB9++IGKFZ85ObOB27dv89///pcFCxYYHA+S73F07tyZUaNG0bhx42yJXeQNkiiEeEE9efKECRMm8Nlnn5F2vNSYMWOYOnVqpu5NHD16lPnz5/PDDz8Y3X8oWrQob7/9Nh988EGmE4/IHyRRCPECCg8Pp1evXhw6dEhfVrJkSb777jtat25t1jGePHnCTz/9xPz589m/f79RfdmyZXn//fcZPHiw3Ht4wUmiEOIFtHz5coMk0bp1a1auXGnQHTY9d+7cYenSpSxcuJCrV68a1Tds2JARI0bg7++fbT2mRN4mU3gI8QKKi4ujXr16hIaGMm3aNP79739neFNZKcWhQ4dYuHAha9euNWpeKlSoEN27d2fEiBE0aNAgp8MXucTcKTzkikKIfE4pxaNHjyhatKi+rHDhwnz33XfExcXh7e2d7r4PHz5k9erVLFy4kGPHjhnVlypVimHDhjF06FDc3J6eBFoUFJIohMjHrl+/ztChQ0lISGDjxo2knf6/du3a6e4XGhrKokWLWLFiBdHR0Ub13t7evPvuuwQEBFC4cOEciV3kH5IohMiHlFKsXr2aESNG6JcmXb58OQMHDkx3n8ePHxMYGMiSJUvYs2ePUX2RIkXo1asXw4cPlzWohQFJFELkM+Hh4YwYMYLffvvNoPz8+fMmtz916hRff/013377rcn1ritXrsw777xDv379cHFxyZGYRf4miUKIfCI+Pp45c+YwefJkYmNj9eWenp4sX77cYC3p2NhY1q1bx5IlS0x2bbWysqJDhw688847tGjRQkZPiwxJohAiH9izZw/Dhw/n1KlT+jJN0xg+fDifffYZ9vb2KKX4888/WbZsGT/++KPRzK2QnFQGDx7MgAED5OZ0PnPkyBHu3btHVFQUHTp0yNV7R5IohMjDkpKSGDx4MMuWLTMor127NosXL8bb25tbt27x3//+l+XLlxMSEmJ0DGtrazp27MiQIUN444035OrBQg4cOMDVq1eJioqiY8eOlCxZ0qC+d+/ehISEEBUVxbZt23jp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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#Plot x^2\n", + "plt.plot(xarray, pow2, color='k', linestyle='-', label='square')\n", + "#Plot x^3\n", + "plt.plot(xarray, pow3, color='k', linestyle='--', label='cube')\n", + "#Plot sqrt(x)\n", + "plt.plot(xarray, pow_half, color='k', linestyle=':', label='square root')\n", + "#Plot the legends in the best location\n", + "plt.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": 93, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEGCAYAAAB7DNKzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzt3Xl4FEX6wPFv5U5IAoQkXAECiBABBYkoCsohKsilCIgHsrKioCiyyqVyiK7iLYqK6yIgggjID4EVJIpca5QgAhtAEETuKwSChNz1+6NnJpmQTGaSmekc7+d5+unp6p6ad5qh3/RRVUprjRBCCFEcH7MDEEIIUb5JohBCCOGQJAohhBAOSaIQQgjhkCQKIYQQDkmiEEII4ZAkCiGEEA5JohBCCOGQJAohhBAO+ZkdgDtERkbq2NhYs8MQQogKZevWrWe01lElbVcpEkVsbCxJSUlmhyGEEBWKUupPZ7aTS09CCCEckkQhhBDCIUkUQgghHJJEIYQQwiFJFEIIIRySRCGEEMIhSRRCCFEBaa0Zu3YsPx/92eOfJYlCCCEqoG/3f8vr/32d6z+5nkFLBpGn8zz2WZIohBCigtFaM/H7ibbliKAIfJTnDueVomW2q7TWXLhwgbS0NNLT08nNzTU7JOEEPz8/qlevTkREBH5+VfKnKwQAS3cv5ZfjvwAQ5BfE8zc/79HPq3L/27TWnDp1iosXLxIREUGdOnXw9fVFKWV2aMIBrTVZWVmkpKRw+PBhGjVqhI+PnBCLqicnL4fnv89PDKPaj6J+eH2PfmaV+5924cIFLl68SKNGjahRowZ+fn6SJCoApRSBgYHUrVsXPz8/UlNTzQ5JCFPM2z6P31J+AyA8MJxxN43z+GdWuUSRlpZGREQEvr6+ZociSkEpRY0aNbh48aLZoQjhdZk5mUz5YYpt+dkbn6VWSC2Pf65TiUIp1VkppZ2cGjpZ55wS6tlTtq9WtPT0dEJDQz1RtfCSkJAQLl26ZHYYQnjdR0kfcTjtMABRIVE8df1TXvlcZ+9RnADmOljfHogD9gOHXYxhM/B7EeXHXazHKbm5uXI2UcH5+PiQl+e5RwGFKI8uZF7g5Y0v25af6/QcYYFhXvlspxKF1noPMLS49UqpZMvL2Vpr7WIMn2it57j4njKRexIVm/z7iaroncR3OJ1+GoCG1RvyWPxjXvvsMt+jUEp1AK4CcnF81iGEEKIUUtJTeOPHN2zLU26ZQqBfoNc+3x03sx+2zFdrrY+6oT4hhBAFTN88nbTMNABaRLbgwWse9OrnlylRKKVCgEGWxX+XspouSqm3lFIfK6WmKaVuV8qDTQyFxyxevJh+/foRExNDtWrVuOaaa/jkk09w/WqkEMLqaNpR3vv5PdvytC7T8PPxbhO4sn7aACAMOAWsLGUdQ4oo26WUuldrvbPUkQmve+utt4iNjeXNN98kKiqKtWvX8uijj3L48GGmTp1qdnhCVEjTNkwjIycDgHZ129E/rr/XYyhrorBedpqntc528b2/AluB74A/gXDgWuBl4BogQSl1rVzOqjhWrFhBZGSkbblr166kpKTwzjvvMHnyZGlJLYSLfj/7O//eln+x5uWuL5vyMEep/+cqpa4AbrYsznb1/Vrrd7TW72mtd2mtL2qtj2utV2E8apsIRAMTHHz+cKVUklIq6fTp06X5CsLNCiYJq7Zt25KWlkZGRoYJEQlRsU3+YTI5eTkA3NLoFm5repspcZTlTzzr2cSPWuvd7ggGQGudBbxiWezpYLuPtdbxWuv4qKgod328cLONGzcSGxtLSEiI2aEIUaH8cvwXFu5caFt+pdsrpj0aXqpEoZTyJf/eQmlvYjtibZXt2Z6uhEdt2rSJRYsW8fjjj5sdihAVitaaZ759Bo3xIEif5n3o0KCDafGU9ozidoyD+EVgkfvCsbF2XvKXB+oWXnDkyBEGDRrELbfcwtNPP212OEJUKP/Z9x/WHVwHgK/yZfqt002Np7SJYphlvkhr7YmD+UDLfIsH6hYedu7cOXr06EFERATLli2TLlOEcEFOXg7Prn3Wtjy83XBaRLYwMaJSJAqlVCTQy7Lo8LKTUuoVpdQepdQrhcrbKKV6WS5hFSz3U0qNAZ60FL3tanzCPSZOnIhSiu7du1+2TmvN/fffj1KKnj17kp2d/8DbpUuX6NWrF+fPn2f16tVUr17dm2ELUeHN3jab3WeM275hAWFM6TzF3IAo3RnFg0AAsEdr/d8Stq0LNLfMC4oFVgCnlFI/KqUWK6VWYzwm+6Zlm3Fa6zWliE+4wYQJE4iOjiYhIYGEhAS7daNGjWLBggV06tSJpUuX4u/vD0BOTg4DBw5k9+7drF69mvr15RaTEK64kHmBSesm2ZbHdxxPdLVoEyMylCZR/M0yd/mR2AK2A+8CvwENgd7ALUA68CnQXmv9WhnqF2UUFhbG5MmTASNpWE2aNImZM2fSrl07Vq5cSXBwsG3dyJEjWblyJc899xxpaWkkJibaprS0NK9/ByEqmtf/+zonL54EICY8htE3jDY5IoOqDN0rxMfH66SkJKe23b17N3FxcR6OqHLIycmhdevW7Nmzh8WLF3P06FFGjx5NXFwcGzZsuKzdRGxsLH/++WeRda1bt47OnTu7LTb5dxSVzdG0ozR7rxmXcoyxVub0ncNDbR7y6GcqpbZqreNL2q7KjZktnOfn58f06dPp27cvI0aMICUlhdjYWNauXVtk47qDBw96P0ghKokX1r1gSxJt6rThgasfMDmifJIoCqvIYx144OywT58+tGzZkuTkZNs9C7n3IIR7bT+xnTm/zrEtv9H9DXx9ys/TgtL5jnBoxowZJCcb41JlZGQQHh5uckRCVD5jE8baGtf1bNaTbk26mRyRPUkUolhz585l9OjR1K9fn969e5OWlia9wArhZmt+X8O3+78FwEf58Nqt5e85HkkUhWldcSc3WrZsGcOGDSMiIoK1a9cyc+ZMgoKCmDVrFnv37nXrZwlRVeXm5fLM2mdsy8PaDqNldEsTIyqaJApxmYSEBAYPHkxISAirV68mLi6OBg0a8MQTT5CTk8P48ePNDlGISmHOr3P436n/AVDNvxpTO5fPM3ZJFMJOYmIi/fr1A2D58uXEx+c/OTdhwgSqV6/OsmXL2LRpk1khClEpnM84z8TvJ9qWx940lrphhdsmlw+SKITNzp076dmzJ5mZmSxatIguXbrYrY+IiGDcuHEAPPPMM0VVIYRw0ovrX+TUxVMA1A+rzz86/MPkiIonj8cKm9atW3P27FmH20yYMMGupbYQwnV7zuxhxs8zbMtv3PYG1QKqmRiRY3JGIYQQXqS1ZvTq0baR6zo17MSgloNMjsoxSRRCCOFFK/euZM1+o79TH+XDjB4zTBu5zlmSKIQQwksyczJ5ek3+QF6PXPsIbeq0MTEi50iiEEIIL3k78W32p+4HoEZQDV7q+pLJETlHEoUQQnjBsQvHeGlDfmJ4sfOLRIZc3rlmeSSJQgghvGBcwjguZl8EoGVUS0ZcN8LkiJwniUIIITzsv4f/y/wd823L797xLn4+Fad1giQKIYTwoDydx5PfPGlbvjvu7nLXO2xJJFEIIYQHfbrtU7Ye3wpAkF8Qb972pskRuU4ShRBCeMi5jHNM+C6/J4Nnb3yW2Bqx5gVUSpIohBDCQ5777jlOp58GoEF4A8Z3rJg9L0uiEEIID9hydAsfJn1oW37ztjcJ8Q8xMaLSk0QhhBBulpOXw6MrH7UNb3rHFXdwz1X3mBxV6UmiEEIIN/tgywdsO7ENMG5gv9/j/XLfn5MjkiiEEMKNjl04xvPfP29bfr7T8zSNaGpiRGUniUIIIdzo6TVPcyHrAgAtIlvwzI0Vf5AvSRTCbb766is6duxIZGQkQUFBNG3alGeeeYbz58+bHZoQXrH699V8mfylbfnDOz8k0C/QxIjco+K0IRfl3tmzZ7n55psZM2YMERER7Ny5k6lTp7Jjxw6+/fZbs8MTwqMuZV/i8f88blt+8OoH6Rzb2byA3EgShXCbv//973bLnTt3JigoiOHDh3Ps2DHq1atnUmRCeN4/N/6TA6kHAKML8Tdue8PkiNxHLj0Jj6pVqxYA2dnZJkcihOfsObOH6Zun25an3zqd6GrRJkbkXnJGIdwuNzeX7OxskpOTefHFF+nduzeNGjUyOywhPEJrzchVI8nOM/4YuiHmBv5+7d9LeFfFImcUwu1q1apFcHAw8fHx1K1bl4ULF5odkhAe8/nOz1l3cB0AvsqXj+78CB9VuQ6tlevbiHLhhx9+YPPmzcyaNYvk5GR69+5Nbm6u2WEJ4XZn0s/YjYH91PVPcU2da0yMyDPk0pNwuzZtjMHib7zxRtq1a0d8fDzLli3jnnsqbhcGQhTlqdVPcSb9DAAx4TFM6TzF3IA8RM4oRJEmTpyIUoru3btftk5rzf33349Sip49ezq8Ud2mTRt8fHz4/fffPRmuEF63cu9KFuxcYFue1WsWYYFhJkbkOZIoRJEmTJhAdHQ0CQkJJCQk2K0bNWoUCxYsoFOnTixduhR/f/9i69m8eTN5eXk0adLE0yEL4TXnM87z2MrHbMsPXP0APZv1NDEiz5JLT6JIYWFhTJ48mccff5wJEyZw6623AjBp0iRmzpxJu3btWLlyJcHBwbb33H777XTr1o2WLVsSGBjItm3beP3117n66qvp16+fWV9FCLcbu3YsRy8cBSC6WjTv3P6OyRF5liQKUazhw4fz3nvvkZSUxJIlSzh69CjTpk0jLi6O1atXEx4ebrf99ddfz/z58/njjz8AiI2NZeTIkYwZM4aAgAAzvoIQbrfuj3V8/MvHtuX3e7xPrZBaJkbkeUprbXYMZRYfH6+TkpKc2nb37t3ExcUVu15NrbhdAevJ7v+3/Prrr+nbty+RkZGkpKTQqFEjNm3aRP369d3+Wa4o6d9RCE+4mHWRqz+62tYC+64Wd7F04NIK24W4Umqr1jq+pO3kHoVwqE+fPrRs2ZIzZ84QFRVFQkKC6UlCCLO8sO4Fu246ZvacWWGThCskUQiHZsyYQXJyMgAZGRmXXW4SoqpIPJLIO4n59yLeuu0t6obVNTEi75F7FIV44vJNRTV37lxGjx5N/fr1ufbaa1mxYgVTp07l/fffNzs0IbwqMyeTYV8Psw1telvT2xjaZqi5QXmRnFGIIi1btoxhw4YRERHB2rVrmTlzJkFBQcyaNYu9e/eaHZ4QXvXyxpfZdXoXANX8qzGr16wqccnJShKFuExCQgKDBw8mJCSE1atXExcXR4MGDXjiiSfIyclh/PjxZocohNdsP7GdVza9Ylt+9dZXia0Ra15AJpBEIewkJiba2jwsX76c+Pj8ByImTJhA9erVWbZsGZs2bTIrRCG8JjMnkweXPUhOXg4AHRt2ZOR1I02OyvskUQibnTt30rNnTzIzM1m0aBFdunSxWx8REcG4ceMAeOaZij8OsBAlmfzDZHae2glAsF8wn/T+pNL1DOsMp7+xUmqOUko7mPa4+uFKKR+l1ONKqSSl1F9KqfNKqY1KqcGu1iXKrnXr1pw9e5bs7Gz69u1b5DYTJkxAa01iYqKXoxPCuzYd2sRrm1+zLb/W/TWaRzY3MSLzlOapp81AUT28HXelEqWUL/AV0AdIA74FAoFuwAKlVAet9ZOliE8IIcrkQuYFhiwbYnvKqXuT7lXykpNVaRLFJ1rrOW747NEYSWIX0FVrfRJAKdUM2AiMUkp9p7Ve7obPEkIIp/3j23/wxzmjK5oaQTWY3Xd2lbzkZGXKN7ecTYy1LI6wJgkArfU+YJxl8TlvxyaEqNpW7l3Jv375l215Zs+ZxITHmBiR+cxKkR2AaOCI1npDEesXA9nAdUop6S9CCOEVZ9LP8Pev88e7HnDVAAa3klumpbn01EUpdTUQCpwENgFrtdZ5LtTR1jLfUtRKrXW6UioZaGOZjpYiTiGEcJrWmsdWPsbJi8YFjjqhdfjwzg+rVMO64pQmUQwpomyXUuperfVOJ+tobJn/6WCbQxhJorGDbYQQwi3m75jP0t1Lbcuz+8yu9N2HO8uVS0+/Ak8CLTHOJuoBvYDtwFVAgguXiUIt84sOtvnLMi9ybEGl1HDLY7VJp0+fdvJjhRDicofPH+aJb56wLT/a7lF6NOthYkTli9OJQmv9jtb6Pa31Lq31Ra31ca31KqA9kIhxz2GCk9VZz+VK3QOf1vpjrXW81jo+KiqqtNUIIaq4PJ3H0OVDSctMA6Bpzaa8cdsbJkdVvpT5ZrbWOguwdoTi7KCxFyzzUAfbWNddcLCNEEKUyWubX+P7P74HwEf5MO+ueYQGODo0VT3ueurJ2irb2UtPBy3zRg62aVBoWyGEcKvEI4k8//3ztuXxN43nxgY3mhhR+eSuRGG94/OXw63y/WKZX1fUSqVUCNDKsritDHEJIUSRzmWcY/DSweTqXAA6xHRgSucp5gZVTrkrUQy0zIt83LUIPwKngBil1M1FrB8A+ANbtNbyaKwQwq201gxfMZyD5w4CUD2wOgv6L8Df19/cwMoppxKFUqqNUqqXpUV1wXI/pdQYjKehAN4utH6eUmqPUuqJguVa61zgdcvih0qp6ALvaQa8all82fmvIoQQzvnkl09YvGtx/nKfT6rcGBOucLYdRSywDDirlNoLHMF4bLU1xmOyecA4rfWaQu9rCDQHIouo823gZqA3sE8p9R3GWcStQBDwnvTzJIRwt+RTyTy5Or+/0UfbPco9V91jYkTln7OJYjvwLsajsI0wWlZrjITxKTBTa73VlQ/WWucqpfoBI4G/AbcDucBW4AOt9QJX6hNCiJJcyr7EoCWDyMjJAKBVdCvevv3tEt4lnEoUWus/MHp7dYnWunMJ6/OA9y2TEEJ41Jg1Y0g+nQwYAxF90f8Lgv2DTY6q/Ku6/eaKMktKSkIp5ZFJCHdbumspH239yLb8zh3v0DK6pYkRVRySKESpzZs3j4cffphLly6htXbrJIQ7HTx3kGFfD7MtD7hqAI9c+4iJEVUspekUUAiys7P54osv+OqrrwgKCjI7HCGKlZmTyaAlgzifeR6ARtUb8XHvj+XM1QVyRiFK5T//+Q9hYWF07NjR7FCEcOjpNU/z89GfAfBVvizsv5AaQTVMjqpikUQhSmXevHkMGVJUj/NClB+fbf+MD5M+tC2/3v11OjToYGJEFZMkCuGys2fPsmrVKh588EGzQxGiWDtO7uDRlY/alge2HMjoG1x+eFMgiUKUwhdffEH79u1p0qRJsdtMnDgRpRTdu3e/bJ3Wmvvvvx+lFD179iQ7O9uT4Yoq6FzGOe5edDeXci4B0CKyBZ/0/kTuS5SSJApRpJ9//pn33y+6ecvcuXN56KGHHL5/woQJREdHk5CQQEJCgt26UaNGsWDBAjp16sTSpUvx95f+dYT75Ok8Hvq/h9ifuh+A0IBQvhr4FWGBRY6BJpwgiULYSU5Opnnz5nTr1o0nn3ySw4cP263/7bff2LlzJwMGDHBYT1hYGJMnTwaMpGE1adIkZs6cSbt27Vi5ciXBwdLYSbjX9E3T+fq3r23Ls/vMJi4qzsSIKj5JFIUoVXEnd2jatCkbN25k/PjxaK35/PPP7dbPnTuXfv36ER4eXmJdw4cPp0WLFiQlJbFkyRLeffddpk2bRlxcHKtXr3aqDiFc8d2B73h+Xf74Ek/f8DQDWjr+o0aUTBKFsBMUFER0dLTtHsL8+fNt6/Ly8pg/f36Jl52s/Pz8mD59OgAjRozg6aefJjY2lrVr1xIZWVQ/kUKU3uHzh7l36b3k6TwAOjbsyPRbp5scVeUgiUIUKTY2lptuuonk5GS2bTPGjlq3bh05OTnceuutTtfTp08fWrZsyZkzZ4iKiiIhIYH69Z0dCFEI52TmZDJg8QDOpJ8BoE5oHb6850sZX8JNJFEUonXFndzN+vir9axi3rx5PPDAA/j6+jp6m50ZM2aQnGx0wpaRkSGXm4Tbaa0ZsWoEPx39CTAa1X15z5fUDatrcmSVhyQKUayBAwcSGBjIggULSEtLY+nSpS41sps7dy6jR4+mfv369O7dm7S0NKZOnerBiEVV9Hbi23z666e25de7v06nRp1MjMhLtIbPPoMePSA316MfJYlCFKtGjRr07NmTEydOMHLkSJo3b06rVq1KfiOwbNkyhg0bRkREBGvXrmXmzJkEBQUxa9Ys9u7d6+HIRVXxn33/4dm1z9qWh7YZWjUa1f3xB9xxBwwZAqtXw4wZHv04SRTCIevlp88//9zpm9gJCQkMHjyYkJAQVq9eTVxcHA0aNOCJJ54gJyeH8ePHezJkUUXsPr2bwUsH225e39jgRj6686PK3aguNxfefhtatYJvv80v/+QTyMnx2MdKohAO3XnnndSsWRN/f38GDx5c4vaJiYn069cPgOXLlxMfH29bN2HCBKpXr86yZcvYtGmTx2IWlV9Kegq9F/YmLTMNgAbhDfhq4FcE+gWaHJkH7dgBHTrAmDGQnm6UKQWjR8NPP4Gf5zoDl0QhHAoICGDgwIH06NGDqKgoh9vu3LmTnj17kpmZyaJFi+jSpYvd+oiICMaNGwfAM88847GYReWWnZvNwCUDbS2vQ/xD+Hrw19QOrW1yZB6SkQHPPw/t2sGWLfnlrVrBjz8aZxihoR4NQVWGQWLi4+N1UlKSU9vu3r2buDhppemKY8eOkZWVRWxsrNmh2Mi/Y9X1+KrH+SDpA9vy0oFLuTvubhMj8qANG+CRR6Dgfb2AAJg0CZ591nhdBkqprVrr+JK2k4GLRInq1atndghCAPDBlg/sksS0LtMqZ5I4exbGjoV//9u+vGNH+Ne/oEULr4Yjl56EEBXC9398z5PfPGlbvrfVvTzX6TkTI/IArWH+fCMRFEwSYWHw4Yewfr3XkwTIGYUQogLYdXoX/b/sT6422gu0q9uOf/f5d+V6wmnfPhgxAr77zr78rruMx19jYsyJCzmjEEKUc8cuHKPH5z04l3EOgLqhdVl+73JC/ENMjsxNsrLgpZegdWv7JNGgASxfDl99ZWqSADmjEEKUY2mZafT8vCeHzh8CjLElVt23ivrhlaS/sA0b4LHHYPfu/DIfH3jqKXjxRY8/zeQsSRRCiHIpKzeL/l/2Z/vJ7YDRh9OSAUtoW7etyZG5wcmTxlNLn31mX96uHXz8MVx7rTlxFUMuPQkhyh2tNY+seISEA/mjI/6r97+4/YrbTYzKDXJz4YMPoHlz+yQRGgrvvms0nCtnSQKq6BmF1rpy3QSrYipD2x/h2KR1k5i3fZ5teWrnqfyt7d9MjMgNfv4ZRo6ErVvtywcOhLfegnLc/X6VO6Pw8/MjKyvL7DBEGWRnZ7vU1bmoWD7e+jEvbXzJtjys7TBeuPkFEyMqo9RU42mmG26wTxJXXAFr1sCiReU6SUAVTBTVq1cnJSVF/iqtwNLS0ggLCzM7DOEBK/euZMSqEbblHlf04MM7P6yYVwDy8oy2EFdeCR99lD9oTFCQcaN650647TZzY3RSlUsUERERZGZmcuTIES5cuEBubq4kjQpAa01WVhZnzpwhNTWViIgIs0MSbvbz0Z8ZtGSQrTfYa+tey5cDKugodT//bJxB/P3vcOZMfnnPnpCcDC+8YCSMCqLK3aPw8/OjUaNGpKamkpqayrFjx8jLyzM7LOEEX19fwsLCaNiwIYGBlbiX0Cpo58md3DH/DtKzjV5RY2vEsuq+VYQGlI/HQ512+jRMmHB51xsNGhg3q/v1M3p8rWCqXKIA8PHxoVatWtSqVcvsUISo8val7KP7Z91JzUgFoFZwLb65/xvqhNYxOTIX5OQYl5deeAHOncsvDww0+mwaPx5CKm4DwSqZKIQQ5cOh84e49bNbOXnxJADhgeGseWANLSK9359Rqa1fD6NGGfccCurTx+gCvEkTc+Jyoyp3j0IIUT6c/Osk3T/rbmt1HewXzMrBK2lXr53JkTnp4EEYMAA6d7ZPEldcAatWGd1vVIIkAZIohBAmSL2Uym3zb2NvijHOgr+PP8sGLaNTo04mR+aEv/4yBhJq0QKWLMkvDwmBV16B//3PuGldicilJyGEV/2V9Rc9F/Rkx8kdAPgoHxb2X1j+W13n5cHnnxv3G44ds193//3w6qumd97nKZIohBBek5GTQd8v+pJ4JNFWNrvPbPpf1d/EqJzw009GR30//WRfHh9vPM10443mxOUlculJCOEVWblZDFw8kO//+N5W9l6P93iozUMmRlWCQ4eMs4UbbrBPEnXqwJw5RlklTxIgZxRCCC/IzMlkwOIBrNi7wlb2cteXeaL9EyZG5UBamnEp6a23IDMzvzwgAMaMgYkTjVHnqghJFEIIj8rMyaT/l/1ZtW+VrWzcTeOY0HGCiVEVIyfHaCw3aRKcOmW/7u674fXXK82TTK6QRCGE8JiMnAzuXnQ33/z+ja1s3E3jeKXbK+Wv/6bVq+Ef/4Bdu+zL4+ONM4tOFeCJLA+RexRCCI/IyMmg3xf97JLExI4Ty1+S2LbN6JyvRw/7JNGgAcyfb9yHqMJJAuSMQgjhAZeyL9H3i76sPbDWVvbCzS8wtfPU8pMkDh40utyYP9++PDTU6K/p6achONiU0MobSRRCCLdKz06nz8I+fPfHd7ayKbdMYXLnySZGVUBKCvzzn/D++1BwbBofH6O31xdfhNq1zYuvHHLq0pNSyl8p1U0p9aZSKlEpdVwplaWUOqqUWqKU6uzqByul5iiltINpj8vfRghhqotZF+m1oJddknix84vlI0lcugTTp0PTpsY9h4JJok8foxuOWbMkSRTB2TOKWwDrOeQJYCtwEbgK6A/0V0pN01pPKkUMm4Hfiyg/Xoq6hBAmOZdxjl4LerH58GZb2ctdX2Zip4kmRoXxJNPcuTBlChw5Yr/uhhuMJ5k6djQltIrC2USRBywF3tVabyy4Qik1CPgceEEptU5rvc7FGD7RWs9x8T1CiHLk+IXj3PH5HbZuOQBe7fYq4zqOMy+ovDxYutS4D/Hbb/brmjUz+mW6++4KOT6Etzl16Ulr/b3W+p7CScKybhEwx7L4gBtjE0JUAPvP7qfjpx3tksTbt7/9yjYtAAAfrUlEQVRtXpLQ2hiL+rrrYOBA+yQRHQ0ffGCMMte/vyQJJ7nrZvY2y7xy9oglhCjS9hPbuX3+7bbxJHyVL5/2/ZQHr3nQnIASE40nln74wb48PNwYQOipp4ynmoRL3JUomlnmpbmv0EUpdTUQCpwENgFrtdYyPqkQ5dimQ5votaAX5zPPAxDkF8TiAYvpdWUv7wfz668weTJ8/bV9eVCQMajQuHEgI1qWWpkThVKqDjDUsri0FFUMKaJsl1LqXq31ziLWCSFMtmrvKu5ZfA8ZORkAVA+szorBK7w/nkRyspEglhY69Pj6Go+6vvAC1K/v3ZgqoTK1zFZK+QHzgerAd1rrFSW8paBfgSeBlhhnE/WAXsB2jKepEpRS8i8sRDnz2fbP6PtFX1uSqF2tNuuHrvdukti7F+67D1q3vjxJDB4Me/YYY1hLknCLsnbh8RHQDTiMizeytdbvaK3f01rv0lpf1Fof11qvAtoDiUA0UGyvYUqp4UqpJKVU0unTp8vwFYQQztBa88+N/2TI/w0hV+cC0LhGYzY/vJlr6lzjnSAOHIChQyEuDhYuNG5cW/XrB9u3w4IFxnCkwm1KnSiUUu8CwzDaVXTTWp9wR0Ba6yzgFctiseMJaq0/1lrHa63jo6Ki3PHRQohiZOVm8fDXD/Pc98/ZylpHt2bzw5tpGtHU8wEcOACPPALNmxttIvIK3MLs2ROSkmDZMrj6as/HUgWV6h6FUupNjMtGpzGSxD63RgXWVtly3iiEyVIvpdL/y/6sO5jfRKpzbGe+GvgVNYNrevbD9++Hl1+GefMgN9d+XffuMHUqdOjg2RiE64lCKfUaMAZIAbprrXeV8JbSsD6e8JcH6hZCOGn/2f3cueBOfkvJb4swtM1QZvWaRYBvgOc+eN8+I0HMn395grj5Zpg2zZgLr3ApUSilXgWeBVIxksR2j0QFAy3zLR6qXwhRgs2HNtP3i76kXEqxlf2z6z8Z33G853qA3bsXXnoJPv/c/vISQOfOxhNOnTt75rNFsZy+R6GUmgaMA85hJIltJbwFpdQrSqk9SqlXCpW3UUr1Ukr5Fir3U0qNwbisBfC2s/EJIdxn4c6FdJ3X1ZYkAn0D+aL/F0zoNMEzSWLHDrj3XuMm9Wef2SeJbt1g/XpYt06ShEmcOqNQSvUBnrcs/g6MKubHskdr/WqB5bpAc8u8oFhgGXBWKbUXOAKEAa0xHpPNA8Zprdc49zWEEO6Qp/OYtn4aU9ZPsZVFhUSx/N7ldGjggXsBiYnGJaaVKy9f1727cQZx003u/1zhEmcvPUUUeB1vmYqyHni1mHUFbQfexXgUthHQFtAYCeNTYKbWequTsQkh3OB8xnmG/N8Qvv4tv3VzXGQcq+5bReOajd33QVrD998bY0J8//3l6++4wxizWm5SlxtKF3wOuYKKj4/XSUlJZochRIWVfCqZuxbdxb6z+Q8wdmvcjSUDl1AjqIZ7PiQvzzhz+Oc/jeFFC1LK6Ml14kS49lr3fJ4okVJqq9a6uD/8bWSEOyGquCW7ljD0/4ZyMfuireyZDs/wyq2v4OfjhkNEZqZxc/r1140W0wX5+sL998P48cb9CVEuSaIQoorKzcvlue+fY/rm6bayEP8QZveZzaBWg8r+AWlp8PHH8PbbcOyY/bqAAHj4YaNH18ZuvKwlPEIShRBVUEp6CvcuvZeEAwm2sqY1m7Js0DJa125dtsqPH4cZM+DDD+H8eft1YWHw6KPw9NNQr17ZPkd4jSQKIaqYLUe3MGDxAP48/6etrGeznsy/a37ZWlr/73/G2cP8+fbjUQPUqQOjRxtJooab7nkIr5FEIUQVkafzeOvHt5jw3QRy8nJs5S/c/AJTOk/BR5Wi6zetYe1aeOstY1S5wq68Ep59Fh54wBgbQlRIkiiEqAJO/nWSh/7vIdbszz+YhweGM6/fPPq26Ot6hZmZRi+tb71lnEkUdv31xmBBffuCT1k7qRZmk0QhRCW3dv9aHlz2oG24UoD29duzsP9CmtRs4lplp07BrFkwcyacPGm/zscH7roLxoyBG290Q+SivJBEIUQllZ2bzaR1k5i+eTqa/PZSY28cy0tdX8Lf19/5yn75xbhBvXDh5fcfqlWDYcOM8aibuJh4RIUgiUKISuiP1D+476v7SDySaCuLrhbNZ3d9xm1Nb3OukuxsY4yHGTNg8+bL18fEwJNPGuNEyA3qSk0ShRCViNaa2dtm8/Sap7mQdcFWflvT25jXbx61Q2uXXMnp0/DJJ/DBB3DkyOXrb7gBRo2CAQPA34WzElFhSaIQopI4knaER1Y8wurfV9vK/Hz8eLnryzxz4zOOn2rS2uig74MP4MsvL7+85O8PgwYZCaJ9ew99A1FeSaIQooLTWjNv+zyeWv0U5zPzG7g1i2jGZ3d9xvUx1xf/5osXjaeXPvgAfv318vW1a8NjjxntH+oW7gRaVBWSKISowI5dOMajKx9l5d78broVitE3jOalri8R4h9S9Bv37DFaTs+ZY3S1Udj118Pjj8PAgRAY6JngRYUhiUKICkhrzYKdCxj1zShSM1Jt5U1rNuXTvp/SqVGny9+UkQFLlxr9L23YcPn64GC47z4YMQLatfNg9KKikUQhRAXzR+ofjPpmFKv2rbIrH9V+FK90e4VqAdXs37BrF/zrXzB3LqSmcplmzWDkSHjoIahZhi48RKUliUKICiIrN4s3//sm0zZM41LOJVt5bI1YPu37KZ1jO+dvfOkSLF5snD0U9Wirry/06WMkiK5dpfW0cEgShRAVwIY/N/DYysfYfWa3rUyhGBE/gundpxMaEGo8ubRlC8yeDV98cXnPrQCxsUa7h7/9TW5Ol3NaG/n+/PnLp7Q0++UePeD22z0XiyQKIcqx0xdPMzZhLHN+nWNX3qZOGz668yPjiaaTJ2H+LPj0U0hOvrwSPz+jz6Xhw+HWW+XswQu0Nm4JWQ/k587ZH9hLWrYmg5yckj8LIDxcEoUQVU5uXi6zt81mXMI4u5vVoQGhTOsyjSfaPorfmrUw6i5jeNGijihNmxpnD0OHGo+5Cqfl5eX/1X7unP1U8MBe3Pz8+cubonhSUSeP7iSJQohyZt0f6xjz7Rh+PWHfrqF/XH/eqfs3YhZ+C30aGS2oCwsJMR5pffhh6NjRGIu6CsrLgwsX8g/uqamXH/AdTWlpxlmB2QIDoXr1/Ck83H7ZOnn6ITVJFEKUE3tT9jJ27ViW/7bcrjw2tAEzM7rSc8rPsLtX0W++6SYjOQwYYIwiVwlkZeUf5AtOBQ/8xc3PnzeShZkCAowusAof1IsqK24qL01YJFEIYbKzl87y4voXmbllpt2AQsEqgGcP1mPc/IOEZM+9/I316xsDAv3tb9C8uRcjdl52dv4B/OxZ+3nBqaiy9HRzYw8LMw7qBQ/sNWvaH+wLri88r0zjNEmiEMIkWblZfLjlQ6aun2p3HwJgyE4fXl6bRUzaQfs3VasG/fvDgw9Cly7GY64eprVx0D57tvjJerAvnAwuXCi5fk+pVs04sFsP5jVqXL5csKxgIggPN54BEAbZFUJ4WU5eDp/v+JwXN7zIgdQDdutuPghvfgvxxwpcN/HxgW7dYMgQY2CgaoUa1DnJesBPSTEO5IXnhV8XnLx5Y9bKxyf/QG6dCi4X9do6r15dOrZ1J0kUQnhJbl4ui5IXMfWHqew9u9duXdOz8Pq30G8P2G4/t20Lgwcb3WrUr29fV67xF3tKiv105szlZQUTQmamd76rVcGDfUSE/UHfOhVXHhZWZe/FlzuSKITwsDydx7LkJUz+ZhzJ6Qft1tVKh/EbFA/8XIO0vEh+jGnLmY79ONO6M2f86nLmNJx5IT8BWOdnz3r3qZzgYOOAbp2sB/iilgse/MPDpdlGZaB0eXgGrIzi4+N1UlKS2WEIARh/tZ8+DaeOZbNy+WL+nbyBQ5mBcDEK0iMhPQrfvyKJSIlCp0dyllrk4fl7DWA8RVOrljFFRFw+L6qsZk0jUYjKRym1VWsdX9J2ckYhRAmysiwH/lOO58akSUuzXi/xB+6zTPZygSJaQbikenWIjMw/8FunosqsB/6QELmcI1wniUJUOVobDapOnsyfTp0ypoKvrdO5c67UXrqjcHi4cYC3TlFR+Qd8a1nBJBARITdrhfdIohCVQsGD/4kT+fOCrwsmBY/e1FU5EHIGqp3GJ/g0VwRnc1PzZjS8pjFR0couEVingAAPxiNEGUmiEOVaTo5xYD9+3JhOnMifF3596VLJ9ZWGry9ERmqiQ9OJyjlOdOpeotJ+R1c7xY4mp/jxytNkh5+Gaqch5DQEnSNKBfNk8wcZ2fdlIkJqeSYwIbxEEoUwRW6ucU3/6FE4dsx+siaFY8eMJOGJrhhCQox+8qxTdLT96+hoiA44R3TyOiI2Lsfnm1Ww/wzZPrAsDmZeBxtiL6+3SbUGPHPLywxtM5Rgf7kDLCoHSRTC7S5eNBLA0aNw5Ij93JoYTpwwkoU7BQdDnTrGVLu2/WvrsvV1kW3W8vLgl1/gm2/gnW/gp59sWepoGHzcGT5uByeK6Erp2rrXMu6mcfSP64+vj3eeYBLCWyRRCJekp8Phw8Z05Ij93PratZu/JYuMhHr1jHF26tbNTwAFX9epU8oGWidPQkICrF4Na9bY9ciaqyChKfyrHfxfC8gt1B7AV/lyd9zdjLxuJLc0ugUljxOJSkoShbDR2jhu/vknHDpkP1nLUlLc93m1ahkJoH79/ERQv35+QqhXz/jr3603etPTYcMGIzmsXQs7dly2ye5ImNsGPrsajoVfXkXd0LoMbzec4e2GUy+snhuDE6J8kkRRhWhtXPP/4w84ePDy6c8/jVG5yiogID8BxMTYz63ldet6qXfN7GzjctJ33xmJ4b//LbLjorPB8EUrmBvvx8+1ix5W7JZGt/D4dY/Tr0U//H3l2VRRdUiiqGQyM41EsH8/HDhw+VTWrpv9/Y2DfkwMNGhgTIVfR0aa2G1DTo6RGH74Adatg02b4K+/itz0oj+sauHDl51qsiL6HFnkAvZJIrpaNPe3vp+H2z5Mq+hWno9fiHJIEkUFlJlpHPT37YPff7efHzpUtj6AatSARo2MqWFDYyr4unZtr/Rs7bysLCMxbNxoJIeNGx32bf1XAKzsGsPia4P4Jugwl/IyAfvraQG+AfS+sjcPXfMQd1xxh5w9iCpPEkU5duYM7NmTP/32mzE/cKD0j4yGh0OTJtC4McTGGlOjRvnzGjXc+AU8IS0NfvzROFPYuNF4MqmE62VpTWNYdVtjFjdO55vMZDJyjxgrCu3D6+pdx0PXPMS9re6llrR9EMJGEkU5cPYsJCfD//6XPyUnl+7GsVLGX/5NmxpTkyb2U82aFaivH62NrJiYaEybN8P27SVmSR1Tn99ua8eq1kGsCj7MxlNbyMk7AkVcdmsZ1ZIBVw1gYMuBxEXFeeiLCFGxSaLwotxc4/LQL78Y044dRlI4fty1eqzJoFkzY7riivx5kyblZ5xdl6WlwZYt+YkhMdE4rSpJ48Zk3Hwj6+MjWRWZyqpTmziQ+jWcx5gKaRXdigFXDWDAVQMkOQjhBEkUHpKTY5wVWJPCL7/Ar7+6djM5JARatDCGQ27RIv91s2bGugotPd3YIUlJ+dOePSXfYFEKrrmGnE438Uu7enwfdYF1Z39h06FlpKekF77dYNO2TlvuanEXA1oOoEVkC/d/HyEqMUkUbpKWZvwBvGmTcYXkp5+MFsrOCAqCuDho1Sp/atnSeIqoUgz6kpZmnD79+its3WpMycnO3WipUQNuuIG8G9qzo3Vtvq+ZyroTiaw/OI8LBy/AwaLfFhoQSvcm3bmz2Z30aNZD2jsIUQaSKEopNRW+/dZou7V5M+zc6dxxr25duPZaY2rTBlq3Ni4XlasniUpLa6Np9vbtRlKwTvv3O/d+Hx9jh3ToQOp1rfmpSQA/5h0i8dhP/HTkXc7vLOI6UgHNIppxZ7M7ufPKO+nUsBOBfhX1GpwQ5YskChf89husXAkrVhhnDiX1VRQTA+3b5yeGtm2NriYqhdOn8++6F7wD72z/HUoZ19Li48ls14bk5jX5pcYlfjy5lR+PrGf34Y/gsOMqYsJj6Nq4K11ju9KlcRcaVm9Y9u8lhLiMy4lCKXUfMAK4GvAF9gCfAh9qrV1+aFMpdQcwBogHgoADwELgDa21l4eCt5eTYySEFSuMad++4rf18YGrr4abboKOHY15gwbei9Uj8vKMhhnW53Kt8+Rko4m3s3x94aqroE0b0q5pwa/NwthWPZ1fz+1h2/Ft7Dr9Bdk/ZZdYTe1qtenSuIstMTSt2VT6VxLCC1xKFEqpmcBIIAP4DsgGugHvA92UUgO01k73CaqUGgtMxxgZ8gcgFbgFeAnopZTqprUuY1vi0klKggceMI6NxWnfHu64w0gM119vtFGocLQ2Hrvav9+YrC339uwx5q4O8lC9OlxzDefaxrG7RS121/Fjd2Aau1L3svv0Jv449xlsK7kaX+VLmzpt6BDTgQ4NOtAhpgOxNWIlMQhhAqcThVKqP0aSOAHcrLXeZymvDawD7gKeAN51sr544FWMp9u7aq1/spSHAquAm4GXgaedjdEd8vLg7bdhwgSjm6CCQkKge3fo3RvuvLMCXUY6f97oyOnPP/M7drImhtL26xESQtrVzdl/dQwHmtRkf5QfB6plsS/jGLvO7OLEXxvgJMbkhMY1GtO2blva12tPhwYdiK8XT4h/RX+0S4jKQWkn+3tQSiUB7YCHtNbzCq27BeOM4ARQ35lLUEqpJUB/YLLW+sVC65oA+zA63qmttXZ44Ts+Pl4nJSU59T0cOXECHnrIuEltFRpqnFn07g1duhhjHpQrFy7kD/RQcLJ2+frnn0aicFGughOhcKRRDY5cWZcjDatzJCqQw6F5HPA5z4H0o6Rccr1FoJ+PH1dFXUWbOm1oW6ctbeu05Zo611AjqLw3CRei8lFKbdVax5e0nVNnFEqpGIwkkQUsLrxea71eKXUUqA/cAPy3hPoCgB6Wxc+LqO+AUupH4CagJ7DAmTjLYs0aGDLE/tL7ddfBwoVGC2ev0dp4rjYlJX+AZ+tgzwUHfT5+3EgIDvo1KizDz+gl9WwwnKoGJ6tZ5pFBnKodysmaAZyqBsf8L3E8L41cnQucs0wYFxpTnfusQN9Arqx1JXFRccRFxnFV1FXERcZxZa0r5WkkISoYZy89tbXMk7XWxV203oKRKNpSQqIAmgMhwFmtdXHPTm7BSBRt8WCiyMqCiRPhzTfty8eNgxdfLMVYCNnZxoE+Pd2Ynz9vtCMoOLe+Tk01EkJKitGPh3Vu6QY7TxkH93R/uGSd+xvzdH+4UB8uBEJaIFwIMF5b5+eCjISQGgRnQyA1WHHJr7izxwzLZOHkXaZA30Ca1GxCk5pNaFqzqe11XFQcjWs0lpHehKgknE0UjS3zPx1sc6jQts7Ud8jBNq7UVyqjnxrCgkXjOH2ypa0spNpput4xjrSszYwep9Fao/Ny0bm5kJeLzsuzLVvnebk5+ROaPIVtylWQ43P5lOsD2T6QWReyYiDLFzJ9jXmWL2T6GZP7uN6lbFRIFA2qNyAmPIaYsBhiwmOoH16fxjUa06RmE+qG1cVHVYYWgUIIR5w9FIVa5o7aGls7/S9iRGGP1+ey7dthxocfoLND8wuv+A/p/YayMvR08W+swPx8/IgIjqBmUE2iq0VTO7Q2tavVNl5b56G1qRNah3ph9Qjy88bIQkKI8s7ZRGF9JrEMIx24tz6l1HBgOEDDhq43tGrVCoKjt5F+tBP4ZEH3sXD9DPBx11d0jyC/IIL9ggnxDyHEP4Rgf+N1sF8w4YHhhAWGERZgmQLz59UDqxMRHGEkhuCaRARHUM2/mjxeKoRwmbOJwnrHNNTBNtZ1ztxdLXN9WuuPgY/BeOrJic+04+sL0x9fw1sf1Wbg3bNp2PAkqMFGi2EfH2NumZSfP8rPD+XnB35+BZb98QkIxCcoCJ/AYHwCg/DxD8BH+aBQ+Cgf/Hz87CZfH1+75UDfQAJ8Awj0M+YFpyC/ILm0I4QwnbOJ4qBl3sjBNtZ2yAcdbFO4PkenAq7UVypPTHiJx8eDUq966iOEEKLCc/bPVWtb2pZKqeJaElxXaFtH9gCXgAilVHEPn7Z3ob5SkysxQgjhmFOJQmt9GPgFCAAGFF5vaXAXg9Hg7kcn6ssCvrEs3l9EfU2ADhjtNlY5E6MQQgjPcOUC+CuW+XSl1BXWQqVUNPCBZfHVgq2ylVJPKKX2KKXsWnJbt8W4mT1OKdW+wHtCgdmW2D4oqVW2EEIIz3I6UWitlwAfAnWAnUqpFUqprzC62rgK+D+MzgELisRoXHfZvQit9RZgPEbDu/8qpb5VSn0J7MfoGPAn4DmXv5EQQgi3cqlJl9Z6pFJqE/A4xsHc2s34bErRzbjW+jWl1A7gHxj3OKzdjM+gHHQzLoQQwoVOAcszd3UKKIQQVYmznQLKQ/pCCCEcqhRnFEqp0zjuh6okkcAZN4VTFcj+co3sL9fI/nJNWfZXI611VEkbVYpEUVZKqSRnTr+EQfaXa2R/uUb2l2u8sb/k0pMQQgiHJFEIIYRwSBKF4WOzA6hgZH+5RvaXa2R/ucbj+0vuUQghhHBIziiEEEI4VOkShVLqPqXURqXUeaXUX0qpJKXU40qVbmAHpdQdlu5Fziql0pVS/1NKPaeUCnR37GZw1/5SSk1RSmkHU0bJtZRfSqnmSqmnlFLzLf2X5Vm+1z1lrNetv9fywt37Syk1p4Tf1x53fwdvUUr5K6W6KaXeVEolKqWOK6WylFJHlVJLlFKdy1C3W35fbh2V2WxKqZnASCAD+A7IBrph9EHVTSk1QGud60J9Y4HpQC7wA5CK0XXJS0AvpVQ3rXW6W7+EF7l7f1lsB34tojy7LLGWAyOAp9xZoYf2f3nh9v1lsRn4vYjy4x74LG+5BVhreX0C2IoxTPRVQH+gv1JqmtZ6kiuVuvX3pbWuFJNlh2qMH0yzAuW1gV2WdU+5UF88kGf5B7u+QHkosN5S39tmf+9ytL+mWN4zxezv5qH99XfgNWAg0BTjDwcN3FMe9n95mzywv+ZY3j/U7O/mgX3VFVgCdCpi3SAgx/Ldu5j1+zJ9J7lxZydZvvyQItbdUmCn+ThZ3xLLeyYVsa4JxllGJlDD7O9eTvZXpU4URXzfsh743Lr/y/skiaJM++4Ty3f/twvvcevvq0JfB7VSSsUA7TAGOlpceL3Wej1wFKOL9BucqC8A6GFZ/LyI+g5gDNAUAPQsdeAmcff+Eq6R/S9cZB3lM8aZjT3x+6oUiQJoa5kna60vFbPNlkLbOtIcY5yMs1rr/W6or7xx9/4q6Fql1HSl1MdKqVeVUndZEq/I58n9X9l1UUq9Zfl9TVNK3V7Rb/w7oZll7ux9GLf/virLzezGlrmjjgEPFdrWmfoOOdjGlfrKG3fvr4J6W6aCjiilHrD8JSM8u/8ruyFFlO1SSt2rtd7p9Wg8TClVBxhqWVzq5Nvc/vuqLJk41DK/6GCbvyzzMBPqK2888f32AxOANkB1IArjJt16jFPm/yilrnE91Eqpsv++POFX4EmgJcb+qwf0wnjK7iogQSlV37zw3E8p5QfMx/j/9J3WeoWTb3X776uynFEoy9xdzczdXV954/bvp7X+rIjidcA6pdQSjKcwXsb4z13VVfbfl9tprd8pVHQRWKWUWovxx8gNGH+oPOHt2DzoI4zHWQ8DD7jwPrf/virLGcUFyzzUwTbWdRccbOOp+sobb3+/Fy3z7kopfzfUV9FV9t+X12its4BXLIsV7sGS4iil3gWGYbSr6Ka1PuHC293++6osieKgZd7IwTYNCm3rTH0N3VRfeXPQMnfX/iqJtdVsAMYgK1XdQcvcW/u/srP+virFpSel1JsYl9lOYySJfS5WcdAyd9vvq7IkCuvjYy2VUsHFbHNdoW0d2QNcAiKUUk2L2aa9C/WVN+7eXyWpVeD1X8VuVXV4e/9XdtbfV4X/bSmlXgPGAClAd631rlJU4/bfV6VIFFrrw8AvGH+xDii8Xil1C8YN1RMY7R9Kqi8L+MayeH8R9TUBOmA8p7yq1IGbxN37ywkDLfPftNZV/lKKCfu/srP+vrY43KqcU0q9CjyL0VVQd6319tLU45Hfl9mtDt3YevEe8lsbXlGgPBpIpogm6xg3vvYA84qo7zryu/BoX6A8lPxWphW5Cw+37S+MS3T3AYGFyhXwIJBuqe9Rs7+3G/ef9TdQbEtjjGvne4BX3LH/K/JUlv2F8SRdL8C3ULkfxl/fuZa6bzf7e5Zh/0yzfIdUoJ2T7/Ha78v0HeTmnf2BZQdcAlYAXwHnLWXLivihTbGs+6GY+sZa1ucA3wJfAictZYlAiNnfuTzsL8t/ZA2kYfxVt9RS3wFLuQbeM/v7lnFfXWv5N7dOaZbvtbdgeaH3zLFsM8cd+78iTe7cX0A/S3kKxl/Ai4HVGK2LtSVRjDX7O5dhX/Up8P9ki2U/FDWNN+v3VVkejwVAaz1SKbUJeByjPxNfjIw7G/hQa53nYn2vKaV2AP/AOMMIwjj4zQDe0FpnujN+b3Pj/joMvI6xj67AeNbdB+PUdhHwsdb6ezeH723hwPVFlDcroswp7v69ljPu3F/bgXcx7gs2wmhNrIEjwKfATK311lLGWR5EFHgdb5mKsh541dlK3fn7khHuhBBCOFQpbmYLIYTwHEkUQgghHJJEIYQQwiFJFEIIIRySRCGEEMIhSRRCCCEckkQhhBDCIUkUQgghHJJEIYQQwiFJFEIIIRz6fx9PxJwFsfK0AAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "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": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Freefall Model (revisited)\n", + "\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": "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/notebooks/05_consistent-coding and functions.ipynb b/notebooks/05_consistent-coding and functions.ipynb new file mode 100644 index 0000000..f9e8b26 --- /dev/null +++ b/notebooks/05_consistent-coding and functions.ipynb @@ -0,0 +1,1017 @@ +{ + "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": 14, + "metadata": { + "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": 17, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans =\n", + "\n", + " 1 2\n", + "\n" + ] + } + ], + "source": [ + "code(2,3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Choose variable names that describe the variable" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "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": 20, + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cnt_v =\n", + "\n", + " 1 2 3 4 5 6 7 8 9\n", + "\n" + ] + } + ], + "source": [ + "cnt_v=counting_function(9)" + ] + }, + { + "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": { + "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": "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/notebooks/4_NumPy_Arrays_and_Plotting.ipynb b/notebooks/4_NumPy_Arrays_and_Plotting.ipynb new file mode 100644 index 0000000..5f86da8 --- /dev/null +++ b/notebooks/4_NumPy_Arrays_and_Plotting.ipynb @@ -0,0 +1,1644 @@ +{ + "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/5_Linear_Regression_with_Real_Data.ipynb b/notebooks/5_Linear_Regression_with_Real_Data.ipynb new file mode 100644 index 0000000..ad94b7d --- /dev/null +++ b/notebooks/5_Linear_Regression_with_Real_Data.ipynb @@ -0,0 +1,1246 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### Modified under Creative Commons Attribution license CC-BY 4.0, code under BSD 3-Clause License © 2020 R.C. Cooper" + ] + }, + { + "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": "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\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": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n" + ] + }, + { + "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": 5, + "metadata": {}, + "outputs": [], + "source": [ + "fname = '../data/land_global_temperature_anomaly-1880-2016.csv'\n", + "\n", + "year, temp_anomaly = np.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": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(137,)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "temp_anomaly.shape" + ] + }, + { + "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": 9, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\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": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.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 [`plt.rc()`](https://matplotlib.org/api/_as_gen/matplotlib.plt.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": 13, + "metadata": {}, + "outputs": [], + "source": [ + "plt.rc('font', family='sans', 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": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#You can set the size of the figure by doing:\n", + "plt.figure(figsize=(10,5))\n", + "\n", + "#Plotting\n", + "plt.plot(year, temp_anomaly, color='#2929a3', linestyle='-', linewidth=1) \n", + "plt.title('Land global temperature anomalies. \\n')\n", + "plt.xlabel('Year')\n", + "plt.ylabel('Land temperature anomaly [°C]')\n", + "plt.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 function to the data.\" In this case,\n", + "\n", + "$$\n", + "\\begin{equation}\n", + " f(x) = a_0 + a_1x\n", + "\\end{equation}\n", + "$$\n", + "\n", + "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": [ + "plt.figure(figsize=(10, 5))\n", + "\n", + "plt.plot(year, temp_anomaly, color='#2929a3', linestyle='-', linewidth=1, alpha=0.5) \n", + "plt.plot(year, reg, 'k--', linewidth=2, label='Linear regression')\n", + "plt.xlabel('Year')\n", + "plt.ylabel('Land temperature anomaly [°C]')\n", + "plt.legend(loc='best', fontsize=15)\n", + "plt.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": [ + "plt.figure(figsize=(10, 5))\n", + "\n", + "plt.plot(year, temp_anomaly, color='#2929a3', linestyle='-', linewidth=1, alpha=0.5) \n", + "plt.plot(year, f_linear(year), 'k--', linewidth=2, label='Linear regression')\n", + "plt.xlabel('Year')\n", + "plt.ylabel('Land temperature anomaly [°C]')\n", + "plt.legend(loc='best', fontsize=15)\n", + "plt.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": [ + "plt.figure(figsize=(10, 5))\n", + "\n", + "plt.plot(year, temp_anomaly, color='#2929a3', linestyle='-', linewidth=1, alpha=0.5) \n", + "plt.plot(year_1, f_linear_1(year_1), 'g--', linewidth=2, label='1880-1969')\n", + "plt.plot(year_2, f_linear_2(year_2), 'r--', linewidth=2, label='1970-2016')\n", + "\n", + "plt.xlabel('Year')\n", + "plt.ylabel('Land temperature anomaly [°C]')\n", + "plt.legend(loc='best', fontsize=15)\n", + "plt.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 +} 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 new file mode 100644 index 0000000..5f86da8 --- /dev/null +++ b/notebooks_en/.ipynb_checkpoints/4_NumPy_Arrays_and_Plotting-checkpoint.ipynb @@ -0,0 +1,1644 @@ +{ + "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 new file mode 100644 index 0000000..0d7bf0e --- /dev/null +++ b/notebooks_en/.ipynb_checkpoints/5_Linear_Regression_with_Real_Data-checkpoint.ipynb @@ -0,0 +1,1230 @@ +{ + "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": "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\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": "iVBORw0KGgoAAAANSUhEUgAAAYMAAAD8CAYAAACVZ8iyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztvXecXOdd7/9+pped7U3SrrSSLFvFllxkx3aMHTskxjbB\ncElCAtzkkoAJ5HLh/oCQUEK4wAUCP2pyUyC5SbiQxA4p5kaJU3AviSVbsnov2/vsTq/P/eOUmdmd\n2TraHa2+79drX5o9c86cZ2Y153O+XWmtEQRBEK5uHKu9AEEQBGH1ETEQBEEQRAwEQRAEEQNBEAQB\nEQNBEAQBEQNBEAQBEQNBEAQBEQNBEAQBEQNBEAQBcK32AuaitbVV9/T0rPYyBEEQrhgOHDgwprVu\nW+xxNS0GPT097N+/f7WXIQiCcMWglLq4lOOq4iZSSn1WKTWilDpS4fk3KKWmlFIHzZ8PV+O8giAI\nQnWolmXwOeBjwBfm2OdZrfWPV+l8giAIQhWpimWgtX4GmKjGawmCIAgrz0pmE92plHpNKfUtpdSu\nSjsppR5RSu1XSu0fHR1dweUJgiBcvayUGLwCbNRa7wb+Afh6pR211p/WWu/VWu9ta1t0QFwQBEFY\nAisiBlrraa111Hy8D3ArpVpX4tyCIAjC/KyIGCilOpVSynx8m3ne8ZU4tyAIgjA/VckmUkp9EXgD\n0KqU6gP+EHADaK0/CbwV+BWlVBZIAO/QMm9TEARhFt87Nsz5sRjvvWszDodasfNWRQy01u+c5/mP\nYaSeCoIgCHPwlQN9HB2c4pfu3rKi55XeRIIgCDWC1pr9FyfZu6l5xc8tYiAIglAjXByPMxZNsben\nacXPLWIgCIJQI+y/OAkgloEgCMLVzP4LE9T7XGxrr1vxc4sYCIIg1Aj7L05yy6amFc0ishAxEARB\nqAEmY2nOjETZ27PyLiIQMRAEQagJDtjxgpUPHoOIgSAIQk2w/+IkbqdiT3fjqpxfxEAQBKEGOHBx\ngl3rG/C5natyfhEDQRCEGmAgnGRr28pnEVmIGAiCINQA4XiaxoB71c4vYiAIgrDKpLN5YukcjX4R\nA0EQhKuWqUQGQCwDQRCEq5mpRBqAhoBn1dYgYiAIgrDKhOOmZSBuIkEQhKsXWwzETSQIgnD1ErZi\nBn5xEwmCIFy1hONWzEAsA0EQhKuWqUQGh4KQtyqTiJeEiIEgCMIqE45naPC7V6V1tYWIgSAIwioT\nTmRoXMW0UhAxEARBWHXC8TQNq5hWCiIGgiAIq85UIrOqaaUgYiAIgrDqhOOZVS04AxEDQRCEVcfo\nWCoxA0EQhKuWXF4zncxKzEAQBOFqZroGOpaCiIEgCMKqEhYxEARBEKxWFKvZlwhEDARBEFYVyzJY\nzb5EIGIgCIKwqkzVwCwDEDEQBEFYVWw3kaSWCoIgXLk8ur+Xf/3BpSUfb7mJ6n2r17EURAwEQRCW\nxf9+/gJfePHCrO1aaz701dc4cHFyzuPD8QwhnwuXc3Uvx6srRYIgCFcwWmv6JuK4XbMv5OOxNF/8\nYS8Bj4tbNjVVfI1a6EsEIgaCIAhLZiqRIZLKQgpS2Rxel9N+bjCcBKB3Ij7na4Tj6VVPKwVxEwmC\nICyZ3omE/Xg0kip5bnDKeK53MsFchGvEMhAxEARBWCAjkSQ/9rfPcG40CkDvZOGuf3i6VAyGpg3L\noG8ijta64mtOmVPOVhsRA0EQhAVydGCaE0MRnj09BpS6gEbMi7/FgOkmiqSyTJkZQ+VYU5aBUuqz\nSqkRpdSRCs8rpdTfK6XOKKVeU0rdXI3zCoIgrCSWK+jE0DRgWAYuc27x8AwxGJoquIeK3UnF5PN6\nzcUMPgf82BzPPwBsM38eAT5RpfMKgiCsGAUxiADGRf7ajhBup2J4VswgScisHSh2J1mcGJrmQ189\nTF6vfpM6qJIYaK2fASbm2OVh4Ava4CWgUSm1rhrnFgRBWCksV9DJoQj5vKZ3Ms7G5gBtdV5GpmeL\nwV4zpXRmRtHLFyZ44O+e5RuH+nnnbd381E0bVuYNzMFKpZZuAHqLfu8ztw2u0PkFQRCWzYh59x9P\n57g0EadvMsEbt7czNJ1kJFJwE2mtGZpK8sD1nbxyKTzLMnjiyBBuh4Pnf+c+Wuq8K/oeKlFzAWSl\n1CNKqf1Kqf2jo6OrvRxBEASbkUjKdv08e3qUdDZPd3OAjnpvScxgIpYmncuzrsFHd7N/VszghbPj\n3LypsWaEAFZODPqB7qLfu8xts9Baf1prvVdrvbetrW1FFicIgrAQRiMpbt/SglLwnWPDAHQ3Beio\n95Wklg5OGcLQ2eCnuylQYhlMxtIcH5rm9VtbV3bx87BSYvA48C4zq+h2YEprLS4iQRBWnJFIkmgq\nu+jjtNaMRJJsag7Q0xLkpXPjAHQ3++mo9zGVyJDM5ICCGBiWQYC+yQT5vFFr8IPz42gNd17TUqV3\nVB2qlVr6ReBF4DqlVJ9S6r1Kqfcppd5n7rIPOAecAf4R+NVqnFcQBGGx/Nw//oA/23d80cdFUlmS\nmTzt9V62d4bI5IyLe1dTgPaQ4e6xgshWWum6Bh/dTX7S2TyjUeO5F86OE/A42d3VWI23UzWqEkDW\nWr9znuc18P5qnEsQBGGpaK25OBGnbp520aeHI7SHfCXTx6wLfXvIx3WdIb51ZIj2kBef20l7vQ+A\n4UiSjS0BBqeSuByK1jovXc0BwMgo6qj38cLZcW7b3Ix7lbuUzqS2ViMIgnAZiaVzpLN5zo/FKu6T\ny2t++hMv8NtfOVSy3coWag952d5ZD0C3eaHvqC+1DAanknTU+3A4FN1NphhMxhmZTnJmJMqdW2vL\nRQQiBoIgXEVMRI2pYuF4xp4wNpMzI1Gmk1m+c2yYMyMRe7tVcNYW8rJjXQiA7iY/AB0h0zIwM4oG\npxKsazC2dZn79E4k+P6JEQDurLHgMYgYCIJwFTEeK2T8VLIODvWGAXA6FJ96+py93RKD9pCP7qYA\nGxr93Nht+P0bA248TgfDpvUwNJWk0xQDn9tJe8jLPz5zjg999TDdzX52rKuv/ptbJiIGgiBcNUzE\nCtbAhfHyYnCwL0zI5+Jnb9vI1w/2M2RmBo1EUnhcDur9LhwOxTMfuJd339kDgFKK9nqjCllrzeBU\nkvWNfvs1b+1pps7n4gM/dh2Pv/8unGY/o1pChtsIgnDVMB4tiMH5sfJDZw71htnT1cgjd2/hX394\nic8+f57ffXAHI9NJ2kNelDIu5DMv6O0ho/BsMp4hlc3TaQaVAT7+czejtbaPrUXEMhAE4aph3LQM\nWoIeLpRxEyUzOU4MRdjT3UB3c4D7d3Xwbwf6yOc1o9EUbaHKFcNG4VmSg73GzGMrZmBRy0IAIgaC\nIFxFTMRSeF0Odq6vL+smOjowRS6v2WPWALx5ZyfjsTSH+6cYmU7Z9QTl6Kj3cXY0xns+t5+Qz8We\n7tqqI5gPEQNBEK4axmNpWuu89LQEOT8WmzWB7GDvFIAdGL772jaUgidPjjASSdEe8s16TYvXX9PK\nznX1/N6DO3juA/eVxAyuBCRmIAjCVcN4NE1z0MPm1iCRZJaJWLqkWdyh3jDrGnx2EVlz0MNN3Y18\n+8gQU4nMnJbBm3Z28KadHZf9PVwuxDIQBOGqYSJWEAOYnV56qC9su4gs7r2u3R5m015fO11Gq42I\ngSAIVw0TsTQtQQ89ZcRgMpbm4nh8lq//3u3t9uO5AshXOiIGgiBcNYzHUrTUeehq8uN0qJIg8rmx\nKADbO0Mlx+xaX2+7h+aKGVzpiBgIgnBVEE8bXUebg17cTgfdTX4uFNUa9E0anUat9hEWSinecJ0x\nW2WumMGVjgSQBUG4KrAKzlqCHgB6WoMlbiJLDDY0zc4Ceu9dW2gMeMRNJAiCcKVjFZw1W2LQEuTC\neCG9tD+coDnoIeCZfY98XWeI331wR80Xji0HEQNBEK4KJswmdS11hhhsbg0ST+fsBnR9kwk2XGG1\nAdVExEAQhDXHl1++xK998dWSbQU3keHqmZlR1D8ZFzEQBEFYSzx/Zpz/OD5css12E1mWQYshBpar\nqD+cmBU8vpoQMRAEYc0RTmSIpXPk8oV2ExOxNB6Xg6DHCRiBYrdTcW4sxngsTTKTLxs8vloQMRAE\nYc1hTTGLpbP2tvFomtagp6QF9cbmABfGYvRbmUTiJhIEQVg7hOMZAKLJghhMxFK2i8hic2uQC2Nx\n+sNWjUFg5RZZY4gYCIKw5pg0LYNoqlgM0jQHS+sErPTS3gmj+EzcRIIgCGuEbC5PxLQIIsmMvX0s\nmrYLzix6WoOksnkOXJwk5HXR4Hev6FprCREDQRDWFFOJggBEkqWWwUwxsLqXvnhu/Kq2CkDEQBCE\nNcZkvCAGlpsokc6RyORmxQysWoNIMntVp5WCiIEgCGuMqURh6L0VQB63qo9nWAbr6n14XcZl8GrO\nJAIRA0EQ1hiTsdmWgZVd1BgoFQOHQ7GpxcggEjeRIAjCGiJcJmZgxREaywSIe8xK5Ks5rRREDARB\nWGNYBWdKzW8ZAGxuM8RA3ESCIAhriHA8g0NBW53XTi0Nm3GExsBsy2DvpmZCXpctClcrMtxGEIQ1\nxWQ8TWPAQ73fPcsyKFdH8KM72jn4h2/G6Vi7swoWgoiBIAhrinA8Q2PATZ3XVRIz8Lkd+NzOWfsr\npXBe3ToAiBgIgrDGCCfSNPrdBL2uIssgTaN/drxAKCAxA0EQrgieOjnC82fG5t1vMpahKeChzuuy\n6wwsa0GojIiBIAhXBH+27wS/+eihkhkF5ZhKZGgw3US2ZZDIXNV9hxaCiIEgCFcEA+EEQ9NJnjk1\nOud+k/G0YRn4CpbBlFgG8yJiIAhCzTOdzBAx7/K//HJvxf1S2RzxdI6mgJuQz000nSWf10wlMhIz\nmAcRA0EQao6peIbf+cprduXwYDgJQHezn+8dH2Ysmqp4HEBDwEPI60JrY9pZOJEWy2AeRAwEQag5\nnjo1wpf39/LiWSNgPGBOIvu1e7eRzWu+9kp/2eOsjqVNATd1PiNZcixqzDduEDGYk6qIgVLqx5RS\nJ5VSZ5RSHyzz/BuUUlNKqYPmz4ercV5BENYmp4ejAJwfMyaQWWMp77mujZs2NvLYgfKuIqsVRaPf\nyCYC7PnG4iaam2WLgVLKCXwceADYCbxTKbWzzK7Paq1vNH/+x3LPKwjC2uX0SASAC2MxwLAMXA5F\na52XH9nWxumRKNlcftZxk3YPooJl0DcZt7cJlamGZXAbcEZrfU5rnQa+BDxchdcVBOEq5fSIaRmM\nG2IwOJWks8GH06Foq/OgdekQGwtrlkFT0IgZAPTZloGIwVxUQww2AMU2W5+5bSZ3KqVeU0p9Sym1\nqwrnFQRhDZLK5rg4btzNW5ZBfzjBerOraEudMdTeGlhTjG0Z+GdbBhIzmJuVCiC/AmzUWu8G/gH4\neqUdlVKPKKX2K6X2j47OnU8sCELt8qv/coDH9hfuE58/M8bbP/kimTLunWLOj8XI5TXbO0OMRFLE\nUlkGwgnWN/iAwrSy8Wh61rHheAaP00HA4yTkMy7+tmVQpn21UKAaYtAPdBf93mVus9FaT2uto+bj\nfYBbKdVa7sW01p/WWu/VWu9ta2urwvIEQVhpsrk83z4yxA/OT9jb9l+Y5IcXJpiMz76IF3PKDB6/\neWcHAOdGYwxNJWdZBuXSS8PxNA0BN0opO4Dca8UMxE00J9UQg5eBbUqpzUopD/AO4PHiHZRSnUop\nZT6+zTzveBXOLQhCDTIaTZHX2PMEoPA4lsrNeeyZ4QgOBfftMMTghxcmyOa1LQatdZUtA6P62Ljo\nW2IwPJ3C7VQEPLM7lgoFlt21VGudVUr9V+AJwAl8Vmt9VCn1PvP5TwJvBX5FKZUFEsA7tNZzNxgR\nBOGKZWjKKBKzegMVP7ZaRFTi1HCUnpYg13bUAfCC2ZxufaPhJqr3uXE5VNmYQTheqDR2OgwBiKdz\nNPg9mPejQgWq0sLadP3sm7Htk0WPPwZ8rBrnEgSh9hmeNsQgUnThtx4XC0Q5To9EuKa9joDHRUe9\n13Y1WZaBw6FoDnrKWgZj0RRb2+rs3+u8LuLpnKSVLgCpQBYEoepYlkGxGEybbqK5xCCVzXFhPM61\nHSHAGFZv7b++aEZxS52XsRliMJ3McG4sxo519fY2K6NI4gXzI2IgCELVGZo2XDilMQPjoh6bQwwu\njMXJ5TXbTBfR5lZjLnGd10W9r3BBb63zzHITvXopjNZwa0+zvc2qNRDLYH5EDARBqDqWm2i6xE1k\nCENkDjE4NWxUHl/TbohBjykGVrzAoqWMm2j/hQkcCm7c2Ghvs9JLG6QVxbyIGAiCUHUsN1E6myeV\nNbKHFmIZnDYziSy//2ZbDPwl+7XUeRmfkVq6/8IkO9fX21lEUMgoEstgfkQMBEGoOpZlAAURsAPI\nc2QTnRiK0NMatAfXW2KwrmGmGHiIpXMk0obQZHJ5DvaG2bupuWQ/iRksHBEDQRCqitaaoemkne8f\nTWbJ5vIkMsaFe64A8omhCDs6CwHgjc0BQj4X2ztDJfu1BktbUhwbmCaRybG3p6lkP7EMFo6IgSAI\nVSWSyhJP59jWblzAI8ls2XqDmcRSWS5NxLmu6MLvczt5+rfv5edet7Fk35YZhWf7L04CzLIMQqZl\n0CCtKOZFxEAQhKoybMYLrjEzgiLJTEmKaaWYwUkzeDzTCmgOenA5Sy9VM5vV7b8wQVeTn86G0kCz\nbRmIm2heRAwEQagqQ2a8YJuZETSdzNo1BlDZMjgxaIhBcZ1AJaxmdWPRNFpr9l+cZO+mpln72TED\ncRPNi4iBIAhVxcokKriJCpaBy6Eqi8HQNHVeFxtmZA6Vo9hNdGE8zmgkxd6e5ln7be8M0RRw090U\nWNJ7uZqoSjsKQRAECyuTaGu7kQkUSWZtMeio91XMJjoxFOHajjocjvl7CAU8LgIeJ+PRFC+Yc5Lv\n3Noya79bNjXz6offvKT3cbUhloEgCFVlaDpJY8BNq+nXj6ayRFOGm2hdg69szEBrzYnBabYvwEVk\n0VLnYTyW5oWz43TW++w0VGFpiBgIglBVhqZSdNb7cDsd+NyOEjdRZ4OvbAXy4FSS6WSWHTOCx3PR\nEvQyFk3x0tlx7tzaIl1Jl4mIgSAIVWV4OklHvZHVE/K5S9xElmUws4P9ySEjeHxd58Itg9Y6D69c\nnGQ8luaOMi4iYXGIGAiCUMLjhwbsGQJLYWg6SactBi4iZjaRx+mgOeglr7EL0CyOD00DlNQYzEdL\n0EvMrEAWMVg+IgaCIJTwt989xWefv7CkYzO5PGPRFB0NBctg2nQThXwuO9VzZkbRicEIGxr9NCyi\nHsDKKNrUEqBLsoWWjYiBIAglRFNZ4um5B9BUYjSSQmtsy6DetAxsMfAaPYdmjr68OB5jS9viAsBW\n4Vm5LCJh8YgYCIJQQiyVtd0vi+XsqDHMflOLcaduuIkyRJIZQj43dd5Cv6JiBqeSrJtRPTwf1izk\nO7a2LmmtQikiBoIg2OTzmngmR2KJlsHRAcP3v2u9EQiu87qM1FLTMgialkGxmyidzTMaTdHZMH+x\nWTF3bm3lrbd0cd/29iWtVShFxEAQBJtEJofWs904C+VI/xQbGv00mo3hirOJ6rwuQpZlUCQGI5Ek\nWsP6RVoGbSEvf/W2PSXzC4SlI2IgCIKNVRC21JjBsYFprt9QSA8N+YyB9OFEmpDPbVsGxYVnVvuK\nmU3mhJVFxEAQBBsrVrCUmEE0leXcWIxd6xvsbdbYyZFIqiSbqLjwbNAUg5kDbISVRcRAEIr4yydO\n8KffPLbay5iXi+Mx7v+bZzhnBmyrhXXHns7myeTyFff7zUcP8bnnz5dsOz5oxAtmWgYAWhuZRZZL\nJ1YiBgkA1jWKZbCaiBgIQhFff3WAp0+NrvYy5uUTT53l5HCEE2blbrUo9uXH57AOnj41wr7DQyXb\njvRPAZRYBvW+gj8/5HPjdztxqNJsosGpJEGPk5D4/lcVEQNBMJmMpekPJ5iIpVd7KXMyMp3kq6/0\nA3PPE14KxbGCueIG0VSW40PTJW0ljg5M01rnpT3ktbdZbiLjsQulFEEzw8hiaCpJZ4NPegutMiIG\nwpoln9fz71SElRY5Gc8s+tiV5LPPXyBtunDmmie8FKJFWUSVMoqyuTzJTJ5IMsvAVGHw/ZH+KXat\nry+5qBdn+ljCEJohBgNTSdYvYIaBcHkRMRDWJKORFNd/5AmePb1wl8/RAcPNkcvrkslcy+HjT57h\nLf/wXFVeC2A6meFfXrrI/bs6gMojJJdKLDW/ZVAcXD5p9hRKZnKcGYna9QUWoSI3kRU8DnpdM7KJ\nEnbFsrB6iBgIa5LTwxHi6RyPHxxY8DFHTMsAqJqr6OjAFCeHIrO6dC6VR1/uJZLK8mv3bcPrchBd\nYgpoJYov0pUsg+J9jpujKk8NR8jmNddvaCjZd6abCAxRsCyDTC7PSCS16OpjofqIGAhrkv6wkaHy\n1KnRBbt8jg5M2W6NaonBaCRFOpef1aVzKWit+dLLvdy8sZHrNzRQN+MOuxoUC0AiU8EyKDqnFcB+\n9VIYgOvXzxSDgmVgBZPritxEVi+jdeImWnVEDIQ1iZW7PhpJ2bGAuYilspwfi9mtkKspBgDh+Pxu\np1xe22mW5XjlUpgzI1F+5tZuwHC3VDuAHEvPbxlYF3Kvy2G7ib59ZIitbUG6m0sv6j63E4/TuMxY\nVkJd0bqt9ysFZ6uPiIGwJhkIJwh6jGrXJ0+OzLv/8cFptIa7txlNz6olBmNR43UWIgb/97UB7v7o\nk/RNxss+/+jLvQQ8Th7avR4wxWCJbSMqUS5moLXm4nisaB/jnHu6Gzk7GmMgnOAH58d56IZ1ZTOC\nLOsgVCZmUCg4EzFYbUQMhDVJfzjBNR0h9nQ1zBKDVDZnT9aysHLk79rWBsBEfPliEE9n7bvocGL+\n1zs+GCGT0/zHidniFU1l+ffXBvjx3etsV1ad13lZAsiWO8e66H//+Aj3/tVT9l289Z72bmoil9d8\n7Mkz5DU8uHtd2dcM+Vw4HQq/22mu22VXIA9J9XHNIGIgrEkGwgnWN/i4d3s7B3vDJXf6n3r6HD/2\nd89wsDdsbzs6ME1L0ENPSwC/28lEdPliMBYpvMbUAiyDXtMieLKMGHzztQHi6ZztIgLjohqrdgA5\nnaPdzOyxLIO+yTh5XbhwWwJ0y6YmwLBYtrQGua6j/JSyOrPy2LIarFiH1pqBcJKAx1lSnCasDiIG\nwppDa82gmbt+73XtaG1UzFr8+6EBtIaPPH7UDi4fGZhm14YGlFI0Bz1VsQxGo4Uc/HBifjHomzDE\n4IWz4yRnBJyfODrMppYAN29ssrddlphBKkuj343H6bBTSK21T5vnsgTo+g0NeFwOsnnNgxVcRAAh\nr3tWiqk1+nJoOiEFZzWCiIGw5phKZIinc6xv9HPDhgbaQ16+9qqRYnp6OMLpkSi39jRxsDfM117t\n56+/e4rjg9Pcat7pNgc9VYkZjBZZBguJGfROJuhu9pPK5nnx3HjJcyeHIuzpapxV0FXtorNYKkvA\n6yLgdRK3XFzm2qdNUbDcRw1+N9d21AHw4A3lXUQAW9qCbGmrs38PegujLwenkqwXF1FNIGIgrDms\ntNL1DT4cDsW77tjEM6dGOTYwzTcPD6IU/MM7b2ZPVwO/82+v8fffP83b93bxvjdsBaAp6GGyGmIQ\nTdmP54sZxFJZJmJp/tNNXfjdzhJXUSyVpT+cYFt7XckxM4u3qkEsnaPO6yTocdmWwZRtGVhikMXp\nUHhdDm7f3MINGxrYsa7yIPs/+oldfObde+3frR5E0WSWwXBSMolqBBEDYc0xEDbcM1aLg/98ew9B\nj5NPP3OWfYcHuXVTM50NPj7yE7vwe5z89v3X8Rc/vRu3mQLZEvQwXkYMvnGwn48/eYaPP3mG1/rC\ns56fyWgkhVLG680XM7DiBde01/H6a1r4jxMjdqHamRGjM+m2GT75oNe4YFezdUYslSXoceH3OO2Y\nQdh0mU0njN+jqSwBjxOlFL/30A6+9qt3zunmcTkd9mdrrRvgDx8/ytB0kp3r6isdKqwgErUR1hxW\n1oslBg0BN++8bSOfef68ESt4y04AbtrYxKEPvxmHo/RC1hSYbRlcGo/z6186aP/+nWPDfOP9r59z\nHaORFC1BD81Bz7xuot4JY83dzQHecF073zs+wtnRGNe013HaFoNSy8C6w45nclWb9hVNZQl6XQQ9\nTtsdFC5jGVjnU0rhci7O328d++zpMR65ewv/5c6eqqxdWB5iGQhrjv5wAo/TQUvQY297749sxuVQ\nKAUPFPm3ZwoBQEudh1g6VxLE/ebhQQCe+q038MjdWzg+ME0qO3eO/1g0RWudl0a/Z143Ua8ZPO5u\n8nOvOdPXaqV9eiSCx+lgU3Og5JhgkbulGmitiadzBL1OAh4XCctNNDNmkM7a514KPa0BOut9/MlP\nXs/vPrij7N9AWHmqIgZKqR9TSp1USp1RSn2wzPNKKfX35vOvKaVursZ5BaEcA+Ek6xp9JReZdQ1+\n3nPXZh7es56OeZqiNZnzeyeLMor2HR5kT1cDPa1BbupuJJ3Lc2Jw7lkCo5EUbSEvDQH3/JbBZJyA\nx0lz0MOGRj89LQFePGsEkU8PR9nSFsTlLP26lhsuvxxS2Ty5vDYsA6/TzhqamU0UTeWWJQbrGvy8\n9Ltv5Odv37T8RQtVY9lioJRyAh8HHgB2Au9USu2csdsDwDbz5xHgE8s9ryBUwqgxmJ2h8qEHdvC3\n77hp3uObTYti3Kw16J2Ic7h/ys6Y2dPdCMCheeIGo5EUbXVeGv1uOwhbid6JBN1NAdv3fsfWVn5w\nbpxsLs/pkciseAFQdmrYQjk2MM3nX7hQss0SlaDHRcBjzC7O53VRzKDYTeRc9DmF2qYalsFtwBmt\n9TmtdRr4EvDwjH0eBr6gDV4CGpVSlXPRhDWJ1pr/9dQZTg1XdzrXTAbDiWX1x7fEwLIM9pkuIksM\n1jX4aAt5S4rWZqK1ZixqWAaNC7AM+ibjJX197tzaQiSV5eULk/ROzM4kgoKbaCli8E/PneMPHz/K\nmZHC3yIQUHiOAAAgAElEQVRuxghsyyCVJZrOYsWni2MGQY+EG9ca1RCDDUBv0e995rbF7iOscQan\nknz02yf58su98++8RLK5PEPTSdYvY56uJQZWrcG+w4Ps7mqg2/TZK6XY09XIoTnEIJLKksrmTTHw\nkMjkZhWSWWit6Z2I09VUiAncvsVomPd/XroIYOfzF1NXlK9fjnA8zR98/UjZ2QxH+40Gc4/u77O3\nWa9TZ8YM4ulcSRaUZRlEiwLIwtqh5gLISqlHlFL7lVL7R0drfxatsHCsi+eFsdg8ey6d4UiKvKYq\nlsFELE3vRJxDfVOziqpu7G7g7Gis4hAcq1upZRlA4WI6k8l4hlg6Z4uNddx1HSG+fdSYM3xNe2U3\nUSUx+MqBPv75pYv8x/HS9hbJTI4zo1GUgq++0mcPvrdiBAGPmU2UztrWUWudt1CBnFpeAFmoTaoh\nBv1Ad9HvXea2xe4DgNb601rrvVrrvW1tbVVYnlArHDR97OfHFy4GvRNx/mzfcf76u6fsbZlcnt9+\n7BBnR6Oz9h8Ml6aVLoUGvxuHMsTgW0dMF9H1pWJgxQ0O902VfQ1LDKxsIqjckqI4k6iYO7a2kMtr\n3E7FppbArOPmcxNZ7q2Z7qyTQxFyec3bbuliLJrm+6ZYWK8T9LoIeF3oon5EG5v9JRXIIgZrj2qI\nwcvANqXUZqWUB3gH8PiMfR4H3mVmFd0OTGmtB6twbuEKwrIMLo3HyZp3o3PxP/cd556/fJJPPXOO\nf3r2nL29dyLOYwf6+EaZKWbF1cdLxelQNAaMlhT7Dg9x/YZ6Ns64GO/eYIhBpbjBWHS2ZVApbmAV\nnHXPSB2905ytsKW1rqRoy6JgGcx2Pw2EE7xiDpyZWSB3xBzv+StvuIaOei+P7jfcdlZdQZ3XRcBs\n/z1gfp4bmwOksnkiyQzpXF4CyGuQZYuB1joL/FfgCeA48KjW+qhS6n1KqfeZu+0DzgFngH8EfnW5\n5xWuLHJ5zeG+Kep9LrJ5bV+0K3FmJMKnnznHQ7vX8647NhFP5+y8/knzonq0f/Zd+cHeMF6XY9bF\ne7E0Bz0c6Z/iYG+4bN+dhoCbLa3BinED201U56XBb4lB+VqD4oKzYl63pQWHgmvKxAsAfG4HDlXe\nMvjWEcO99KM72jkyMG27gsDo0Frvc9HTEuCtt3Tx1MkRRqaT9usEPEbMALAH3m8012ZZCmIZrD2q\nEjPQWu/TWl+rtd6qtf5Tc9sntdafNB9rrfX7zedv0Frvr8Z5hSuHs6NRYukcD5k978/PEzf41NPn\n8Lkd/NFP7OJaM63SurOeMgu4yk0we/HsOLf2NON1Le/OtTng4ZDpAnqoQhO2Pd2NFdNLRyMp3E5F\ng99dsAwquIn6JuM0BdyzgrINfje//9BOfqFCha5SqmKzun2HB9neGeInb9pAOpsvmd9wtH+KXeuN\nDq1v3NFBXsOhvik7ZlBnViBDwdLqMsVgQMRgzVJzAWThymIiluYnP/78vEFhy53y8I1GEtlc+w9O\nJfj6wX5+Zm83zUGPXQRmicFkzPh3aDppu2MAxqMpTgxF7NGVy6EpaFzAd62vZ1NLsOw+PS1BhqdT\npLOzXV6jEaP62GG6nKDyTIPxaJq2kLfsc++5azN7e5orrrOcGAxOJThwcZKHbljHnq5Sd1Yml+f4\nUITrNxj9gKyU1dMjkVkxAzBiMAGPk7Y6r/07IKmlaxD5iwq8/19f4Rmz9cHd29r4+M8tvED8sOlK\neencOD2t5S+aYMQLQj4Xt/U0E/Q4uTBefrQjwGefO09ewy/+yBYA+87aymwpvsM+OjDNPdcaiQYv\nnZsACr725dAcNC5+c7Vmbq4r1CN01PtIZ/P8zKdfZH2jn/OjMVrNC2jQ48TlUBVbUkwnM9Sb84EX\nS7nOpfsOGy6iB3evo6vJT0vQw6HeMD9/+ybOjkZJZ/PsMgfXh3xu1jX4ODMcpb3eh9up8LgctmUw\nEE7S6HdT7y91GwUlZrDmEMtA4LnTY3Q3BehuCvDcmbFFHTtsXhx6K8zttTjYG2ZPVyMOh6KnNVjR\nTZTK5vjXH1zix3evs33oMwOw4Xgaq0nmkaK4wQtnx6jzurhhQ8Oi3kM5Ws0LfSUXEWD3PrIqlYen\nk7x6Kcy+w4McG5ym3bzbV0rNWXg2ncxQ71+6GBRbBlprHtvfyw0bGtjaVmfURBS5s6z6AssyAKMb\n6qmRCPGinkNWzGA4kqQh4LHjHpZlIHUGaw8Rgxoilsry5r95mi/+8NKKnTOdzTOVyHD/rk7etLOD\nqUSmJNg4H0PTphhMVA4IJzM5TgxF2N1lXKSLxUBrbbdqBuPCGkvnuGNL4e6+4CYyLrqT8TSNfjfd\nzX6OFcUNXjw7zus2N8/q4bMU3nnbRv7uHTfOae20zChOs+YX/MM7b+Iv37qb//6ma+19G/zuijGD\n6UR2yWMf62ZYBof7pzgxFOHtReMx93Q1cnokSjSV5cjAFH63k82thaD0tvY6zoxEiSQLlcXWnb/W\nGJaBabkMSsxgzSJiUEN8/MkznBqO8srFyRU7p+V6aanz0FJX6ptfCLYYzGEZHBucJpfX7Db915tb\ngvRNxkln83zy6XO8+W+embUey89uPC4NwIbjGZoCHq5f32CnSQ5OJTg3FqtKvACMOgUrvlEJ6/Ma\njxkiMGZmEG1sDvC2vd1cX2ShNAYqzzRYjmVgiEEhtfTLL/fidTn4iT3r7W17uhvQGj78jSN87dV+\ndq6vx1nUxG9bex3JjBFktkQgUBQTaAy47fUNTIllsFYRMagRLo3H+adnzwOlE7IuN1YAtrWuEKhd\nzMhH2000h2Vw1uzHf12nkRW0uTVIXsOJoWk+8dQZTo9E7VYN1gXTEgAAv9uJx+UoxAziGRoCbq7f\n0MDF8TjTyYzd4fPOra0LXvtyseIKlptoLFqo1p1Jo99dNmagtWY6sbyYgeUmSqRzPH5wgAdvWGe7\ndQBzXCZ89ZV+btjQwB8/fH3Ja1hN8E4OR4rcRIWYQGPAjdflwON0MBgWy2CtIn/RGuFPvnkMl1Ox\nfV0DI9MrJwbWhaylzkvGzIpZjBhYlsFYNEUincPvmR1YPD8Ww+lQdJkVtpbr5c/2nbBbHITjGTob\nnHYNQVORZaCUMi6mZhZROJGmPeRj53rD7/3MqVH+6dnzNAc9bO+sPH6x2jQWVSqDkc0EBYuhmIaA\nm5Nmg77pZIaQ14VSyphUpim5eC+GOq/TFoNvHRkkksry9r3dJfs0BT38yy++jvaQt2xbi2vMjKJc\nXtt3/H534e/Y4PeglKLe77IFTwLIaw+xDGqA/Rcm+M6xYd5/7zXsWl/PSGQFxcB0cbQEPTQFZ/fx\nn4/h6aQ9cauvgqvowniM7ia/XUW72RSDF8+N43Mb26wLasFNVHpxbAoUBsRMxjI0+t1cb2bE/Lcv\nvsr5sRh/9bbdKzooxeFQNAUKIzLHoinqfa6yNQ6NfsNN9OLZcW754+/yhNlzyGrxYGXrLBYrm0hr\nzdcPDrCxOcDtW2anot65tbWsEIAhRJ3mjAfLInA4lP3Y+ltY1ovbqZZdxyHUHiIGNcAnnjpLU8DN\nL7y+h7aQj/FYakHtGqpBsWVgZ8cs0DJIZ/OMRdPcvKkJqBw3OD8WLwnENgXcdsD0Pa/fDBREwOr7\nP/NOuSHgtq2GqUSGxoCHtpCX7mY/LXVeHv3lO7hve8eC1l1NWuo8TFgxg2ia1gr1Ao0BN5FUll/7\n4itkcprzY8ZnZTW6W46bKJvXpLJ5Xr00yV3bWuecR1wJa6RmsfvHihs0mn+LkPmvuIjWJiIGq8zJ\noQjfPzHCu+/sIeBx0RbyovXiXDXLYSyaxu1U1PtcdtB25vzfSoxEDBfRrT2mGJSJG2ituTgeo6eo\ncEspxfZ19exaX28HaW3LIJbG73bic5feeTYF3EzFM6SzeaKpLE3m3eqXHrmD7/zG3dzQtfx00qXQ\nHPSUZBOVixdA4e46ns7hdipb/Kwh80sNIIdMUT3cP0UkmeVGM0i/WCxXUXFg2HIFFSwDM9NICs7W\nJCIGq8ynnjmL3+3k3Xf0ANi56SvlKhqPpmgJelHKKDYK+VwLFqJhM16wa30DPrfD7r5ZzEgkRTyd\ns11DFh//2Zv5wntus9tFh4sKypoCsy+MjX4Pk/G0bTlYF6gNjX7bvbUatAS9RQHklF2fMJN15uS1\nP//p3bTVFY6x3URLtQzMC/Nzp436EKub6mKxWn4UZxFZjxvMrquWYEkm0dpExGAVGQgnePzgAD9z\na7d9QSuIQXJF1jAeS5cEPIvvdOdjaMoQrM4GH11NgbJuIqueYKYYtIW8tNQVOnpOxAoFZcVppRaN\nQaNoK1wm9XQ1aQ4WxQwilS2DN25v59kP3MtP7FlPU9BTsAySy48ZgFFwF/A47Tv8xbLNtgwKFlmw\nQsxAgsdrExGDVWTf4UGyec1779psb2s3A3krlVE0Hk3RUnQBW5QYmJZBZ72P7iZ/WTfRhQpiYOF2\nGtbIpF1QlpkVPAYjgJzO5e12COX2WQ1a6jxMJTIk0jmmk9mKYuBwKLuiulhAlmsZWHfpr14Kc8OG\nhpL6gcVwbWeIOq+rpHOq1Z/IFgO/VZAmlsFaRMRgFbk0ESfkK/0CWm6GhbiJzo5Glz01bCyaLnFt\nNAcWLgbD00k8LgeNATfdzRUsg/EYHqdjzmEzxQIUjqdL0kotrCCm9X7L7bMaWEH30+Ys4UpiUExz\n0GPHZazU2tASK5Ctu/RsXnPjEl1EYIjRix+6j7fsLhSr2ZaB6SaygvoSM1ibiBisIv2TiZK5twBe\nl5PGgNvuhz8Xv/3YIT78+NEln19rzXis1LWxODdRks56H0opupsCRJJZpuIZTg9HOD5otIm4MBaj\nu9k/5x1rU8Azq6BsJpZbyHI7LTUvv9pYhWdWi+hKMYPSYwqf8XQiYzSyW2ILjWIRWWq8oPBa7pLU\nXL/HKPaz0n8LbiIRg7WI/FVXkf7wbDEAI26wkJhB32SC9vqlp6DG0zmSmbx9dwvmhSqeRms9b4ri\n0HTSzk/vbjbu/J87M8YHv/oaXpeD537nPs6PxSq6iIrPORJJorWuHEA2t1lisJpB42KsAPgps6Cs\nUmppyTEBD9FUllQ2x1Ri6a0ooPTCvFwxmMn2zhAXx+P2/4NCAFliBmsRsQxWCa21aRnMdp+0h3zz\nuomyuTxj0RSRZPn5twuhuMbAojnoIZ3NE0vPHqU4k+HpJB3meElL1H7rsUNkckb9wWMH+rg4Hi9J\nKy1HU8DDZCxDJJUll9e2W2LmPmAUsLmdynZhrDZW8P3ksNFyozW4ADGwWl/HMstqXw0FMWit8y5r\n1Gc5Hrl7K//2K3fav9uppWIZrElEDFaJ6USWSCpbVgzaQt55A8ij0RR5DdFliMFYbHb7BLsKeR5X\nkdbadBMZFz8r7pHM5vjEz9/Cnq4G/va7p0hl83N2/gSjhmAili7bl8jC2tY3mbDbI9QCllV1ynIT\nhea3WIq7nU4nskvOJIKC//7G7obL/pnUS9HZmkbEYJXoCxvB1g1lAqvtIS+j0VRJa+eZWLNoq2EZ\nFN/NLrQKeSqRIZXN02G6iRr8bm7b3MwH7t/Ovde188v3bLVfY8t8YhD0kMjk7PbI5dJGrRhBLq/L\nupFWi8aAB6UMl1nx7OC5KG4IuFzLwOlQ/Mi2Vnuc6OXEWqfUGaxN5K+6SvRPGmmYGypYBulsnulE\ntmwwFQoFX+lcnmQmN6tidyGUa6y2UMvATistck08+st32I/v39XJZnNuwXyWgeV3Pz9muFrKXex9\nbid+t5NEJlczaaVgXIybzAyshWQSQeHznogbYmAVfC2Vf37v65Z1/ELpavJza08TN22sbmxCqA3E\nMrjMZHJ5/ua7pzgxVDq83Ro0XtYysGoN5ggiW5YBLN06sO7cm4uCsQu1DKzzWwHkmTgdig8+sJ03\nXNdWcR8L6075nBkcrlRQZolErRScWVif30IyiaDIMoimljXYZqXxuZ089r477bkUwtpCxOAyc7A3\nzN99/zRv/cSLPG3OGQbD9+13O0suxBbW8PG5gshDRTGFSHLhw2iKGYumCHldJVbFQi0Dy6XTMceF\n/v5dnXzuF26bt5Oo9RmcG7XEoPydvyUCjTWSVmrRYovBwiwDy7U0HksTWcZgG0GoJiIGl5kTZr59\nW8jLez73Mt8+YrQu7p9MsKHJXzbo114/f0uKoalCte+SLYNoelbv/ZDXhdup5rQMcnnNP794kXUN\nPtZVIYOlOViaNlrpYm+JRK2klVpYn2HLAsXA6TDmM/ROxMnrpVcfC0I1ETG4zBwfilDvc/Hvv3YX\nm1oCfPY5Y5pZfzhR1kUEhf5EcxWeDU0n7UKu4oHoi2E8lpp1AVNKmamelcXg0f29HBuc5kMP7qjK\nvGHrjv/ieIyQ11XxNS33Si3FDKBg2bQt0E1kHXNh3EgiWE42kSBUCxGDBfC/njrDY/t7l3TsyaEI\n29fVU+d18eD16zhwaZKpeMYQgzLBYzCyNXxux5zppcPTKTa1GOmcS3UTjUfTJQVnFsW9c2Yylcjw\nV0+c5NaeJt5SpQwWyxLI5DSNwcoXeiuYXq4OYTWxqpAXUnBWOMbDhXHDEhLLQKgFRAwWwGefO8+j\nSxCDfF5zcijCDnMU473b28jlNU8cG2Iili5bYwDG3flchWdWjr/VaXJ6iW6isWi6rGujuair5kw+\n/uQZJuJp/vAtu6qW1+5yOuzU0bku9FYAuZZSS2HxMQMwPuNw3OpYWlvvR7g6ETGYh6l4hrFoes6B\n75XoDyeIprJc12nM6r2xu4nGgJt/eekiUD6TyKI95C3JGCpmOpklkcmxzRxjOFfM4I/+/SifMV1T\nxeTzmolY+f77TcHybqLJWJp/fvEiP3XjBq7fUN1hMparZS4XkN0wrdbEoG5pYmAhloFQC4gYzMNZ\nM/d9OJIklZ2/RUMxJ8yq1O3rjIu206G4e1sbh/qmACpaBgC3bGriwKXJskFkq8bA6l1fyU3UNxnn\ncy9c4MsvX5r1XDiRIa8pm83UUsFN9IUXL5LI5HjfG7ZWXPdSWUjaqBU4rpWOpRb3XNvGf7vvmkV1\nDS0RA4kZCDWAiME8nB0xxEDrQqHYXPzv58/zS1/Yj9baziS6rqio6L7t7fbjDY2zm9RZvG1vN7m8\n5quv9M96zrIY1jf6CXicFVtSPLa/D63h9Eh0VpDZGl5frrV0U8Do0V88hzmRzvH5Fy/wxu3tyy6S\nKkezfaGvfJf8pp0dfPCB7SWfZy0Q8rn5/958HR7Xwr9OxYImloFQC4gYzMO5onkBvQsQg6dPjfLd\nY8M8d2aME0MRNjYHSnq53H1tG0qB26nsrKFyXNNexy2bmnj05d5ZbSms6t+Oei91XldZN1Eur/nK\ngT4a/G60hsOmNWJx0cxksYLQxRRXyFo8dqCXiViaX76n+lYBFNUQzHHX3+B38757ts5bt3AlUJzS\nu9RZBoJQTUQM5uHsSNQObpab8TsT6679k0+f5cTQNNs7S+9im4MebuxupKspMO9F7Wf2dnNuLMb+\ni5Ml24eLCr5CPheR1Gw30fNnxugPJ/itN18LwKG+cMnzl8z3srF5thh0mx1IL40X3u/nXrjAzRsb\nubWnac41LxU7ZnCVBFMty6BujlRaQVhJ5H/hPJwdjXLb5mY8TkfZSV4zGZxKUud18fyZcc6Oxti+\nrn7WPn/2n27go2/dPe9rPbR7HUGPky+/XJrJNDSdpDHgxud2EvK5y1oGX97fS1PAzdtv7WZjc4BD\nvaVicHE8RlvIW7ax2pY2o5fQ2VHDRRZJZjg3GuNHd3Zcts6Y1sWxaY7U0rVEi5mOeqW0ohDWPiIG\nc5DJ5bk0EWdbex0bmvz0zZNRFE9nmUpkeNcdm2zTf0fnbP/29s56bu1pnvf8Qa+LH9+9nm++Nkg8\nXbjgDxcNlQn5XLNSS6OpLN89OszDN27A63Kyp7uxjBjE2VTGKgBjNoHH6bDbQ5w24ybXtl8+X71V\nhVxrNQSXC0v0JK1UqBWuCjHQWjO9hMKs3ok4mZxmS1sdXU3+eS0Dq1/Pto46/vPtmwDYuX62ZbAY\nHr5pPYlMjidPFPoaDU0n7Z5A9T73rGyiVy9Nks7leeMOI1i9p6uBgakkI9OFzKRLE3E2lokXgJH1\n1NMasC2DM+bglm0ddct6L3NhvR+rFcdap2AZiBgItcFVIQYffeIkd/35f5DOLm5E5FnzznhrW9AY\n+D5PzKDQydPPf3vjNv71l17HpnmmfM3H6za30FrnYd/hwaLzpEosg5nZRC9fmMSh4KaNhn/fSnm0\nUlqTmRxD08my8QKLrW11tmVwajiC1+UoO6KzWty9rY1//cXXsWt9desXahW/x4nP7ZC0UqFmWPNi\ncHY0yj8+c47pZLZiEVclzpl3xlva6uhuCjAZz8zZB2jQTvn04XM7uXNr69IXbuJ0KO7f1cl/nBgh\nkc7ROxFnPJayW1mEfLOziQ5cnGCH2QIDYNf6BpwOZbuK+ibjaF0+k8hia1sdFyfipLN5To9Euaa9\nbs6h9svF4VDcec3yP68riQ2N/jm7vgrCSrLmxeBP/u8xsnkjNdOaLrZQzo5Gaa3z0uB32wPf57IO\nBs0ZBdX+gj90wzrDVXRyhD/95nF8Lidv29sFQJ3XTSKTI2PWBGRzeV69FGbvpkLWj9/jZHtnyM4o\nstJKNzZXtlq2tAXJ5TWXJmKcGYnarS+E6vH599zGB+7fvtrLEARgjYvBkydGePLkKD9/+0bAmCGw\nGM6OxthqZtZY6ZZzisF0kuagZ0lTx+bits3NtAQ9/P/fOcm3jw7xq2/YyrqGgmUAhVnIxwcjxNM5\n9s4IUN/Y3cirl8Kksrk5awwstrYZF//X+qboDyfYVmOFXmuBrqZAzbXWEK5e1qwYvHRunN/48kG2\ntAX53Qd3oNTCKogtsrk850ajbDEvitbA97kKz4amklXp7z8Tl9PB/dd3cnY0RleTn1+6e4v9nCUG\nlqvo5QsTAOydUQ/wozs6iKayPH9mjEsTcYIeZ9mOpRZWeukTR435C2IZCMLaZk2KwVdf6eM/f+YH\ntIW8fP4XbiPgcdER8tmjJuciHE/zqafPcs9fPsVkPMPN5rzXpoCboMc5p2UwEE5cFjEA+KmbNqAU\n/MGP7yyxPEJmNoqVLXXg4iQbGv225WDx+mtaqfe5+OZrQ1wcj7GxJThnzUDI56Y95LWns4llIAhr\nm2WlMiilmoEvAz3ABeDtWuvJMvtdACJADshqrfcu57xzMRlL85HHj3JrTzOf+Plb7OrhDU1+ux9P\nOUYiSf72e6f56it9JDN5bt/SzB/8+A7u39VpvQe6mwNzvsbQdHLWHXm1uLWnmQO//6ZZjeWsoqVo\nKovWmpcvTHDH1pZZx3tcDt60s5PvHBuiKeBhZ5liuJlsbavjxXPjeFyOOTOPBEG48lluXtsHge9r\nrf9cKfVB8/ffqbDvvVrrsWWeb16agh4efd8dbGmtK2kc1tXk55VLs3QKMOoQfuNLB9l/cZKfunED\n776zp2x9QFdT5fTSRDpHOJ6ZdUdeTcp1GLUsg0gyS99kgpFIqiR4XMxDuzv5t1f6iCSzPHB957zn\n29IW5MVz42xtu7yZRIIgrD7LdRM9DHzefPx54CeX+XpVYXtn/awOkhsa/QyGk+Tyetb+Txwd5oWz\n4/z+Qzv4i7furlgotq2jjnNjUSbKtHe2msddLjdRJQoxgwwHzB5Gt2wqX938+mta7f0rFZwVYwWR\nJV4gCGuf5YpBh9baqoYaAjoq7KeB7ymlDiilHpnrBZVSjyil9iul9o+Ojs6166LY0OQnm9ez5gMk\nMzn+dN8xrusI8bO3bZzzNR6+cT2ZnOZrr85uK22llXausBjUFQWQD/aG8budXFuhUtjrcvKmHcaf\naNMcaaUWW00RqPR6giCsHeYVA6XU95RSR8r8PFy8nzb6LM++7Ta4S2t9I/AA8H6l1N2Vzqe1/rTW\neq/Wem9bW9ti3sucWFPFZqaXfua58/ROJPjwW3bO2z1ye2c9e7oa7LbS2Vyef37pIqORlF1wdjnd\nROUotgwO9YW5YUPDnO/jZ1+3ke5m/4LaZNywoYGNzQHu2la9v4MgCLXJvDEDrfWPVnpOKTWslFqn\ntR5USq0DRiq8Rr/574hS6mvAbcAzS1zzkrBaKfRPJri1x14X/+eli9xzbRuvX2D169tv7eb3vnaE\nQ31TfOvIIJ96+hzPnBq1Wz50rnBFqdflxONyMBHLcHRgmnffsWnO/ff2NPPsB+5b0Gs3Bz0884F7\nq7FMQRBqnOW6iR4H3m0+fjfwjZk7KKWCSqmQ9Rh4M3BkmeddNJZlUJxeenI4wuBUkgdvmD+YavGW\nPevxuR387lcP86mnz7GpJcB3jw3zjYP9NAXc+D3VLThbCPU+F/svTpDO5tmziNGLgiAIFssVgz8H\n3qSUOg38qPk7Sqn1Sql95j4dwHNKqUPAD4Fvaq2/vczzLhq/WWRVnBpqdQJ9w3XtlQ6bRb3PzYM3\nrOPY4DS7uxr4v792FxubA5wajtK5wi4ii5DPzeF+owndni4RA0EQFs+yUku11uPAG8tsHwAeNB+f\nA/Ys5zzVwqg1KFgGT54YYee6+kX3EnrfPVsJxzP8j4d3EfK5+f2HdvDIPx9Y8Uwii5DPhdbGIPuu\nptURJEEQrmyuqv65XU1+TgxFAJiKZzhwaZJfWcJM32s7Qnz2v9xq//6mnR38lzt77LjBSmMFkfd0\nN162SWSCIKxtriox2NDo5/vHR9Ba8+yZUXJ5zb3bl58po5TiIz+xqworXBohr1F4Ji4iQRCWyprs\nTVSJDY1+Utk8Y9E0T54YpTHg5sbuy9M+YiWpsy2Dq2MwjCAI1efqsgzM9NK3fvIFBqeSPHB955po\ns2C7icQyEARhiVxVYvC6Lc289ZYu4uks129o4Bfv2jL/QVcAP31zF+safDTN0ZJaEARhLpRROFyb\n7IcRCGIAAAWwSURBVN27V+/fv3+1lyEIgnDFoJQ6sJTO0FdVzEAQBEEoj4iBIAiCIGIgCIIgiBgI\ngiAIiBgIgiAIiBgIgiAIiBgIgiAIiBgIgiAI1HjRmVJqFLi4xMNbgbEqLmcluNLWfKWtF2TNK8WV\ntuYrbb1Qec2btNaL7sBZ02KwHJRS+5dShbeaXGlrvtLWC7LmleJKW/OVtl6o/prFTSQIgiCIGAiC\nIAhrWww+vdoLWAJX2pqvtPWCrHmluNLWfKWtF6q85jUbMxAEQRAWzlq2DARBEIQFcsWIgVLqs0qp\nEaXUkaJtNyqlXlJKHVRK7VdK3WZudyulPq+UOqyUOq6U+lDRMbeY288opf5eXcYJ8hXWvEcp9aK5\nhn9XStUXPfchc10nlVL31/qalVJvUkodMLcfUErdt9JrXuxnbD6/USkVVUr91kqvdylrVkrtNp87\naj7vq+U118L3TynVrZR6Uil1zPzcft3c3qyU+q5S6rT5b1PRMav6/Vvsmqv+/dNaXxE/wN3AzcCR\nom3fAR4wHz8IPGU+/lngS+bjAHAB6DF//yFwO6CAb1nHr+CaXwbuMR+/B/hj8/FO4BDgBTYDZwFn\nja/5JmC9+fh6oL/omBVZ82LWW/T8V4DHgN9a6fUu4TN2Aa8Be8zfW66A/xer/v0D1gE3m49DwCnz\nO/ZR4IPm9g8Cf2E+XvXv3xLWXNXv3xVjGWitnwEmZm4GrDuoBmCgaHtQKeUC/EAamFZKrQPqtdYv\naeMT+wLwkyu85muBZ8zH3wV+2nz8MMYXKKW1Pg+cAW6r5TVrrV/VWluf+VHAr5TyruSaF/kZo5T6\nSeC8uV5rW81+xsCbgde01ofMY8e11rkaX/Oqf/+01oNa61fMxxHgOLAB43v2eXO3zxedf9W/f4td\nc7W/f1eMGFTgN4C/VEr1An8FWOboV4AYMAhcAv5Kaz2B8cH2FR3fZ25bSY5i/HEB3gZ0m483AL1F\n+1lrq+U1F/PTwCta6xSrv+ay61VK1QG/A/zRjP1Xe71Q+TO+FtBKqSeUUq8opT5gbq/lNdfU908p\n1YNxF/0DoENrPWg+NQR0mI9r6vu3wDUXs+zv35UuBr8C/HetdTfw34HPmNtvA3LAegyT7zeVUltW\nZ4mzeA/wq0qpAximYHqV17MQ5lyzUmoX8BfAL6/C2spRab0fAf5Gax1drYXNQaU1u4C7gJ8z//0p\npdQbV2eJs6i05pr5/pk3AP8G/IbWerr4OfOuuebSKRe75mp9/1zLObgGeDfw6+bjx4B/Mh//LPBt\nrXUGGFFKPQ/sBZ4FuoqO7wL6V2itAGitT2CY/iilrgUeMp/qp/SO21pbP7W7ZpRSXcDXgHdprc+a\nm1d1zXOs93XAW5VSHwUagbxSKonxxavVz7gPeEZrPWY+tw/Dd/9/qN0118T3Tynlxvjb/ovW+qvm\n5mGl1Dqt9aDpThkxt9fE92+Ra67q9+9KtwwGgHvMx/cBp83Hl8zfUUoFMQIpJ0xTa1opdbsZXX8X\n8I2VXLBSqt381wH8PvBJ86nHgXeYPr/NwDbgh7W8ZqVUI/BNjODW89b+q73mSuvVWv+I1rpHa90D\n/C3wP7XWH1vt9c61ZuAJ4AalVMD0wd8DHKvxNa/69898/c8Ax7XWf1301OMYN5GY/36jaPuqfv8W\nu+aqf/8uR1T8cvwAX8TwQWYw7pbei2E2H8DIAvgBcIu5bx2GpXAUOAb8dtHr7AWOYGQLfAyz8G4F\n1/zrGFkCp4A/Lz4/8Hvmuk5SFP2v1TVjXABiwMGin/aVXPNiP+Oi4z5CaTZRTX7G5v4/b/5fPgJ8\ntNbXXAvfP4xrg8bIxLL+bz6IkY31fYwbx+8BzbXy/Vvsmqv9/ZMKZEEQBOGKdxMJgiAIVUDEQBAE\nQRAxEARBEEQMBEEQBEQMBEEQBEQMBEEQBEQMBEEQBEQMBEEQBOD/Aerj6sL+FvAGAAAAAElFTkSu\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 +}