Skip to content

Instantly share code, notes, and snippets.

@olivierverdier
Created December 8, 2015 13:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save olivierverdier/b0ff36c9322eec85bd86 to your computer and use it in GitHub Desktop.
Save olivierverdier/b0ff36c9322eec85bd86 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from numpy import array, cos, sin"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### For loop and break"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0\n",
"1\n",
"2\n",
"3\n",
"4\n",
"5\n",
"6\n",
"7\n",
"8\n",
"9\n",
"10\n",
"11\n",
"12\n",
"13\n",
"14\n",
"15\n",
"16\n",
"17\n",
"18\n",
"19\n",
"not broken\n"
]
}
],
"source": [
"for i in range(20):\n",
" print(i)\n",
" if i > 30:\n",
" break\n",
"else:\n",
" print(\"maximum number of iteration reached\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Multiple assignments, comparisons"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"assigment: `a=b=c=0`, `a,b = b,a`, `a=0` does not return anything"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = b = 3"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3 3\n"
]
}
],
"source": [
"print(a,b)"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a = b = []"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a is b"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a,b = 3,4"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3 4\n"
]
}
],
"source": [
"print(a,b)"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a,b = b,a"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4 3\n"
]
}
],
"source": [
"print(a,b)"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"a,b,c,d = 1,2,3,\"asf\""
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"((a,b),c) = ((2,3),4)"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(a = 2) == 3 # illegal!"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "ZeroDivisionError",
"evalue": "division by zero",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mZeroDivisionError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-61-05c9758a9c21>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;36m1\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mZeroDivisionError\u001b[0m: division by zero"
]
}
],
"source": [
"1/0"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "SyntaxError",
"evalue": "invalid syntax (<ipython-input-62-921cc23c5c50>, line 1)",
"output_type": "error",
"traceback": [
"\u001b[0;36m File \u001b[0;32m\"<ipython-input-62-921cc23c5c50>\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m $#\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
]
}
],
"source": [
"$#"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "SyntaxError",
"evalue": "invalid syntax (<ipython-input-63-1d81501595aa>, line 2)",
"output_type": "error",
"traceback": [
"\u001b[0;36m File \u001b[0;32m\"<ipython-input-63-1d81501595aa>\"\u001b[0;36m, line \u001b[0;32m2\u001b[0m\n\u001b[0;31m $#\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
]
}
],
"source": [
"1/0\n",
"$#"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/ipykernel/__main__.py:1: RuntimeWarning: divide by zero encountered in true_divide\n",
" if __name__ == '__main__':\n"
]
},
{
"data": {
"text/plain": [
"inf"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"array(1)/array(0)"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "ZeroDivisionError",
"evalue": "float division by zero",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mZeroDivisionError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-65-3543596c47ff>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;36m1.\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m0.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mZeroDivisionError\u001b[0m: float division by zero"
]
}
],
"source": [
"1./0."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"multiple comparison: ` 0 < x < 1`"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n",
"False\n"
]
}
],
"source": [
"x = .5\n",
"print(0 < x < 1)\n",
"print( (0<x) < 1)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Lists"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"deep copying `[[2,3]]`, `L*3`?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`in`, `not in` for belonging to a list"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"L = [1,2,3,3,4]\n",
"5 in L\n",
"L.index(3)"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"7 not in L"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"list comprehension: with guard, multiple `for` inside"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1, 2, 3, 3, 4]"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"L"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1, 4, 9, 9, 16]"
]
},
"execution_count": 76,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[x**2 for x in L]"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[[0, 0], [0, 1], [1, 0], [1, 1], [2, 0], [2, 1]]"
]
},
"execution_count": 82,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[(i,j) for i in range(3) for j in range(2)]"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0, 0],\n",
" [0, 1],\n",
" [0, 2]])"
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"array([i*j for i in range(3) for j in range(2)]).reshape((3,2))"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[4]"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[x**2 for x in [\"a\", b] if type(x) == int]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"tuples"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"t = (2,3)"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"t[0]"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "TypeError",
"evalue": "'tuple' object does not support item assignment",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-85-0a69537257d5>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mt\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m: 'tuple' object does not support item assignment"
]
}
],
"source": [
"t[0] = 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"strides, negative strides"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"slicing like a butcher: meaning of `L[n:]`, `L[-n:]`, etc. `L[::-n]`, `L[100:200]` empty, replace chunks in a list"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1, 2, 3, 3, 4]"
]
},
"execution_count": 86,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"L"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[]"
]
},
"execution_count": 87,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"L[100:200]"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "IndexError",
"evalue": "list index out of range",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-88-78da2f882365>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mL\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mIndexError\u001b[0m: list index out of range"
]
}
],
"source": [
"L[100]"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([], dtype=int64)"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = array(L)\n",
"a[100:200]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`zip`"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1, 2, 3, 3, 4]"
]
},
"execution_count": 90,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"L"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"L1 = [10,20,30]"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[(1, 10), (2, 20), (3, 30)]\n"
]
}
],
"source": [
"z = list(zip(L,L1))\n",
"print(z)"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"L = [1, 2, 3, 3, 4]"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 2, 3, 3, 4, [10, 20, 30]]\n"
]
}
],
"source": [
"L.append(L1)\n",
"print(L)"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[1, 2, 3]"
]
},
"execution_count": 100,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[x for x,y in z]"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[(0, 1), (1, 2), (2, 3), (3, 3), (4, 4)]\n"
]
}
],
"source": [
"el = list(enumerate(L))\n",
"print(el)"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[2, 3]"
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[i for i,x in el if x == 3]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Dictionaries"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`keys`, `items`, `values`"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"d = {'a': 3, 'b': 4}"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"3"
]
},
"execution_count": 107,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d['a']"
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"4"
]
},
"execution_count": 108,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"d['b']"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x = 'a'\n",
"d[x] = 100"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"person1 = {'surname': 'Verdier', 'name': \"Olivier\"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Laziness of bool operators"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## For else"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Iterative algorithms"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Algorithm did not converge in 100 steps\n"
]
}
],
"source": [
"x = 1\n",
"max_iter = 100\n",
"for i in range(max_iter):\n",
" x = x**2\n",
" if x > 100:\n",
" break\n",
"else:\n",
" print(\"Algorithm did not converge in %s steps\" % max_iter)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plotting"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`plot` labels and legends"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nHQRlAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1069e2898>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"xs = linspace(0,1,200)\n",
"plot(xs, cos(xs), label='cos')\n",
"plot(xs, sin(xs), label='sin')\n",
"legend()\n",
"savefig('sincos.pdf')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Function"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Docstrings! (triple quotes)"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def my_function():\n",
" \"\"\"\n",
" my_function is a super function\n",
" more information here\n",
" that's enough\n",
" \"\"\"\n",
" print(\"Hi! How are you?\")"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"my_function?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Return multiple values"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Functions always return `None`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Function arguments: named, default, star operations (varargs)"
]
},
{
"cell_type": "code",
"execution_count": 113,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def power_function(a,b):\n",
" return a**b"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"8"
]
},
"execution_count": 114,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"power_function(2,3)"
]
},
{
"cell_type": "code",
"execution_count": 115,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"param_list = [2,3]"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"8"
]
},
"execution_count": 116,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"power_function(*param_list)"
]
},
{
"cell_type": "code",
"execution_count": 119,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 8, 81])"
]
},
"execution_count": 119,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"power_function(array([2,3]), array([3,4]))"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"81"
]
},
"execution_count": 120,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"power_function(*[3,4])"
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"param_dict = { 'b': 3, 'c': 2}"
]
},
{
"cell_type": "code",
"execution_count": 124,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "TypeError",
"evalue": "power_function() got an unexpected keyword argument 'c'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-124-4d23a083342e>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mpower_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mparam_dict\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m: power_function() got an unexpected keyword argument 'c'"
]
}
],
"source": [
"power_function(**param_dict)"
]
},
{
"cell_type": "code",
"execution_count": 125,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"power_function??"
]
},
{
"cell_type": "code",
"execution_count": 126,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"8"
]
},
"execution_count": 126,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"power_function(b=3, a=2)"
]
},
{
"cell_type": "code",
"execution_count": 127,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"b, a = 2, 3"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"power_function(a=b, b=a)"
]
},
{
"cell_type": "code",
"execution_count": 128,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def nice_function(a, b=3):\n",
" return a**b"
]
},
{
"cell_type": "code",
"execution_count": 129,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"8"
]
},
"execution_count": 129,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nice_function(2)"
]
},
{
"cell_type": "code",
"execution_count": 130,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"32"
]
},
"execution_count": 130,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nice_function(2, b=5)"
]
},
{
"cell_type": "code",
"execution_count": 131,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"32"
]
},
"execution_count": 131,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nice_function(2,5)"
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def super_function(a,b,*args, **kwargs):\n",
" print(args)\n",
" print(kwargs)"
]
},
{
"cell_type": "code",
"execution_count": 139,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"('hello',)\n",
"{'c': 4, 'd': 10}\n"
]
}
],
"source": [
"super_function(2,3,\"hello\",c=4,d=10)"
]
},
{
"cell_type": "code",
"execution_count": 134,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "SyntaxError",
"evalue": "non-keyword arg after keyword arg (<ipython-input-134-e84df2085f0a>, line 1)",
"output_type": "error",
"traceback": [
"\u001b[0;36m File \u001b[0;32m\"<ipython-input-134-e84df2085f0a>\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m super_function(2,a=4,4,b=10)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m non-keyword arg after keyword arg\n"
]
}
],
"source": [
"super_function(2,a=4,4,b=10)"
]
},
{
"cell_type": "code",
"execution_count": 144,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def append_function(a, b=[]):\n",
" b.append(a)\n",
" return b"
]
},
{
"cell_type": "code",
"execution_count": 145,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[4, 5, 6, 3]"
]
},
"execution_count": 145,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"append_function(3,[4,5,6])"
]
},
{
"cell_type": "code",
"execution_count": 146,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[3]"
]
},
"execution_count": 146,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"append_function(3)"
]
},
{
"cell_type": "code",
"execution_count": 147,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[3, 4]"
]
},
"execution_count": 147,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"append_function(4)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"closure example"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def sin_freq(freq, x):\n",
" return sin(2*pi*freq*x)"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def get_sin_with_freq(freq):\n",
" def sin_freq(x):\n",
" return sin(2*pi*freq*x)\n",
" return sin_freq"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"sin10 = get_sin_with_freq(10)"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x106a74048>]"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nB0mOQ+O8kXEbAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10732c4a8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"xs = linspace(0,1,200)\n",
"plot(xs, sin10(xs))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Generators"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Generators: `enumerate`, `range`, `reversed`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exceptions"
]
},
{
"cell_type": "code",
"execution_count": 148,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def divide(a,b):\n",
" if b == 0:\n",
" raise Exception(\"Oops, b is zero\")\n",
" return a/b"
]
},
{
"cell_type": "code",
"execution_count": 149,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.75"
]
},
"execution_count": 149,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"divide(3,4)"
]
},
{
"cell_type": "code",
"execution_count": 150,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "Exception",
"evalue": "Oops, b is zero",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mException\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-150-24bf8d716600>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdivide\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m<ipython-input-148-11371656a320>\u001b[0m in \u001b[0;36mdivide\u001b[0;34m(a, b)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdivide\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mb\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mException\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Oops, b is zero\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mException\u001b[0m: Oops, b is zero"
]
}
],
"source": [
"divide(3,0)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Namespaces, imports"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Namespaces, `import`, `%run`, etc."
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import example"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1j"
]
},
"execution_count": 96,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"example.J"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"200.0"
]
},
"execution_count": 97,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"example.imported_function(2.)"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%run example.py"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"200.0"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"imported_function(2.)"
]
},
{
"cell_type": "code",
"execution_count": 156,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from example import bisect as example_bisect"
]
},
{
"cell_type": "code",
"execution_count": 182,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"class Example:\n",
" pass\n",
"example = Example()"
]
},
{
"cell_type": "code",
"execution_count": 159,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"example.bisect = example_bisect"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from example import *"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "ImportError",
"evalue": "No module named 'example1'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-102-d85a77517064>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mexample1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mexample2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mexample1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mimported_function\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mexample2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mimported_function\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mImportError\u001b[0m: No module named 'example1'"
]
}
],
"source": [
"import example1\n",
"import example2\n",
"example1.imported_function\n",
"example2.imported_function"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"a = 0\n",
"a = 1"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"example = 10"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import example as ex"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<function example.imported_function>"
]
},
"execution_count": 106,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ex.imported_function"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Arrays"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"array length is fixed: `v[:2] = array([1])`, or `v.append`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"flags?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Boolean arrays: mask, example with `rand(10,10)` and capping at `.5`"
]
},
{
"cell_type": "code",
"execution_count": 160,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"M = np.random.randn(5,5)"
]
},
{
"cell_type": "code",
"execution_count": 161,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[-0.45771511 -0.44600716 -0.0963087 0.36646952 -0.35648425]\n",
" [-0.532434 0.19209479 0.83525092 -0.24639756 -0.61241575]\n",
" [-0.82984776 -1.21664042 0.89142928 0.47979501 -0.30452319]\n",
" [ 0.48553935 -1.62094851 0.81100656 0.05521396 -0.74060706]\n",
" [ 1.54060755 -0.07426069 -0.40557241 -1.25481997 -1.77014925]]\n"
]
}
],
"source": [
"print(M)"
]
},
{
"cell_type": "code",
"execution_count": 163,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[False False False True False]\n",
" [False True True False False]\n",
" [False False True True False]\n",
" [ True False True True False]\n",
" [ True False False False False]]\n"
]
}
],
"source": [
"mask = M > 0\n",
"print(mask)"
]
},
{
"cell_type": "code",
"execution_count": 165,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"M[mask] = 100"
]
},
{
"cell_type": "code",
"execution_count": 166,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ -4.57715111e-01, -4.46007163e-01, -9.63087029e-02,\n",
" 1.00000000e+02, -3.56484245e-01],\n",
" [ -5.32434001e-01, 1.00000000e+02, 1.00000000e+02,\n",
" -2.46397558e-01, -6.12415752e-01],\n",
" [ -8.29847762e-01, -1.21664042e+00, 1.00000000e+02,\n",
" 1.00000000e+02, -3.04523194e-01],\n",
" [ 1.00000000e+02, -1.62094851e+00, 1.00000000e+02,\n",
" 1.00000000e+02, -7.40607061e-01],\n",
" [ 1.00000000e+02, -7.42606888e-02, -4.05572411e-01,\n",
" -1.25481997e+00, -1.77014925e+00]])"
]
},
"execution_count": 166,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"M"
]
},
{
"cell_type": "code",
"execution_count": 167,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[-100. -100. -100. 100. -100.]\n",
" [-100. 100. 100. -100. -100.]\n",
" [-100. -100. 100. 100. -100.]\n",
" [ 100. -100. 100. 100. -100.]\n",
" [ 100. -100. -100. -100. -100.]]\n"
]
}
],
"source": [
"M[M<0] = -100\n",
"print(M)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"array comparison"
]
},
{
"cell_type": "code",
"execution_count": 168,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[-100., -100., -100., 100., -100.],\n",
" [-100., 100., 100., -100., -100.],\n",
" [-100., -100., 100., 100., -100.],\n",
" [ 100., -100., 100., 100., -100.],\n",
" [ 100., -100., -100., -100., -100.]])"
]
},
"execution_count": 168,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"M"
]
},
{
"cell_type": "code",
"execution_count": 169,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ True, True, True, True, True],\n",
" [ True, True, True, True, True],\n",
" [ True, True, True, True, True],\n",
" [ True, True, True, True, True],\n",
" [ True, True, True, True, True]], dtype=bool)"
]
},
"execution_count": 169,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"M == M"
]
},
{
"cell_type": "code",
"execution_count": 171,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"M is equal to itself!\n"
]
}
],
"source": [
"if (M == M).all():\n",
" print(\"M is equal to itself!\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`vectorize` example with `sign`?"
]
},
{
"cell_type": "code",
"execution_count": 173,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def sign(x):\n",
" if x < 0:\n",
" return -1\n",
" else:\n",
" return 1"
]
},
{
"cell_type": "code",
"execution_count": 174,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"data = np.arange(5)-2"
]
},
{
"cell_type": "code",
"execution_count": 175,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([-2, -1, 0, 1, 2])"
]
},
"execution_count": 175,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data"
]
},
{
"cell_type": "code",
"execution_count": 177,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"vsign = np.vectorize(sign)"
]
},
{
"cell_type": "code",
"execution_count": 178,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([-1, -1, 1, 1, 1])"
]
},
"execution_count": 178,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"vsign(data)"
]
},
{
"cell_type": "code",
"execution_count": 176,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "ValueError",
"evalue": "The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-176-783031542db4>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0msign\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m<ipython-input-173-888533a22840>\u001b[0m in \u001b[0;36msign\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0msign\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mValueError\u001b[0m: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()"
]
}
],
"source": [
"sign(data)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"reshape with -1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`solve`!!"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"M = array([[1.,2.], [3.,4.]])\n",
"V = array([2.,3.])"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 1. 2.]\n",
" [ 3. 4.]] [ 2. 3.]\n"
]
}
],
"source": [
"print(M, V)"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"x = solve(M, V) # solves dot(M,x) == V"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 117,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"allclose(dot(M,x), V)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"No direct array comparision, use `all`, `A < .75 & A > .25`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Views?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Broadcasting!"
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 1. 2.]\n",
" [ 3. 4.]] [ 2. 3.]\n"
]
}
],
"source": [
"print(M, V)"
]
},
{
"cell_type": "code",
"execution_count": 124,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 2., 6.],\n",
" [ 6., 12.]])"
]
},
"execution_count": 124,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"M * V"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exceptions"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Object oriented programming"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Objects: example with `Complex`, `__init__`, `__add__`."
]
},
{
"cell_type": "code",
"execution_count": 217,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"class Complex:\n",
" def __init__(self, x, y):\n",
" print(\"init!\")\n",
" self.r = x\n",
" self.i = y\n",
" \n",
" def abs(self):\n",
" return np.sqrt(self.r**2 + self.i**2)\n",
" \n",
" def __add__(self, zz):\n",
" return Complex(self.r + zz.r, self.i + zz.i)\n",
" \n",
" def __str__(self):\n",
" return \"%s + %s J\" % (self.r, self.i)\n",
" \n",
" def __repr__(self):\n",
" return \"Complex({},{})\".format(self.r, self.i)"
]
},
{
"cell_type": "code",
"execution_count": 218,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"init!\n"
]
}
],
"source": [
"z = Complex(1.,2.)"
]
},
{
"cell_type": "code",
"execution_count": 219,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"init!\n",
"init!\n"
]
},
{
"data": {
"text/plain": [
"Complex(11.0,22.0)"
]
},
"execution_count": 219,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z2 = Complex(10., 20.)\n",
"z.__add__(z2)"
]
},
{
"cell_type": "code",
"execution_count": 216,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"init!\n"
]
},
{
"data": {
"text/plain": [
"11.0 + 22.0 J"
]
},
"execution_count": 216,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z + z2"
]
},
{
"cell_type": "code",
"execution_count": 202,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "TypeError",
"evalue": "unsupported operand type(s) for *: 'Complex' and 'Complex'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-202-a1db40b12982>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mz\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mz2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for *: 'Complex' and 'Complex'"
]
}
],
"source": [
"z * z2"
]
},
{
"cell_type": "code",
"execution_count": 193,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2.2360679774997898"
]
},
"execution_count": 193,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z.abs()"
]
},
{
"cell_type": "code",
"execution_count": 192,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1.0, 2.0)"
]
},
"execution_count": 192,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z.r,z.i"
]
},
{
"cell_type": "code",
"execution_count": 186,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'i': 2.0, 'r': 1.0}"
]
},
"execution_count": 186,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"z.__dict__"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Performance"
]
},
{
"cell_type": "code",
"execution_count": 223,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def big_loop():\n",
" s = 0\n",
" for i in range(10000):\n",
" s = s + np.sqrt(i)"
]
},
{
"cell_type": "code",
"execution_count": 221,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" "
]
}
],
"source": [
"%prun big_loop()"
]
},
{
"cell_type": "code",
"execution_count": 224,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 loops, best of 3: 12.7 ms per loop\n"
]
}
],
"source": [
"%timeit big_loop()"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%prun?"
]
},
{
"cell_type": "code",
"execution_count": 227,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import datetime"
]
},
{
"cell_type": "code",
"execution_count": 250,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0:00:00.013855\n"
]
}
],
"source": [
"tic = datetime.datetime.now()\n",
"big_loop()\n",
"toc = datetime.datetime.now()\n",
"print(toc - tic)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Numba"
]
},
{
"cell_type": "code",
"execution_count": 251,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def get_grid(nh,nv):\n",
" x = np.linspace(-2,.8,nh)\n",
" y = np.linspace(-1.4,1.4,nv)\n",
" return np.meshgrid(x,y,indexing='ij')"
]
},
{
"cell_type": "code",
"execution_count": 253,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def mandel_py(w,h,maxit=20):\n",
" # prepare initial points\n",
" x, y = get_grid(w,h)\n",
" c = x+y*1j\n",
" # where to store output\n",
" output = np.zeros(c.shape, dtype=int) + maxit\n",
" for i in range(h): # loop 1\n",
" for j in range(w): # loop 2\n",
" z = 0.\n",
" c0 = c[i,j]\n",
" for k in range(maxit): # loop 3!!\n",
" z = z**2 + c0\n",
" if z*z.conjugate() > 4.0:\n",
" output[i, j] = k\n",
" break\n",
" return output.T\n"
]
},
{
"cell_type": "code",
"execution_count": 264,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "TypingError",
"evalue": "Failed at nopython (nopython frontend)\nUntyped global name 'get_grid'\nFile \"<ipython-input-253-ff821fe7c6f4>\", line 3",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypingError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-264-f046d1b4de87>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mnb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnopython\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmandel_py\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m200\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m200\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/numba/dispatcher.py\u001b[0m in \u001b[0;36m_compile_for_args\u001b[0;34m(self, *args, **kws)\u001b[0m\n\u001b[1;32m 169\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mkws\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 170\u001b[0m \u001b[0msig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtypeof_pyval\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 171\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompile\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msig\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 172\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 173\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0minspect_llvm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msignature\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/numba/dispatcher.py\u001b[0m in \u001b[0;36mcompile\u001b[0;34m(self, sig)\u001b[0m\n\u001b[1;32m 346\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpy_func\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 347\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreturn_type\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mreturn_type\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 348\u001b[0;31m flags=flags, locals=self.locals)\n\u001b[0m\u001b[1;32m 349\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 350\u001b[0m \u001b[0;31m# Check typing error if object mode is used\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/numba/compiler.py\u001b[0m in \u001b[0;36mcompile_extra\u001b[0;34m(typingctx, targetctx, func, args, return_type, flags, locals, library)\u001b[0m\n\u001b[1;32m 635\u001b[0m pipeline = Pipeline(typingctx, targetctx, library,\n\u001b[1;32m 636\u001b[0m args, return_type, flags, locals)\n\u001b[0;32m--> 637\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mpipeline\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompile_extra\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 638\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 639\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/numba/compiler.py\u001b[0m in \u001b[0;36mcompile_extra\u001b[0;34m(self, func)\u001b[0m\n\u001b[1;32m 356\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 357\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 358\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompile_bytecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunc_attr\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfunc_attr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 359\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 360\u001b[0m def compile_bytecode(self, bc, lifted=(), lifted_from=None,\n",
"\u001b[0;32m/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/numba/compiler.py\u001b[0m in \u001b[0;36mcompile_bytecode\u001b[0;34m(self, bc, lifted, lifted_from, func_attr)\u001b[0m\n\u001b[1;32m 365\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlifted_from\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlifted_from\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 366\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfunc_attr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc_attr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 367\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_compile_bytecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 368\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 369\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mcompile_internal\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunc_attr\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mDEFAULT_FUNCTION_ATTRIBUTES\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/numba/compiler.py\u001b[0m in \u001b[0;36m_compile_bytecode\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 622\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 623\u001b[0m \u001b[0mpm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfinalize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 624\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mpm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstatus\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 625\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 626\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/numba/compiler.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self, status)\u001b[0m\n\u001b[1;32m 248\u001b[0m \u001b[0;31m# No more fallback pipelines?\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 249\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mis_final_pipeline\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 250\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mpatched_exception\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 251\u001b[0m \u001b[0;31m# Go to next fallback pipeline\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 252\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/numba/compiler.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self, status)\u001b[0m\n\u001b[1;32m 240\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mstage\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstage_name\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpipeline_stages\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mpipeline_name\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 241\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 242\u001b[0;31m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstage\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 243\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0m_EarlyPipelineCompletion\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 244\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/numba/compiler.py\u001b[0m in \u001b[0;36mstage_nopython_frontend\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 453\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 454\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreturn_type\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 455\u001b[0;31m self.locals)\n\u001b[0m\u001b[1;32m 456\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 457\u001b[0m with self.fallback_context('Function \"%s\" has invalid return type'\n",
"\u001b[0;32m/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/numba/compiler.py\u001b[0m in \u001b[0;36mtype_inference_stage\u001b[0;34m(typingctx, interp, args, return_type, locals)\u001b[0m\n\u001b[1;32m 749\u001b[0m \u001b[0minfer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mseed_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 750\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 751\u001b[0;31m \u001b[0minfer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbuild_constraint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 752\u001b[0m \u001b[0minfer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpropagate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 753\u001b[0m \u001b[0mtypemap\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrestype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcalltypes\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minfer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munify\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/numba/typeinfer.py\u001b[0m in \u001b[0;36mbuild_constraint\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 492\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mblk\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitervalues\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mblocks\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 493\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0minst\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mblk\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbody\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 494\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconstrain_statement\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minst\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 495\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 496\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mpropagate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/numba/typeinfer.py\u001b[0m in \u001b[0;36mconstrain_statement\u001b[0;34m(self, inst)\u001b[0m\n\u001b[1;32m 649\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mconstrain_statement\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minst\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 650\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minst\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mir\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mAssign\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 651\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtypeof_assign\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minst\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 652\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minst\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mir\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSetItem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 653\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtypeof_setitem\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minst\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/numba/typeinfer.py\u001b[0m in \u001b[0;36mtypeof_assign\u001b[0;34m(self, inst)\u001b[0m\n\u001b[1;32m 689\u001b[0m src=value.name, loc=inst.loc))\n\u001b[1;32m 690\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mir\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mGlobal\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mir\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mFreeVar\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 691\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtypeof_global\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minst\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minst\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtarget\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 692\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mir\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mArg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 693\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtypeof_arg\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minst\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minst\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtarget\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/numba/typeinfer.py\u001b[0m in \u001b[0;36mtypeof_global\u001b[0;34m(self, inst, target, gvar)\u001b[0m\n\u001b[1;32m 754\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 755\u001b[0m raise TypingError(\"Untyped global name '%s'\" % gvar.name,\n\u001b[0;32m--> 756\u001b[0;31m loc=inst.loc)\n\u001b[0m\u001b[1;32m 757\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 758\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mtypeof_expr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minst\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexpr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypingError\u001b[0m: Failed at nopython (nopython frontend)\nUntyped global name 'get_grid'\nFile \"<ipython-input-253-ff821fe7c6f4>\", line 3"
]
}
],
"source": [
"nb.jit(nopython=True)(mandel_py)(200,200)"
]
},
{
"cell_type": "code",
"execution_count": 265,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def mandel_np(w,h,maxit=20):\n",
" # prepare initial points\n",
" x, y = get_grid(w,h)\n",
" c = x+y*1j\n",
" # where to store output\n",
" output = np.zeros_like(c, dtype=int) + maxit\n",
" z = np.zeros_like(c)\n",
" for k in range(maxit):\n",
" z = z**2 + c\n",
" mask = z*z.conjugate() <= 4.0\n",
" output[mask] = k\n",
" return output.T\n"
]
},
{
"cell_type": "code",
"execution_count": 266,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x109c2bd30>"
]
},
"execution_count": 266,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nbvYrizPUcgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x109b3b860>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(mandel_py(200,200))"
]
},
{
"cell_type": "code",
"execution_count": 262,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 loops, best of 3: 9.83 ms per loop\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/ipykernel/__main__.py:10: RuntimeWarning: overflow encountered in multiply\n",
"/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/ipykernel/__main__.py:10: RuntimeWarning: invalid value encountered in multiply\n",
"/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/ipykernel/__main__.py:9: RuntimeWarning: overflow encountered in square\n",
"/Users/olivier/anaconda/envs/python3/lib/python3.4/site-packages/ipykernel/__main__.py:9: RuntimeWarning: invalid value encountered in square\n"
]
}
],
"source": [
"%timeit mandel_np(200,200)"
]
},
{
"cell_type": "code",
"execution_count": 147,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"zeros_like?"
]
},
{
"cell_type": "code",
"execution_count": 150,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1 loops, best of 3: 703 ms per loop\n"
]
}
],
"source": [
"%timeit mandel_py(200,200)"
]
},
{
"cell_type": "code",
"execution_count": 256,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import numba as nb"
]
},
{
"cell_type": "code",
"execution_count": 257,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def mandel_raw(grid, output,maxit):\n",
" for i in range(grid.shape[0]): # loop 1\n",
" for j in range(grid.shape[1]): # loop 2\n",
" z = 0.+0j\n",
" c0 = grid[i,j]\n",
" for k in range(maxit): # loop 3!!\n",
" z = z**2 + c0\n",
" if z.real*z.real + z.imag*z.imag > 4.0:\n",
" output[i, j] = k\n",
" break\n",
"mandel_nb = nb.jit('void(c16[:,:],i8[:,:],i8)', nopython=True)(mandel_raw)\n",
"\n",
"def mandel_opt(w,h,maxit=20):\n",
" x, y = get_grid(w,h)\n",
" grid = x+y*1j\n",
" output = np.zeros_like(grid, dtype=int) + maxit\n",
" mandel_nb(grid,output,maxit)\n",
" return output.T\n",
" \n"
]
},
{
"cell_type": "code",
"execution_count": 260,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"100 loops, best of 3: 2.13 ms per loop\n"
]
}
],
"source": [
"%timeit mandel_opt(200,200)"
]
},
{
"cell_type": "code",
"execution_count": 259,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x1099f1208>"
]
},
"execution_count": 259,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nbvYrizPUcgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x109567908>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(mandel_opt(200,200))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 155,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x109df5160>"
]
},
"execution_count": 155,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAQIAAAEACAYAAABYh3hbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd4HNd57n9nZrYv6i56JQo7qUKKkqjeKcux7DhWIvvG\nju3kOrbj65vikmrrJnHR4yc3xXbs5NqObMlyiW3ZsiRLVKUoiqRISewFvfe6ALbv3D/ODncBLoAF\nsMCCxL7PswSwnJ05Mzvnne985f2ErutkkEEGaxtKugeQQQYZpB8ZIsgggwwyRJBBBhlkiCCDDDIg\nQwQZZJABGSLIIIMMWAYiEELsEUKcFUI0CCE+l+r9Z5BBBqmHSGUegRBCBc4BdwJdwBvAg7qun0nZ\nQTLIIIOUI9UWwS6gUdf1Vl3Xg8CPgPtTfIwMMsggxUg1EZQBHXF/d0bfyyCDDFYxUk0EmXzlDDK4\nBKGleH9dQEXc3xVIq+AChBAZssgggzRC13Ux871UE8ERoF4IUQ10A78LPHjxZrcAt6b40MsBC1AD\nZAEXXbs58CjwP5ZlRKsDl/P5Xc7nBvCOhO+mlAh0XQ8JIf4EeBZQge9cuhEDO1AOZKd7IBlksOxI\ntUWAruvPAM+ker8rCwdQAuSleyAZZLAiSFNmYXV6DpsUHEAx4FrCPranaCyrFZfz+V3O5zY7Um4R\nJIfq9Bw2KeQB7iXu43K5mQSQy8X+kVtTeIwg4Enh/paKy+W7WxjSRASrFRbAlO5BrBAE0g8yF1Rg\nI8trOHqApiS2iwDeZRzH2kaGCC5ARUY7l7IkWI3QSBzxUIFt0Z/pRBZwZRLbeYETCd6PAOGUjmgt\nIkMEF1CHNIMvN6xn9vNaSEg03bAB1yR4v4PpyawZLAYZIgCk+ZuV7kGkANlA/Yz3zFxaE34uJDqP\nUqAw7u8w0nLIWAkLwRonAgX5xMzi0pRmWAc44/7WAGuaxpIuaEy/jXVgC9Oz3fuA/pUc1CWHNUwE\nZqAK+RS9VJ6YFqZHXLKR55FBDIKLrTuN6TkhYaAZ6V/IANY0EahAfroHkQRyia3xTSw9tLkWYWd6\nhCQS9xLAADCRhnGtHqxRIrAABekexBwoJPbV5HF5OjHTCQWZOWrAjAxjTgGjaRlRurEGicCCnGgl\n8224gjAzvaahiozJv5JwR19jxKaEDgyzVirr1xgRmJEkUJrugURhQY4pC+n4yyC9yIm+QPoRzkZ/\neoFQuga1IlhjRLAaSCA+nFdK+sezSqEIEEtw4oaX6ghUkdEHgPPAuLFjLkdSWENEkO7IgHH8rcjk\nmAzmRJYVbEtI9x6cgFCqogLr437vI5YSffksG9YQEVSSPgehDUkAsHZqGZKEWYPcBMS4VN7Od1z8\nXiAEo0utVyhAOnC9wMkl7mv1YI0QQTWyhmCl8+pdSHEThYzzLw5OC1iit54i5CsZGPlfiXK/JoD2\n+G0T7NOigSuOIEa9i1hCGN+lBlwRfe8c4FvgflYX1gARVCPzBVbyVEuQIT8LUt9gjUMIyLHG1vya\nAmqSmZzZSNfOzPyvbmS0z4CJ6VzbDgQSjMMU9zDIscase28QfMHkxgRIQjCyOuuQvoMeLtXw4xog\ngmxW1hwvib7WuB/ArII1et2FAItp4eZ+DlIjZr0Od4Zi+V/dGpQLuVzvRkb9TExPt4ggfXrDzJ4r\nZI67/RUhxxyKwNRMBklmoCAtThfSsTiwwH2kF5cxEShAEStzikaCiogec63l+8fBooGmyievdZHX\nPh9pTGUjL2cFqJvCuKv62MkRXmm+nYlAFvcd+Q1jai77s2+8uADRIA3jGTBf4qApOuZQJGq56JIQ\nFuQPNMKPTvl5Bhfy4bTiMiUCDXknGOvz5YIZ+RhSkM7IS7FwKUWwaPKpajPLJ+tikct0g8oBmAXi\nrIo1L8D6snNYa3x0/ibE5shJGrbshiHkMiHMxZZ5HpKfe0kui1hTIMsCui7nsq6DPwSRhTCCE6lt\noRAjhNUdYbhMicDE8iboWKMvJ3LhukYRv+bOtia/7k+4L+TlrORiv6oPQs0mOuy1/Hfe+/jLrC8R\nenM/P975WQ7X3ANvI79uP7E6oom43w21tS6m+xXmHI+Q5wTg8YM3sEAysCNLwsPRVyQ6qNWZg3AZ\nEoHC8prmZmQS0GpKUV5hCAGqkBM/bz65s2T2R2zexHPJjArjiK7QMVTBE5Z3854v69Sgc65pjEGr\nDUxRB4QR8m9AEgPIuZeDXMK3xL2fLLIscoy+oCSDBRGCCmyK/t6INF9WHxlchkSQxfQEkFTBMHer\nWd0FS8sIEf3HZoo9LVOxTzuxuRKPmYmgEeMjOjtHj9JtLcVRNM7EVic+smSej2EFxOuz9CCXBoZu\ny2kWXoHstMiXNwjjPrlkWDDqiFU76osYxPJhDS9qF4qtSKmsNVwGnGWFQqf8mbJ9khxv+5Cp/xGo\nohXzx6b4vV/8kGcse/jHss/DtiDUzvLZIqQ48TqkE3Iri7/zrSYZdlw01iHvo+ol7CP1uMwsgnxS\nv2ZXkXeOnTXNmzk26RBcSv7/TOQhfWrJ+hYDwBkLXQUV6PfZaH/sHGdGrubsH2+gxNxJjygDNXHi\n1qbSk9S4Gnjq+ffAXmAz05cPyUIgr4PbKa2C4akFWgfGPVQQ3VkyCs7Lj8voznYjowSpzOCzIG1W\nB5fVpUoWQkgfQJ49FhVIJTQW/nX5BO7IINqdfq78cIiq0w3kvuPb7P7Slymp6oLtAfnK1mM+3bIw\nm5qOcd93noCdQWmh25EP58W4OISQ0QWTCnm2RTpJNWTOwRaWXzI+udFcJrCSuiQeI4CtEksWWWNQ\nBTitsVTgVCOXhSnHm5D+AgHN1PDj4vex/q5GSgre5tbz/diqx+lzNEJV9OmcrUBYEle2fYzc48cJ\nnDrGrZ9+kZdz7pGGYydymd7N4gWKzJpcKk34FlHkZGRB6Uh2auXidMiVwWVCBPmkrllpDlDGmu17\naFLjcgKWKSMzD8mzzvk2jIPKha/k5OQ2Jm12zuc0cH1gnJLmQ2SZe9mlHEa1S/XiPPswV4fewr1v\nBGfDFCNBH2984HbGw9nSInchnYjZzJ19mAysGmCByQAEF6OeLJBLhTAyxrnydQuXCRHkkho58gwJ\nYDcvHwGAvMTJkEAWsTIN48EpAFeYEV8eWWE3Zi1Aqb+MouYA2yfe4or7QHWHqQq1UTLSz/VvHcT7\nn4MMiRL2f/C9vH7tR2k6syF2jHxkrk8WMr8g2RyDRLCa5IN9arFkADKfWo8OZIKV1FG8DIjAydL9\nAkaQ2SgWWoPQVHCYY/UBy4VkLQEX8msxIydsMXIZXRGMOhcFY+QQeWcd1ds3UHuwDfMv3sB8u4/8\nY0cwt4UJDOTzsmUjR9+5m+M33E9T4wboibvlS5FzzYUkmR6W1lXNFq2nmAhAaLFkYOSnDCCtg8kl\nDCh5XAZEUM7i1/FGELuONVsfoCnS+RVfGrxcsJJchMBC7M7MQpJAApgI0ksJ+yuvZ7zLwbX/vp91\n5w/xy5ctTIad2L65mzPX3cFb4atoblsvi5UE0pU0c8LnI/+vk4VHEuJhNckdeXxLVEkqQDJfKyux\nVLjEiWC2vn7JQCDvuNXQ/y9NUATk2iUZLDc0kudbo9xYIeZMF4Cmx33dOgUMkMcIAMrV4Pki/OB+\nhT3tFTRmb+ZlbuU422merGHQE83/sETHcQrpKFSjx4ggV4QaMqK3lOQ/qwaKVeodLCgLcSZc0QGd\nXeKA5sclHhPbxOKdhDbgatYsCQghY+ErQQJGKsZCja74zEKrDlv9s96xShOYvwWKHqHO20RvpIip\nZKJINUx3CaUqMdWspSb9mhxi6lbLh0uUCIxOvosNF2Yj47fp1jFMEzQF3I7U5wUkghV5qZO1Pdcj\nfQilxHJuDER/r3S3UWdupI5GamjimsG32PjKEd54EgiC9Qkd4RHTP5wXhnUJhEdmbAbI22oLS58d\nmiqv85KTsOzIjtHL99C6hJcGFhY3kY3swzUoHWbRwBEtoFlKpWCycJD8pVaQJrsz+rtG7L53RKAq\nhCIilLs6sJm9lIsOtn3lKa7hJJs2TTC038fpSRAOEEWwUztCDU38hAdooF7uS9Njx6oF2kgcthdI\nAluP7Iy22NC+QJJBvn2RsmjxO7Ij2ekcS3NiJMYlSASGZtVibmQ3MjyYCpPtEoPVJKMCphVaCmUh\nn+rJXGozMtU4i5i2ixPIC+Mo9pCbOwxZERQi1FkaKaGb4i89wdR3jnCaUdoLYKJd+tctfvB+Azbv\nP4/+ToXjV13JCft2QhGN0WA+1ASlP6DdNPctZJRFVyHD+wPIZkiLgUlNgfFp9HQ0GCy10YRLkAgW\n27PQjbwzF5LFcplgpUkgG+npTya1w4qMmBnr9EJgYxiydYpc3dzheIGrwsc4aNvJKLnU0UA+w1xT\nc57CO0dp3gcnD8V2FwrByy+B5dgEyklQP99B/a3nwaHTCoya8mKFf6MadAl5OwWItS6IhxGQMvzS\nibZJBg4LTPpTILGehxx8J6nMM7jEiGCxPQtdSBJIRdLRJYZ0kUAyPlwbcuIbcXwXsClM1voRTA4/\n9dZzXP3ms+w69DzV72/haOGVuBkgj1F23jaFrw2aX52+yzDwVvQJvsECbms/ZXQxaXJgcgYZFXkI\nf4i8Z17m+K4P4B0rAL+Qc2quSZ6NJBAb0jJfqEapzSSLk6YCKSADV3Qw3SzeTJmOS4wIjMfHQmCU\nuK1BNWGLBk6zXKeuBLKQX898fOsg1u7R4HUFKIWiui5uy3+R4kAfucc70R45z/DrQ9xbvxf33X2o\n4+A52IepYZQjP4WmM4kPUa3ATb8H/dsHGKKHMXKojTRR7etADAQoPvlffGbPbXS53eARcoI7mNvi\nNiQJp5AP5YVaB/aosyQlZGCUw3eRCsvgEiOChcBY5NUiLYk1AqMyDpYuH7YQ2JG5XfPxrQ1pnMXn\ngCnRzzkiXJH3Nn/e9k9UnzhB3zPQ8yxYdDA966XKcoiqfvj3z4C9HzxzzKXNKoQOQzi7j/LtZ7CV\nT1HW08ruvS/gdim0/0cx1gmTVEAeQC4NQiS39LYjfQct0b8NYkgGdrPMLZhIhcPPjbx4bSwtP/qS\nCh+qJC9LbqSPbWFtkQBSONTlkK/lJgGBfLKbkXw7FwkY21WRmATqgY0BghaNicdzePlL2Qy4LWT/\ngUrTBHTshR/tgaGvQngYXg5B8xyT7+kg/Nc/w1PvHET7v29yf/eTbHr9BX7yMPRuMfFz+7vxajaE\niMQiFAu5xSzI6uGNxCIdyUIsoKnLvMhHJkMsLQom9EVJLi3hgELo8IVFfLKQ5AVJHci46xqDJVVJ\nLEnCjhT4mAuCWNpHohVKNvI+VoHtPmpKmqg3NXATr7KTI0z9ZwPH/mfPkoZ5vQo33QBdW+Cxb4E5\nT+GOxjr+JvdrHDx4CxP92VLKrBdp7jewcNHhhuhnk/2cNwhjS22/Fo8ppIrrfAN4B7quX8RCl+HS\nIAfYMO9Wlx1sptRKiM0HI5I13zY10d8TkUAecjkRh7bBasryuxiwFDBCXkrsuSNhOH4QIkfAXQnv\nfzjC965uZsdze2lkCxNky+eMoT6+HhmuXwjWRT/bi2y8Mh+sGghbCnoxGrABVwHHkC7TheESIYJk\n25m7kFpwa6zRqN0sIwMrkSkIskCzgsR3TymxAs65TG0XMe2XOIQjKj2U0Egd6znP7VdA2fvg6Z8u\nfrhBIBhA+gEcDl7dcwMn66+npWIno3YHBCIwqsixCKRBuQH5lE927W9cC6NKcj4jRiyx7fvFO0Q6\n07chaxMWVqh0iRCBmeTW+hprrorQbpavlXAKFiJN+URfh9GPwM78y9UCpJ/L2M6sQ1Xwwjo7gIVS\nugk93kDfb0YoS9HqtWQ9XP1nVvZmb2bqqnWM4SJo0WIZh0alYy8xP7MRpUvWF2cilhrdPd+2qnTo\njqequtBgsTqkJzP5pKNLgAjcJKcRkMeakxk3SGAlCocKo694njURi+Ym22zaHd02nkhUICf26M1n\nmI2cxXmujZNP+uhKkfiUwwZbSqfwBA5x0ryNQU8BgVAcaxnaBzrSvI93agaQEYaxJA5kRp6nFt1X\nF4ktC0XEBE0mfClshpTDQq3iS4AIspk/JpWHTB1eA/qCgmg8WoDdtLyWgJHuK5A3tjF57chLrSHJ\nIZn9GE9Jo6+hAYsO7liJba5jhHx1iMBTHRQ0DjOeBefblnwmAIz0wJknvOzcdIzvVUZQRESOKScC\nPgETipzEeUxf5xvPISvy3P1IebO5YEZemwhyyd5P4kpiJfo9TvhJbVu0AuSiKDmrYNFEIIRoRfpJ\nw0BQ1/VdQoh84MfIIFEr8ICu68vcJzoX6XFKlWbhKobxBHFal7dw0kRMD6CU6aExO/IGT6a9gwlp\nbivE1s7xsOrgDkNRGCF0smzjFGQNYFaDjPSacNVobNLA/wNoT0EvEP8AdP4SQhUQ/gzkO4cY8rkI\n5pni+iMqMX3EUabPzezoy8vF138cOe9mwriGRgvE2Tqv20wykpCyKF5h9KA9JEMGS7EIdOBWXdfj\nufHzwF5d1x8WQnwu+vfnF38IIwVtLpSxZkjAoqWuw1AiWKIvB/KyxsNOTIE7Xn3YWJYmIiY7syeC\nWnQoCEORrCp0WCYpye3BISZRCWH96AYioQ4s3zlB5WP+lBBBgQuuvELjsSNuwuEZA84Ng9ChS4Mp\nRTpDI8gM3pnHtnFxJLuTi/0IYWJzsAw5Y4a4mAyMPouBEIRSaRUY5lwn82mwLXVpMPPrfxdwS/T3\nR4CXWRIRVDC3uW/lksqJWiyEAMtSO+zMATPyMhp+gJmwIJ2BeVzsB1CAzfr0ryEEhGYxWczRbQtD\nqMUBVCWEWQtQ7pJ9zUvpxoKfYfJo1yrw2Lo4Y+1JSX2NuAqsTzhw225BoGIiiEX1E9Q0whGNcA6g\nhqA1ur5eJ2JlyEHmjsqVJ3gvQKzUWUdeQ6PjWaJlgqpAWE+hVQAxy6Bxzq2WahE8L4QIA9/Wdf0/\ngSJd143VVR+SkhYJhbntXxWZzZKqXgarFILU9hqMhzGp1zF7fYCKDKUZKcQzCz9VHW3bJBbFTwiN\nICYi3WboneXWWhdEZIcR6GTbxijO7QVAiT52BToKsuRYoLOlHurvgEd/uZQTBVUFzSTwYaWNSgAq\naUfPE0ziYNDjZsjjhqwIbAvJSX/KQqRegYiADqRfQGfupbyIvYQrgunaIMrZCP6AFf28kJ81wosz\nLY08O4xMyTbsKYUgpseWGEshght0Xe8RQhQAe4UQZ+P/U9d1XWYRLhZGh6FEUJEyY2sgX8Aebb6Z\naqjIDGxDs2+ubbYAW4OQE76Im01KiLtKnuVL/r/mR+bf5YeeD9BeVAmFs9zMChTl9JFjG8W4PSz4\nWRdN3FeIUEoXtTSTxwjhqyD4fmCJRLBtJ9z0ETunrJUoRKilkZYL2U7gcg6R75jhASwRtPSvI3DW\nCaWKXOYMI6MAs8GwqrIjuDZ289Gi/8e6e1p56JUv0WMplVqJYeS1bV/aOSWPgugBz866xaKJQNf1\nnujPASHEL4BdQJ8QoljX9V4hRAnSV5oAL8f9Xk3ihpBGdsdMWJGWwGWuMJRjk3FmRaTWMWiIbRh1\nAnNtE9Ua3H3rS3za+c9oDzXwSuWdnPnEndiZwsUQ/RTyMfXbHHpfB9f+1c8JXGdmX9bNtHmrGRiX\n4VxFRKhytyGUCH/18b/H9g4f/e8pJptxFCIc4wpMcTJAFXRSRyMuhlAmoEaBB++Bx59d3CnvKoKb\nrgC9VqCJEOtoleNCp4he+iiiTVQTFioFDOBkgmsmXqPr9n288Oi/cn7DtXi9dhiIFiXMVV1p1C1o\nEDRrDCoF/OnpbyJ2CL7W/XkayjfI/9ej38HMiEi2VSog+1JlFbwK7EdaA7MXOi2KCIQQdkDVdd0j\nhHAAdwMPAb8CPgR8NfrzicR7uHUxh41C4bJfDhgNR1OZKWg4+TTmvnxGjxcb8oa1wrnQBo59YYSy\nH58h3zbEdZEzOG/MQ/n2m/zRV628/ZF2sl7x0ffpcvyqBTtT5NpHsZlj3jOL2UcZXWz+w3MM/qiZ\nzm/ZKKgIsv63cvHfb0aLhLnx3GHUtjBWtx9z1RSmYBBbQwhLNxRny8zfRhbeTNxhgqwghFq9bDY1\nUqX20LK+jGuCb7D/78IU3b6V6nuuZIxsiujjGv9RNp86yaOnB/mT8L/wQuHv8tL4bfQpxdKpOKlI\np+Ks1zACZSF0FAI+E6bPeHjH15/k0bIP0TC8QZ6AILbEiCcDVUlxxuFN0RdIb+a/JNxqsRZBEfAL\nIQesAY/puv6cEOII8BMhxEeJhg8XvmuFWJraTNij/3eZQgjIskTz0FN0MxQhJ7Wd+WXDcpFhPjvT\neg0OBVzsvfWj7NxWQ8EvD2D594PwtIPQG310eKD/abjxw3CmRiePEUrpxqQG8asWxsihMGoYXssh\nCkZG6DsyztT+cVpzwD7l5c7N+4j4dM5+sZNIXwTsEMkDwqCMAqMQHIot0ReKMyMwug9sjWFcWR56\nlAm2F3s5GfAwuTcCB8ap9/WQe7+L/KExal44xRvf8RD2Q/ivX6Pm76tpq69kCjseX5YMe5r0qFCQ\nKcZM7jA4I2DVseR4qclu4h7lWdT3h3gx/3YGBgrldbUgDVuNxIJZtmipcsp9BbNb0YsiAl3XW0hQ\n3hcNJd65mH3GYGSvzHRPG9K2C+mceQlBEVLOymZe2lLAxHTP/8wEntkwsx9hXK9BgL57rsNj8bOz\nuomqf25g6KkJTofh3E/hphKouQNsuacpaxzirQNv0JRdBu+up5uSC70HruZN2p4cpzcqJjI0Bif3\neXE+3MaVufDfvwb/MvQA7Z2E3iawNEmDZwgd1DFORcCrAz1DFGzyUhqw0/JqgPE3PRx/TX625xce\nNNurVP55NWNbchkwuwmEzIyZc6OSZ+ICO2UVj2LNkVZQvjbM1WOvYv7GK1jcYfaqd9NX4IbSCAQU\nGTmAWHZmLzGWM6sQUJeBCGaf7pdAZqEBB5dtCrGqyMiAYwl+Dyty7Rqf9psskuhH6GSCjWMNVEV6\nsTmmc4tNg9MvQs1oB6Kpg7ynoTDXhcO8nbJ3bLqwXX2ogWH/1LRuYCNdsP/7oJdAeHl7eOAn5rQ6\nMiMUOP76FIG3pzjxxvT3NyhgGzmFOnUcn6UKm2WKkWAeipDRjUpnO4IITibR7RA2yweYiyFqhxuw\ntQ/R+zj436HiKB1jMmQngF0mLo0iU5aLowOLH5NJjRLCYlunLQyrjAhUYt0u42HoSF1m0BRJAiZ1\ncZEBB7HASTbJpfvORBZJCTuXHzzMjed/Q+injRw6ClkVQKtU3PpNG/BtuK0c2jzQPAY5liFKv/sW\nuff4IQJqN+gnOtnp9DOWD4Nx+aaeQHQfacT5k4nfL1dg3Z/Y0K8fZpA2fFhRTWEKc/vJZZTfCf+U\nnn0hsicG6aKc0Q01sD4XEyHynV623Q6HfgJVwTMIp0J3ZSkdpnX06mX4x2ySCATy+zPydEH6iCKR\ntUoEZmTl1EwUsPDH3CqHqsSKhhYCo9pUIN0li+VHYz/VXLx0iDoJ45H7/f1MHB8mhIsNv+WlvmSK\nx74yfZuXOmO/lzrgVvsoWc0HiAgY/T78+JsQyAJvMoU7qwRvhUEdzcF0fpjCvFa8xXbcDGLBz0b9\nDO/z/4xHPh5g6BwUO+HKv6xB+eQ2psJ2StpbaP0rOO+D2jOvstH3JsFKF6/W3M1zo+/AfyDqtTX6\nLJxkulUgog+KJfVQTA6rjAgSYa5A9yUIIxKQZUm+83B8D0AVmWKxlEtihA5n24+DiyK6nd/8KE9Z\ndlBLI7t8b6D/+gg2DbyzmPNnhiH4Ijxog4kS+O7DEPDDU0NLGHcacLcGpY/0svcLvVS/p4lNf3sV\nZ7K2YwoFKB1uxOeNoEcn7/XbYZvWDL9qlk/3YvD/Ibz2Feh970GUXBPt3/wjjt67g8HRBMtcQzLd\n8BVYNRBWmWS0zLgEiGAdi7N5Vynyo1qCC3EIGs2ZDCw1oGCkYixgP12UYY8mzte1tHLj2/ChjfCt\nWUxqgFAvtH8fHg1CeGUs3JTjJ0EQz0d7mf7TEJWeN9nz7z14zvnZd3UzzUQIR2sHnnsd9h6esQM9\ndu7Fj+3izJ4dDDcUQWeCqWeIoSy2d8ISsIqIIIvEywK4LHoUCiEFRReiHVBOLL8/VZcgC8mtyexP\nBTb6waKjI+ilmHyGoQXan4GfnZ/7451h+FlEps9fqohc+Efmsu4eHCX7qAdPk85wIMKp+G11Lqoh\nsNjhY98Csw0iW49SHjEzprt5Rn/XxQdL9J2Y1Vjq8TJiFRGBwsVxznUsrqvRKoOqQK5tfhIw+v8Z\nm1lIbRZ1LtIxOJdbIhsZpbXosj2Y1WhFrhNGxckEA/0jPHUGxucJ9YWAiUuYBGaiIQL9L0Wo7I5w\ndY7UAJrv9CKawsAd5RxzXoPdOsk+9SbOz6WpWYEsFjT8KEKsiPrUKiKCRDAyWy5RmDUpOiHE3J2G\n7MgQktHebjkMoLzoMeZLyjQRK+p0yEdhUU4fFs1PHiOYCGC7wcbOv4WpX8FzB5dhrKsUHh08QzD6\nBvQ75i+IzC6EO/5M5XX3Dbxl3sEQLo5NXkFnb7ksR04EG2m55VcxERh5rpcgrCY58TVFhoESIZ+Y\nx99QxVku5CPdLPNFGLKQVoNVh+KYjeuwTlCgDpDPsPRl1eZR/OFcIrmjsIaIwMBEEBqTkNuxqrAl\nJ4In2MDTpndydGonfR2l+DttMtvXSkwjcS4oQoaXJ/2pFTGKP8Ty7HahsHPxEqCIS7I5idFr0GFO\nTAKGem/8azlJYGbG4GzIIlo5p0NRCFxSNSjPMYxLGcLFEPkMY8OLX7HgycnCvhmu2bJyzZQuNUyN\nwdGfR6gONjGFnaGeAvyddlmrAPL2TiZRVhHRZLPl85WtEovASSwyYAjbrVC/vlTBGo39JOo1qBIT\nUZpvjZ5K5CDX+/MZVk4kWRToUBhCK/aTYx6jTHRxk/NVcsQoPqxk4SGPYYoGB3Ae9WJ6BcoK4K3Z\nq1vXLJxXc/VjAAAgAElEQVR2KHbBc4dVtqlXMOh3E+q1xEhgLhg9GGeKClk1WZW4DE2JVgkRxENB\n9r+6BIhAiTpyFCErBmcWChkFJhaSb9K05DERyxKsYn7SMXoR5umYSr1YiybJMw+zNeck94ae4q7X\nHkVsKqQlv5ZJzYG7c4CSp1rw/2CIk4fgmWVOC75UUVChcsP7HBw7VMFe9R6ax2rxB5MUlzF0R+OJ\nQETvseBEiuXMJFYZEQguieWA0bvOrMovZyY05ITMJ7GE1XJBQT7d1ye5vZkLmYVqmZ+ivGa2hk+w\nPtxCWds5tnn285P7wnz8n7sI7tbxl9opfGSY9i8P81zykvlrClYbWLIhvMvB8b+/jiY+xHnWM+WJ\ny+GO6hUQIpbctQzFVgvBKiMCo23TKofDnLg2wDAIypEFlMks6VJF7kbEoT7JbVVkA8+oIlxhTh/X\nfefr/P7z/8HmbTqPfhNeim4eeQ6OPtTN1g9AaTn0Xo3Uu8jgIlx3K9z0aTh3s5tH2D39P437oQB5\n3TuQDsMtwHEW06ksZVgFRFDCxZK5qxD5cclAs03wDUiDRkV6g5NRbBxG3hBLgXGsZIjHSSx92Fiu\nrgtCfhj9z3ah39UAj7447SP/9ST4g9D1dXhRhWCqGvNchgi8AkEBOWKK2rubiKDQaCTKrQtCuwbD\nS1j25jtgdCrlxUirgAiMftSrDEY7KgOaOvtEU5DmuB24Een3NCFDRPM1xHRxsfRVE3OpSknUEltF\nmZg/9mwoFBlm6YX9BCE7HPUtmDnTaqFtRp/BqejED0/OP6y1jmNeaN4HRblD/Na1TzHVkUPz5hpa\nqMGvWWLkm4O0Bjvn2FkiKKnumSixCojAgIOV86jNAatJagMo8yQBgZz4URUfHEjn3I4Qd294lvFw\nFgfHroMhBVq12QUvNS7+FqqZ30zMYn7+LCdGEFamu18UoDpKAtH9jJPNyO6N2D/RiuWhM1Qg1byX\nv/bt8sGkDpMTML43yNSDw2iRMf708a/RlVPGsfEr8RUqUu5sPPoANMighpj0eRqwiojATNpaljkt\nsapAkzo/AeREX5boTwW5unEBAYUqWyvXjh1iF2/QUlrNFW+e4R9K/0ZKWCfjE5hLHDMRjA48M5Go\nDwFIma2yEORNVyX2Y2GiqgztI5uoDQ8w8A+Dy5W/ctljagAangFzToSr6aHO0shgtptuUYY3YJNJ\nW9ZoqzVdi/kMkoE9KmUWTN3yIM1EkIu86x0k10MrBTCpMvU3HvYFtBTPQa7Jjclq9P8rRE6qUYW3\nR6+iQu3gRs9rXN/zOr1bSiA/JL/w5Xi8ZjF/wpABi8wVwB27ibJtY7hNg9iZQqDjqFRZ99Fscg4M\nMrxv+ZWDLlfYrbBju0qLpZYS0UO9tQF0GAvmYsnyUVHQSXmwkxcddzPyZAF6sglDFg18wcuJCPKR\nj7L4hKJlgFkDVcR+ty0imTsX+XR1M/2JbYh8xuEN7zWEauBT577OtldP8d3/80HoDYEuJBGMK9Kj\nNB+cEaxOLxtGzlMy3MtrG67H440efFRduJc5rtfgtFNzjFFo6sfFEJX9HWzrOUux3cP2e+HNAxki\nWCw0FVw5OhMhH7tDB6j3NHHEtpOObFnSvWPyTe4eegHnxgkeO/ARgi6zlCybrT/ico515Q+5gjCe\n/FmW+c392SCQPJVIWFlj1vz9LDxkh0bR/WEcyiR22yTeKrtk/U4NhtTZycAZkaZiUYj8il5+p/Vx\n7up4ik9N/S1v1LxbbtMKBAR4RXKkEtdrMB42sxeHMoGDSep8TWw/cJDSX5+gYAf0NYCecRAsGuOT\n8MxLYT71+pv0RyDSCZU1Z2m7YgO6Jig53Ib1aBvX/cVBflTxIYJjyF6LQWJKxysUoVkFRGAiZTm3\nQsSe/EJAXoJsv2RhVEWryNh8kko+mHWcZg/u8CC5V02SW+elSm2l1tVEw0A9EV0hVBEhIswwEiWn\nCHIyW6Ir8nVBsOg41QnWDZ+nUDRjNZ3nhi9/jbPfu4MAZgLrdHRdSH39kah1kIgQ4noNUjjdEjBr\nAUrzuqjreYutU2e5uecl1KeO8vRP4I5X4Y3ziVv0ZZA8dB94/gKebIARP9yx6xB7PnWeSK7GxDcH\n+LlSw3//xScJzJwDLuR9MZuWo5HRGkmNF2cVEEEJsgh7CRDRf1LVI1AgfQG182yTiByqg9xS9SIf\nH/5Pbm59jSZHJTa81IlGKIQQGp1DFUyWgyjXEegwrhDpMsOm6S7jW7Nf4p0P/xuVX3qVjncWUf/0\ndu5kL+dZT1N/LYGQBcoD6OUCfVCD9gRLnnVB2c9vBjQ1xLrCZjQRouxT/8We5w7gCUQ4HOWK73mS\nvFYZzIlAGL4dp+L0wmG46dERsrLhtA8e+KmfU5zhLFcSWUgY3Uhom0hNQHcVEEEKkGWNrvtTFF+d\nKQ22wG36KWJ/6XW0PjdK5MlmbvzFazSwnjoaaaaG0vwu0MHNEC4GmSx20FlXAcp0dvcKG8O42PUA\n5Pzr9FZ5VQVtFyIQgxNuhiJuGZaaiQRkZdH8VBe2yFZktGF97E5e/uNReHQO3bEMUobXX5CGalgH\n/zt6+Orez/G0/tsE06i9kUYiSIH6UJ49ZiKlKsmiEGmkzFckpiTYpgZwwInxrSh6mN9/Vyfvu+IE\n4TMnad30Eh2U8xnf19hv2k2nWo7pG4fQ+j14HroXVQnTEWcZldLNtRzCRisvPgXrQkPc94W9sAlu\nZh8HxXU0ijqcTFDjbCZk1/Bip5sSIhGF9sEqIrocYEF2P1m22CNeoKOJkCQBfAiHRt1Xi/Bnd9H6\nzZEUXMQM5kIout6qLIbrbirgK9bPERDp7eWZRiIwcnEXCFWJmf9mNbVZVkXEsgIXAzOggC9soyNS\nwSnX1Vzf+TZb/+Ecd409xdtBOw3hTsJKDzv+vIxNuYPktwzTdjDAr667l0ra6aIMHYVK2iikn20P\n+ikvAs+BEG9+vJf7tj7Nz5ug8ttO8iqH0QhxzeBb2J88xfPNdZj/8aN0U0q5qwNDEtei+dHU2Grf\nRJBSuiUJoONmkPUFvRTvmuTEq3DwxJKvZAZz4Io9UP27To7X7OCh/D/kpUN3Emw0pbXwKM1LgyKS\ntgrMarQdmJhd9WepQylg6cWPvRooIYZNLo6qOygp66XzgXJyxwYoi/Rx4K90fD29mLzjDFkjmLJ9\n7Gx7m1xtjNBLGi99+kZ6zUVY8eFmgNx6yDPnoPSPce5HIfRTfXiGYM/Ir/GVl2CL+Mj5TQviaB/a\nOwNEaJR+Bwv0U0hoxldswU8h/TiiisQF9FNDCz2PDND+eIDhgUQnlUEqUAJUq6BcsZ79v30rL9hu\n58X+O/Ccd0vl4oVGaCya7HngXXq8Mc1EYCQTzQOzNrviTypgWALJkkA2Mq/AgIh+XkPmCOQLfEEr\n7YFKXi+4jsH7XdTSSB1NRB4eYUt/iNBrU5zSobUcpkIeyrKPUxbR8IStDOEip99DhaWD3NEx1H1h\ngq9LTYrjg/KQnn87x+Y/6KHEEeDMSz4a34LsnSPs4jBqNMFAIXKRN9pEkCw8CHRcDFJDC77/aqD7\n6+OMH1vKRcxgPmz4AKgbN/DKrffxtO0+Tnm2xPJCFgOjLdqlTwTzwKLJpYBFSz0JaMQkwopZ2HLA\nSSwbWkUaNYb4aBx8WOmhBJUwuYyQyxjr36tyzZtw+C3w9ICnE8Y6ocoB9TeEqTvdRL21mdHnRvD4\n/GT7IfAanH9p+r7f+g6Yx8fJ2wi0Qs8x6P6nMSqdh7jmAelFvLrhOGdL6ulxFhOIspyJIE4mEERw\nM4iLIXKPDzHRmykpXG5MZEPXb9fx1uaraJ1cx7g3TSn1CbB6icCsyRDJYhOB5oKGnLyp6LBuImEV\ntVkLYDX58WNhIK55641/Bd5vwUQzsvYAKURzdhKaX9b50Df7MJngjaegoxO2uWST0bcSBAQO/RTY\nCjafVHLoO+Wn66/buW99gKYuuLGrl6fuvY/XndcyGmUuKz4KGECgY2cKJxPsvi/E60dhcL5KyQyW\nhN4fQPAGP87NEzg1DzZzLl7vfL3qVwZpJAIrsz6GNRVyrMujirlUEjATG3aCHoEGcuxj5DmGAWmi\nWyM+8rpH0bwRXvoZtCTQ+QsH4LXvymCE4bs/MU+LsEMzIn5KfxDzFzo4+jRUfRhct3VTRyND5BNC\nQyGCiSAKEUrpoS7SiD80JduDZ7CsuG0TTLi7mNDPMm7JJjvHw/nJDXiW4phKUX/ENBGBhuzkkcBR\nqCrgsi9LzTUKMmNrKflLpch6AwXp4qiee3OBjhUfNYEW9vzbS5jGQ5ja5MdnfnVh4PQShgYwPA7f\n+5X8/cf/CTfu6aI6z0LEVsO4w4UNL8X0XfAjVE528tTDXloyikPLDt82qDKdYcdIDnbzOKEQvJx/\nL0/yPrlBiIUrVqWoP2KaiGATCetmNQVczuVTbS4mdU2V80hKj9DBJFW0ySt9P/BLSYEjwEo46Kv/\nrptToz0U/PF5dv+Nm0kc9FNIDc0AOBsDKPN16sggJfjZIyB+ADd9+BC73Yc5fNzJ+x8biRHBOS5W\nLl4hpEmRPlFOvAp5juVvc7iU/a9DEoDRpT3RvtYFKazuoc7RQD0N1NFIJW1ENIUzO2rwv9NMc6FU\nKFsJPHFe51RvhMLOQcrbei8Qk6qHqfM2YY6kWTVzDSEShnAQDj6u038uwsbPrudr/EVsgzQuz1aP\nszC+YGg5UMLSJQ9MxJTVZrtyJp0iUy8FygB5DFNIP3amqKSdkEVFHxLsDoNfgZYVqOybiEaWjj8R\nRvWPseMjXoLXgAjrOJv8KC8Cg8s/jgxi8Hkg3Azh8zmcqtya7uEAq4UIzBo4llHG3CCBpWRxViBd\n8y6m5xCAtKsqg6DAxsIzfFD5AbvOHSEYMhHeBCUDvZQ/1Qel8NK3g4y3wfAKs/9YH3j2hXCWhoi4\ngDCop4EjpKUN91rETfeAelceZ8vqeD37Ss657sB3LksqE6XZWZsmIojra2jRpEKQeZkETIuRpvxi\nSMAU/TxIt4YVqAqDe8a3JnRwhXFlDVHq7KSKVhwHTjD6TAit3EznuIeeI0A+HD8M3jT1BOjshTef\nhR0CeU0GIXAaIhkfwYqg4j7o/706Wgvu5eXAbZzu2gatCiTRR3G5kSYiiOtraFKXJ2PQuNmLWHjt\ngA3pyzSIwAVV1zTjs1sYtWfjt8R2qCphcuzym8zPGsKsBGmmhmBJB3l5jViPeji0LxUntHT0TcHr\np0GbhCs2y/fe7oTRjDTxyiAXsMEQbtrHq/H0RE1LHek5XrN9DYyOwamGirzo5STvDs0idjWykSRi\n7GdLmKu3HsRkD9IwuZ5Ofzn+KJFpapCiHJmJ42SCLMbop5CKPTVsuaof0w8nadsPratE6WfQCy82\ngyks/Z6vT8FIJodgRdD5Aqi+Rmw3dIBDgW41VmPQxeKJQI3W3/gXLyOTXiKwm6V8eCphTN5Eyuhm\nZl8ilBMre9CISUVtiUBtkBzzKFeefoE6dzXHC6+jh1LCKBcIAaCKNippx4YXkx7EHAngFnCzBq2r\nyDk/FoCfNUjhpaVFnzNYCPY9ArnfH2Hkb70EPmiWMmTdKdixpkpNDv/i13jpIwJFpD5UqHAxCcTr\nlRhtyGeD0bMwl2gXYR3WyxncTRmlX25m/b1NOB7QOa1txkMWXZQh0MnSPdSKJuxMohLGPTRAVusQ\nYyNS6361IQxkmhivHJwl4DM72KDZadIqGBpyp0WkdDakjwhybKn3DbiQqkHxBLOBWdOAp0EgJ/8c\nVdFX/aCMWxteo7v7N+RWjtJLEVfwNhbdzyc932Cf4xY8ahaldFPzrSbe/nt4PpB2h3AGqwAPPgnP\nXvlb/Kv6AEfOXg8HtKW3ukshVkf4MBUwsgazkEpBBpI9wyoSNwmJwxvspP5oKxuc58guHqHRXMsA\nBZR7mvnu1SF+++f7mNhSTm54jIJ3D6P3Qe3XoXEx55PBZQXzb6C3uJxGZz3DE0tU5loGpIcIcm2p\nCxdWIsuCS6MvleSjBAqSNBSkTyDeseiMQFUQRUSocLfTpxYxTg6ddxXT8/+6MP3zALvu9uD7mIbp\npJ9XeyPY9/opPtuBqofReiOMNy+8tV0Glyd+8g04dFMZI+4CIv1xN6gf2esyzc7k9BCBNkNiLJv5\n+5uMI5s/QLRvH7Hmo9lI838hAsZmYg7CRL4KFUzOAMW5PdjMXgKYCaPQ6yoi6HXh2z9Kf/MkkZeB\nUQj54Jn/AIs1wJWqzC+a6l8xWfoMVilMCtxfA1/57Od4s+x2xgdyoF/EsjkjrAqPbXqXBi7kRLQx\ne78/YxsfsvkDyCf+PSHQdAhoEI6byT7mTpl1IONmGrMvBZwRLKWTuHP6cFqlJ7aAAYrpI5dRiq4P\n0HcLnHgOaIl9rOW8/DmpwBmx8tmDGaw+hK1mDnzhfRy57UH6huoJjlmkFZCm4qLZkD4iyEd68Gfq\nMojo+8bczovbxiz/FqYI+ff1IUw6Y8fcBIfjTAE/0zVRh5DlndlIwrEDhTrkJw7aus2DuPMGMBd4\nybGNItDJZ5h7nniezVeforikB7NvmIk5HvUdkVXlB8ogTQgVZDHwJ3v4+b2foDVQTXDIIpuerkLM\nSQRCiO8C9wH9uq5vi76XD/wY6V5rBR7QdX00+n9/CXwEGZ36X7quP5dwx7lIx55txvuG7Fcp09fr\ntujLChSCMOm4cwYp1zpoLNlIj7+CwGQ0nu/UoTRuwdUDDmUSrTCI32zFF7TKsGBxLPkiy+pBUSQx\n1NtOc431DexM0U8BKhFqaeS9Hb9guGOEHDd0PQFNqyRbMINVirIs/B+6lnN/8xFO9l5BeMQkO1FN\nsuqsAZjfIvge8G/A9+Pe+zywV9f1h4UQn4v+/XkhxGbgd4HNyGKC54UQ63U9Qfe8ci4mAQuSAKqj\nf08i109WoFyHEh1CoAUiuF19OMUEew49Q1ftCfZV3U7zQB1BzIRtAl9h7LRsG7xsy32bPNMIbVNV\ntE1VMxNFub2Y1CDZjLOZ01w/+TpV3g6Ouq7EEZkiRx1DfTBI8wOQcw76AiujJZDBpYe8UlCrs+i8\n+Wq6/+H3aPLXRvtdmqQ1MASMpXuUF2NOItB1/VUhRPWMt98F3BL9/RHgZSQZ3A88rut6EGgVQjQC\nu4CDF+3YgjTVLTqqKYQAQgUa3BTbxNQewBwIEClRCdQqUBjGNBWiYHCE+3f8lJEmuOVD/03J/+6n\n5n2/z7P172KAAiYCTnpGSnDrQ4yIXGryWnhw6Ee4x1t5PW83b7t3oxHCovuZFDKVMIgJZ6eHq5xv\nsdVxinXHG6g41UrBngGKB7s4Zq3CezrA1jHY1wsNqyRdOIPVgywBpiK46g8sRD62jaOVD3AweB2d\nQ0ts57dCWIyPoEjXdUPmso9Yrl4p0yd9JwllPZG5rdcC20Lk1/SiKSF6RqdLB1Xc0cR6rYExsmkY\nrycU0agvaWD3ugM81PeXfGMHPDUBfBwKzae58yM2hnAxYXaiFyg85Psi/2r7E8pEN/d+6UUOP95H\n/Sc7ufYLJygO97E9cJznbHcB0EI19//xz6l7VwvmO+D4L+HFH8L7n59i6Al4xd/C3kVcqAzWDu7W\noPYhOPvhWp42XU8Ppeke0oKwpIofXdd15k6cy/jNM8jgEsBiLII+IUSxruu9QogSYtH9LqbLgpZH\n37sYzzwML9tB0xmquAml7BZwT18adD5TR3+gknCJQqBWhYIwJ4euoG+wgsgOwfAb8L/e/U+UfLqf\nJ961mee5i0Hc0aVBKb/R72XYk0eNq4XJv3Ti+mQrjXk38DbXoykhLFY/k8SWBq9+82auzJJLgw3v\nOsVtta0078mn+HPd3GypovpMJ5F/DLLvGDRmlgYZzMDeELz8Rbiyo4mb/uggTZW1NFCf7mEBrwL7\n591KyIf6HBtIH8GTcVGDh4EhXde/KoT4PJCr67rhLPwh0i9QBjwP1OkzDiCE0Ll1AJwzdMOsyMWF\n0WE43llYqUNxnLOwoI+yHS383uEf0l1Xxr7RO2gerCeAibBVme4sNE9x5QVnYTWtCZyFJXndF5yF\nWznBXRMvUOlt5013zFl4y+CrHH5gkqyz0BeMdRzKIIN45JeBui6Ljpt30P4P/4NXfTfTPVJG5IRN\nOgvbmS5Y6QVOzbKzAaAtyQOHIjCYTPVhDrquXxTDnC98+DjSMegWQnQAfwd8BfiJEOKjRMOHALqu\nnxZC/ASpyB0CPjGTBC6gC5kaHB858CFPeoLpOgI+oEPAoAAbhAoU+geLydEH+c3199LYuImetrjw\noVmHqdgj29uTw3FlB6bCEL748GFRLHzYN1aMKsL0UIpii+B0TnLMuZ1+ClHUCHU0cuOPDlH97kly\nXWD7FfT8JBM5yOBiDHcBXR6sLUcpU0zUPlQm/QVlIejWwCVkcH2VRQ7mixo8OMt/3TnL9l8CvjTv\nUUeIqf/EJxSFkbNLYXpCEUjmtAAh0M2CwXE3Q5qLsR43wck4vUOPgLa4jKIhmAzlXJxQFKfh4Llw\nEGiwbGYkz43Z7SXHPoZChAHc5JZNsHHHKZSSHvIcQ9T2TDGQ6QWQwWzo8mD59iE2mL/HyCeyOefa\ngn8gCxzygXZJEcGyYhg52Z1I899IMdaB3rjtAtFt4lKMdU1hyFQoR+/XphdseEmcYjwefTmAkIA+\n7WIRUmCQYgYHC7H4JnFX9JFtG6efQobf4+IWXuEKjlFsP8GUbfYE8QoF8qIpxp0Zf8KahTYwTtlX\nnuATtWb+6dbP0OKqJxiwsvya/QtHemsNhqKvbGaXaTKEHWcWHbWZ5PVcaNHRZPRlJtataOb3MqHg\n73bQn12EIiI4rJMMUEAvRVSRy8ABM95XYP060NeDPgrNR6CyBixWuCpadHR8ADr7Zw4gg7UE1Rfg\nxi8+yqufK2fy1gfpz1lP0GKVVsEqyjBMDxGEwqDqsQpE42mdLCLI0k2QKi8OppchJ6OMHkB6OGpJ\nXIYchuCkma5IORXudnJMY6giQvFwH4ptCPNulWvuseD7mAnTSR//vsfPOz4GOeVmFD2M1hvG/hxY\nn8lUIK5lBCPw0wa4/m++wviPizjgKmKo0AIRIQtSFCQp+FiDDU5GvZAXTo1CkeFVHUZaF7nIyW1A\nZXZLLAI0RH+vRloWBhlMKNBkJrLFT9tANXcXPUu2Nkb5s31s2DJB75+6OWyuY4ACKrY3YSk8xdRd\nGgNbyskJj1HYMEJOc4RyMsIkGcADn4TR2i5OOwcY8eYR6Y2KZ1qAjcBx1rCKcSrRh7yQKnAs7v0t\nJLdkaENmQcwhHrOTo5Tt6KTBWs9+87X0UoSOoCWrmo+/eY79WTczrmZTqnYTfqKRrv8YvGC4ZLC2\nEdgDJUVd1GsNjDndDF5omLE6kD4iGPNCtjV1KsY60iqIMF289DzTxUtnE0DRkYqyvchIRYJmqW9/\nqJOpe6rofuB2TiHFS7spRQidF3PuYKeQVYutVCH+p87O2wZZ/wx0fxV+voqEKjNYefzofvCaf8Wn\nTC/w9Af/gm/c/acgNJlXsAqQPiKI6KlfE4WRzsUWYmQQLyPey+zdRyuIyZkPIfMZbALMZqgNUEoX\nhZ+t4by7iuPa9fRQQhj1gpz5hHDSRC1VtGHDy4C7gImQC7driPHV5yS+IO7UgpRwyGB54ekGmOS8\nmGQs2I7LNciQafVYBeldGkwF5NM6lb0NDDJoRSYtxTsAA0wnhnh0EtM6zEI2OPEBJxXAxLgrl9e3\n/BbnJ9fTOVyOP7reMKlBCqMNTtqoRkGnnE6CwkRAMTOgw77F951YFmSb4Z5Kafj0toN/FfVcuJxx\n0++DemMezTfYMGuBWDbtUlVsQmHwLI3O00sEwbBMjUw1wsinuoI08ZPhGU/c714kCZiQS41TKkcd\n1+K3WxixZ+M3x7qkqEr4gmETytIYV3Io5E14tpnTT4xjObN6uhwBuG1wYyVsibY8u34QDgYz3Y5W\nAhV3Qf976vA6K2AwAqVhCKvyPi0Delhcr4OwvqQuR5A2IuhH2uEWSQaBkOyInEro0cMoSL/AQpqg\neqMvozlKL7TptbEmqK7YrAmjMSwKoSCMEDqVjg5qaGFdVyOjgyH0K7PYVeNBfRPIg7cPgzdNYpWF\ndrh2I1y5B2nxDMGV5+GsD0YyMc7lxxjgg3znEBXZbUyUZOHpcMl7rBB5v6bJl5QmIuhE5hdbJJPp\ngFMsT0fkXuSFdpNcfkE8gkw32/IBvyr3FR+JUAAVhkaL6Copo91RSckNW1GvNRHaBJUDvZT9uh9K\nIfwvE4wfjNAzDmMr/BSuKIar90D4/SDCoJwGy3lQeskkO6wAOn8NarCRmrJnULJ7KMu/g1/k/Q7k\nKGlvTb86woeBUDTbb6aSaYrQE/252PboIAnBhkxf1mBa9CcCtMj1x1l1M49UfZB9G24in2EK6MdV\nNMSNH30NG15u9zUz0OvnpRMrSwQ5hZB1k8bEPSaCNSAikI0XtR04glxKZbCs2Pcs8OwIcJjdVx3m\n9k808cxd9+CbyJm9AnGFsAytiBcJXZeRhOVCD3PLnCeDIHLSh5lWtDR9G0FfsJiBSAHD5NNJOV7s\ntFOJ5g8jCnRe06BthfwGDpM0tLa/W2XTQzmcv3kdjbY62uyVTNRbiNwhpIWTwYrB6gR1Haibxtic\nl2YGiCJNRJBgwgfCMDy58kNZCFqQ4ccBJLEk4q0WE/2tJTRO1tNAPY3U00YVSijCpjebsTwZoKZv\nzryllOI99bClUNBf7qKzqogJnLRRRVioNNpqCSiLNZEyWCiEAooK1z0oKNygcPbL5/gsD8dtkL6x\npWlpcAbZnXRG+Z8hruByTO+ElCr0Ip/mqdCTHEFaB1VzbzaJgzaqpAXxS2BclkmslCXe+n/KUG+q\nYcBeQzMurHgppu+Cek5VXQcRRyaTYCXw3g9B+QfgjSt2ccCyiVBI8EP2xDbYgLw5PLPtYfmQJiII\nIdMyzs8AACAASURBVM/YyUXPxlAEhqdkf0Q1xQZLBDkDdWSOwWLQHf18AdLB00pMgj0BdAQ+rLSY\n1/HsJ2/jBu8BAicmiSRoiqgi7wUlutvFdLvPz4Z33QqPPQ3v+QPo3l5Ga+F6RsgnhEYAEz6sKOiU\n0UW7o5zbPtuKOejl3PyKVhksAbaT0B7axFHXdRwWu+gIVHK+Z2NsA42FWwW+EHiW7ulNo7PQy6yx\nkmAYxnyQZQFTiiMJIeTTHBZHBgFiww4zq7d9bCobVQmT5xgmgoJXsTJckUvIq3Drb4MYhOZz0z+j\nmmH3B8BkgrGnYaITtrnApsHhvsTHuXYrWL1wtkmWW0QKTQS/WMSOP4TKnj5OWktopJaxqPVlxYeb\nAQQ63ZRgU7yUm/qxK6uoJvYyxctnwDdYylmxkVP+rXSMV+ANLtFBrkcgvHSH0+qIGiRCICQfiaoi\nqxRTUaloIMj0VONkk45m21d3dB9xbB4IWfAFLVjwUxAnavbaV+Cao+CMCxfZgCo71N0giHyikIBV\nsHPDCFu8fsoCYDoAgUF4e0Z12q73wjWboGU/eJsga7OFsr8rZ/9V18BV8KMGM2fz1tP//9s77+g4\nrvPs/+4WLHbReyNIgAQgVlGNEkVKprrVLEv53BLLLc53EluxT6qdcuw48UkcJ8f+ki9x+46t2HFs\n2bKdWHKRLFOWrGJRFCVSYoNIgOh9Ube3ud8fd4azAHeBxWIXdZ9z5qANdufuzDzz3vd97vNSTViv\nnQbJJ4oNgUY1o3go4jc/t9E/h5RyyDyqH4TBK/LxUIgnWkQgPLfLTzrIzBR69RIBmGopQ32YSTKI\nYhqdGIKOVHUGXpQ4pITZ9mqVzPpE8wlRxxDNXKCCCSpxc/IHMSLn1JCKgIJNsOdKaCiGTdLKc7u2\n4XaWU1rtpdHRi3VqBkdzkMssXk7ENZC74neh9UPFOF0h6A9RezkUf6yEkXdfxzGuBuBC67aLayEM\n5BEmgh2BxIJGCTNYdlcQrp2CkVyuIJso9kHpYx2MTp1gcF89PmcBM4GSlT4sYMWJwIPKExTMv1s4\nCujlRYvILCGAiqkFat6fChnM6PsZ59CwVysFyjXIl+Tbg2zO6+X6sSNcfuQkpdNj2LRhLNNhTsfg\nsgNOduZLakuDbHtXEZ3bmhj7lY1j1qsZphZHdZDdnGJHUTuNh4aw90D+r6C1BE5PQPHH2+jYU8+A\nFqD4pi52OEfpbSjlKNfSqRsyjFJNdM4pdhBCICnCg5sqLEgaP9RCa9RN5LujTJ6FviTTkByWhvZv\nQ7P1Tfb/uaTkci+Hi9w8678Fz6KVbjqiuio3A1hhIhhB3VELEAGo8mI4oKYKJbqsz27NXHXB8ElM\nlQySoTYKhRrlznGudh7jnnNPsPuRdrqnKjgRcVJ9mWBoRw3RP9tE5YSbktcmeHXLXh675m581xQw\nwCYkgs304qaKqY52Cn81hacT2g7YuGZ3OT0d8GTZ2/Ba6rBZouy76ziuyCl++VwrnXdtY4AGAiHX\nxeqmwxbCZlUXTAgHw9RiQdMbvVbTxVbu+GAHtY5JTn0hkiOCLGEIGIrB3tfP8Zb/GaRk65vkl0V4\ntuo23MXVyMUuUw1GIZAZTfIKEkGYtCxZYnpVAaDMpYjBKjJDCMOoykK6OYOw+v98a5BGSz+7Jl6j\nUZ5h4lOVHN5xN700cn/wMcbsB3nVuok3/v1lrC4Pnv130UErfXF1zQh2KnHzxnfzOP4v0HSHjX1f\nreFnO27HSh697KaDFgrx0lHZSuyDv40fF0PRejTNQt94I5pUVZeq4lGKnWZNKiLs9FkbaaIbByHG\nqOScu55TR4foemNy7qhyyDBefwJef8LL5tpn+cyD7fzr3/8F35z5COFTK6fpWEEiuKB/bZ53r3kx\nqRNCcT449RVCS+WDURQ/bWF+uZWmb/H7XAAugz3NJ7kz/0nyvn+a/368gMYf7+JX3IKGhT/I/ypB\nmQ8SKh/aRyVufFohfdomVT/U0c8mEHArp7jz3tcp+bcKflp2B4e5jXO0EZXq1HkpxO2tZHymcrab\nswELjM1UMzZjOrI4bCGaqru4ILbSTBcyEKPjk8Pw7RwJLAesNvXc6h+D554d4a+Dn+O78ncJp61/\nXzpWd7IwVXhCanPaFSksFYbT0bb09qlmhIODRzjUepLOT23m2xxEw0IHLUSxMTjZgC9UQCctCCRy\nxoo2kAc7ZhsDtJacp5xxRn8AAwHgR+bfet1bCEXVHEZKARNW6E0QxrSEoWg2Q4SiDi6MbGNrTSc9\nYgub3/uvHPrFWTxWeGUFffM2Cg7cAoXFcHYc9n+/jk84/56QyMB1uwSsAiIwtLrpKnxQ6xQAghEz\neSIElLvSmzJIVFXgNOqJb6h85u6T6Ancbee5olvIrwtibYrR6BnAj4sO2UKHuxVNsxCJ2dH689Cm\n9BAgBkQEnNR/bgmDQ/LrmZuY+mAB7/tf1Vx77DGevvcNDn/j84TJIxzLUwQwYIMpq6qCJLqJu+wq\n0qiKQrW5QyRmp2u0mc0VfQz8y/t5yncttww9w83ffY3OR+HWOjh6TmlAV5GdwppDnhU+uEM5GU+G\n4JZ9sOXBMmKlNpxfGeMHH87nzI92Elus2t8bUsY+GcIqIIIIyW2DFgltzsKlyYDeRCUNYZKG0jwJ\nlA1xE5euXPShTE/jZcZhgSdcxJi1iskThRQ966Tnn5q4MLmNYDgfiX7zuq3q5o9HQP+5yw4W8NSW\ncGHTZYx5thKKtvHiJ/4UT1TvBNNth7BQ/zP3deIR1v82YgMpZrV6C0cdDEzWY6+7CmEvwtZs4/pp\nK3fJV6i+Guwn4Pw3IZzzW0wbIh+K/xnujYHWD51br+UXV2xH2gV1ed3c/+oJqvgKf8yXCcb3ABzH\nLG8nQkzL6CK9VUAEWUR8acWi3xB5Nj2fkCIkqlzYh3qyVqIqnqCewkl0wF6KmLGWIvIG8GkF+AIF\n0GfXow3L/DevV386aDYmPLX8cOI9/KbgEO0FBxUBAExaF5drDQkY08kwjgwCYRc+rRAfBXTkt1Bw\nwE9VcwBZMEKFfwxhZcXMMtY6igvg5pusnDhwOWOuatyeGl7Jv4Y+ZwMF+Ln6hteob53kqNxHrN+q\ndOWGwDPEsjZAWWEimMAsH46S3GJ4iYi3cYomkGS68kyiSAYjjxZFuSEbLdoiqNlNLRcTldc4j3Hv\n2E8oLAzSeUMrd/3yML8suxtOL/LmxUKQAk5wFScAXkmyWxEmOc2HoIBRKwg5a5ow5S9h1FKN3R6h\np2YzJ2t2EOv2c+rJMaKrzG9xLSGmwaRHELU5+Y3tIKfLdnE+0MbUTCn5BBmkgRMlV/J0+x1E3Xa1\nTH5jORQZmEJdwcWoTyFLRBCPSExtc2EQgd06/zTCaMEWRE0VSlBEYCgLSzSuLH2Nxql+Xiw6QFdl\nE3t/ehbKbcmXLi8VARJbEZcyqxIBqMhgyKaOtyIGAmb8JbgdlZTZJ9EQ+Po0uh6eYezpXH5gKfAF\n4MjrMd4R6mTIWcf5UBsD3noCYRcEBf2eLbwUEHDatsjoLppxr89VNDWIYOp2lxneuLso366mDhaR\nnBCm9M2FurEF6kRaAIdGT2ALp+x7eEnshyELj1e8Q7mzpQoPC18YRZg3ebKWcRIzr+HAFEpFhKow\nWIHi2MXXySNEUe8g0f84S+dn3TRiLtbMYXFwVUHDVWCVFsaopTPUQv/MJoLTLpUSm7HCoFVdR/2o\n85fqve0PJ36YLQGriAi8qEL8lSt7GMGI2uzW2aVIm/VSjYIflUiMbxLwmo2n+u9VgiQfSjw5H6Jc\nmivtZuFmA9swb2w7iQVQ8eRTCVRg9nnUgE67ep1idVGVMEPZi2fh388QIteqLR0UCCgsgNrbbVz/\npSL8fSV8ouTPOTW2m2A0X03N3HqVxyABDXXpb+yWZzHMXmWrCJEYjMc5JpUXgE1P4glmlyU1oB3V\nw+7XqJutHlLqajVOer728b3UajFzFMk+Rre+FWL6J9gwyaAc8IXZsTXMrnfBf33Z/FenQ1UObPmK\nD6NBCOUSiAmx1wlvuRHG31/J46W3c760hXO0EsGuLnPjqT/N4qJEA5o0y+UZxCogAkPX27TCx7EA\nJnxmRFDgUCXJuTCW8jahbsjl0uyP6FsJ0LLAvl6UPsIK7ESR1gU7FFsR3zqKOPwM7J79Lx98G/zi\nCOz6HbhiExz/Afz0+YyPYl0g7xDYPw7TN7roZCudtKAZGoELeapitBRM+NViowxjFRCBxJyFBoAT\nwB5WXYQA5mH6w2qxR54VSpyX/r0P5VFQjmpcsVzHNYPq9diWwv5RVBSjTzFGp2t4+UMP4fu9G2nL\n66b+z97kWs+LPH+gG+tbNa76TD3hehdDX54gfDxZ37gcjvwaThyH4jvcXP+tI5yPPxnGeRrDfEgE\nUecs5Xs7OxmbVUAE8ZCsCYN9TSevkNQjBaGs1YzpQlTf3KjEn4MlLalI/bhQT/x2/eetzG/fHkbl\nIxohNuhgWGxjqqaGM7ZJdjefxBW18s6f9DGxs5bBiha8tgK87x+jrlzwgf8aZ+QoPJkrL85C0K+2\nspd97P30EbYdHaD2v9/LIA2EjJpzvAu2JGN6uqVglREBqKv5PAtfxasAmlTLo0FZqwEU5qmJNKhC\nSAQV6BhrrBpJ3w0ppWPCFDn1AJuA+YxwAqjoRRNEhJNI1E6g1oU3Vki/aOTNG3dSYp0mIJwUMUN5\n4ySed5RwVfMJdv96HMcR+NnzWYlW1zTG+mK8+M1pimd8HIw9xdGSGzhlLyFECtZkY5i6FQNSwkxQ\ntTfLAlYJEXgxBUUSlUFbwB54tSEYlz0ryJtdeoxhWqPpXZEoJyUbhiVhWn+/2gXey4sKVaUAbESB\n8aoKJkQ5vZZGWoo6qBXDlDHBDMUUVHnxHnLhdI4z9NOs5K7WPLx+lf26/UCMTbETVBa6sdWECAXz\nWbCLgI/EqsJgNGsf9iohAj/qTokXFI1ysS3aWoJBCHYr2C2X9nQ0mqxEMG9OB5c4u2cMk6gkZw3z\nk4FH3w8BUgmOZEWMSW854wUV2C0RJAIXARxaiKJpD/6zcPRUlo57HcBVAtf8loWX7Vtx4ae8foxo\nzE5o2AVY1JQgFV97TUIgTDYVHaun09El6GdZxdaZRDCiLKa9YfV9ok61E6ikopFYnETVlbNxridQ\nj6eF+sfM6McQFDBsEpgvWHixc5MELJ1TjHxriu7/zMKxrgEU2qElBd1bKAanPVbO2NuoE0NcX/AS\nzY0dOBoCSowWwHTGmg+aVMvssxh5rZKIIBn8qMdYNifVWUQ4qjarRSUTkykV/ShdgAVV/jPo2UHm\nhj6JupA2MbuB61xEUflaB+CzgEtjZLoGhz3IpKOMCHn4X/Txwt/C2Brl6XRRJKC4DDa3wdWl8M0n\nFbcmuz+nR+Gnfx/l/gdfxFUUwZXvpd41yON1Li5UtJk9OeMxj8t/NrGKiMBIn8YnCLtQE+qaFTmi\njMGwV6uIEyUlgoYqJRnYhMolWMjMmZpC5Su2kpxgplGnIl/AuTzYHoJ8paO2EsNDIVXV5ezdDj86\nDZ55Mt42wCHAt05yCK0WOHiLhaJPWvF0SrY+GeUU8z+oLVGN6md6uTe/F22fg/z6IOfYxYVkNd4+\nZsvFJRnpW7AQVhERzKDqXpev9IFkB1Kqdm6VhfOTQTz69a2S2bnTpdixeVBkszOF14kBpx2wOwRI\nahmmgnFogi13w3uj8NWTyf99kwUO2eHbEdDW6OolQ0QqgeMSxitKuPyaOjzOECdtFxBI9TlJtZ8Q\nzPpcI0H40oPq+/qfX8Mzm97HK2Jf4s8+EaOEo6YlXxaxioggGbpQ8epyKHOWAUaj1+J8tcAppf9B\nPalhtiIwXQRR6sJFvE4DA7RwnhY6Kd86xvm98OPPz/8/tlrYfA88VAdf+zyE12DbhHfZof5m+OUF\nCN5fgfNTV/Ake7FdFqKlr4PbAk/zvdujTHbCW6+H3fehctwz6mvolDn24fe+QsGX91J+59WMbaqC\nk3NuvzdZOI+TJawBIogXaK8DGK4ynpD63pWCVsIwSgVTEQgqSkinBClRi5rilIWz4OOSno6NDz3M\nvSefJUoIzy4/tTXgn0dMtL0MbrsFYn8GBRb4kAbf/wocKILOaXhzjfikHo7C1e+vxXHFZtrLr6S3\neCd+XDhsIaw14Aw8g0W/i46chO57mrG8fQ/+mIu6vi7y/+RltDDU/mA/9mYXVU3jBIpeZby0Gjd1\ns99Mb99xERnqa5gKVhkRhFFr3rYy+1E1hjrUukT/tDYR05RUORRVScREaxcSQaKSi6Dmk8YZLGZx\ndg7G63SjRE7xOpcEPR2n3nuAwnMniP7wNCcfg8EEWfObNkGvBy5Mw7AfnguUUrptB2hg+TDctO8E\nLU8HGPoplwpmVin2WqGxbJqR7eWMWpvpo5EJyrGgMSjqKHdMMP2lCOXecQZo4Oz2rYjSMmxE2WOz\n8NbPvszwR+HVXTfQu2MXg756ei804+2NqxdrqPMwN0mYob6GqWCVEUGMxDW0ACsWM2UTUc3cIHUy\nMBBvkxbUNzuL40sPqnxZy7wuR/0HruOFq7rYvzXIvoc7GfuBSl/YLHBrI9jeCtuugsZOsP4c+kor\nGPjg5XRZt6vpTBPcvsnNq4/30jcxe45QlAcHauHp/oz7baSMtt3gcMLJOS5QgxpMfinAyZJyeg9u\nwU0lE9FyJr2KDEapRVytUYgX6RJEdd1IBePU+97k9HNwbQP8yL6Tl3wHGe2pI9zuglMW05PQMMuN\nV2eGohBYPv32KiOC+eBDqXEqV/pAMg8jOhBCTRXSSQbGE0E8yllYkzWF+Z5JyMBLIe0lrdTZ62gK\ndM56eIWisPdWGLqlkdHJaqZ3lTFa3IC4t5VB6inVH/9Nth5K8txYrSYRlNXD/jvhijJ49t8gmkXd\nvdGlbhy40gqnNQjoz5yS/S7qbnMhnw/jOD7Dq79Rv2/XQBbv5M38PZwPtzIWqiIczWPaXwoSxkdr\nLk7bimqnyC9R4dq4rYIqazct9eXU/eEkeeUxfAMlhM+6oNuigtxpzB6ccwkwkrl2ZqlgXiIQQjwM\n3AOMSin36L/7DPB7cLHF719JKZ/Q//aXwO+iuO3jUsqnLnnRBWFIjCuYvQLRi4qFLaire51Bk8op\nSaAcktLt3BQBBuJ+jqHWGjhhXpm7oTMwIoOY/js9gq355csUjb9Ez49HGTpTiP1mF/nHRtl6Ozz3\nY6h6Bs5ctZM3Wq+io7WVMaoI4WCG4ovdoCuY4EP3ncb7xiQjL0JFCew85KTqL6rpDWjs6hxAG9XA\nBVopakqhu0FFJmC4W+VNF1uNrHVBbS0466GiCIaE4PLaIixhL2ee1og2VzB6TxOR+yupum2KrYfP\nEHZ5OP0sVN9TRN9f30hf2z76PJvxBIuUw9OMRd28A7aLN7EnVIanqAQckpmyElwlN3Lrp48Q+t5P\nuF3+kmPuA0wOVs+O5Ixu2vFIZqe3ZCQnloUigv8A/g2I15BJ4ItSyi/G7yiE2Am8G5WLbgAOCyHa\npJSLDPY0VKWgiEtXy/hRK2nWIRGAubBE6I1eFzJUTQWGcq1C32wkJwRjVtag79MPlEBF3gS3Hf46\nDY8+j9tZTfgPr8N+Qxm2r73Gls87mAj2c+LbPjwPCCZbyhmknqFY3cUGLNOU4nT4OcJ+7in/GdZr\nJnE582naHKXxbaUcbj2ILRbjhn94GWt3jPzKEHlb/NijUfLPR8l/PcT0C/CzbpOvFoMd5XDoEETv\ns+JrdVFnKaD7sgY2R6bo+VSMmVv20HHnXqYoobZihMD9Lq7Zcor229zYP3eACy3X0TmzDc90sfJ8\n9FkUAcyFW3cfKtEIWZx0so0nXHdy538+wW37n+Ybvo/wZmSnStQGUfdlohmvkTvKOJKHW/MSgZTy\neSFEU4I/JbpC3w48IqWMAN1CiA7gWuBIyseZEiQqZ5CJ3vKrFNMB5XNgtyoyyAQhjOtbvENRIoWh\nMVdtQgVkQdhub+eqz5Zis17G+c23c/ah23Dhp+Krh3iOan7/8a/Rf/cRagv6OR8L4ZcupgJljM1U\nAWARGluquukWzZz9f2247t6M419qcTPDBBpn2U6eNcKbO9pgB2yij1Y6qGCc6rxxaseGGPbM1lot\nBr4IeO2gNTk5vauFdrYD0OVowvdPBYxQSw9biGKjijHOOHZy7a4XmNz+HD+w/hHnRq8jEHTBqA2G\nrPM9WNVnNq0UYKJEI88ZIfqFQn5eeTcjv6lVIc0ISlU4hUoSxiOmZUlKnCADHId0cwQfE0K8HzgG\n/KmUcgplzhV/0/ezpOK/hukMGo8A8DpwFat+mfJSMK3rdw03pAw1fcYLnEJdsLtRMy0Ls18/fh/g\nRW7mxV03wMeV63F8KGu3RNHqLHzuh308kvcAP5x5J72+zbPmvBoWuoa2AvDhz3yL2rIhSuQ0AokQ\nEgchmukCwIJGiLyLB1RZNM4FCd9/Mv0hHx2B8OvwlguS6BU2umhSx8RWztOKjwKkFEgEU/pc6HjB\nlXDk43SNNhN+s1Dd3BIVksxnMVajb1GwR6JUy1F+vONuPvPrzzHkrlf/60aRcm+C/58JZiEakCjW\naU+6RzpE8BXg7/TvPwt8AfjwPEeQJs6irHaKE/wtBrwG7GVdRwYA/pCaMmSip2M8YqibHdT6hqIF\n9umyQ6MdymbvErFKnuJOnrMcIoJdNfIcts1atDQLLWFGLLWMztRQ6pqipmSYEA7O6ZLbrVxgkAZA\nUIkb62tg/+5SBwsnj4H/YT8H7+pFc1ro1PtQGpjwVuD2xiWiY8ApB1rUAppQeZdU5iWjqBtdWBg/\nWc//aflLLO0aoXC+EgxNoaZridYZZA1jzDa5vBSLJgIp5cVGTEKIrwM/0X8cgLi+3kopH5+2isOz\ncd83kdivUNdtJkUMOIMii0RX8TqBxFzanA0yAHNJRxWXahFiqAeJ4bA0N7FlFUQoIGKNUzZFSG69\n1WVHWu3IqijTtSX4ggXk2cJsqlAOrhKBhoUYFiSCM+fh7OF0Bxg3jBhEwxIHQTbTRyct9LGZC1Pb\n8IUKiGo2NM2iukz16B2pQkIZyoQXGFM8pLmfdFsIvZZvOlKHUBHBGIk1cpN+0+gmY3geeBLTECMx\nFk0EQog6KaXBZw8Ahtr8ceC7QogvoqYErcDRxK9yU4rvZtj7JlvzGWRFPaCXC5rMHhmAmUMaQT2x\nCpg9qQuhwthBzKSjAQGcSdKO3sWlmoa4XowxKYjVWInE7PRPNFJfNsCQqKOWYcqZpDHax5bABLYg\nvLDUMQLyOIQe8DHh+jXyO28h7LQTijouJjWZ1pOAAaFu1B7UNCmVdPcAlyb+4t2ijH3cJM8xxLQs\nGI9chkoMGSq0xOHVQuXDR4BDQKUQog/4G+AmIcQVKO7rAn4fQEp5RgjxKOoxHQU+KuVSR+VjYUO3\nAdQkN9EUYh0hngyK8jOXM4hHCDOjHUF9rJv0r8Z1ZMhgjShakrT/46zXqWe2WDSuF6NWE8UbLGR4\nqo7q4hGqrG5CD5/D2ttBpCdEX4ZERmPjcOJElJsfGuOkZc6lOWWFYSv4LWZJb4bEQWmASx2qp5l/\n+bBBAon2kbrfQMZtyIys5MKLlhaqGvx2gl8/PM/+/wD8w4LvmlFMoa4wyYp0SVpOGE41xpI4p115\nHWQaYfR5LmYisRKlyPGj5sEhlHhpPllzBBWRxr9OvMAprhejrI4x7S/BIjQaC/sorQ4x/nSY7heg\nJ0NE4KiEhvug7X1gtcOEt5xwzK4ayo5YzeazhoZiLmZQSswQC0XaJjTU/TjG/NWGQCTD0cAoigRS\nU+SuAWXhDCrGnG91TfxZWedkIAGfHiUZi5ZSXdacznsZOoQY6qbPR5GBH0UERmRSTnIHeokpp9Uw\nSQX0yMB2sSnrpK+MCWc5efduZuxYBYEn/LRuhvOJMuyLRFk97Lw/n5frLydmsRCTVuXTOG0xSSCC\n2d/SwDSKHKcwV4EuhLC+r4a6H5ORmSYVCWS8ZjjGYmT5a4AI3Kirb6FldhOoK3OdE0E8/DohZJMM\nDBg3cjHqJnaibpqeuH3sKM6er6pr6FHjySCGuhmLNRAwQQXtbGd32xvsvWeUhmAoI0TgC8KZ4QJe\nyrueGFaqisaYCpURMRRWYUxbN4k5NRgklejahBFRzU2szoUx3cv4CsOF5imXYhV7FsYjTGrm74bP\n1gaCP6y25VilNopaHDrIpb0Ze/S/uTEjhmT+A2P6ZpzSsFBdgPQh5BFmkHqsv3MZNR8vZyJDV+nQ\nm/D0F0Ls9JzB9XoPxcEJ7KEoRPWwxoPZeMuHqrh1sDgSiKDGthAJgJIRz2TyepWoA+9gsYv01ggR\njJK0EjkL46gPYYN13fCH1TqF5fIVn0Qp4hJ9zIOodPGZuH0S7edGhcxzij5WS4w6BtmmKwvPnoCf\nP7q0w7UDLjvkO6HA5+XQk79g131/x4G+Jynt9cKUxfR8MO6ldhZng2E0LTHycwtBkuHzZZhMnCSd\nh+EaIYLFYBpTBbOBEIjA1DK6iRqWZwvt8zrqdCSq8k4ye2oBbKnsweXwU80YZRkyLbjaCg/th9/6\nAIz3wlc/YuGG49t4teV23CgZNKMoEktlXIlwATXWVPtdBjN9vgIokV165fQ1RATjmO2CFoIf1UNx\nA2gM4hGOLYu/3UUEUA+gkySfBhh9Fk/r+80tNXqZJXrbIrr55N9+kbZrvoHjL47S0DPKliJ4cDs4\nrPDRPVC+SCnFzMfKGf9ONbG3QFkLPPiCjRdKb+X0+G58IZcigDHUJdbF4vN251AEEt/Gcz74whnO\nC8ygPuD0I4w1RAQxUm8SZ9jvnCb5FboOIfUWbBM+tWU7b2BEoyHUzTzftDSs79fD7My7MR8/D7yZ\nhz0UpfjdU9z0iWmqxoLMfCvGtiLYfBu8++dQ+UmwlsMhGzTPc/XeZYcPfBzufryC6B9fyeObzms7\n/QAAEAJJREFU7uXsgVt5559DXXuUB/yP44wGkNKiiCqmb6nm2Ayrt3ZSFx0ZkNK0rFsyJlAf/tKM\nHNZA1SBdSBRNd5K+ud8ahEEGoBJRRQ6zF2M24UfJZ+uZX/Ft9Foc1/erwiQDr4U3JvfyhaY/oq5+\nlJKmfkqtL9L08gkib3XSd/MeBmaguXiEHeeHmfpOSEXDCdAeg4b9YLulhv6CnbSznfN1l9Fz33Ys\no2Fq/uCbBP8kokJ5L2qa4k78WgnHOkByIdW8/xue3R5vSXDrB7L0KHCNEUEQlYlZjBfXJKZEbh4v\nrvWIUFQJj+b2YswWPKjTI5lf6Oljdn8/gwwGYbhjEz+13Ie9IMTOvWd4+wfdlO7o48lrD3DMfiWV\nFWOUvW2SyPAz7A6P4PVDZ4JFdV0aPP8oBJqrGdpfxwg1nLbs5on8OxE1Ucq3X8bEZD2MC/UwTcUN\nbwZTU5CqniAeRoUnI35sRn0yHTa6FGuMCEKoydxiTUzHUcqXhR5X6xDG02e5yGAGU2S0kOrbkOpa\nUOsX3EC7FQ9lUCw5XxHjRNsdiK3VvFS9jynKaOU8ZUxQ/tzLVHdzidTaCuyxQn45CD+cCFYzQAOD\nkXq6fU1M+coUUd2zB07bwCPUMS90P82gSoszC+yXdKyRDJLAOGZmMzNYY0QAsz20FiO4N+K+BjZc\nZLDcZGB0SxIszLtBVHRrRWnBRlA/VMCIt4Ef1/0Wz5bcBAENKxo4oY4hYudbqXxqkkqm2HUtePug\nZwhsNrj5EMi9hch7Lbx2ZSPnI62KBKbKlYJQA/rt6n0NuXCyG9xQB46ytPvOF8oQCUyiFuNl1sx3\nDRJBGDXvv5LkmtZkcKPO6hbmN/BbhwjqWnbDKTnbhDCD4uxUPuowqiDUguLoEZTqMM+Kb7IUX0Ex\nbIliKYiCRTKQt4nr/jrGZhFjtzjF9p1exr/v49FHQHOA82Pw6m1tTBSUcpY2+mc2qUjAL6DTbppc\nzXdfGvnmHpaah1PCoSXnBo3VXZ1kIwG+BonAQBglPV7sMrwJ1BXaxrp2OEqEUFRtNguUubKzYCke\nPtQNnspHbfR9bEORgZHJt6I8ArvsaLs0et1b2FzZQ19eI/l/dQ8BtuN3v0br4GvseizEGxrIYXgl\neg2vchUdtJivbygINZTuLBkRSFSk8uY8+6SKqN73ckniIYO5TpOtkvgaJYIY8Aawh/Se7NOoD/UK\nsrOed5UjqoHbB1WFmfFDnA9Ge7XLSS2AM8hgEHUT1sb9TZ9u9Lq3QCUIh1Rnr1ISO2Rl39te4I0n\nIHi/QBbNKeqPW5XhyFwkW2Z8JoVjXQjRmPqclwxDF5M9rCEdQSKcZQnZG+A4G050ZMBoyrocaxQM\ny7PFamgMtR+oJcunHUmf0No2CP8BaMJCp3MrNZZRXKSg3Oti9uLVdJWFcxGOqkhgyTAeWtnFGo0I\nDMxtFrcYGPHfSWA7iS191zk0qZSIQqjcgSOLl0MENb1tYmFJRy+q2luKydMS1U/g4ukWjFFFpZ4E\n1o5D0d/Bg7+n8ZPbB/DF3Gz/9xjafguxAhsU21SvwRBqDUR8L0nj+ylUHm6pS1WMnoVLFg2Nk7gX\nWuaxxokATEvZdJYfx6/WsqLKkqXz/se6g5HJNhYtpdqhOR0ESC0AMzz/wVwRWHvpbhHs1DLMwb4j\nbOvthne76L51N2/Z/yp5vUGcP3mJoi93YrvnAHl3vIcX6qvggo2EgYKx/HipebhgBLyZWA06hipr\nbMgmqOnAy9LTuoY6xDBMLZtn33WKSExp4CXK+ShbGEVNSBeq4I5j2ksYLke1QJ8dGlQkWMI0lp+d\np+e/2vFW2eDT+zhceTNbmnZRNznK9a8e4dDXz7L7R1O8UOhkaF89nYE2aNcv+0HUfTauH9dSI/mL\nWoGlTDcNazEvy9nvcx0QAaiYLp+li4WmMZOHG5QM/GHQNJVEdGahqpJCn0VARQJFKCIIo8rnNYDb\nSuk2N5VWN1voYYt9ALE5j9d3XM5Q5e28ytW8bLuO8qoJTt+2nUr7JIXn/Ng7Btg/9Q2Kr38nx9mv\n3mNCf20PS7/ngjoJLKlV2TAmOy0v1gkRTKCqB5lQDRp9vyKoj2edtldLBqPvntWicgfZmCrM7bOY\nCuJ0ZLsLTnKTeIa26Q7q87sIt9nxbqrnqHYtF4Lb1P5TFl6OHYQ2KNo7zcFHv8O+b/+CwRtvNxuV\nxFC55qVOB0JRNbVKWzAkURqXPpYe3aaHdUIEoFg0U63QpvXNgcodFLPhyowxDab1PowCtXApk6XG\nKVTonyoRRLjYi3Ebnbxn+FEqj3Tw4q9KeflcHZ1XFdJ5XQtD/boPe7fdtE6viLHbeTmOnUM803+r\nOrXdKBLoZ2lTgnBULe5KKycQxVy6OJ+wIftYR0QQrxrMVEgbQpUod6NS3RuMDKQ0/Q1KnJBvS79L\ncyJEUQ/AxZwuh8RtqST6tIPj37PRffdlTPzf3+E3/rcx1NMAZxK82KCVM62XE9zvgsN2dc8FUaXD\ndKIBKZX1uJQwGUhTLBTFdNRaeawjIgBTNbg9g68ZQ1nPGO3V5jYK3CCYDoDM1xOJSRqaLBZGeN5C\naooWO7AzRIOjD/GTAFserKf5HcOIqXa+PvQROGlPrAGQcPbUHs7O7DGX7p8lfQlJKAZT6YYRhh/a\nGKkb7WQf64wIsgnD/mwbGPZWGw2ekNqc9sx1XPKgpLw7FtgvH8XvFuhlC+GvufhR/tv4z9D7GBlo\ngFP25O39hjGdiYMsjQQCkSUajnajShTL5C+ZItYhEXgxdaqZhHHldOvfJyhsr3cYIXAwoubGVn3N\nwpJeEzVHP4vqzhUfGRgW6vX6V12irGHhWNnVdNGE90IpgVNFanFQ/BS7AzPsN/oWelHTgXRIwBtS\n49bkEtYNdKCmA6tPzboOiWD+PvBLRxgl9BhHZbq2ZPG9Vik03WorFpdDKM5PfxGTQQYdKOWhMc2P\nMktUZxEa9RV9vN36GJG/+g0XrjnITHOJkh8bjvfd+s5z7cOmMZcdLxaeEATDabYk0zBXL3lZrQ7b\n65AIQF093cBmsrOcIqhvftTVZ0VdwWt86cZiIaUqnYGS1Apde5CXxhJno6FIHyoCiC/+5IOtOULD\n3m4ecP6QZzy30H/FjdwwdJbKwFM85rnftE5PtPTEaEW+mGm90Y/QGOOi5cKGn5lRq1xdU4G5WKdE\nEEUlYywo2XC2lHJhTKmcsRl9wTYYgjohaBLCVuV3kM7ahUlUItKBqtq6gLBEbo8RLLbT4W3l1123\n4mkuonL850yfLlNP+2R+g5OYvoSpIKaZfQgD4TTvXy+mNfLagFhyw+LFvqEQUjVVXi5cTma0Bami\nTt+W8z1XIfKsphjJaNi6WJSi1IRtEm6PmmLPQRu4hbrBB0jsH2gUkMZJjQQMIVVUM1vJLRrTKC3L\nDKuXBO5GSnlJzWedRgTxmEENM4v6+Vkw2tyUoh5rG8Q9eS7CMdNN2RAlGRoEmyW1fMIUamodE3DB\nrtIxhg/i3H6EhjbHQD8Li/TCUfOJH4gswV14GsU6Q1zaQXVtYAMQQbf+tYLlG+6QvlUAjagpwwaO\nEKSc3dUnfsmzRcxPCjOY8/6zqGJQot29qOXLCx1HvAx4Ol1FICiGMsZkKJTWLjYAEYAiA4mavy9n\nQm9c35woNyVQH/kGFCTFwxtSG0CeDUoTkKRIIFrSUA1FUkGi5F44moE2Yxrq6W+0eVof2CBEAOpx\nEUO5GC83AsAr+vdXsqGjg7kIR2EsgT1wsXNpy6En/BCbU6/PSDpsjOTKpbWLDUQEK12+Md7/FGZU\nUs/iezSsQyQ6NZ6gGTWkg4xasJ3HnJ8YnhXrCxuICMAs9a3kzRefwRpA1b2KUDqEHC5CS7WjaLYQ\nw+yN7me1CoEyhQ1GBGFUzUli6lZXEkYH0SCzJW/NbDir9VWBaZTyCNQ1YnRqWf/YYEQA6oYbRWWi\nVktYHma2IsaCWe4sZcP5KC473JjWYGuz/LdUbEAigPR7KC4XRuO+92MWzG2oykcOS4OGGRmCIoLM\n9RFci9igRADp91BcbkzqGyiBUnz5s4TlE0qtZcSTKSgi6GYlHYFWGzYwERg9FFtRybq1sGAohFrJ\nZqCZ2T6NVjZcT8dLYPQIjMeIvuWQDBuYCMDMDO9ALSleC2QQj645P5egiC0edtbeuBYDo0migRjZ\n7BG4XrHBicCA4Yqx1pNy08CxOb/bSfJxreYpUSIkyuAPotYu57AU5IjgIox+XBUrfByZxjkSRwRW\nlA9jltujZwwBTLu4eOSe/JlAjgguIop6ssRYX5n5ZEIYgdLKzxcVWFERRTanFh5SM/HUWCnP/42A\nHBHMQojlaDi5OmD0fZwPApVDyeYUIkLqriE5ZAs5IrgEkyiHofU2RUgHhs1WDusd6zmdnCZ8KC+B\n8ZU+kBxyWDasEBF0r8zbpgwfKhud7tPwjQwey2rEeh7feh5bcuSIICn8KLP8GRa/8GS9X0zreXzr\neWzJkZsazIsQqvzmZ6OsQsthYyJHBAsihqpfr21PuhxymA8rZGeeQw45rBQS2ZkvOxHkkEMOqw+5\nqUEOOeSQI4IccshhBYhACHGnEKJdCHFeCPHJ5X7/TEMI0S2EeEMIcVwIcVT/XbkQ4pdCiHNCiKeE\nEGtmWaMQ4mEhxIgQ4mTc75KORwjxl/q5bBdC3LEyR506kozvM0KIfv0cHhdC3BX3tzU1vrQhpVy2\nDbWKxWh+bQdOADuW8xiyMKYuoHzO7/4J+IT+/SeBf1zp41zEeG5ENV84udB4UCuSTujnskk/t5aV\nHkMa4/sb4E8S7LvmxpfuttwRwbVAh5SyW0oZAb4HvH2ZjyEbmJuFvQ/4lv79t4D7l/dw0oeU8nku\nlVQmG8/bgUeklBEpZTfqRrl2OY4zXSQZHyReWbXmxpculpsIGpjtItHPyrQeyiQkcFgIcUwI8b/1\n39VIKQ1vrBFUT9+1jGTjqUedQwNr+Xx+TAjxuhDiG3FTn/U0vnmx3ESwHmuVB6WUVwJ3AQ8JIW6M\n/6NUMea6GXcK41mLY/0KygDyCtSKsy/Ms+9aHN+CWG4iGEC1BzbQyGzGXXOQUg7pX8eA/0GFjiNC\niFoAIUQds/3J1yKSjWfu+dyk/25NQUo5KnUAX8cM/9fF+FLBchPBMaBVCNEkhMgD3g08vszHkDEI\nIVxCiCL9+wLgDpTtz+PAB/TdPgD8eGWOMGNINp7HgfcIIfKEEM0o59SjK3B8S4JObgYewGxzvC7G\nlwqW1ZhEShkVQvwh8AtUBeEbUsqzy3kMGUYN8D9CCFCf5XeklE8JIY4BjwohPoxaavmulTvExUEI\n8QhwCKgUQvQBnwb+kQTjkVKeEUI8CpxBeaJ9VH+qrlokGN/fADcJIa5Ahf1dwO/D2hxfushJjHPI\nIYecsjCHHHLIEUEOOeRAjghyyCEHckSQQw45kCOCHHLIgRwR5JBDDuSIIIccciBHBDnkkAPw/wEt\nbvYrizPUcgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x109e98908>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"imshow(mandel_py(200,200))"
]
},
{
"cell_type": "code",
"execution_count": 156,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" "
]
}
],
"source": [
"%prun mandel_py(200,200)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Testing?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": []
}
],
"metadata": {
"gist_id": "f8eabb3249a96e9665b4",
"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.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment