##// END OF EJS Templates
rebuild example notebooks...
MinRK -
Show More
This diff has been collapsed as it changes many lines, (1164 lines changed) Show them Hide them
@@ -1,1093 +1,1193 b''
1 1 {
2 2 "metadata": {
3 3 "name": "00_notebook_tour"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
10 11 "cell_type": "markdown",
12 "metadata": {},
11 13 "source": [
12 "# A brief tour of the IPython notebook",
13 "",
14 "This document will give you a brief tour of the capabilities of the IPython notebook. ",
15 "You can view its contents by scrolling around, or execute each cell by typing `Shift-Enter`.",
16 "After you conclude this brief high-level tour, you should read the accompanying notebook ",
17 "titled `01_notebook_introduction`, which takes a more step-by-step approach to the features of the",
18 "system. ",
19 "",
20 "The rest of the notebooks in this directory illustrate various other aspects and ",
21 "capabilities of the IPython notebook; some of them may require additional libraries to be executed.",
22 "",
23 "**NOTE:** This notebook *must* be run from its own directory, so you must ``cd``",
24 "to this directory and then start the notebook, but do *not* use the ``--notebook-dir``",
25 "option to run it from another location.",
26 "",
27 "The first thing you need to know is that you are still controlling the same old IPython you're used to,",
14 "# A brief tour of the IPython notebook\n",
15 "\n",
16 "This document will give you a brief tour of the capabilities of the IPython notebook. \n",
17 "You can view its contents by scrolling around, or execute each cell by typing `Shift-Enter`.\n",
18 "After you conclude this brief high-level tour, you should read the accompanying notebook \n",
19 "titled `01_notebook_introduction`, which takes a more step-by-step approach to the features of the\n",
20 "system. \n",
21 "\n",
22 "The rest of the notebooks in this directory illustrate various other aspects and \n",
23 "capabilities of the IPython notebook; some of them may require additional libraries to be executed.\n",
24 "\n",
25 "**NOTE:** This notebook *must* be run from its own directory, so you must ``cd``\n",
26 "to this directory and then start the notebook, but do *not* use the ``--notebook-dir``\n",
27 "option to run it from another location.\n",
28 "\n",
29 "The first thing you need to know is that you are still controlling the same old IPython you're used to,\n",
28 30 "so things like shell aliases and magic commands still work:"
29 31 ]
30 32 },
31 33 {
32 34 "cell_type": "code",
33 35 "collapsed": false,
34 36 "input": [
35 37 "pwd"
36 38 ],
37 39 "language": "python",
40 "metadata": {},
38 41 "outputs": [
39 42 {
40 43 "output_type": "pyout",
41 44 "prompt_number": 1,
42 45 "text": [
43 "u'/home/fperez/ipython/ipython/docs/examples/notebooks'"
46 "u'/Users/minrk/dev/ip/mine/docs/examples/notebooks'"
44 47 ]
45 48 }
46 49 ],
47 50 "prompt_number": 1
48 51 },
49 52 {
50 53 "cell_type": "code",
51 54 "collapsed": false,
52 55 "input": [
53 56 "ls"
54 57 ],
55 58 "language": "python",
59 "metadata": {},
56 60 "outputs": [
57 61 {
58 62 "output_type": "stream",
59 63 "stream": "stdout",
60 64 "text": [
61 "00_notebook_tour.ipynb python-logo.svg",
62 "01_notebook_introduction.ipynb sympy.ipynb",
63 "animation.m4v sympy_quantum_computing.ipynb",
64 "display_protocol.ipynb trapezoid_rule.ipynb",
65 "formatting.ipynb"
65 "00_notebook_tour.ipynb callbacks.ipynb python-logo.svg\r\n",
66 "01_notebook_introduction.ipynb cython_extension.ipynb rmagic_extension.ipynb\r\n",
67 "Animations_and_Progress.ipynb display_protocol.ipynb sympy.ipynb\r\n",
68 "Capturing Output.ipynb formatting.ipynb sympy_quantum_computing.ipynb\r\n",
69 "Script Magics.ipynb octavemagic_extension.ipynb trapezoid_rule.ipynb\r\n",
70 "animation.m4v progbar.ipynb\r\n"
66 71 ]
67 72 }
68 73 ],
69 74 "prompt_number": 2
70 75 },
71 76 {
72 77 "cell_type": "code",
73 78 "collapsed": false,
74 79 "input": [
75 "message = 'The IPython notebook is great!'",
76 "# note: the echo command does not run on Windows, it's a unix command.",
80 "message = 'The IPython notebook is great!'\n",
81 "# note: the echo command does not run on Windows, it's a unix command.\n",
77 82 "!echo $message"
78 83 ],
79 84 "language": "python",
85 "metadata": {},
80 86 "outputs": [
81 87 {
82 88 "output_type": "stream",
83 89 "stream": "stdout",
84 90 "text": [
85 "The IPython notebook is great!"
91 "The IPython notebook is great!\r\n"
86 92 ]
87 93 }
88 94 ],
89 95 "prompt_number": 3
90 96 },
91 97 {
98 "cell_type": "heading",
99 "level": 2,
100 "metadata": {},
101 "source": [
102 "Plots with matplotlib"
103 ]
104 },
105 {
92 106 "cell_type": "markdown",
107 "metadata": {},
93 108 "source": [
94 "Plots with matplotlib: do *not* execute the next below if you do not have matplotlib installed or didn't start up ",
95 "this notebook with the `--pylab` option, as the code will not work."
109 "IPython adds an 'inline' matplotlib backend,\n",
110 "which embeds any matplotlib figures into the notebook."
96 111 ]
97 112 },
98 113 {
99 114 "cell_type": "code",
100 115 "collapsed": false,
101 116 "input": [
102 "x = linspace(0, 3*pi, 500)",
103 "plot(x, sin(x**2))",
117 "%pylab inline"
118 ],
119 "language": "python",
120 "metadata": {},
121 "outputs": [
122 {
123 "output_type": "stream",
124 "stream": "stdout",
125 "text": [
126 "\n",
127 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
128 "For more information, type 'help(pylab)'.\n"
129 ]
130 }
131 ],
132 "prompt_number": 4
133 },
134 {
135 "cell_type": "code",
136 "collapsed": false,
137 "input": [
138 "x = linspace(0, 3*pi, 500)\n",
139 "plot(x, sin(x**2))\n",
104 140 "title('A simple chirp');"
105 141 ],
106 142 "language": "python",
143 "metadata": {},
107 144 "outputs": [
108 145 {
109 146 "output_type": "display_data",
110 "png": "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\n"
147 "png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEICAYAAACzliQjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztfXt0VdWd/+fmwSvhlUDeAcSECREFFWtLi8YKWlBTrS8c\nq1StZVppO21XZ3XNrJnqmqmF6XSpa9EquqYVOlZp+6tCUfHZKK2ltIpohcqjonnwCOQBeSc35/fH\n7s49OTmP/Tzn3GR/1sqCJGc/7s09n/05n+93f3fCsiwLBgYGBgZjAhlRT8DAwMDAIDwY0jcwMDAY\nQzCkb2BgYDCGYEjfwMDAYAzBkL6BgYHBGIIhfQMDA4MxBEP6BmmPJ554AldeeaWWvr/whS/g3//9\n35X2ee+99+K2227z/P2CBQvw+uuvKx3TwIDCkL5B5KipqUFeXh76+vqE2t9666144YUXFM+KIJFI\nIJFIKO/TD3/5y19wySWXKB3TwIDCkL5BpDhy5Ah2796NgoICbNu2LerpuEL1/kWZ/pLJpMKZGIxF\nGNI3iBSbN2/GsmXLcNttt2HTpk2+1z7++OM4++yzMWXKFMydOxc///nPh36+dOnSoesyMjLw8MMP\no7KyElOmTMF//Md/4PDhw/jEJz6BadOmYdWqVejv7wcA1NXVoaysDN///vcxc+ZMnHXWWUP9umH7\n9u1YtGgRpk+fjk9+8pN49913Pa997733sHz5cuTn56OoqAjf//73ARCl39fXh9WrV2PKlClYsGAB\n3nzzzaF2c+bMwauvvgqAWEE33HADbrvtNkydOhWPP/740M9WrVqFKVOm4MILL8Q777wT8E4bGBAY\n0jeIFJs3b8bNN9+Mm266CS+88AJOnDjhel1nZye+/vWvY8eOHTh9+jT+8Ic/YNGiRZ79vvjii9iz\nZw927dqF9evX4+6778aTTz6Jjz76CO+++y6efPLJoWuPHz+OU6dOoampCZs2bcKXvvQlHDx4cESf\ne/bswV133YXHHnsMLS0tWLNmDWpra11tqTNnzmDZsmVYuXIljh49ikOHDuHyyy8HQJT+tm3bcMst\nt6C9vR21tbVYu3btUFun/bNt2zbceOONaG9vx6233jr0s5tuugmtra34x3/8R1x77bUYGBjweacN\nDAgM6RtEht/97ndobGxEbW0tKisrUV1d7auyMzIy8O6776K7uxuFhYWorq72vPZf/uVfkJubi+rq\n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\n"
111 148 }
112 149 ],
113 "prompt_number": 4
150 "prompt_number": 5
114 151 },
115 152 {
116 153 "cell_type": "markdown",
154 "metadata": {},
117 155 "source": [
118 "You can paste blocks of input with prompt markers, such as those from",
156 "You can paste blocks of input with prompt markers, such as those from\n",
119 157 "[the official Python tutorial](http://docs.python.org/tutorial/interpreter.html#interactive-mode)"
120 158 ]
121 159 },
122 160 {
123 161 "cell_type": "code",
124 162 "collapsed": false,
125 163 "input": [
126 ">>> the_world_is_flat = 1",
127 ">>> if the_world_is_flat:",
164 ">>> the_world_is_flat = 1\n",
165 ">>> if the_world_is_flat:\n",
128 166 "... print \"Be careful not to fall off!\""
129 167 ],
130 168 "language": "python",
169 "metadata": {},
131 170 "outputs": [
132 171 {
133 172 "output_type": "stream",
134 173 "stream": "stdout",
135 174 "text": [
136 "Be careful not to fall off!"
175 "Be careful not to fall off!\n"
137 176 ]
138 177 }
139 178 ],
140 "prompt_number": 5
179 "prompt_number": 6
141 180 },
142 181 {
143 182 "cell_type": "markdown",
183 "metadata": {},
144 184 "source": [
145 185 "Errors are shown in informative ways:"
146 186 ]
147 187 },
148 188 {
149 189 "cell_type": "code",
150 190 "collapsed": false,
151 191 "input": [
152 192 "%run non_existent_file"
153 193 ],
154 194 "language": "python",
195 "metadata": {},
155 196 "outputs": [
156 197 {
157 198 "output_type": "stream",
158 199 "stream": "stderr",
159 200 "text": [
160 "ERROR: File `non_existent_file.py` not found."
201 "ERROR: File `u'non_existent_file.py'` not found."
161 202 ]
162 203 }
163 204 ],
164 "prompt_number": 6
205 "prompt_number": 7
165 206 },
166 207 {
167 208 "cell_type": "code",
168 209 "collapsed": false,
169 210 "input": [
170 "x = 1",
171 "y = 4",
211 "x = 1\n",
212 "y = 4\n",
172 213 "z = y/(1-x)"
173 214 ],
174 215 "language": "python",
216 "metadata": {},
175 217 "outputs": [
176 218 {
177 219 "ename": "ZeroDivisionError",
178 220 "evalue": "integer division or modulo by zero",
179 221 "output_type": "pyerr",
180 222 "traceback": [
181 "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mZeroDivisionError\u001b[0m Traceback (most recent call last)",
182 "\u001b[0;32m/home/fperez/ipython/ipython/docs/examples/notebooks/<ipython-input-7-dc39888fd1d2>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mz\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
183 "\u001b[0;31mZeroDivisionError\u001b[0m: integer division or modulo by zero"
223 "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)",
224 "\u001b[1;32m<ipython-input-8-dc39888fd1d2>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m4\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mz\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m/\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m-\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
225 "\u001b[1;31mZeroDivisionError\u001b[0m: integer division or modulo by zero"
184 226 ]
185 227 }
186 228 ],
187 "prompt_number": 7
229 "prompt_number": 8
188 230 },
189 231 {
190 232 "cell_type": "markdown",
233 "metadata": {},
191 234 "source": [
192 "When IPython needs to display additional information (such as providing details on an object via `x?`",
235 "When IPython needs to display additional information (such as providing details on an object via `x?`\n",
193 236 "it will automatically invoke a pager at the bottom of the screen:"
194 237 ]
195 238 },
196 239 {
197 240 "cell_type": "code",
198 "collapsed": true,
241 "collapsed": false,
199 242 "input": [
200 243 "magic"
201 244 ],
202 245 "language": "python",
246 "metadata": {},
203 247 "outputs": [],
204 "prompt_number": 8
248 "prompt_number": 18
205 249 },
206 250 {
207 251 "cell_type": "markdown",
252 "metadata": {},
208 253 "source": [
209 "## Non-blocking output of kernel",
210 "",
254 "## Non-blocking output of kernel\n",
255 "\n",
211 256 "If you execute the next cell, you will see the output arriving as it is generated, not all at the end."
212 257 ]
213 258 },
214 259 {
215 260 "cell_type": "code",
216 261 "collapsed": false,
217 262 "input": [
218 "import time, sys",
219 "for i in range(8):",
220 " print i,",
263 "import time, sys\n",
264 "for i in range(8):\n",
265 " print i,\n",
221 266 " time.sleep(0.5)"
222 267 ],
223 268 "language": "python",
269 "metadata": {},
224 270 "outputs": [
225 271 {
226 272 "output_type": "stream",
227 273 "stream": "stdout",
228 274 "text": [
229 275 "0 "
230 276 ]
231 277 },
232 278 {
233 279 "output_type": "stream",
234 280 "stream": "stdout",
235 281 "text": [
236 282 "1 "
237 283 ]
238 284 },
239 285 {
240 286 "output_type": "stream",
241 287 "stream": "stdout",
242 288 "text": [
243 289 "2 "
244 290 ]
245 291 },
246 292 {
247 293 "output_type": "stream",
248 294 "stream": "stdout",
249 295 "text": [
250 296 "3 "
251 297 ]
252 298 },
253 299 {
254 300 "output_type": "stream",
255 301 "stream": "stdout",
256 302 "text": [
257 303 "4 "
258 304 ]
259 305 },
260 306 {
261 307 "output_type": "stream",
262 308 "stream": "stdout",
263 309 "text": [
264 310 "5 "
265 311 ]
266 312 },
267 313 {
268 314 "output_type": "stream",
269 315 "stream": "stdout",
270 316 "text": [
271 317 "6 "
272 318 ]
273 319 },
274 320 {
275 321 "output_type": "stream",
276 322 "stream": "stdout",
277 323 "text": [
278 "7"
324 "7\n"
279 325 ]
280 326 }
281 327 ],
282 "prompt_number": 9
328 "prompt_number": 19
283 329 },
284 330 {
285 331 "cell_type": "markdown",
332 "metadata": {},
286 333 "source": [
287 "## Clean crash and restart",
288 "",
289 "We call the low-level system libc.time routine with the wrong argument via",
334 "## Clean crash and restart\n",
335 "\n",
336 "We call the low-level system libc.time routine with the wrong argument via\n",
290 337 "ctypes to segfault the Python interpreter:"
291 338 ]
292 339 },
293 340 {
294 341 "cell_type": "code",
295 "collapsed": true,
342 "collapsed": false,
296 343 "input": [
297 "from ctypes import CDLL",
298 "# This will crash a linux system; equivalent calls can be made on Windows or Mac",
299 "libc = CDLL(\"libc.so.6\") ",
344 "import sys\n",
345 "from ctypes import CDLL\n",
346 "# This will crash a Linux or Mac system; equivalent calls can be made on Windows\n",
347 "dll = 'dylib' if sys.platform == 'darwin' else '.so.6'\n",
348 "libc = CDLL(\"libc.%s\" % dll) \n",
300 349 "libc.time(-1) # BOOM!!"
301 350 ],
302 351 "language": "python",
352 "metadata": {},
303 353 "outputs": [],
304 354 "prompt_number": "*"
305 355 },
306 356 {
307 357 "cell_type": "markdown",
358 "metadata": {},
308 359 "source": [
309 "## Markdown cells can contain formatted text and code",
310 "",
311 "You can *italicize*, **boldface**",
312 "",
313 "* build",
314 "* lists",
315 "",
316 "and embed code meant for illustration instead of execution in Python:",
317 "",
318 " def f(x):",
319 " \"\"\"a docstring\"\"\"",
320 " return x**2",
321 "",
322 "or other languages:",
323 "",
324 " if (i=0; i<n; i++) {",
325 " printf(\"hello %d\\n\", i);",
326 " x += 4;",
360 "## Markdown cells can contain formatted text and code\n",
361 "\n",
362 "You can *italicize*, **boldface**\n",
363 "\n",
364 "* build\n",
365 "* lists\n",
366 "\n",
367 "and embed code meant for illustration instead of execution in Python:\n",
368 "\n",
369 " def f(x):\n",
370 " \"\"\"a docstring\"\"\"\n",
371 " return x**2\n",
372 "\n",
373 "or other languages:\n",
374 "\n",
375 " if (i=0; i<n; i++) {\n",
376 " printf(\"hello %d\\n\", i);\n",
377 " x += 4;\n",
327 378 " }"
328 379 ]
329 380 },
330 381 {
331 382 "cell_type": "markdown",
383 "metadata": {},
332 384 "source": [
333 "Courtesy of MathJax, you can include mathematical expressions both inline: ",
334 "$e^{i\\pi} + 1 = 0$ and displayed:",
335 "",
385 "Courtesy of MathJax, you can include mathematical expressions both inline: \n",
386 "$e^{i\\pi} + 1 = 0$ and displayed:\n",
387 "\n",
336 388 "$$e^x=\\sum_{i=0}^\\infty \\frac{1}{i!}x^i$$"
337 389 ]
338 390 },
339 391 {
340 392 "cell_type": "markdown",
393 "metadata": {},
341 394 "source": [
342 "## Rich displays: include anyting a browser can show",
343 "",
344 "Note that we have an actual protocol for this, see the `display_protocol` notebook for further details.",
345 "",
395 "## Rich displays: include anyting a browser can show\n",
396 "\n",
397 "Note that we have an actual protocol for this, see the `display_protocol` notebook for further details.\n",
398 "\n",
346 399 "### Images"
347 400 ]
348 401 },
349 402 {
350 403 "cell_type": "code",
351 404 "collapsed": false,
352 405 "input": [
353 "from IPython.core.display import Image",
406 "from IPython.core.display import Image\n",
354 407 "Image(filename='../../source/_static/logo.png')"
355 408 ],
356 409 "language": "python",
410 "metadata": {},
357 411 "outputs": [
358 412 {
359 413 "output_type": "pyout",
360 414 "png": "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\n",
361 415 "prompt_number": 1,
362 416 "text": [
363 "&lt;IPython.core.display.Image at 0x41d4690&gt;"
417 "<IPython.core.display.Image at 0x1060e77d0>"
364 418 ]
365 419 }
366 420 ],
367 421 "prompt_number": 1
368 422 },
369 423 {
370 424 "cell_type": "markdown",
425 "metadata": {},
371 426 "source": [
372 427 "An image can also be displayed from raw data or a url"
373 428 ]
374 429 },
375 430 {
376 431 "cell_type": "code",
377 432 "collapsed": false,
378 433 "input": [
379 434 "Image('http://python.org/images/python-logo.gif')"
380 435 ],
381 436 "language": "python",
437 "metadata": {},
382 438 "outputs": [
383 439 {
384 "html": [
385 "<img src=\"http://python.org/images/python-logo.gif\" />"
386 ],
387 440 "output_type": "pyout",
441 "png": "R0lGODlh0wBHAPcAAP/////78vf3///35fb19fPy8u/v7//tyPHs2uvq6urq6vXoxv/tYObm5vHl\nw//krP/rXvXmpvXjmP/mWf/gl9zh5/bfoP/jVN7e3vfekvjhbt3d3friYv/gUtfe483f7vbYl/XZ\njfXagv/We//Wg//bTNbW1vfUe//YSf/TdvjVaPfShPnWW/vVT//VRP/PasbU4P/QQP/NV/fNdMLR\n3vvOR/jNV//MO8zMzPjHYvvIQPzFOf/FMsXFxfnCRLDH2fnAScLCwvvAN/q+QP2+Lv+8Kb29vf+4\nLf+1Mf+1IZu/3Zu92qG6z5260bW1taysrJCvyYKv1KioqIKt0aOjo3+oyqGgoICmxn6lxoCjwH2h\nv3+euJmZmXKgxZGRkXCWtZCPj2SVvWSRtVqRv2SOsoaGhlKNvX5+fkmIu0SJwFCFsEmFtkOFuziF\nw0ODtjiCvkl/rFB8oUN/snV1dTh/ukJ9rjh8tUN5pzd5r2xsbDd2q0JzpTxynjdzpWZmZjZtnDdq\nlP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAUUAIEALAAAAADTAEcA\nAAj/AAMJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuX\nMGPKnEmzps2bOHPq3Mmzp8+fQIMKjYiDSx4cQ2fSwBJmjRs5UOWoEaPFQ1KEZfz4QXrVZRM2b8La\n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\n",
388 442 "prompt_number": 2,
389 443 "text": [
390 "&lt;IPython.core.display.Image at 0x41d4550&gt;"
444 "<IPython.core.display.Image at 0x1060e7410>"
391 445 ]
392 446 }
393 447 ],
394 448 "prompt_number": 2
395 449 },
396 450 {
397 451 "cell_type": "markdown",
452 "metadata": {},
398 453 "source": [
399 454 "SVG images are also supported out of the box (since modern browsers do a good job of rendering them):"
400 455 ]
401 456 },
402 457 {
403 458 "cell_type": "code",
404 459 "collapsed": false,
405 460 "input": [
406 "from IPython.core.display import SVG",
461 "from IPython.core.display import SVG\n",
407 462 "SVG(filename='python-logo.svg')"
408 463 ],
409 464 "language": "python",
465 "metadata": {},
410 466 "outputs": [
411 467 {
412 468 "output_type": "pyout",
413 469 "prompt_number": 3,
414 470 "svg": [
415 "<svg height=\"115.02pt\" id=\"svg2\" inkscape:version=\"0.43\" sodipodi:docbase=\"/home/sdeibel\" sodipodi:docname=\"logo-python-generic.svg\" sodipodi:version=\"0.32\" version=\"1.0\" width=\"388.84pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:cc=\"http://web.resource.org/cc/\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:sodipodi=\"http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd\" xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">",
416 " <metadata id=\"metadata2193\">",
417 " <rdf:RDF>",
418 " <cc:Work rdf:about=\"\">",
419 " <dc:format>image/svg+xml</dc:format>",
420 " <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>",
421 " </cc:Work>",
422 " </rdf:RDF>",
423 " </metadata>",
424 " <sodipodi:namedview bordercolor=\"#666666\" borderopacity=\"1.0\" id=\"base\" inkscape:current-layer=\"svg2\" inkscape:cx=\"243.02499\" inkscape:cy=\"71.887497\" inkscape:pageopacity=\"0.0\" inkscape:pageshadow=\"2\" inkscape:window-height=\"543\" inkscape:window-width=\"791\" inkscape:window-x=\"0\" inkscape:window-y=\"0\" inkscape:zoom=\"1.4340089\" pagecolor=\"#ffffff\"/>",
425 " <defs id=\"defs4\">",
426 " <linearGradient id=\"linearGradient2795\">",
427 " <stop id=\"stop2797\" offset=\"0\" style=\"stop-color:#b8b8b8;stop-opacity:0.49803922\"/>",
428 " <stop id=\"stop2799\" offset=\"1\" style=\"stop-color:#7f7f7f;stop-opacity:0\"/>",
429 " </linearGradient>",
430 " <linearGradient id=\"linearGradient2787\">",
431 " <stop id=\"stop2789\" offset=\"0\" style=\"stop-color:#7f7f7f;stop-opacity:0.5\"/>",
432 " <stop id=\"stop2791\" offset=\"1\" style=\"stop-color:#7f7f7f;stop-opacity:0\"/>",
433 " </linearGradient>",
434 " <linearGradient id=\"linearGradient3676\">",
435 " <stop id=\"stop3678\" offset=\"0\" style=\"stop-color:#b2b2b2;stop-opacity:0.5\"/>",
436 " <stop id=\"stop3680\" offset=\"1\" style=\"stop-color:#b3b3b3;stop-opacity:0\"/>",
437 " </linearGradient>",
438 " <linearGradient id=\"linearGradient3236\">",
439 " <stop id=\"stop3244\" offset=\"0\" style=\"stop-color:#f4f4f4;stop-opacity:1\"/>",
440 " <stop id=\"stop3240\" offset=\"1\" style=\"stop-color:#ffffff;stop-opacity:1\"/>",
441 " </linearGradient>",
442 " <linearGradient id=\"linearGradient4671\">",
443 " <stop id=\"stop4673\" offset=\"0\" style=\"stop-color:#ffd43b;stop-opacity:1\"/>",
444 " <stop id=\"stop4675\" offset=\"1\" style=\"stop-color:#ffe873;stop-opacity:1\"/>",
445 " </linearGradient>",
446 " <linearGradient id=\"linearGradient4689\">",
447 " <stop id=\"stop4691\" offset=\"0\" style=\"stop-color:#5a9fd4;stop-opacity:1\"/>",
448 " <stop id=\"stop4693\" offset=\"1\" style=\"stop-color:#306998;stop-opacity:1\"/>",
449 " </linearGradient>",
450 " <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2987\" x1=\"224.23996\" x2=\"-65.308502\" xlink:href=\"#linearGradient4671\" y1=\"144.75717\" y2=\"144.75717\"/>",
451 " <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2990\" x1=\"172.94208\" x2=\"26.670298\" xlink:href=\"#linearGradient4689\" y1=\"77.475983\" y2=\"76.313133\"/>",
452 " <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2587\" x1=\"172.94208\" x2=\"26.670298\" xlink:href=\"#linearGradient4689\" y1=\"77.475983\" y2=\"76.313133\"/>",
453 " <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2589\" x1=\"224.23996\" x2=\"-65.308502\" xlink:href=\"#linearGradient4671\" y1=\"144.75717\" y2=\"144.75717\"/>",
454 " <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2248\" x1=\"172.94208\" x2=\"26.670298\" xlink:href=\"#linearGradient4689\" y1=\"77.475983\" y2=\"76.313133\"/>",
455 " <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2250\" x1=\"224.23996\" x2=\"-65.308502\" xlink:href=\"#linearGradient4671\" y1=\"144.75717\" y2=\"144.75717\"/>",
456 " <linearGradient gradientTransform=\"matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2255\" x1=\"224.23996\" x2=\"-65.308502\" xlink:href=\"#linearGradient4671\" y1=\"144.75717\" y2=\"144.75717\"/>",
457 " <linearGradient gradientTransform=\"matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2258\" x1=\"172.94208\" x2=\"26.670298\" xlink:href=\"#linearGradient4689\" y1=\"76.176224\" y2=\"76.313133\"/>",
458 " <radialGradient cx=\"61.518883\" cy=\"132.28575\" fx=\"61.518883\" fy=\"132.28575\" gradientTransform=\"matrix(1,0,0,0.177966,0,108.7434)\" gradientUnits=\"userSpaceOnUse\" id=\"radialGradient2801\" r=\"29.036913\" xlink:href=\"#linearGradient2795\"/>",
459 " <linearGradient gradientTransform=\"matrix(0.562541,0,0,0.567972,-9.399749,-5.305317)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient1475\" x1=\"150.96111\" x2=\"112.03144\" xlink:href=\"#linearGradient4671\" y1=\"192.35176\" y2=\"137.27299\"/>",
460 " <linearGradient gradientTransform=\"matrix(0.562541,0,0,0.567972,-9.399749,-5.305317)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient1478\" x1=\"26.648937\" x2=\"135.66525\" xlink:href=\"#linearGradient4689\" y1=\"20.603781\" y2=\"114.39767\"/>",
461 " <radialGradient cx=\"61.518883\" cy=\"132.28575\" fx=\"61.518883\" fy=\"132.28575\" gradientTransform=\"matrix(2.382716e-8,-0.296405,1.43676,4.683673e-7,-128.544,150.5202)\" gradientUnits=\"userSpaceOnUse\" id=\"radialGradient1480\" r=\"29.036913\" xlink:href=\"#linearGradient2795\"/>",
462 " </defs>",
463 " <g id=\"g2303\">",
464 " <path d=\"M 184.61344,61.929363 C 184.61344,47.367213 180.46118,39.891193 172.15666,39.481813 C 168.85239,39.325863 165.62611,39.852203 162.48754,41.070593 C 159.98254,41.967323 158.2963,42.854313 157.40931,43.751043 L 157.40931,78.509163 C 162.72147,81.842673 167.43907,83.392453 171.55234,83.148783 C 180.25649,82.573703 184.61344,75.507063 184.61344,61.929363 z M 194.85763,62.533683 C 194.85763,69.931723 193.12265,76.072393 189.63319,80.955683 C 185.7441,86.482283 180.35396,89.328433 173.46277,89.484393 C 168.26757,89.650093 162.91642,88.022323 157.40931,84.610843 L 157.40931,116.20116 L 148.50047,113.02361 L 148.50047,42.903043 C 149.96253,41.109583 151.84372,39.569543 154.12454,38.263433 C 159.42696,35.173603 165.86978,33.584823 173.45302,33.506853 L 173.57973,33.633563 C 180.50991,33.545833 185.85132,36.391993 189.60395,42.162263 C 193.10315,47.454933 194.85763,54.238913 194.85763,62.533683 z \" id=\"path46\" style=\"fill:#646464;fill-opacity:1\"/>",
465 " <path d=\"M 249.30487,83.265743 C 249.30487,93.188283 248.31067,100.05998 246.32227,103.88084 C 244.32411,107.7017 240.52275,110.75254 234.90842,113.02361 C 230.35653,114.81707 225.43425,115.79178 220.15133,115.95748 L 218.67952,110.34316 C 224.05016,109.61213 227.83204,108.88109 230.02513,108.15006 C 234.34309,106.688 237.30621,104.44617 238.93397,101.44406 C 240.24008,98.997543 240.88339,94.328693 240.88339,87.418003 L 240.88339,85.098203 C 234.79146,87.866373 228.40711,89.240713 221.73036,89.240713 C 217.34417,89.240713 213.47457,87.866373 210.14107,85.098203 C 206.39818,82.086343 204.52674,78.265483 204.52674,73.635623 L 204.52674,36.557693 L 213.43558,33.506853 L 213.43558,70.828453 C 213.43558,74.815013 214.7222,77.885353 217.29543,80.039463 C 219.86866,82.193563 223.20217,83.226753 227.2862,83.148783 C 231.37023,83.061053 235.74667,81.482023 240.39603,78.392203 L 240.39603,34.851953 L 249.30487,34.851953 L 249.30487,83.265743 z \" id=\"path48\" style=\"fill:#646464;fill-opacity:1\"/>",
466 " <path d=\"M 284.08249,88.997033 C 283.02006,89.084753 282.04535,89.123743 281.14862,89.123743 C 276.10937,89.123743 272.18129,87.924853 269.37413,85.517323 C 266.57671,83.109793 265.17314,79.786033 265.17314,75.546053 L 265.17314,40.456523 L 259.07146,40.456523 L 259.07146,34.851953 L 265.17314,34.851953 L 265.17314,19.968143 L 274.07223,16.800333 L 274.07223,34.851953 L 284.08249,34.851953 L 284.08249,40.456523 L 274.07223,40.456523 L 274.07223,75.302373 C 274.07223,78.645623 274.96896,81.014163 276.76243,82.398253 C 278.30247,83.538663 280.74899,84.191723 284.08249,84.357423 L 284.08249,88.997033 z \" id=\"path50\" style=\"fill:#646464;fill-opacity:1\"/>",
467 " <path d=\"M 338.02288,88.266003 L 329.11404,88.266003 L 329.11404,53.878273 C 329.11404,50.379063 328.29528,47.367213 326.66753,44.852463 C 324.78634,42.006313 322.17411,40.583233 318.82112,40.583233 C 314.73708,40.583233 309.6296,42.737343 303.4987,47.045563 L 303.4987,88.266003 L 294.58985,88.266003 L 294.58985,6.0687929 L 303.4987,3.2616329 L 303.4987,40.700203 C 309.191,36.557693 315.40963,34.481563 322.16436,34.481563 C 326.88196,34.481563 330.70282,36.070333 333.62694,39.238143 C 336.56082,42.405943 338.02288,46.353513 338.02288,51.071103 L 338.02288,88.266003 L 338.02288,88.266003 z \" id=\"path52\" style=\"fill:#646464;fill-opacity:1\"/>",
468 " <path d=\"M 385.37424,60.525783 C 385.37424,54.930953 384.31182,50.310833 382.19669,46.655673 C 379.68195,42.201253 375.77337,39.852203 370.49044,39.608523 C 360.72386,40.173863 355.85032,47.172273 355.85032,60.584263 C 355.85032,66.734683 356.86401,71.871393 358.91089,75.994413 C 361.52312,81.248093 365.44145,83.840823 370.66589,83.753103 C 380.47146,83.675123 385.37424,75.935933 385.37424,60.525783 z M 395.13109,60.584263 C 395.13109,68.547643 393.09395,75.175663 389.02941,80.468333 C 384.5555,86.394563 378.37584,89.367423 370.49044,89.367423 C 362.67328,89.367423 356.58135,86.394563 352.18541,80.468333 C 348.19885,75.175663 346.21044,68.547643 346.21044,60.584263 C 346.21044,53.098503 348.36455,46.801883 352.67276,41.674913 C 357.22466,36.236033 363.20937,33.506853 370.6074,33.506853 C 378.00545,33.506853 384.02914,36.236033 388.66877,41.674913 C 392.97697,46.801883 395.13109,53.098503 395.13109,60.584263 z \" id=\"path54\" style=\"fill:#646464;fill-opacity:1\"/>",
469 " <path d=\"M 446.20583,88.266003 L 437.29699,88.266003 L 437.29699,51.928853 C 437.29699,47.942293 436.0981,44.832973 433.70032,42.591133 C 431.30253,40.359053 428.10549,39.277123 424.11893,39.364853 C 419.8887,39.442833 415.86314,40.826913 412.04229,43.507363 L 412.04229,88.266003 L 403.13345,88.266003 L 403.13345,42.405943 C 408.26042,38.672813 412.97801,36.236033 417.28621,35.095623 C 421.35076,34.033193 424.93769,33.506853 428.02752,33.506853 C 430.14264,33.506853 432.13104,33.711543 434.00248,34.120913 C 437.50169,34.929923 440.34783,36.430973 442.54093,38.633823 C 444.98744,41.070593 446.20583,43.994723 446.20583,47.415943 L 446.20583,88.266003 z \" id=\"path56\" style=\"fill:#646464;fill-opacity:1\"/>",
470 " <path d=\"M 60.510156,6.3979729 C 55.926503,6.4192712 51.549217,6.8101906 47.697656,7.4917229 C 36.35144,9.4962267 34.291407,13.691825 34.291406,21.429223 L 34.291406,31.647973 L 61.103906,31.647973 L 61.103906,35.054223 L 34.291406,35.054223 L 24.228906,35.054223 C 16.436447,35.054223 9.6131468,39.73794 7.4789058,48.647973 C 5.0170858,58.860939 4.9078907,65.233996 7.4789058,75.897973 C 9.3848341,83.835825 13.936449,89.491721 21.728906,89.491723 L 30.947656,89.491723 L 30.947656,77.241723 C 30.947656,68.391821 38.6048,60.585475 47.697656,60.585473 L 74.478906,60.585473 C 81.933857,60.585473 87.885159,54.447309 87.885156,46.960473 L 87.885156,21.429223 C 87.885156,14.162884 81.755176,8.7044455 74.478906,7.4917229 C 69.872919,6.7249976 65.093809,6.3766746 60.510156,6.3979729 z M 46.010156,14.616723 C 48.779703,14.616723 51.041406,16.915369 51.041406,19.741723 C 51.041404,22.558059 48.779703,24.835473 46.010156,24.835473 C 43.23068,24.835472 40.978906,22.558058 40.978906,19.741723 C 40.978905,16.91537 43.23068,14.616723 46.010156,14.616723 z \" id=\"path1948\" style=\"fill:url(#linearGradient1478);fill-opacity:1\"/>",
471 " <path d=\"M 91.228906,35.054223 L 91.228906,46.960473 C 91.228906,56.191228 83.403011,63.960472 74.478906,63.960473 L 47.697656,63.960473 C 40.361823,63.960473 34.291407,70.238956 34.291406,77.585473 L 34.291406,103.11672 C 34.291406,110.38306 40.609994,114.65704 47.697656,116.74172 C 56.184987,119.23733 64.323893,119.68835 74.478906,116.74172 C 81.229061,114.78733 87.885159,110.85411 87.885156,103.11672 L 87.885156,92.897973 L 61.103906,92.897973 L 61.103906,89.491723 L 87.885156,89.491723 L 101.29141,89.491723 C 109.08387,89.491723 111.98766,84.056315 114.69765,75.897973 C 117.49698,67.499087 117.37787,59.422197 114.69765,48.647973 C 112.77187,40.890532 109.09378,35.054223 101.29141,35.054223 L 91.228906,35.054223 z M 76.166406,99.710473 C 78.945884,99.710476 81.197656,101.98789 81.197656,104.80422 C 81.197654,107.63057 78.945881,109.92922 76.166406,109.92922 C 73.396856,109.92922 71.135156,107.63057 71.135156,104.80422 C 71.135158,101.98789 73.396853,99.710473 76.166406,99.710473 z \" id=\"path1950\" style=\"fill:url(#linearGradient1475);fill-opacity:1\"/>",
472 " <path d=\"M 463.5544,26.909383 L 465.11635,26.909383 L 465.11635,17.113143 L 468.81648,17.113143 L 468.81648,15.945483 L 459.85427,15.945483 L 459.85427,17.113143 L 463.5544,17.113143 L 463.5544,26.909383 M 470.20142,26.909383 L 471.53589,26.909383 L 471.53589,17.962353 L 474.4323,26.908259 L 475.91799,26.908259 L 478.93615,17.992683 L 478.93615,26.909383 L 480.39194,26.909383 L 480.39194,15.945483 L 478.46605,15.945483 L 475.16774,25.33834 L 472.35477,15.945483 L 470.20142,15.945483 L 470.20142,26.909383\" id=\"text3004\" style=\"font-size:15.16445827px;font-style:normal;font-weight:normal;line-height:125%;fill:#646464;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans\"/>",
473 " <path d=\"M 110.46717 132.28575 A 48.948284 8.6066771 0 1 1 12.570599,132.28575 A 48.948284 8.6066771 0 1 1 110.46717 132.28575 z\" id=\"path1894\" style=\"opacity:0.44382019;fill:url(#radialGradient1480);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:20;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\" transform=\"matrix(0.73406,0,0,0.809524,16.24958,27.00935)\"/>",
474 " </g>",
471 "<svg height=\"115.02pt\" id=\"svg2\" inkscape:version=\"0.43\" sodipodi:docbase=\"/home/sdeibel\" sodipodi:docname=\"logo-python-generic.svg\" sodipodi:version=\"0.32\" version=\"1.0\" width=\"388.84pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:cc=\"http://web.resource.org/cc/\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:sodipodi=\"http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd\" xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
472 " <metadata id=\"metadata2193\">\n",
473 " <rdf:RDF>\n",
474 " <cc:Work rdf:about=\"\">\n",
475 " <dc:format>image/svg+xml</dc:format>\n",
476 " <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
477 " </cc:Work>\n",
478 " </rdf:RDF>\n",
479 " </metadata>\n",
480 " <sodipodi:namedview bordercolor=\"#666666\" borderopacity=\"1.0\" id=\"base\" inkscape:current-layer=\"svg2\" inkscape:cx=\"243.02499\" inkscape:cy=\"71.887497\" inkscape:pageopacity=\"0.0\" inkscape:pageshadow=\"2\" inkscape:window-height=\"543\" inkscape:window-width=\"791\" inkscape:window-x=\"0\" inkscape:window-y=\"0\" inkscape:zoom=\"1.4340089\" pagecolor=\"#ffffff\"/>\n",
481 " <defs id=\"defs4\">\n",
482 " <linearGradient id=\"linearGradient2795\">\n",
483 " <stop id=\"stop2797\" offset=\"0\" style=\"stop-color:#b8b8b8;stop-opacity:0.49803922\"/>\n",
484 " <stop id=\"stop2799\" offset=\"1\" style=\"stop-color:#7f7f7f;stop-opacity:0\"/>\n",
485 " </linearGradient>\n",
486 " <linearGradient id=\"linearGradient2787\">\n",
487 " <stop id=\"stop2789\" offset=\"0\" style=\"stop-color:#7f7f7f;stop-opacity:0.5\"/>\n",
488 " <stop id=\"stop2791\" offset=\"1\" style=\"stop-color:#7f7f7f;stop-opacity:0\"/>\n",
489 " </linearGradient>\n",
490 " <linearGradient id=\"linearGradient3676\">\n",
491 " <stop id=\"stop3678\" offset=\"0\" style=\"stop-color:#b2b2b2;stop-opacity:0.5\"/>\n",
492 " <stop id=\"stop3680\" offset=\"1\" style=\"stop-color:#b3b3b3;stop-opacity:0\"/>\n",
493 " </linearGradient>\n",
494 " <linearGradient id=\"linearGradient3236\">\n",
495 " <stop id=\"stop3244\" offset=\"0\" style=\"stop-color:#f4f4f4;stop-opacity:1\"/>\n",
496 " <stop id=\"stop3240\" offset=\"1\" style=\"stop-color:#ffffff;stop-opacity:1\"/>\n",
497 " </linearGradient>\n",
498 " <linearGradient id=\"linearGradient4671\">\n",
499 " <stop id=\"stop4673\" offset=\"0\" style=\"stop-color:#ffd43b;stop-opacity:1\"/>\n",
500 " <stop id=\"stop4675\" offset=\"1\" style=\"stop-color:#ffe873;stop-opacity:1\"/>\n",
501 " </linearGradient>\n",
502 " <linearGradient id=\"linearGradient4689\">\n",
503 " <stop id=\"stop4691\" offset=\"0\" style=\"stop-color:#5a9fd4;stop-opacity:1\"/>\n",
504 " <stop id=\"stop4693\" offset=\"1\" style=\"stop-color:#306998;stop-opacity:1\"/>\n",
505 " </linearGradient>\n",
506 " <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2987\" x1=\"224.23996\" x2=\"-65.308502\" xlink:href=\"#linearGradient4671\" y1=\"144.75717\" y2=\"144.75717\"/>\n",
507 " <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2990\" x1=\"172.94208\" x2=\"26.670298\" xlink:href=\"#linearGradient4689\" y1=\"77.475983\" y2=\"76.313133\"/>\n",
508 " <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2587\" x1=\"172.94208\" x2=\"26.670298\" xlink:href=\"#linearGradient4689\" y1=\"77.475983\" y2=\"76.313133\"/>\n",
509 " <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2589\" x1=\"224.23996\" x2=\"-65.308502\" xlink:href=\"#linearGradient4671\" y1=\"144.75717\" y2=\"144.75717\"/>\n",
510 " <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2248\" x1=\"172.94208\" x2=\"26.670298\" xlink:href=\"#linearGradient4689\" y1=\"77.475983\" y2=\"76.313133\"/>\n",
511 " <linearGradient gradientTransform=\"translate(100.2702,99.61116)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2250\" x1=\"224.23996\" x2=\"-65.308502\" xlink:href=\"#linearGradient4671\" y1=\"144.75717\" y2=\"144.75717\"/>\n",
512 " <linearGradient gradientTransform=\"matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2255\" x1=\"224.23996\" x2=\"-65.308502\" xlink:href=\"#linearGradient4671\" y1=\"144.75717\" y2=\"144.75717\"/>\n",
513 " <linearGradient gradientTransform=\"matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient2258\" x1=\"172.94208\" x2=\"26.670298\" xlink:href=\"#linearGradient4689\" y1=\"76.176224\" y2=\"76.313133\"/>\n",
514 " <radialGradient cx=\"61.518883\" cy=\"132.28575\" fx=\"61.518883\" fy=\"132.28575\" gradientTransform=\"matrix(1,0,0,0.177966,0,108.7434)\" gradientUnits=\"userSpaceOnUse\" id=\"radialGradient2801\" r=\"29.036913\" xlink:href=\"#linearGradient2795\"/>\n",
515 " <linearGradient gradientTransform=\"matrix(0.562541,0,0,0.567972,-9.399749,-5.305317)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient1475\" x1=\"150.96111\" x2=\"112.03144\" xlink:href=\"#linearGradient4671\" y1=\"192.35176\" y2=\"137.27299\"/>\n",
516 " <linearGradient gradientTransform=\"matrix(0.562541,0,0,0.567972,-9.399749,-5.305317)\" gradientUnits=\"userSpaceOnUse\" id=\"linearGradient1478\" x1=\"26.648937\" x2=\"135.66525\" xlink:href=\"#linearGradient4689\" y1=\"20.603781\" y2=\"114.39767\"/>\n",
517 " <radialGradient cx=\"61.518883\" cy=\"132.28575\" fx=\"61.518883\" fy=\"132.28575\" gradientTransform=\"matrix(2.382716e-8,-0.296405,1.43676,4.683673e-7,-128.544,150.5202)\" gradientUnits=\"userSpaceOnUse\" id=\"radialGradient1480\" r=\"29.036913\" xlink:href=\"#linearGradient2795\"/>\n",
518 " </defs>\n",
519 " <g id=\"g2303\">\n",
520 " <path d=\"M 184.61344,61.929363 C 184.61344,47.367213 180.46118,39.891193 172.15666,39.481813 C 168.85239,39.325863 165.62611,39.852203 162.48754,41.070593 C 159.98254,41.967323 158.2963,42.854313 157.40931,43.751043 L 157.40931,78.509163 C 162.72147,81.842673 167.43907,83.392453 171.55234,83.148783 C 180.25649,82.573703 184.61344,75.507063 184.61344,61.929363 z M 194.85763,62.533683 C 194.85763,69.931723 193.12265,76.072393 189.63319,80.955683 C 185.7441,86.482283 180.35396,89.328433 173.46277,89.484393 C 168.26757,89.650093 162.91642,88.022323 157.40931,84.610843 L 157.40931,116.20116 L 148.50047,113.02361 L 148.50047,42.903043 C 149.96253,41.109583 151.84372,39.569543 154.12454,38.263433 C 159.42696,35.173603 165.86978,33.584823 173.45302,33.506853 L 173.57973,33.633563 C 180.50991,33.545833 185.85132,36.391993 189.60395,42.162263 C 193.10315,47.454933 194.85763,54.238913 194.85763,62.533683 z \" id=\"path46\" style=\"fill:#646464;fill-opacity:1\"/>\n",
521 " <path d=\"M 249.30487,83.265743 C 249.30487,93.188283 248.31067,100.05998 246.32227,103.88084 C 244.32411,107.7017 240.52275,110.75254 234.90842,113.02361 C 230.35653,114.81707 225.43425,115.79178 220.15133,115.95748 L 218.67952,110.34316 C 224.05016,109.61213 227.83204,108.88109 230.02513,108.15006 C 234.34309,106.688 237.30621,104.44617 238.93397,101.44406 C 240.24008,98.997543 240.88339,94.328693 240.88339,87.418003 L 240.88339,85.098203 C 234.79146,87.866373 228.40711,89.240713 221.73036,89.240713 C 217.34417,89.240713 213.47457,87.866373 210.14107,85.098203 C 206.39818,82.086343 204.52674,78.265483 204.52674,73.635623 L 204.52674,36.557693 L 213.43558,33.506853 L 213.43558,70.828453 C 213.43558,74.815013 214.7222,77.885353 217.29543,80.039463 C 219.86866,82.193563 223.20217,83.226753 227.2862,83.148783 C 231.37023,83.061053 235.74667,81.482023 240.39603,78.392203 L 240.39603,34.851953 L 249.30487,34.851953 L 249.30487,83.265743 z \" id=\"path48\" style=\"fill:#646464;fill-opacity:1\"/>\n",
522 " <path d=\"M 284.08249,88.997033 C 283.02006,89.084753 282.04535,89.123743 281.14862,89.123743 C 276.10937,89.123743 272.18129,87.924853 269.37413,85.517323 C 266.57671,83.109793 265.17314,79.786033 265.17314,75.546053 L 265.17314,40.456523 L 259.07146,40.456523 L 259.07146,34.851953 L 265.17314,34.851953 L 265.17314,19.968143 L 274.07223,16.800333 L 274.07223,34.851953 L 284.08249,34.851953 L 284.08249,40.456523 L 274.07223,40.456523 L 274.07223,75.302373 C 274.07223,78.645623 274.96896,81.014163 276.76243,82.398253 C 278.30247,83.538663 280.74899,84.191723 284.08249,84.357423 L 284.08249,88.997033 z \" id=\"path50\" style=\"fill:#646464;fill-opacity:1\"/>\n",
523 " <path d=\"M 338.02288,88.266003 L 329.11404,88.266003 L 329.11404,53.878273 C 329.11404,50.379063 328.29528,47.367213 326.66753,44.852463 C 324.78634,42.006313 322.17411,40.583233 318.82112,40.583233 C 314.73708,40.583233 309.6296,42.737343 303.4987,47.045563 L 303.4987,88.266003 L 294.58985,88.266003 L 294.58985,6.0687929 L 303.4987,3.2616329 L 303.4987,40.700203 C 309.191,36.557693 315.40963,34.481563 322.16436,34.481563 C 326.88196,34.481563 330.70282,36.070333 333.62694,39.238143 C 336.56082,42.405943 338.02288,46.353513 338.02288,51.071103 L 338.02288,88.266003 L 338.02288,88.266003 z \" id=\"path52\" style=\"fill:#646464;fill-opacity:1\"/>\n",
524 " <path d=\"M 385.37424,60.525783 C 385.37424,54.930953 384.31182,50.310833 382.19669,46.655673 C 379.68195,42.201253 375.77337,39.852203 370.49044,39.608523 C 360.72386,40.173863 355.85032,47.172273 355.85032,60.584263 C 355.85032,66.734683 356.86401,71.871393 358.91089,75.994413 C 361.52312,81.248093 365.44145,83.840823 370.66589,83.753103 C 380.47146,83.675123 385.37424,75.935933 385.37424,60.525783 z M 395.13109,60.584263 C 395.13109,68.547643 393.09395,75.175663 389.02941,80.468333 C 384.5555,86.394563 378.37584,89.367423 370.49044,89.367423 C 362.67328,89.367423 356.58135,86.394563 352.18541,80.468333 C 348.19885,75.175663 346.21044,68.547643 346.21044,60.584263 C 346.21044,53.098503 348.36455,46.801883 352.67276,41.674913 C 357.22466,36.236033 363.20937,33.506853 370.6074,33.506853 C 378.00545,33.506853 384.02914,36.236033 388.66877,41.674913 C 392.97697,46.801883 395.13109,53.098503 395.13109,60.584263 z \" id=\"path54\" style=\"fill:#646464;fill-opacity:1\"/>\n",
525 " <path d=\"M 446.20583,88.266003 L 437.29699,88.266003 L 437.29699,51.928853 C 437.29699,47.942293 436.0981,44.832973 433.70032,42.591133 C 431.30253,40.359053 428.10549,39.277123 424.11893,39.364853 C 419.8887,39.442833 415.86314,40.826913 412.04229,43.507363 L 412.04229,88.266003 L 403.13345,88.266003 L 403.13345,42.405943 C 408.26042,38.672813 412.97801,36.236033 417.28621,35.095623 C 421.35076,34.033193 424.93769,33.506853 428.02752,33.506853 C 430.14264,33.506853 432.13104,33.711543 434.00248,34.120913 C 437.50169,34.929923 440.34783,36.430973 442.54093,38.633823 C 444.98744,41.070593 446.20583,43.994723 446.20583,47.415943 L 446.20583,88.266003 z \" id=\"path56\" style=\"fill:#646464;fill-opacity:1\"/>\n",
526 " <path d=\"M 60.510156,6.3979729 C 55.926503,6.4192712 51.549217,6.8101906 47.697656,7.4917229 C 36.35144,9.4962267 34.291407,13.691825 34.291406,21.429223 L 34.291406,31.647973 L 61.103906,31.647973 L 61.103906,35.054223 L 34.291406,35.054223 L 24.228906,35.054223 C 16.436447,35.054223 9.6131468,39.73794 7.4789058,48.647973 C 5.0170858,58.860939 4.9078907,65.233996 7.4789058,75.897973 C 9.3848341,83.835825 13.936449,89.491721 21.728906,89.491723 L 30.947656,89.491723 L 30.947656,77.241723 C 30.947656,68.391821 38.6048,60.585475 47.697656,60.585473 L 74.478906,60.585473 C 81.933857,60.585473 87.885159,54.447309 87.885156,46.960473 L 87.885156,21.429223 C 87.885156,14.162884 81.755176,8.7044455 74.478906,7.4917229 C 69.872919,6.7249976 65.093809,6.3766746 60.510156,6.3979729 z M 46.010156,14.616723 C 48.779703,14.616723 51.041406,16.915369 51.041406,19.741723 C 51.041404,22.558059 48.779703,24.835473 46.010156,24.835473 C 43.23068,24.835472 40.978906,22.558058 40.978906,19.741723 C 40.978905,16.91537 43.23068,14.616723 46.010156,14.616723 z \" id=\"path1948\" style=\"fill:url(#linearGradient1478);fill-opacity:1\"/>\n",
527 " <path d=\"M 91.228906,35.054223 L 91.228906,46.960473 C 91.228906,56.191228 83.403011,63.960472 74.478906,63.960473 L 47.697656,63.960473 C 40.361823,63.960473 34.291407,70.238956 34.291406,77.585473 L 34.291406,103.11672 C 34.291406,110.38306 40.609994,114.65704 47.697656,116.74172 C 56.184987,119.23733 64.323893,119.68835 74.478906,116.74172 C 81.229061,114.78733 87.885159,110.85411 87.885156,103.11672 L 87.885156,92.897973 L 61.103906,92.897973 L 61.103906,89.491723 L 87.885156,89.491723 L 101.29141,89.491723 C 109.08387,89.491723 111.98766,84.056315 114.69765,75.897973 C 117.49698,67.499087 117.37787,59.422197 114.69765,48.647973 C 112.77187,40.890532 109.09378,35.054223 101.29141,35.054223 L 91.228906,35.054223 z M 76.166406,99.710473 C 78.945884,99.710476 81.197656,101.98789 81.197656,104.80422 C 81.197654,107.63057 78.945881,109.92922 76.166406,109.92922 C 73.396856,109.92922 71.135156,107.63057 71.135156,104.80422 C 71.135158,101.98789 73.396853,99.710473 76.166406,99.710473 z \" id=\"path1950\" style=\"fill:url(#linearGradient1475);fill-opacity:1\"/>\n",
528 " <path d=\"M 463.5544,26.909383 L 465.11635,26.909383 L 465.11635,17.113143 L 468.81648,17.113143 L 468.81648,15.945483 L 459.85427,15.945483 L 459.85427,17.113143 L 463.5544,17.113143 L 463.5544,26.909383 M 470.20142,26.909383 L 471.53589,26.909383 L 471.53589,17.962353 L 474.4323,26.908259 L 475.91799,26.908259 L 478.93615,17.992683 L 478.93615,26.909383 L 480.39194,26.909383 L 480.39194,15.945483 L 478.46605,15.945483 L 475.16774,25.33834 L 472.35477,15.945483 L 470.20142,15.945483 L 470.20142,26.909383\" id=\"text3004\" style=\"font-size:15.16445827px;font-style:normal;font-weight:normal;line-height:125%;fill:#646464;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans\"/>\n",
529 " <path d=\"M 110.46717 132.28575 A 48.948284 8.6066771 0 1 1 12.570599,132.28575 A 48.948284 8.6066771 0 1 1 110.46717 132.28575 z\" id=\"path1894\" style=\"opacity:0.44382019;fill:url(#radialGradient1480);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:20;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1\" transform=\"matrix(0.73406,0,0,0.809524,16.24958,27.00935)\"/>\n",
530 " </g>\n",
475 531 "</svg>"
476 532 ],
477 533 "text": [
478 "&lt;IPython.core.display.SVG at 0x41d4910&gt;"
534 "<IPython.core.display.SVG at 0x1060e78d0>"
479 535 ]
480 536 }
481 537 ],
482 538 "prompt_number": 3
483 539 },
484 540 {
485 541 "cell_type": "markdown",
542 "metadata": {},
486 543 "source": [
487 544 "#### Embedded vs Non-embedded Images"
488 545 ]
489 546 },
490 547 {
491 548 "cell_type": "markdown",
549 "metadata": {},
492 550 "source": [
493 "As of IPython 0.13, images are embedded by default for compatibility with QtConsole, and the ability to still be displayed offline.",
494 "",
551 "As of IPython 0.13, images are embedded by default for compatibility with QtConsole, and the ability to still be displayed offline.\n",
552 "\n",
495 553 "Let's look at the differences:"
496 554 ]
497 555 },
498 556 {
499 557 "cell_type": "code",
500 558 "collapsed": false,
501 559 "input": [
502 "# by default Image data are embedded",
503 "Embed = Image( 'http://www.google.fr/images/srpr/logo3w.png')",
504 "",
505 "# if kwarg `url` is given, the embedding is assumed to be false",
506 "SoftLinked = Image(url='http://www.google.fr/images/srpr/logo3w.png')",
507 "",
508 "# In each case, embed can be specified explicitly with the `embed` kwarg",
560 "# by default Image data are embedded\n",
561 "Embed = Image( 'http://www.google.fr/images/srpr/logo3w.png')\n",
562 "\n",
563 "# if kwarg `url` is given, the embedding is assumed to be false\n",
564 "SoftLinked = Image(url='http://www.google.fr/images/srpr/logo3w.png')\n",
565 "\n",
566 "# In each case, embed can be specified explicitly with the `embed` kwarg\n",
509 567 "# ForceEmbed = Image(url='http://www.google.fr/images/srpr/logo3w.png', embed=True)"
510 568 ],
511 569 "language": "python",
570 "metadata": {},
512 571 "outputs": [],
513 "prompt_number": 6
572 "prompt_number": 4
514 573 },
515 574 {
516 575 "cell_type": "markdown",
576 "metadata": {},
517 577 "source": [
518 "Today's Google doodle, (at the time I created this notebook). This should also work in the Qtconsole.",
578 "Today's Google doodle, (at the time I created this notebook). This should also work in the Qtconsole.\n",
519 579 "Drawback is that the saved notebook will be larger, but the image will still be present offline."
520 580 ]
521 581 },
522 582 {
523 583 "cell_type": "code",
524 584 "collapsed": false,
525 585 "input": [
526 586 "Embed"
527 587 ],
528 588 "language": "python",
589 "metadata": {},
529 590 "outputs": [
530 591 {
531 "jpeg": "/9j/2wBDAAMCAgICAgMCAgMFAwMDBQUEAwMEBQYFBQUFBQYIBgcHBwcGCAgJCgoKCQgMDAwMDAwO\nDg4ODhAQEBAQEBAQEBD/2wBDAQMEBAYGBgwICAwSDgwOEhQQEBAQFBEQEBAQEBEREBAQEBAQERAQ\nEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCADIAaoDAREAAhEBAxEB/8QAHQAAAQQDAQEA\nAAAAAAAAAAAAAAUGBwgDBAkBAv/EAE0QAAEDAwIEAwQGBgYIBQQDAAECAwQFBhEAEgcTITEIIkEU\nMlFhCRUjcYGRFkJyobHBM1JikrLRJCVDU4KiwuEXY3ODkxgmRKM0s8P/xAAUAQEAAAAAAAAAAAAA\nAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8A6p6A0BoDQGgNAaA0BoDQ\nGgNAaA0BoDQJdXqT0SbS4EfG+oPqbUr1S220t1RGf2caBJh8RbInVWVQYF2UmVUoLq48ynCZHMll\n5tW1SFtpc3JUD0IKdA4g9KwFcpKweoU2sHI/4gP46D32pI6ONuI/4CofmnOg9TMiqOA6nPwJwfyO\ngygg9RoPdAaA0BoDQGgNAaA0BoDQGgNAaA0BoDQGgNAaA0BoDQGgNAaA0BoDQGgNAaA0BoDQGgNA\naA0BoDQGgNAaA0BoDQGgbdVlMt3ZHfkK2sUqBKmPK/q71IQD/dSrQcObnvRq66xXa9PKXnZ0ydUS\neVlS/aHlPELKsdsjGOuNA+o3HPiHDvE/oRU6pbMCM2ynZTZUlpgLVlbvkSUN9Vq6DGEp8oOBnQTL\nZ/jU4+UZLjE26ly1M5PKqUKM8VIHQkq2pVj1T5skaCVaB9Ide/LZVWrVg1qIosMGTDU/GUuQtBKk\nndz0jqk4IGgkrhv457V4hXUbPa4f1xuqefCaUluegJR0K1qQpnYjPTcod9BNzvFqx6fn67qEugYL\naSurRH47IU4Mgc55vlHHYkLwD0zoFajcQrMuB5Ma37opVUeUAoMR5bDjpB7Ha24T+7QOHmyk++xu\nHxQsH/Ft0B7Wgf0iFo+9BI/NORoPpEqMs4S6kn4ZGfy0GXQGgNAaA0BoPkuNg7SoA/DI0AFpPYj8\n9B9aA0BoDQGgNAaA0BoDQGgNAaA0BoDQGgNAaA0BoDQGgNAaA0BoDQGgNAaA0BoDQeEgdzoIR8Q1\n2ItPhFxhvEObDAoblOiuJJBS+7GWlGCOueZITjQcSYNQNPSoRSXg2lQdQ83kJSE9SST1Hp20CrbF\nalclM9ZLBcUlQS2MoCcDYTu7Doe4xoHZNqrspLanZgIDraihLKHEpUQQFqURtOB0we/36Bfsu2Lz\nuzmybKpFTrMNhTrc1xiMn2dpITlQUfK2kdQpR6YB66B78OeMnEKw6xVbb4emDUVRX2fb221IbRKc\neUrY2H1JQXkthKkkhRQMdM9yD3vLxM0riNZBYU8ql3FAW6yt5CkctEo/ZPNBDqXDhSCvKkjbjsT0\nOgrjNqqnJym1t8iS+thUacge8UHuhQyRn+qFD5DQSlZN/canaw1Q7AuWp0eROKyt6DNfU3HaDgcc\nW42pfKQEoAHudScA5OgtZR/EJx0pbkWJFrP1gy0lDSzU4jTq3SnylSlNpbVk9+h0G1cP0gFcsKSI\n172vCntpUhDi4jr0dfn/AFilxLyQE5G7r92dAp2n9JLwhqyIrl12pWrZRKY9pTKAYkRggKKVHmNu\nNkpGO4SdBKls+Mzw1XQwl6n38zCKgCUVJp6KE5BIBXIaSjOB/X0EqUO9bZuVKVWzcFMrIWApPscp\np4lJ7H7Ja/4aBb50lPvsEj4oUD/HboD2xsf0iVt/tIVj8wCNB9Ikx3OjbiVH4AjOg0owi+xuy5iU\nqCVvKUtSQSEpWf5DQIbl+cPW/wCnmNNd/ebWO33J0G4m4rKcYEluewW1J3goWfd+OB10G0J9uFa2\nxMQFNBKnBzlDaFdQT19dBo1G77Co6oiatckOAZ6+VBEmotMl9z+o3zFjcr5DroFRmRTZBUItTDhT\n7wQ+hePv76DYTHUpIU3KcKT2OUEf4dB6I8r9WUT96En+Q0ByZo//ACAfvbH8iNB7snDs6g/egj/q\n0Hn+sR6tH8FD/PQe7qgO6Gj/AMSh/wBOg8Lk4f7BB+5z/NOgOfL9Y35OJ/njQHtMgd4q/wAFIP8A\n1aA9rX6x3R+AP8DoPfbB6suj/wBsn+Gg89vYHvJWPvbX/loD6wieqyPvSofy0HqZ8NZCUvJyewzo\nM+RoAqSnqo4+/QfBkMDu4kfiNB8+1xv96k/cc6Dz2xjsCT9yVH+Wg99qT6IWf+A6Dz2hR7MrP4Af\nxOg95z57MH8VJH89B5zJR7Mgfev/ACGgFKlgEkNpA7kqP+Q0CVUbsoFIClVeuU+CE+8ZElpoDPx3\nrToGxUOPPBWl5+suJVuRikZKV1eAlX90vZ0CDP8AFh4bKaCZvFKipAGTy5rLnT4+TdoGVX/pDPBj\nbja11DipFeUg4LcOPNlLOfgI8dedAyKh9K94J4WeRc9UqGP9xSJ6c/8AzIa0DVq30xnhJgpPsFKu\nepq9A3T4yEn8X5qD+7QNKofTW8DWgfqnhzXpJ/V9pdgMZ/uuvaBc8RXiBTf/ANH1G4pCjGgJ4o1t\nluNSHnhJW3HbmuLQVKQlsK3IghXbsdBzvivw+UlaAEt4IU4Sk9VHoMdgDg/LB0CgHKYW3AhWzmJU\ntSGlBKSB1APxOcfy0EhcIOH1Cu6dLnXXV0Ui2aehLk/2RxKarMByQywjKsZ67llKgn0Gemgk+tcQ\nbVuyhm2KG49Ytk0qoIYcteE0pqXPjgI5suQ8tfPcSojYsJTzf1h0G3QRdW7qtil1t9rhlQG4JdU7\nEo89wOPNqjKTu2ONlQUpaFkFo71BIKkq9MAq8J+GcKj0aReN90yRUp8pDT06LBBZW6/IWG0NtFCV\nk4BI2gblH1HQ6CbmvDfYHFzhzTOJ3CtlVNEuKqcu3FqWptRQ8ppDQM5xTjbhKVjepQQpQ9AegMp+\nl1Kzredq7KZkCmR1+xyWJlJMOTGeUOatB2qO8ADzONqcbQOp26DNSarWJMVmTJeeiIcGApSSQnaA\nSUkOKyCDkHQR9WJV5Sas4Wi7U6e86pEpxtC30tJdSoNrebXghO/aPh89BsLAaqTEC5osj2cw1Nvs\nKbKdzTqQOahDmAU4HTYrHpoEhlM+Qn2mK0iNAbTvocCQDJMxaE4Q66QlQClqz5RtT0A7A5BgTLYu\nGnQ3rwnurYlkJPNbJbcadUoKDQUjI3AK3lQAwD00Eu2Rxb41WTTW6dbPEGqth5smnBM597O0blJU\n08stJJUQhG/BKj6nQTHSvG94l7SqaqPUqsKq6pht+AzVaIHkrSoEqU49AEfaAOuCo9u+gkajfSXV\nuEI7N8WJHqDjqAVKpMlTZJyEnahwPg4JwfOOvTQWwtm+2L14FRL+p0J2kNViIqUzBklCnmA68RtX\nyyU5+7QQLVZUYurQ6retSiAvdgZPXtjQOw205SqM1JpU1yNMdbQuTGaWladq+wUfeSD8T00ClAvL\n6rbEa5YLkB14JQmSoKW04E/FwqIP4aCsHi1mUxPGHgkzTSl6PIrJkustHf1S8ykYT6HroLG2dUZK\n59cDEgR3lrSlKljCCA6VFKj3GRoJQm3vRWLYkMR5CRIQ0WEReqdysFKtmAenXQRzbDj1OGZTijGW\nppDuXVE5WraMYxjGgUZ94Unhzc7Mi5K+4xB2qeRHDpddVgdEcsEqOT2yNBvs+K7hc77709n9qIT/\nAIVnQLlA8QvDy5qgzSaLMlSZkg4ajpgvlRP4JOAPUnoNBIftzwHfr92gx/Wb+7Awfw0H0Km+O4B/\nDQAqzmcFA/foBVZKRnl5/HQfKK+hSsFr8c/9tBmVWGkjJbP4EaDxNciqGSlQ/Af56DOqU3IgvPtZ\nwErAz0OQNB7sP/6saBPqb7jddpbGctPl5LiD1BIbUofvGg5/+Jr6V+qeH/jRdXB2DwvYqjltPtx0\n1V+sKZEgOx25CV8lMNW3o523n79BB1Q+m34zuE/VHDy34w/VEh6dIx9+x1nQNWp/TOeKuZkQKNa8\nAHty6fNcUPxdmqH7tA0qj9LT405pJjXHTYAPpHosJWPu56HdA0at9JR42qwoqf4nSo4P6kSDTYwH\n3cqMk/v0DWqHjg8XlTz7TxcuJO7uGKi7HH/6CjQIkTxDcaa5Um3bt4mXVNbO4rSa5PV1TgjJW8QB\n8emgzvcSkzN658ip1NhKVBEidVJD6SXOhSkKWCVKPcEjQIFQu2OmOiWukRNryz7O8Ue0KUlPUqJf\n3YwceXpoMTt01+O4zFQ6Gudn7aG2lkNj4AJAAKR1UFf99Am1GpTpZKpslyVTk4AlhR3LPyP9Yn9U\n9h+egSJQcDPPfw429kRSD0GO5HqAO2DoNDQAGeg0Af4aDqL46pCOFHhj8N3BlIC3YdIROqUdST/T\nMQY7W9SQR3dfc/foKaMP06dEbcZbGG1bnkqSsbcdAfLhIyf++g15NyU1l1lk8zDZLbilMBSQpQ6d\nQpOdA7+HFy2FDvGmVbiTAmVGhQStcmLFkLiyS4RtbUHWNrgSCfMlKvMBgY0D/uPiD4W71SpizYVV\ntic+4nYyzMXJj88L3pWn2tTqgNw3ZCh17jQYuHtJt+3L0k1Wu1tl6miK3L5kgBKvaFvpZ3bUjHUH\nKikfP10DprPjFtl/h+xZ0O1XULt6ezIqE6I6kPyeRIK+YnKQEk5GB1AGBoIwieLfiI48w3RqtCsO\nKwHBIjIiF98slxQ8yHCpDysY8pSnr2GglWyvEv4wL4i1Sj8K5c2txIEdaFwqhRaKXpKFqALIjoQh\nwNqQSTtUST2TgaCBWLivuHPmUCbV3aLNpbxZNHktLQmKlQCg1h11LuE+7hSSQn1OgfNqWzfF2U+Z\nU5rT1TjMFhCosN55DbzTq0KS8pGEK6YO1K0n4jQY2eIj1lXy1Z9Zrc5VFpjCRCpFSS66mDkklEdL\n6Btb243Ap7+mgcqqc3WI6mqOlTlPlrBS+pmStJS46kJRGXkdAACVe4np1OgcrdSt6z3WZC1MRZ/K\nQ4oKbXLioSChIQrKV+0Kyz5lkpG4ZGUjdoGxdt/2zOpBfjTFw4zry4jkmCy066VqQdrrigUpV18w\nG5IBVlQ9dA1ptKrNdpwfhVV76nbUtEBEmW8tU94nuhbWWEAA+VAIztProN+YiTFq0enhlmDKcQTK\niNo9mb2rSGyOUVr95I3lQKSd3bQdV+HDz0bweWc89tS7IpFPdcDaShAL5DpCUnJA69M6CG33Oc6F\nrOEhWVKzjHXQSXLQ2bhMiOpwIcgtIUodUEkYwV5z0+Ggwou6W3OlUeqsB+G002lIQFKUnPlKju8p\n76CoXiXn0+V4gOC7dsRjGmma468HDtGEy2wnyE7RlIJ6YzoLUzqrJZptVqlvvtR0vOj2xglCnBsO\n3ISeoyToPaKxUKlSlzVyOa4/5EdACgjzdFDscDQZ5UuRCpZYmK2vKU2VE9DnOdA4Xbnoq2YMl+hR\nahJeSQZElptQKkJ25ypJJ+46Cq76t77qwANy1KwBgdST0A0FnfCjRoTEGtVpLQ9pPs0YOkDIQUlx\nQB+ZxnQTpIkbFkD10HwhR3A50GcjAzoMSSc6D5UrcSPTQa4O05xoMqllSDoMSxtb6HJ0CzBJNEWT\n+sF/v6aBT2/4caBFr55dVor3wkbP76FJ/noOM/0lNCgu+L/iJUI0aMx7JTaA5UHpjyPtVSWY6Qpl\nhXmcXhITgHpjONBS2+6ZQKXdE+Da3tqqawpIbVUmPZ5GSMnc2PdB7jPXGgb2gNAaA0GRglLidqQs\nqONh7HPTHTQL0GE/OmRqbRWFTWnSA5DbQp115w9CEJSApRz5UFOgc1H4c8QqlLqM2lW3NeZgIKpN\nPfjqZ5AQkkBQeA6pSCU7cqUew76Bbo/ATiAunJnLXT4ESqhSnBVKlHaVyG1J3q2pWSSCpPX3iD5Q\nRnQZUcHreps9FKrl6wk0pxkyXJFNZdnlTxCNjagQzhQ5hBIOU7FeU9Mgr0ThXwxmJcprEi4LnmA8\n91yjQkpjxKe0Spbns7yC44oox5tyEoO4ncMZBOu3ha+ngnRuJdv8NZtPpBqDlOF5uVVMpFQk8wJ5\nK4ONyUpKSlC0JRuJ65OgZF2WbczcO25rdOhPN12Auo0/6kw+vlNuKacbkIbKlIdaUghSVDI75OdB\nscIrSTe3ECyrTgvbpVxVun0V6n8tR3tS5LTZXuIKVJ69QTkHrjQdGPpNqBV73490qHSZDUONbdHi\nQg1LPIjrcfcdknY4sBGdqkjv6aCnlU4V3DaqYkuvksU6WFokvQnWnw4s5KQhxBUkZ+BGgzKsGN9X\nO1yG2pyFHdcQmXJUpkgtK2qQU7e6cpPXoQdA57It6kW7PotVr0uM8zUOetTfMSpSUkhILZHrtKvu\n0DFuDhXSqtclVegtOUttuQ4IshnpzOoKVAZx8zgd9Awqm/cNOmmmzpDklUAqjNzI+VlSMkAKQe4O\nPz0FheEfhhvx+23eIVyw1UgzGVuQqfLdaSXEBBJUtB3LCFjqMjQRHf3BOu0ZFQrFTZUG0oQuE1Gw\n602pSwnY6tRztKeo747dtBt8NqnxQolUZXQK/wDUEthLLcZ77XBBSVpIcSTjAHbt8tBbfhhc83xI\n15rhH4hYVNZvORHmQ7S4nRdkeS6600FIiVBspSl9CwvahXvJPb5ghwZla4RVVVtTYqotajyUQKw0\nQW0tsxFpK+h6HdgYIODnIOgxcXeKdt162kocpTdSdNVU8hZYbcdXGaYDSkpKkqykrIO09CR89Aza\nzxIuq1orFAti4pxrMrlsyDKUQ5H38oN+RxBwgA42hPYeug3qnFs+gQ1V+44k659rjJRV1vOw/alY\nDAcQyGtyEowsHf0CgAB1yQjWSsxK45VHFNz2VJ5LqeUwUGORjIZSEALSjsrvn4aBTaat2JSHlUF5\n9MVEgyPaXwoFlfX7JDWChKlNknO85I740A0/RqbQJY57M2VK2LjOsjMppZJ5SVKdADYJ6q79x3xo\nOukaM5SvCnYkB5BQ43RqE242gg4UISCRk9+o0ECSanKirUG2WSVdPtElRJzoJZdr1xJpkaFWqIy8\nW0IUl2C4pp0bk5G5lXvd84B0GOHDtyU8ZkWpJ+s3EgSYbyuQTyz+qh0AjPw66ChfjGfqVreJvh5R\n6iPZmKY0zNg1KNEXIDyn5ZWSlLZC1lBSEkA9PTQXYn0EKoAqCVh3nxnpR3IW0UkrTtO1XmBOex66\nBYtGiPKgGmPLRuhoFRUohRUpCOpwAemB8tB8XG/Fqq5055pxtIQgwHUo6OJSnI3ebIP4aDSok1yR\nRZkR2G66iOhUll5KclkpSckgZO0jvoK95yM/HroLCcFatVqZSH4tPkBhqQ+1zTjrkISP56CxEJbc\nqOlpbyX5LQHtCk/E9j06ddBs8nZ2/LQClbR89B8BSArp+OgxE7VHHXOg11KKc6D7ZUVHQZlIKvLj\nQLLKCijhJ9en5rxoFLQIVzjaqlvf1JjH71gfz0HK36SquQ7Z8V2ZsOaifUKTRX7XqCVhNPTUI8hz\nDjiXElta29mdpCs5T29Qq5Y1ekxLxvatV6uM1GtVirv0efRatDXLqVSE1p5l5wBKUNtgKV33JKf7\nI66CF+Ilm060qlGbpVYh1Zuaz7UtmAtTnse4/wBE4olXUZ6HOfiBoGyqBITJETylwpSsYWkpwpAW\nPNnHY9fhoMtMYgPupbl89xxTjSWo8dKSp1KlYWAonorGNvlPX94Sdws4WXNXLhvGNC4dy7uctSJL\nlVOlLlGMumstFSVOvcvapa2/RA7qB6HtoHJTqddcbh9QLwp9kUGPaEeordNQmRUyZheYyrkzZKuW\n44nqotMZyvHUKAGgdlz3bf8AULkDYqcZ7nhMSFV4ENMZtTEVLTqHWQGUSG0oCBtdwk+VXnPmOgdT\nHDu4kXK9bnFe4qiqOmNHl02VTpaXmZZccERLTanlHcvmIS2nptJHvDA0Dcp9n8MX7XhouGqqodeI\neU+JDjjqdjS1JSsoaSUjO0oDYUDnruxoPuo2vZtAqFMuGjV2JTTRauG3V+0PuyX221qUmW2pIeQ2\n0C3hH2ZXk+cYAJBep/GCPaVVua6rVu+RBr1fU2uszFIbmOuoS0tCiw9EQlbZQpSQlZIQrBKhnsCb\nZ/EDi3EXavDOzbWqtxQIaZNzQC7AfblTZDTwcZnNe1e7HZWQsYVy+Yd5SVaCM5PEejVDxA3JcVi2\nhKpiLrfehQ6G/UEpXEmTMJkFTrbSEY55U4nCU8roQfLoJJ8A/CSoL8d1iW3WpTE8UKVPrD8iG97Q\nwtdOivOocbc/WSXkowvsr0Ogthxz8QHFukccL3FtXdIi0dipOxI9NWGpUVIigR/Ky+lxACigk4A0\nDSf4+XbXG8XXbdrXHhOFPTrepylqSoYOFx0sr9euD00GhHuy1mpLck2exR3EqcLbtBqlVgLBeCQr\nyvPyUD3B027RjtoF5qJT77j1I0GnlFXgxXJbU2seyTg0lvqXC41HZeBSCSnGM+ugjSg8J734jV58\n8PaO+3SFoSipzQ9yYDCsYDpcW2QVBI9xA3HGgeNI8IEeHXYcK0IjlbrG1PtNWlND/RsdVLbDqVsg\nE9cFvd282gf7vAnhvYmKvxVr0q4q3GbVI+rUOhMRICiEjLeHD1G0ZISMY9dBF7dWk8frvkWhUlN0\nezbUgKqVxNxVrdEKJuS0hsOLUr7Z5eEJJPlTvPpoEHh1wtkruGVcNCjiZbRmTWDIQ4haKa/EyhLU\ntwqw0VtYWhTm3d5semgWuLFk3Pwy4hU1ridacsmI8zV6BLElxiE62MuLCX43RSwlCBjduR6jQbVm\nXrTuMl9VutPc6msOq5UP22QZEkMbPIZLinE7loSrG7ODgZToM188PnrA4c1W4KXXKZWUwSp1vYhZ\nbS8wOYNzfopaEkZSfe6HpoK3XLQGjbP1xMdU7UJjbcl7dnpz1q3JKjklRGDk/HQff1jdD9Mhyq0V\n1CA1FbjRUBxWWGEqUGgUJJTsCh0G3GgT0ojMSHYoa5pYSsuB8BaSCoIyFDPXB6HQKVLlsx7blwIb\nDakvrDzjrilu8ooJ2lA9OnQ5B0CImTBjJnfWUJ991lAcZcbf5aGiQc7wUKKxtB6Ap+Og7V3gRTfD\n9Z0PAQUQaUgJGQBy4I6dfhjQVsluthQB861nIJGcYPzOgkmJWC3W0u7A5UI8Xc6jlrbbUlKQreQd\nyVEAY9NAtTpzhfZeq8VibCnpQG4/k3tPLBOClQV07dtBzt8SzXEemeMujwKBOMOatVPXbTbzSA1T\nw64UgNhSgCnekqySM50HTSIxUJlGpzFxv0+rVMtJalvtMrgF2QhO1wpQ249jr2BzoNz9H4apK3H4\n8qnpMUxVBA9pbUfjub84H4aDLRLEZciNRnZKJ7XKUl5pkkrbcUCAoJXhWBntoEydR2bEtCuv1OWx\nTlpjPBl+S42zzU7FJ2p5hBOSQMD10FPqfVqRUlKZps6PLcaH2rbDzbqkYO07ggkjroLIcLIH/wBu\nGWrABfWAfXypSNBM1nvQ40yVyHPspAQUKJx9p6p+/Ogd6grbk6DFsUrqR30Hq2cde2gwchSldtB8\nuQVZzjQDMZYUcDQI3EPiRYPCC1n714k1hmi0qOoNh57KlvOqBKWmW0ArcWcHCUgn8NArcP79t/ij\nw7ot/wBqc40iuttyaeZLfKeLSndoKkZOM4zjOgd+gQrwOymNP/7p9hf5OJOgpN9JfYtm3kWm7icj\nSa4bfmtWfBeJSYkgOKkS6g4odghppKEdD5joOT9tVX2KxJKRTX/rIyorzN2RtwbhuOOK3Nyy6lIK\niBlKgsAAnPXQO65qfalr3ZXVNUIvQ6JRoMCqUiVOZS2t2ewpS5CHmS6ffLa07O5O099BFNoXg9Y7\ndUj/AFdDqCK3GTCnNy2it5phL6HlttryC2XS2ELUnzbCQCknOgeNjRrLVZLt2RqlEoN10GaJ0eU5\nJdbkKcBU6w3HjpUorbTy/MtIyhRTk482gkfhrxGnQrGancI7cqFdvhESszOI9zU2LLTJhMzJIcZf\nLjLhQ4Gkb/fSArcR02hWgSrKs7iTcs+i2lw4subU69XWX5luLYqEeQ/FD/Ld50iMpK2YqQNy0KUl\ntexWd5xnQSrdVvcZ6TQWkUWXQJV5OVVNNqVmUlpcmZCfgpegIlS5QDkRBUkrTtW6lS0rCsE9gTbZ\n8IXG+otOz7wuOFbCIk2LTZsVpv2l9hLq2i2dqyhAQC4hXQkDOToFRHhc4P0hFSgXrxcdffaqTERE\naLUY7LUqC4thYkBO1fRAk5IPYg47aDYi+Hnws0yaup0PiE8qZCqFPXRTLlR3WXWSuKpbrjb7BbKE\nF47kLByEnPY6CaKjQKTeAuqpUqqWVeblT9gpsUTaDDbkyS80y0l1hdMdiltIMlIWrb3GSFY0CTe9\nq1LhxJuC/qBSKvbNTtelpoNJn29VE3HSFSqnlaYyo9V5UptCi82sJZdcwog4V7ugjHi7wpvG5+D1\ntcK7dRSatSOHUJ6fWLwoLUlbkZWHVoNUgFlM6O6rYUBS2yncpSiraRgH39DvZ1OVxCurjBUJiZq6\nJQJER0LWSuEp2U2oBe89NzTKiDjGM9sHQJFcocuv1WXWFfVLsiXIfkvufWqdzi33FOnqpY/rdtAk\nv25UWHVJU02tsYLRTNbcGDjPRJVnroNVhhTS9j7GBnyoK8oOP8h8tBYrw8UaE3bFzVepJDEeTy4e\nXFBlEiMlKlPIbUohJSSrZ0zoJmprzFWprCHJxjw4qSqm05poMQ2iU7mmmiY7TWVE9QtCunz66CFL\ns8TMq0Kbth27FqMNvmsz24SA07DqPuJCwo52KUcgjsF4BO3KgjJ9HFTxGXciLWUm2aasOt1B2FHc\nXPWh7qWU7dqUpCUj7RePU40D14P8LZvAqsXJR6D7NeFoXHBXHuah1N5hUsrbK1N5WWwFpWpWAkrS\nUKO4eo0EcP2AJdTfqtsXp+gMiyEyLqZsK/ogFPLTAQsPxp0dbrU1LToRgKaK1JSAokHqG1SfHtxa\nptGapniGZonFPh5cBkR6hIDDUFx0KHmEWQw02hL7YP8ARuoQ4PinvoHdbfgw4W8c7ba4keFDiCpV\nL2qbn0Sa4tqqxCfMW31JUresJ9VJG4dQo6CFOIXD6p8PYNUtCkVD9KIdQDBXUolQZmRwVK3uNkIJ\nIcSUAE9emO2giy4frJ9uPTZMF6I0hzcsKU4tKR73lSs4B6AdPQaDdZqa4/sq2J4ZMcNBLTrGxP2Q\nSpPmQfinOgwyK08qhz0IcbefAbZS4hYKsbtyuhCVd16BRp1MacpMZiqRHmAEttl0tLAS2dp3bkg9\nPMrrn4aDTTSxWKj7NTQmSxJfnu8lchtoDlBTUYFSwokAIBI/WzjIzoO0HHBhUThzQoCAEloNoCOw\nGyPtxoKsvQkCWhlTydoUkqdVnCcnrn7j8NBKUShVRi4JFThSGJUVuEpTT6XUlClBoYGwkKzn0xoE\nm5KtHsWW5e12rYp1Fp7KJM+pObm2WGuWgZUeoPUgAAZJ6d9BzkvLirROIvibXxFplRXUKbHlRUU4\nKLheXGibfcQ4EqIJyQO+g6tUeVa1+2vTb4s+e1LhVZ1MiHJRkpCFIGR0wUlKgQc9fjoFllqrUNuo\nSVzSzFiKMiY8Xhy0IT1UpRXgBOO/XQYrV8QXCW6bxh2FEuGHU6xVWEzaU00nmMPs7lJUGnkbkFY2\nk7e4Ggo/9J7bd1TeM9EmSHZLtDVT240OnoWXm2ChaiVJaBzhalZUSO46HQVZ4fKrFjXHDqscOp9l\nkJS8whSmTtJyEu7vJtVjBSoaDsLwVpCKrwnp1TSypsyHpLnLWMLSFKGEqHcEaB9RLaSJkMrRtbQ6\ngkEYH5/foHoqLnodB77OOmgFRmyO/wB+g8RHA0H2Y4Og8RHCV9B30HK76S/xM2TxYqtN4O2HGdnP\nWdUZDtRr24JjrkpaVHdjsI7rCD3cJAyMJyOugv14S4LlP8LXCuG8nav6kpa1p7YLjaXD/HQTPoEO\n805t6Ur+oAr+6c6CiH0pVak0NhObk/R2LXLWqDEdDLeZFUnRJ8ZTMNLoIUhCkyVLX3yE40FQZHhW\nvLh5a9rsXXOlzrSq0Zc+oLpwGIUkpUZDTqchSm0EEqTkZKdwzoK7MW3Y9Sq8alUmY64JtTm+0w2X\nJS2mqbE2ojoWlppxZL6x5VjO1PcDQMy6afT4lbqUWmsyEL9ueYjtyGwlIYJ8nVw7ws57EdBoHXcr\nd2WtY6aMqhtRodRUiDKqTbUeQ24/DVjMWQ3uUlTnmS8UnC8bckDGgujwnp9Cp/C+BeNlUx/hjbYg\n0un3iuG6XLjut5JK1po8ZQdS8sbXFJkZ5akKWgjKcoB4TY0Ck2Y3byHE2BYFUIqtiUKiqNQqdWkq\nwhLFTlxD7ZKWpKiA02dpaKkhTmzoEl2dwK4mXTAkx6ZSYnCS06kIzztOfaRPq5cYQMOssJKWYiyQ\nlRKlKVubCijqRoH/ABfD9wJpL5l3gmXfdVUrc7Jrsp2cCv5Rm+VFSB2A5fQYHpoHpS3bHtplLFt2\nXCprKOifZoMWKMf+20NAqi+aM8OXOpP2Z6EbGnU4/ZIGgxPWBwK4iEt1S1aNOfIIPNp7DEoZ74cQ\nlDn4hWgbNZ8I9uJRzuGdy1K03Wnm5bNMkuKrFHMlnKmlrizFcwbVYI2ujqlPQhIGgiTiJw2q9AlK\nTxno/wBTt1WeXKlxZt559xhqGtOwRdzfLdhoUna2Q6OVsDhJUpeNA5+B/DkWpwm488QaV7LS/wBN\n2I1LpEinwY8BYjRaeYzEl6PGwyh9wyytQQlHpuSlW7QVOleHu7WUJRCvJ5spUdxdabUVgoHQISRk\n5GfL1Px0DlnWVR+DV5021eLTkq5KLMixp1DuKmIVSUVVEltLrjK1oK/MkqwElW4YHbJ0CrxV4jcK\n3KcKdw1s1FAhAAy6lNffnVGQvBHKQp9xwIQPiOpxnp20EKxrwr911tq3oc+FDfCQITdWmBoKSpRA\nS2XlBPU+g0E4teHvitSLQk3hUFRAuCEvqaiy2UuONkZK2djyyop+A6n00DbtS/ZFrVM1p6h0q4pH\nKS00K1D9pSjYrchYAUkKUk+6VhWPTQTGi7qRdVovVmPVEQUL6VoPvt01pp1aSS1hSgAk9wlBGR6n\nQRzE4xcG4lXi2/ZjrM6a0iQ/NuaqRZCLfiojNk5CUrQ5IWpY2pU4W2T33K91QQjxs8Tjt/UiLQbg\nq867J1MmqlxqtRoMKDTmUFCklqK1IitvbUgkEElDg7jQRsqrrq7Uhq1/qtyDUIqVSW2ojsZcwb8I\nEiMFrYWsODBSUoUj3kKHvaD54c8XuKHCbidQbptiO5EcpCkrFLh7zHmstOfaIeG4KVn3UqyrAPYg\nnIWGpdFpC50us2w801btdkyKlSSslZYZfWpS23GySea2vc0pI6ZR8MaCT+IHh/t7hzw5s697jedm\nTrrU9IcaZPLaEbktOxm9qkhSVqClFSuox0+ZBsWP4e7X4z3DRLUolNFMkVB5RqDypXMU1GbO9xxB\nDeMhsHAP62NAzZHhNrdcu+/LZtOGp+DZDdUlyagVpe58aEpYZQlLeN7j23A2jGck4GgiGtxqtbcR\nlsPz2jDyWIjpWkAqShPlQvOOiE/LpoFG06fTZS4710T1Lmrcaap9MZSl11ai4lfMabSlSfKtZK9+\nElIPbGg7D+IlOaFS2QMgLfJGB+qhI/noKvNQn5issoxg7cfjoJkeTW6dBjsVWK08l9rlN8xCemUY\n7pJORoGB43eF6L88M020KO66xOaFPq3s0IuKQ61EcCnQ4hR2lKUkrx3ynpoKveGW1rUpSGLVl2nQ\nqxRZLMv62q9RgOLntIixXJSnkrQMoUEo8riVeU40DJ4PeL64+DPCFfCK0KUj/Wkqo1A3BOWr2mL7\nURyxHYRhCVBCcncVDccjQJ/E3xGcVZXC6n8P7kuN+t0uru+2NrU9tmBLYG6NKeH2jjaVqJSFdDj5\naBb8B94PWzxUhw6W23Jf2yJTMoFCVMKLSkuEqeAPVJIwk+b4HroLN+J2t1a/L1oFTmUoU+SzCMdu\nQ8StialpZcVtWkABY3Z6dfw0EM1fgbT37je4izaiyIFPgLrVQpr4WsOoijYUIDfmJWspSkeXHU56\naC1ETxKxbO8MVuV+z6chNcrftEemtVl1TVPj1FD2ZDDz6EkhSEK3tZSA58eh0FZoVx+L7jPfNNg3\nrerdFiQpTUqDDD7caE+pJ3JWyuE2tCynv5ux740FyrP8cPAaTe8TgvcNyui7YK0Umo1aTDMWnyas\nz9i8hDmSElToITkBJ9DoLGO7twx2+X8dAmzJEuO+S0glJx1PRPz76DdgOvupPMSMA909R+JGgyCd\nEWrahe4/LQZErBGcYx8dBR7xw+ErgDTeHN38aqTTfqC8FKQ9FcjSltR6hPkPJ3NezLVy+Y8Cr3AD\nu66C1PBGGYHBHhxCUCFN0SjBQIwQfYW1HI+/QSFoEm6m+Zb85H/lK/hoKJfSjWjWbzj8A41u0hut\nVKbcIhx4K3OUt8uoYkcpKyCEpUGTuVjoPQ6DZqPEGvCq3zapFMjrpESZOqNHcSt+RDiyIpkO7kL7\nYJUEkD56Ck9Z4Ks8D/DtQ77q6G3rjvyWyu0ZrSVRJtKmzUIWQp1pYccQ02CcHKM+mdBHHGTg7QKP\nxtXwXtWZIq7iXKfKkVqTOQplboozUqogFwJQVqdUSCQMAJRoNZmo0GtP21whqMarCiS6u5Orn1XH\nSuSGojak8qCHCUpT3K0uIKWSN2VJ6aC91Mh33XLpt/BauniYYUVVkzoLzH1NTLdwEqbltsoShphO\nEla0pBfX52/OA0Astws4D2jwqS/dNVcFbux9LjlTueS2lBb5qi441CZHkjMlSidqOqySpZUToMtY\nr1TuSoNUmlpKG31bGGQcbgO61kegHXQPq37Rp9CYSUpD0kj7WSoAqJ+CR6DQLSo7asoUnck/qqAP\nTQNS7LPpnsr9QjJER5kFSkpHlWfhtHYn5aBv2faMmo1FuqVNpbEWIQplKgULecHUfPaP36CVGjkd\n9BuN8lxtbL6UuNOpKHWlgKQtChhSVJOQQR3B0EMXtRrfsPw+vUy1qeKdTq3Wn5XsEQbUIQ7KceUU\nJOQlJ5YOB0Gemgg96t8N6Q3vrq5TiUdQltQKQR197bjp66Ctj9x3Dc3PVXag7MiMzpj9KhKecXEj\nBby/OywolttRB95AHTp20DWvqYqn0WXU9hd9lbUptoYG9Z6JAz06qI0FZritqsN1ZmZClTJLzrKZ\nTj0hpbHLfXlTjaOZ0UkfEDboMlO577rTtXphUke6mnoU2toJxkLYztcH5H56CzHD6sya7acKbP3J\nkp3sPlwAKUWlFIUcADJTgnA76Ddum2IN10dcZwJTKiHnwZJQFqacSO6Qe+RkH79BC6KhIvdwstti\nLB5hMenpTymwlKiUqcSPfX1zuV+GNA97fsOE483CcxlwbCvG4JJG4/wH56BNqtlTuH5kLiMqmQpY\nUhDkZtHOZC1lxSCh3AcQSSR5kqSexx00Ce5bCp8WTU6dV5wgtHcW6iymM5HfVklKHGNxSjOCAkgD\n4aCynADhrTKfY0tq9K7HpiC8lVKibozi0RC2hx0ASmnCjmurUCtspX06HQTYKnZNTRT50q7RJZgt\nJDCXp5GA2ojKUPFaQg491ICT8NAp/pVaEHl/o/XafEdbS4UTGTGRIBcSpslEiMpt1tQCsjHQ9Phj\nQNNhuyqRTp9Jol8xIEetoRHqMlyeHOf596uYpLgUcq6rK89fX10CLdnBPhxU4DlRqt20uc+oZjym\n54z1Bweixjv0BOghqDwUoyuJNvMwq1Dksip0/ehlwOLK0zmkpQEg9lZOc6Dph4nLqte1qPTZV0VS\nPTWFc4NGQ4G+YshPlTnqT00FILk4r3jFky6zalapsWl0JLU6ZBdgvve0trIVs9pUU7VBHm8qCB6n\nQWQtnjtZV9cJEcTYrMiSyw647Pap0ZctSVJSEKKEJO7b0z1A0FPuNvjXuW+bhiUmy4CqZQITyfrD\nLx9sqMYAoLThT0bRtz5QO/cntoHxZnA56LTvqm2b0Zg1++Y4j24zJiF2MIFRgSZDyHlgEtOuMtKQ\nlTRVjdu6joAqXxnsqqWPdtTodXhpYn0uqEvKYcDrC4spKVMlpQAykbFD4+hAI0FjvEP4WrcrPg5t\nfizYrQVX7TbderzkNgurqUZxxLbqVFPmHII3JOCAN2givwN25xMavpq/YFsyHrahxpLtQlTmksQH\n2BHWop5khTe8dASW9ykjqNA7PE1x/velXFakalU6VRLTmRkTV0aU6iU09UWXFIkoZmNFSHW0trbU\n2tsjyrBIzkAJFlwrdv3g4i+LBb5zbgZTMW04rnsuIcSVMSWlKIO1WFAj1T8zoJNvqZat7eDriCu1\nHH4EikzIU+fFfLW17kSEMuFrlpA2KKlKHqDjtoK9eHGm1O++IZt2ZS2KqzBkRHVpmtqcbQiOh4Op\nSo+RBeSpLZJI7jroIbgWhTr445CNHLVLmO1wuz4IDq0sn2vetsbD02dQOvpoOrnGPxLs2VRn4drv\nIPsDKROrBTvAXtA2MIOQVZ9T00ER8MaZxc40MC+b0lKo9AmKV9WtyVvSqjKTno5tUtLbSPh0JPoN\nBs3FSLksSrCK5LeQFAriymHnWuYgHGQUqBBHqNBK/B/ilOcnR6Fc0gympfkg1FzHNS525bpHfPoe\n+gljiDf9D4bWw/dFfUeQyUIQwlaEuOrWsJwgLUnOM5OOuNBT/wAS1crfiKtplFPaCLXpxLoYU1se\n5ym1Bx59ta1kpSOiRhKk+Y9emgulaVP+qrStmlZ3exw4jG7JVnlRgjOT1PbQOHQaVZRzKVKR8W1D\n92gqz4vKqxbR4B36uP7S/SriMaFuG5tuTPostlp1wdyltYCiB1ONBX3jzVLTpPDTiHcHInVmvXnB\nFGg1oNOR3np7klDYSypJCkpU24pIQrocY7dNBDXD1Mni3VGrvmU0M25bj0G1LSp1yVV2ZGhyFEuV\nOUpbaFqdc5Q5aSPKnqOncBBr7SK54oLxrll0JsQ0zH4UNhmUGXoa5YWgy2U5BeU2hDjhQQUkdFdD\noLC29XbJe43sNcHJcuoUrhrQqbbvD9qJFadam3FWHvaJLUsOp95atwdUCnCkn7ROBkOgXBjhRT+F\nlvPpkKbm3HW3DOuiroQEiRLcJUW2gANrDRUUtpx16rVlalEhucRKoWm2aS0cc37V77gcJH56BO4X\nxkPVGo1VYyWAmOyfhu8ysfloJHLnqPy0AXOhPbQa7r3ooj+Ogxe0ZPRX36DMiWkDoSdB8T6qINKm\nzTn7Blxzr/ZSToKhfSCca7q4PtcJLHtKQ2lx6BNm1unyE7mpTRTHjJQvGFDJU71BGghW3/EXw2q1\nOat2vUo2s4lIbbLe+TTgpXVWwoAWgE9wUEfPQNdaWEuKTGQltrcrlNoG1ISScAAdhoG1xKU2xau9\n1kuJceZT0BI7lWSB6dNA0bWrkWgyW6iwtqRHAAl09YadBbcPXCF5G4D5Z0EhDhzwOvhjbHahtTHQ\nQ2ekJ9auudgO3cMjHQaDDbthx+HzEijRX3X47zxfYD7inC2CAgpSVAEDy6BdiHlu7j0H/fQQ1TqS\n7S7pqLDLPPYEqQUZG0pSXCcAj0GdBLNt01mKll98uNod3uIwgq65AAJHyGgXa45RXaaoyX1ctvaS\nFJV2z17gaBtUyhpv1S6FQUmPTmnUP1SqPoAQEA7ghKc9VHHx+egkV7hXbVWbfkma/IdfwBKDqFpS\nUAJASEjGMDGNBHt22dULPdbckYkxlHbGkJSShZBKtiwoKCVH59DoGu6+ltSeYA+8erbO9KQrsQBk\nnPYjoMY9NB6JxQ62wEstt9gXGUuNpKiD1ShPqc9R1Og2XZT/AC3HGy283lS32wSjaQNqkpwo4PUE\nen5aB6cKqnOk8XbEiLRvekXHQ2iH0Fb/AClTGh5lJSkHCcEnp8floH/9L9f1ctji3w9p9LkJQhuj\nSZZbcSFpDi5mwKCTkZw3jOghTg/4i4lx0dy2rnhmqyVpKpG4IZbU2ke7uByc6B02bxVc4b1NyrWR\nEcovOcW45T1Ph1hQUMbcJCT0+HX79Ah3/Bdvyt/+IqrfTSXHU7pj0VpSI7xUMc3aRgE+pHfQL1r8\nUKhbqrTSY6Xk2rMflx3ASHXGnYr0dDJPbDfOUU/loGhx5qDnFSuu16itGGuRtXIafXuytLi3OhA7\nZWrQOSs+JfipbnhygcArJgt01pbE5u5bmW4Fyn0S1qUY8VHQNgpO1azknJxt0H1bPisqd2Q4FuyV\nrps2BFYisU9exxvLKQC42graS6AEDCELaeSOraifKQY3Fes2bxgYh0OmussV5pb05qfCcLkCVJfa\nRykKUtDTgU6ElLinG0uoXs5inPe0EV8POIV3cO6q9Jok5+CmShyLVYZUoNvNrBbWl1skAqT6Z6gj\nQT5evFWls8PaZZFtPlYqiWl1BSSUhDAWFtsnvlbhRzHPgNo+Ogf/AILOLFMtfjfWqTcMiRDp0w0r\nfOiNqWhMlBQwGZQQFEMuqeAUrGMpGcDqAZf0hd+3BSvES9TaWiJS2adGQqLGp8FqK4jnLJcU8toJ\nU4pSk7krJ90jQKnhuvqqcY6SbKuN0SlQpbD5kl7e4WVq2qStKuuB3BydB0yk1ayLcozJcnNQoTDb\nbcVs5BUlpOzCEgZPb00Fe+M/Gm0a7OgUOmtOLfjqX7PHbSXpslTnTCWW8lKf2tBETHFS50VkUqgU\n5KZDDhX7O4QpSC1jcpawdqcHAOM9emgcXEniXW+JFXgz7ncYmtRmkR244bJiBKEKdccQhXqVj3j1\n6D7tBHlB4ozuHNVlzUJ9tYqCUh6GsjYouKWpPfoMkY/HGg6nsNoZRT2EIDSUIwltPZIS3gAfdoN7\nQYJqd8R5PxQr+GgjG+qbb8/hrR51ysNPRKVIbeUt7b9l5XYxWgq7KAc6HQUS8VdOYq1NsHhfQLoE\nGFNrcl1+rIcL0QvMtnlAISCpMhK1JT0VsyrrjGgj7hLMm2zdlO4GXXSZVSpXDyBV5ctVFSUtMqnN\nLbjvPpCQr2l1Tqs5UR1BSdBH3hFt6h1njHcNw+wpVGuKrPUC2vrpDi0oRkuOr5qxy1vIRs3efI65\n7jQWH+jv4XW1Vbs4g8XIVPKKdBuSsxbZdU4tbLy1K5ZfbSolP2bBKUrxnLyx2A0F9ElHX00EYX0+\nV3E8CeiENpT923P89AocKHsw6own3g+lXzwUkfy0D+yQnKjoMDq/x0GushR0HicDoNBmbBz8tBrX\nEyX6Wmnp6qqL8aGB8Q+8lB/cToOcX0m9dFyeKQ0hRHKtul0qmtgnCQt8uT3D8jh9A0FYKuqG28jl\nlS0MKJxu7DoSDoJ4adDzDbyPdcSlSfXooAjQJV+1ydbtpLrcCMxLVGdZ5rEpvmNKbUvYrIBSfUdQ\ndAz2+LthVaOhF22C0hKgMyKe+CAf63KfH7t2g+nf/COqspFDqc2jhY6MTWHUtJB+Bb5iAPuxoHLZ\nMURYUhLNXFYj8wJjuocLqGwlPVIz275xoF1yWGFpycep+7QMO2IC51ZfnxJq21yn3FkIGCCVlXVt\nwEEdfhoJCNTrry/9K9jc2Da2pMVSM4HTyod7/hoG9dtSqCnjSXVIS0gJcdS2FpyVDIBClHoO+gy8\nS41TolmW5ZFLd9lbqKDUK6tAAU645jloUrI8o7Ywew+GgYVCuC9OEVxq9gfLrLakiVDJXyH0EA9U\nqx6dlDQWnoVdt/iVaXtsYcyHNbLclk9HGXMeZJx2Uk+v46CDLmoTVr1KZAmvNOOsKAaQ6AlTjKk5\nCwrIUMg4OAR369NAiuzuSyrbHLSnvM0tC9yQMDbnGfKR1zoPItXdDy220IlKCylY3JKFBPl8uFFJ\nSQOh+egk3w5KE7xFcNI8ZkpCazCKwFLBTyCXTkL3f1fTQefTFyn6j4nLVpDA3KYtmKlCR/WfqEtX\n8hoIX4dWrCtukJwkLmOAGQ8R1z/VHyGgfsSnMM1SnwpslqI9UylIlOFWWA4cJwB2yPXQbXHmsXrY\nlhxlyKg07AlyPqqPyJLri1BJ5ilKbdyE+VIIIOgZVo11VapyVPqCn0JBWUjGQexxoFqRAXU2HILL\n6ozzqSGH090r/V/DOgkLw9eB2Z4kbZeum6OKBtqPTqk7S6vRkxWnZR5Lba97Tq3kBIXv6bkHHz0F\nPeIFBFh8UbrsKPIVJj2/Vp9LYfUoLLrUWQtpCiQACVJSDkDQb9PntMXEuKlWwpACSO3lIz93Y6Bc\n4rxoDMmjXPCOxy5oa5s1j0RNZfXHeUD8HNoc+9R0HtjMvVSlRpbwW42xUGUvKGVYQtChn8MY0Dh4\nCKYqPGCn1mtIQthVTCpoKihSULdwClaVAjaeuB3xoHj4+N1a4+PXImWI5cplPacacyVcyOlTSiNg\n904H450CL4Q7mnweJLsCmp9olyIjnLSp0hCtnm/qk5+GNBZ6t8R7QqV/0zh/xEvSs0WdO9nEunUe\nlNIXGTJwUofnzJJCOhyrlNnb64OdBIt11WlcMHKjZXAOykpp4iOfpFxLqSZK2W3iB2mqJSpaM7lH\nKk9tqTnQV4oUZVVr7ca17wizHiU89MZbrKywk7nS2V7QrCcq+egXn5sVyfV2qa68YbJESmtPqO9B\ncThRV8T6Z9dAyL7fZcui16PFfyavUmopb/sRVoQc/etYxoOzrgHtccDsEuf9I0GxoPh4bmlj4g/w\n0EP8WqQ9cHAWsUWMhxUh1amI5ZO1aFmXtCgcEdM+o0FJuIlYd4Z3pS7grdVjTYPDqzFTpsF2A0XV\n1KqPuMNx0BBSFOqWwDuKc9/joIeqcSqcL7BvTiDeFzmLclxvRXKpIpjyFzk1BbC3009SFhRVFCA2\nhR8vVJPbuGlwuNItrw40in1W2KnX6pLp1SqEZtC80/2isIe5aAhDodLikrbUooRuATjQX28HNiRO\nHfho4f23GQWXfq1ubUElCm1GZNUZD+5KwFAhaynqAemgmghIHUnQRrxAjcmtJkgYS+2kg/NHQ6DU\nsCpoplzKiOr2NVJG1Kj0AcT1H59RoJQddAGCdBgLiCPXQIdWuylUp3kKKn3vVpobiPvPYaBJXxGY\nQohEBzI9FLCT/A6Bcte4JdwoelOQ/ZYzSuW2tSiVOLHU4BA6DQLDGyfd1uU09hIdmKx8IzC1D/nU\nnQcnPFTWY14eJXiNUkSWqlBRU3lNVFpLvLCYqBEDJVtHVvkhJPUZ/eELSWaed8qHJ9oK96XFEYQX\nCoA4z8NBKPC26Pr63/YZZSmdTTyXUDoFNZw2sD4Y8v4aBz12mIr1uVOgrISZjK0NKPo5jKD+CgNB\nXtSZcdBanRyl1o8t1sgjardtwcjHQ6BQUspCmQ0gpSsNJwclRA6bQM5zjQTHRWI9rW6ymSkMKILz\n6CckOOdSM+pHQaBvVy51uMONtdJEo7GgP1Uq6Z/AaBRtWWqJRg9IYZlISslKJI3bMHoptQwtBx6p\nUNApyJgju7+UlIxvWDIkuYyM9OY6o/noGzEkGoK9rcKle0OFSitanO6sdFLJOMdvhoJJ421iXbdw\n0x2NCir9phgMT32A460thZBCFE4GAoHtoIZYqNRux+fWaofaVugJLu0DaU7UoSkIAA6JCUjGNA+e\nCt0PWjcyaZKcxTaqpLToJIS292bc/M4PyPy0D18QdGShNLuJIAWd8B8kDqT9o0T27YVoIhU1/ozq\nmZK0iRham23ThS0KA90dOx7D00AxTjIX7ZJkFUcuqaW8hIUsFABJQ2pSCQAeucd9BMXhGpYPio4c\nIjPl+M5MfktKWUJd2sw5G4LabWvZhSeiVHOOuMaDd+kmgNVTxnmY4+hX1Zb1KaEUhW8FTklwKHTG\nPPoIcoToLnJPqRoFGyqDW+IviVZtMOpTSGFsOTwopy3Gjs71kA9QMDQK/jTmcLrgta3ptmty4kiN\nVZkWBDMhK4y6a02EuSChKB51PYCVZ93poIg4UOpQ840lxShhSCFEHBHUY0EnpUUqCh3ByNBd7wMV\n+DRbT4muzoTlQbhOU6tuQ4rKHpDocirbWlpCiAVHk9MkD56Dkfd9zuX1xNum9XW+WquVafUuSE52\nJkSVuhGEZAwkgdOmg1KVNbVUlSnXPM9u6/tHt+WgfXERbc6yOH8lpxD76I1WMhhsjc00Z5DQWASd\nysKPYeXboPbLrUtu2V2vGVsXKfD8NLYVufcUnbjeD1AIB249NBLfhm4d1mrcbFR5j8GnNIiuVaoq\nnuLZZCIq0LVjY2ohaTtWMDoPloEXxpWtc9PvuFcii7PiV6I5KM8bHIwJmPBKGXWlLQpG0bkkHOD2\n0CJ4Qau3ReNVEbmwmkiVzWFySpZdTzEYyBu29/loJh8Y1DqcXihQrlXCbbpU6AmlrfjoKd0hBdJ5\npycqWFgg/DQOPw8eLLi3FqJt8TWJjYgpjU1maA3EdVFaDaEyNoIWVJ2pJPfH46D4rEm36bOqnFIU\nJFPqFTYfizqFAjpjUqJMmo2rXDytwgBKV8xOcBSsDb20DdsmrNNtbnnA2ykLe3OblKVtPQgYJ6DQ\nMSzag1d3Ge2YCJSpUT65gMQHcEFDhnoKiO5AVnaR8QNB3YV1mt/JC/3lOgz6DxQykjQRXxAiRpfC\nG54cypqo0duQS/U05yw2mU04pXlIONuQfloOTNxxq5N40VHidei1TbCo9xOxJ1QjJS6haYGUsLdZ\ncVuDO/qokqAVoNLxDM0u5bEs64J1bEdi/KtKWlDiWmYkOO4/yDJU5jer7FvIV2wdBPPALgrxKo/D\ny0eN1VhVCq2pHYE6iUCFHU9PkFUARYjzyWiVBhtW5aDs7YUoHQXE4axZFs2Bb9BnJ5MiDDZbktl4\nvbXSN6wXF4KyCTlXqdA54Vep9QCkw5DchbR2rS04le0/A7SeugSLugKq9NJZGX45LjQ6ZUP1h+I0\nEcORZrwSqKy7zmyFNqQhWQofcPjoHJd3FqJw94ZTL7vOG805EU1DajkFsyZT+UtFJUPdyMqwM/DQ\nV9g8e+NlIq7HEK4lPTLHkzYkOTSUUhUd8LmjlNNx3HSlStqlBSve7Y6HpoLWNvQ2SeWhsK7nCUg/\nedAiWxRIt3X3PfbdQuPT+RJWlWSh4udAncnHY9eh0D9ZrdPlxqt7dLYZj0aUGX3krSc7kJWdylKw\nk5JGPloE3hbcUG8rxk1OkspU3SqetCV7wsc6U8MDI+KWToOdF6+CHxZT62+mfbTq2Z8h155dNlw3\noqi48p8naHgpAKsH3e+ghG9uDF3WNLXEu62ajTnmny2849EkNNjCgVKQvaW3AcFOd2DnvoEydSv0\naqrNYthxbapTrj8ZshpZbiLSDylltxxLm1WUnODgA4GgeLF8LUkGZELbQChIeTkJQQB1wo5wCfN8\nNA2bqploV6oe1oumFDecCfa2mn23UOjoUqBCgQrHcfn10GWHULKtpaZUWQqsS2+rGcBptR/WSO2f\nn1OgQ6vd8usyOdLfQMdWYwVgYzjIHc49ToPmHHdd88pKlPuhSlHarIDYGTgdQAFDr6aB5UxymFuP\nCdfCG29q1uFWehIwCAfj00G3dtQYTFfS2sF1zckAkA5Hp1+GgbdKqEZFOZZbUFKbG04I94fdoJv4\nxUh69eEbFyUVoP1GmR0VGKkJ3KUgtgSEpT6nbkgfFOggK3nYEemTnQI1PehxmmxS2nnEyp6ykJU5\nHdQl1pzG4qUVFB6lIznQbFJeEyOkblKdCG1OpUNqkqUnqCMDGFZ/zPfQThelXnXFwMRW2Vbp0cxy\n6dqHPtG3OQ5kLBT1SonqPXQQiwytt6K7VJK4smShbi3pkL7FoHcErIa3b0nHQpR0Pp0zoPI6Tzfb\nZ0rEhlKENrZUFICEDplQUcBIHvDProLEeBdM6f4rLQRILb7bDdWc5oIJTy4T46Fv3iVK/W6fjjQN\n36QSpRR447jhiUXHVUmkNqjFJCWiiIlwYJOCVBeemgiCG+Y0hDo9CM6BUc4mxuEfEOr1CFEaRKva\nkCnNVxwOLXBDyeWtxCUEZ7dR66Bn8Z6NUPbqDVHYBmWtFp8aBTqxEmGTFkOtEqddWlOFMKcWT9ms\nAjQa9kPRPr2OmJERHDiF7lpKipYSOm4nQSYhKlrShPUqIA+86C8XhQt4cNItVvWu1FpUe5YUWCml\nKaIDTUValB1bhOCVFaht24x66DkNctJdtHipclqS1jMOqToKnEEFC089aUqBSD0IIIxoEKlpDLzj\nLw87RUnr0AKTtIOdA/6uGF02lTYakqlU5kl1GSQ4wVlfQDOChR76DYt6ufovdVPuS3kBcdbrT8mA\ntIcSELICygHscHuNBau6bZZtziYi3KbHadRVnlM0Zl1Sozb8GsQFoW3zEDypWlWzoPeSO2ga/H+5\nbkd4ZxoVEpzEeLZEaHTlhSWp6HKWXXYK1JTISopLTwaSHUgEg9SDoKw8OrgRR+IttVOGlQdbnxgo\nA53ArAx+Og6eV6n0a7qOqkVxAeaUAW1Z87awPKpJ7pUnPRQORoIOb8OoskuybMdpL4R9q3Jri33H\nEqUvCk7UgtgJQeh25yPx0EX8a6zRo9Sp0K2qm9Ui0h9VxVHfujuVBwoUUthCUpSk9Tt0DU/T8UWl\noqTM8xalG2tNQw2VF3meUBChn3s9QcaBzeFy2Wm+O1iwZqOepdxUUvKA3KaU/IQ8kkZxjcMH89B3\nR7z/ALmv4q/7aDY0BoIi4tmS1wT4omGG1PxIVRlMJfJDW9qIHhvI67cp66DiDU+LNdNiS7Whylc2\n5H3ZdcSgKW3FjPrLhaQFEBPNKlZ+OgQaxIfr9es+1Ki2anCkPpRFpwV5GkvlMVhtPUkpCiV9/XQd\n8KrU61Z9Ggw7apSaiKcw3HNPZdQwQyw2EYaK8I6BPRJIz2GggW6KhwZ421ENRL2k2Dc0RxDEu2qi\nptttTp6bFRnCnrkeZTa+nqM6Bn3LwqvnhQTc1XS5LoUJGYtXoLi30PKX7qXWwpC20Ad1YI+fxBGh\n+LGuxXkOVKHEXDHZWQwrHYFS3CpI+/Ggw3T4z48WDHkUd8trV53kMFuQFYAyApvCUjJ7nvoIH4pe\nL7iXc9uJYcmex0ulTV1ZpBQlx9T7J3NhxStyVJRjKUY256nOguVwJhzeOnDiz+Il9SorSKhRkO0S\njUht7ZDVMaAVKeQtfLEkDcG8IIQCSknPQF6Lw4p1LXIZmyakC4W4cgzaghg5fGW0EIabKSoDp5uu\ngWKnetocE7cnVKsuxWojAa/1fGmLkTV5UrdtZbcW4tXYgYHzI0EOzOPHC6oxLjdt19sxLule2yUz\n4hQuM42QPtWAUrUT1GPMMjP3hFP1pZVHrSZLNwzVoeVIU5OpDUtp2OAByzkJY3bycYB8uOugcdK4\n9Xhbcb/UF83XOkYzHjSGYb7AOOiVe2uSl7c+uM6BdoXi48XJjpaXa9KryVJw77bCkxyo/tx1pR/y\naB2wb8onECMWOLfh6pC35JxMmwpMBS1E9CoGQ1HdH/yZ0CLxz4ZeAXhrWqPR+KlMq1gSa80+/T5U\nVVRejrDCkJcKlMmYhJBWn3k40EW1HwX+DHi0lyXww43U5t53f7LDqq4bziSsYAKVriP5B6jI7+mg\nSbm+io4ltsRZNiVG36gywkgPRpMxh2Qc5StQkh9oED+qoDQR/WfA74lrDjOtM2bJkMuFsSfqtMac\nlfJ8yHAGHFOZB7nGT66CM7osS6rfrrDt5QqpbqGwUPyZMR2LIeQ8k88p56UDd3AGduNAjO24mTTT\n+i9QiuicSRGlKdalRm21JQEuPhCIzgO7dhvJA6+h0BW5dFpVvxqXVXoU2pBTsaWtqOtMplaFpSAZ\nCQpByDuCk9x0O7QJjEefGjJmupLcWQpaYxDCkb1oJUtQWEJSU4IAV6/u0FhfDze7dWoki15awX6Y\nrcyheCVR3ST69wlRI/EaCMeMXDCRZdxCbSN7NHqThVCU2Cr2datxcb3A5TsJyj4pP9nQINAh1ZhK\nJE2IUx3ErQ3PLC2w8pvanbv/AKMkEHIAznroJErk5+B4fqiyhC3Fzqk3GYS2CVEFSHFnA9AEHOgj\nBEFuU5C9mdlxkYR7Ty1B90jIytAdQEj4gEEHtoHPJoz85Uu4fa2ZMF0LdedjuU72lDhAIC4jK2eW\nEnAICQU56jQT19HlDdT4p6YlwIIYpNUeQ4yUrQQptCCN20EEb+uNBW/6RO4pjHjv4g1GHlbsORS2\nEJGTuDdKigoAHx0GlT35EynsT34j0TnpCg3IaW0rPrgLAzoPi77Ul8RqDGo1OW2irw1EQFvLDSXG\n1+82VqIA+WdBvUrw2+JO3qGuRKtmQ9Ttv27kGdFkJdYx18rbpJ0GrY9DnU9K59aiKgutb222HwEu\npGTkrHYdNBJfCqF+m/ECDQoTa3mWyXpTzaQUIbb6qUpSiAB6fH5aC29UaeVDEJL60MNJDbTCPKna\nB0GTjQcvPFSKRG4+XOzQitIQuOmeMjb7YGEc3Zt9AcZ/tZ0DYTDnNNx69KjOph1NCkMyVtrDTj7C\nUpcQlxSQFEdCcE4z10HlKqzzVRS+wohMVsrWASMoW4kKA/4ToJEtS36U7Cn1KoTEx26UtbomKVsc\naKDvAOO4WhQxj1yNBKjnFinXjQ+HtwQea3U7fmxY1TW/JW+tam5AcQsBYAbSUqI2p6aBtcVbmTM4\nFqqCHCuTJqEunuAKWlSY8ioOyQQUnBSS0QoK6HOghThXw+rvEu8afbdBSsvvObitB2lAQM7t3pjQ\nXjovhc8QEeA2lV+PQ8AJQ24oSSlI/tLBP79BsTvCHxmmrblVi8nK9GbwXqc4tTKHB8CGwkaBheLm\nnu2Dw/sq0qZSnaZAD0xVVUGmkMKl/ZlpCSnzkkJKskYPx6aCsdHZk1+rMOpbU9ypCEMtoSVqWtKN\n21KRnJyRgaC43hY4VcR6Z4iOG1xVK1KozTKg7T3KjKegPpRGeiBLoW4pSMIBU1jJx30HX1PWcs/B\ntA/5laDY0BoI5vijs16xuJVuyWw61UaZNjuNHIC0yILjZHl69floOTtr8K7YjpjsR6LEjokLaQXJ\nDTjhHlITuU907/LQNvh7RWbk4s2NV5KE0xqkXRCZiJbSiPuWipIQXHcjeQraEoQkdE4+Og7G3DXK\nzSqdImRqdHkKZQFNsKfW2VrJISncGlYzjvg6DlrxKNOrXigurh1d9KUKu/MlTFAqUqIn2sIkRUpe\nTyyogL6HplQIx6aBSs3ird/BuZId4bVGrP4deAiOtcuK3zGA2oCPMcUPKsY9zt1zoIf4mfXs+451\n4xk1WnQqov2qWl6I07Djy3zudRy0hKQ0Vk8spWOnQjQIdMqFWkEIkPQ5LAT77bDkdWPgcrWn8NA1\nawik3A3KshaeXIkBz6qW0eaguOdFJBONygf1U9dBYXgNXOJjkJu2rpl1C0YSIbxRU4SpYp0pFK2I\n5TYaHVxAUkbd3lPwzoJ6p3BqNdsNqqv3HUq3HlDcl1POUFFJIwS+4SFA56EZGgW6f4d7UbPnjuKc\nB8y5ElptWR8dqSf36Bww+BFrBYT7PEGB0Lj7rp/IKSDoFljhVadPSCv2ZlI95xuGgA/Lc5nQKiLa\ntSCeslSUJGTh9hkAY6dAQeugwuzeG8VoOvOtvq7YW+46en7KSNBtxLz4bwA2toR2zjKlCOpZTj5q\n29dBBv0t/Pdo3CS5Kc8pLb/1uyVIJTlLrUN5Hb5JOg5uyFvSvLIWXB/bJV/HOgUreua7bUkpl2nX\nqjRH0dUu02dIhqH/AMK06CXbX8b/AIuLM2JpnEyozWk9mqsiNVAR8CqW04v/AJtBL1t/Su+IaA0m\nLeFv27c8fs7vjSYLqwOh6tuuN5/9vQOpH0g3hmvtvk8XPD8ylx0bZMylGDJUQe5Clohuf82gcNE4\nj/RjXSqZ7HJqtgyqoz7NJdmRJayEbgsAOvN1BtvBHvJUn79B9veE3w3cU4y2+F/iHhSGHnUrYpkq\nVDecRg5ICEvMKB69CWtA1nvo3/Etw9uJi6uHVTolzstKUW20THIbjzCj1QtL7fL8yfg530EgVngJ\nxVm0J2k3nZMwx5DeJLbPLl7Dj9VcVbmCk9lDQQdcHh8uGkqjwmi1DbZ3pdkzIKoMkNAjYl3lpCXl\nJA99QCvnjQMO+rlkx5lEtO2IsaRb1LYdccl1OOtYmSXNyVuIUlSCkDOUqSc/hoEez4NAeqi11pYk\nwUNOfYomBqY64GjyglWApI3pASohQT+sD6hkaqsWgXFDn2v7bFajtguc0Q5cpmQ81seS0tTSW3Eg\nLAG9KT3PTpoLW/R68O6fSON8a6od4UuvOyLbluyKND5vt9PMiRHwJO9CBu6EKA91Rx20Da8RFt2p\nE8SN9XLApLCqxKnAyqk+3zHNzbDbYCCrOMBIHTQNn6tZuGIItZSmYlw4bLnTb0/Vx20DTuDhjblJ\njSam3OcjeypUvljzgkdgM4Oga8C6KxJgewCe+GB3j81QR+WcaB38F+G0biXdUh64VqFFpRRzY7fv\nPuq90H+z8dBbi2eHFlWvVTU6BRY9KlraLJlQmW2CpKsA5SfKT0HUjOgULnhrh04OQ8rbYJVPElpA\neU1sKlLSsbBhIHXpoOLkm8W6rxOm3xVW/aGqjUpE2Sg9+XIeUpW3r0ISry/DQWq418WaDxB8JlGt\naMqPGdt+sNfVNP3hbja88shspTgb2HiVD12E+mggG9VW/TrojUWlwmIzMSFEgzyloo5rwQFPOLUO\npUSe+gS4zduvxFGc0+yy26kLLMnepZIOCUO9OgGM6CQ3KpQ5kal02DKEFcFhp4hxoBx3l5UkuFGB\nkAjroFRqhLqnB2vwi+1LRAjsOpSwpTi3Hkl8qU2ltKsqDjyTtOMpzoFDwB3bSLa40oh1pCSipRHW\nYbpKRseJSR1V8QDoOp31YzIKSrKkkAgg9D92gUojNOZIQlCs+iMHr9x0DM44+HmzfEVZ6LZul12C\n9FcMilVSHt58V8oKM7FeVaSDhST3+R66DlpdVpVTw5cV6pZsStCpS7PqCg3Wo7RZ3PlKF7ktrKsK\nRnaRk9RoL+eFTxN8cL44nWVbVyCDcFBrinP9fspVHkNJbjOukOJQdilZRg9BoOhrfWY8fglA/idB\nn0BoGwqOZFUuKADj2mK2B96kuI/noOSE7w712uV767rF6TMpYMMx4MdTTeEucxCslRG5J9caB9cH\nvDLaUXjDaFxT3qhPlwatDmpXIeSlvmsuhwLU2OhOU/DQdHVOCqxD7SgFK5bAKTkAIakJAz/d0FRr\ngsWk37e1xP3HT4zk2FUWt0p9sKfQ7GCSEgq7Jx3+R6YzoN6gOcPaU8ugxKlBQ9TkhLmxDGUBJ24U\n6oYJyMe9nQLdQuThhLpkmjXDVWpsKWgsyIjrpU0tB7gpaB/DQU1408BqHEqL1Y4M1pcmE8cuUl1K\nwWge4Q6UgKH7Sc/PQQTV7eqCpMSzKnDLlQlKSuCxGKnpAWFEIW2WclC8pO3senbGguFShefh1siz\nrdm0pE26KrAVLrQqcdC6hES64UFEvmvZypIKht75IUNAm2dxiu23qrUqFS0+wUsK9pZhQWm22EyJ\nJU662kLyEKGd21HZJGfTQPF/xA3s8gpbS3GIGFKLMcudO5+/QN2fxv4gOhahWnW2j6oWpPf/ANJI\n/joGrKv6uVFe2XKclBRyQW3Xuvx86joFBsX5WAhyHHfbYIwFqa5eQP8A1CdBkqNDuOLFD7sySlzH\nRlZbbBP/AArz+7QIT5qrba1LqDQcx/R89S1Z+YXnQTB9JEw7VvC7wSr6sLUh2K24sdt0ikFR/Mt6\nDnIiOdqiT6dMaD7ajlROVYwD2x6enXQPGyuEF7cQwty3IaFtJJBlSXkR2iUnBCVLPmIPfA0CLdNj\n16x62/QLjYEeWwfMErS42pJ6gpWglJGgSfYni75B0Tgj7u+g3xHSlI8oycElQ9PuGgIzFOS8XZTL\nMgoSdiHU5SVEgD8hoHLbt83XbEoS7WuepW+pByymmVCTFCT0AGGnEj89BMdB8Zfi6syKhyncQZVR\nj7wnbWI8So5Bx3W80XMf8egku3/pS+OEdpMG9rRoNzMjCXg2xKhOuDsrOXH2+v7GNA7B45vDPd9I\najcVuBT9LjNvpfQ7STDe5byQAHW1IMFxJ/Z0HzHqH0ZnE6qqlQa9VbHqc9SQ5DksSmo7ri/KErbe\nYlRjk/BQ6+ugWpHgR4VV8uDh5xpizZbYymJUVRnHkpeBKA4WXUL83XqW+ugk7wg+EK/vD3xcq10X\nNUafUqbUKM7Civ0999Si8uWw75m3m04GxB6hR0FdPEfXQjjPeEhrGE1OWkk/2HCj/p0ESyuIqoTS\nGWQlIbPlVknHx7aBMr/EGnTadIgOrU4uWkALJ6JVoGZGkLjuBxB6eo+OgkfhlxDrFmVNbtLkCPEq\nC2k1FYQFuNoScFaM+ozoN3idF8Y1IqSanZ9eN5UGogrivNMtgBC+ySEgYIGgkmxeFF+XJbFauCvR\n6jQK7UqLMpyY8u4FT4XOkR1NbxGLeWsE56E40FGq/wCFTiNb1RXRvrCjzJbYB5CZxjk57AGW2yjr\n+1oG1KsPiNYdXp1CvCmzKRCqz8dSVL80OUGl7gpt1sqacKep8qjjQfF0VSPUbqq06IrmtcxZZcIx\nuSnCAcaDQYAdU0hIBU4rGfjkgAfnoFoqDcmouNqIDX2QIJyRu2YJPoQNBJtrymhwIvWGwsomvspm\nML7HERxLq0jHcFCTnQQva1YdoL8a4Ycgx5dPeaLe3O44VuBH3Y0HZTw8Xkji7wwpVzU+exJdWygO\nMl4BxCkjCkrSexB0EnqpteiIQHKctZB3c9tX6vwAScaBVh1hqO6n2yO63ggnmIIAA9d2BoOJnFu7\nHL14k3fdKllaarVqjLQCc4S7IWU/8uNBaD6L64qo34gbftbcHIEiPUZJbWMhtbUR0hSPgT2Og7CM\nf/ypJ+aB/wAv/fQbGgNAhMYReMlH+9iJV/ccx/1aDmJcfEirU6u1OJBorTSoUuSwX5ClAfZPKQTu\ncKAc49BoNOJxtvOnT49Upa4rMqKtLjDqAxtQtPb3i7n8dBJXC7xIcaL5vugWCmqtPN1KYj2tqHHY\nMkspWZDp5gZUEgAEk47aBs8drnk0zjheNv0+O7IjVJyG9MqDpTlqdDa5S+Xu2g70qCT88n00DYhU\nmqy1h2U08WsEobVIbQVK+5tPQfjoEy8Ku3akZMSWhlt91CnciSpRabSpKCoo8pJKlpSkE9SfgDoG\n644YUKTV6zV40Vhlh1xqE297U8pYBKEn3krJVgYwAe2fXQL/AISOHNS4geIy2oM0GpRqLLcueu1B\nlCy2y4w0rkNrKxhIKiEJHbooDp10E03HdlpXcriFfdRr7FPqc2spo1uyagW+QxHggc9+QjKllllr\nHb33FBIG5WgrVdMwRnG7fp1cTXozDstLFVpiVONSnTtLzqFhHXe4oEudsJwDjQfdPqH1jELSYq1B\ntfLcHLS2G1oAJAUhKTkZHXOdAvU647i9lRRgpM3lEhsPIQ6Q2fd6qBHTtoNh25LpjJDTEhEEDopM\nXloP4lCc6BPfn1F932h6a+6s91KfcWonHx3DQYkj2te6QhTiu2euev8AaVk6DKqA8pSizHIQSMJS\nSf36Cxni2oVVvDwC8NTToqpMyFOo4LYBKglEWVGUfU+o0HP2Pwlvl4KKobbIHfnPNox1x2UoHQKV\nJsCPb0j268lxp0NsoC4sOdH5yfOColAVlY2gjAUnqQc4GCC5fXEtZnTZfDWMqg0lyNHL1Pp7ykx4\ngaw0MlTbeVKATkDcCrJyc50Cy/Vo3G+yG111kiuUXlF+spUnetDicqS4E4SScZ9MDqfmDOVanC+C\nds2qVF44yUsxAjr8DzHRgjsRjQfaadwmStDbcOpPgkALedYZHX7t+gcdLhWTIbeFKsV11DZbLkx+\nUpTbSd+zKtjIwFKUkZJ0EtUbhi5SqYuqTLWpij5Q3DhxZNVlq3/BKXWjgdyQDgaBnX7at8VGQ1Ht\n611LiT4wdpTTVOKXXmy2FBWFtg9QoFKsnuPNnroFeg8F/ElVm22aZbphjZnCY8OMRkdc7sHOgdkb\nwf8AGu7HGWOJUmNFpqCQDJmNFxsf2EMpPc4zoHTF8B3D6nJbnt3J/p8RxtxBQ4koDyFBSdw3oV3H\nUAg/A50CLxP4WqoVuS6xdFzUmpVB4xIjUaBSWC9JbbCwEOvPuurQlO4r8oznGSdBMX0dDTyLuvBt\nDzvskWnQW2IpdcUw3vfcPkbUSlPRHoNBT3j3eztV4tXosOJaaRWKmnJUCSESnE5yfu0EM1C7YbOf\nZkGQU91ZwkaBOTeu9QSY7f4nH7yNA4abVPbRtdQG1YynCgpKh8iNAqxpTkZe5B6eo0E++HbidUoF\naatlU0pjSvLHZdO5CXD6AHp10E9v8R5lq15FNu+iIQzIUSxUI6jylenVB7EjQN1fhUvPiNdsy6qO\nuG1b05zmw5sh9RWlJ95PKQg9Ent10ChxL4ReGrgrwtuZfGK4k12fIiuORaW06ltxMhpBW17JHQok\nObgPtFH92g48+1l11bq8jesrGepwST3+OgXKN7KupU9MqaiCwtxsOzndymmNyuq1BAUrCehISCfl\noJKicG7nXHW8u4rd5EpSXkvfXUZwrQclKwlnmLGc52kZHw0EqzeCfEK0PDnWOJkqEw7Q6Z7TFqG1\nTqFzWp7QiNyIqltJ3NNqcClE4z6Z0FTYQYXDeRJWptOUkuITuIwDjy5GcnGg6mfRyNW4vhAhiHbs\n6NIUtft06ohxbDzh95TO9KUBB9AnQWm/RKjMvrfgJegLJ3K9jkyI4J/ZbcSn92gb/FW56pYHC28L\nuRXJSUUmlTpKUyC0+N6WFJQkFxBUMrIGd2dBxRjykOx1KUvC1dVZx1J76C/f0WnCq+1cZYHEqRQ5\nMa24dNntoq77SmmHXX0paQlkrxv7nO3IGg6wR+r0k/2wPyQnQbGgNAhOeS82D/vIjqfyWg6DkXxc\nqdMo/F29qY1R1qcjVuqNqedWnCimW523BZxoG2q4969yKTHKunV9aj+QBH8NBOPgfrsqZ4hYcWVH\nistKplTKVMtELSsNpIwokntkaDX8WFzsU/jGYtpSkSK3UIMZ2TBggSpTj8h1xSE7W9yt23APbQVs\nn8TuJlTmu25BnyoryFqaltpwh5pSVbFBasFSAk9+ug3Kbb6aYlcsSpMiW6UKmy3F7y5tUFdAsKHT\nGeudBhuxr6wdiw2Hks7HQ7ILa1qeUEjyhLLeEnr5snH3aCSPCh4j7p8LN81N+sRVVmzrgLargbTB\ncTOaMZCuU6wvf0KQo7kq8qh8Dg6CPvEvX+H9wX7UYfBRaJtu1B76ziOtx1RXUe1Fx1bCkLUpRKVu\nlBV5cpAG310GGzDcVGoEakOINPqgTzYMV9CUc9O7Km0IWrIOU564yM40DrhPVeTOJqUb2R9wEEoW\n4tJKcEkqaQE9fT1xoNqg1aifpNLhrhc1DsdJUhtxbrbTragCVHOQVfDGO+gdiYrZCXGIZAPZCeuR\n8NBsmIpsYUw2xjHRYGcZ+eNAbOgTkJHTAGep+4aDbjPPIc2KdWttJHuoOMd+g6aCyfEmzJ3FLwJU\nehUmUxBkMzIriH5rvs7SAzUnEEKWArGQr8dBUuoeDerUSE1U7xvm36THcd5CXXHpDoLgTv2dGh5s\nddAQPDrwfjnn1LizTlpOfLHpkxYPQnopRQM9DgevpoMdW4LeHh2mPwo12VmoTHW1JgBukezx3H1Z\nDZy84CUpV3PoNBHnDeyanS6ZJnyVNxaQ1zjXnXXnWGVuJUWm46FpQpSnP1sHoO+fgDkkVDhq9RIc\nany2EVNg7JbJGVBkYKQrfuCu/RQJ0G7bLFitSUKkM+19dynG9qEoR0wcITnpoF6AIyhXabQkom0Z\nEGQavIS8ll2Mh5YQw6pbpCSA6UnB69NAiPeImuRVONWFR25kGMeR9e1KWthDi0+jOFIJHT13H447\naDYh+IG5KxVKZBuxT9CnQnlyKDUmpntUILICVtsqVuSlKwNqk7ik9NwBG4Bb/hjcV48Q7LjXGLjd\nhF5brD7HsCAVOR17CrcpfmSQOisduh6g6BeTw9guzHalUqhImzXQlPtIS00pISP1QEkDQB4b27sU\n26uW8FklQcnPEHrk5SlSR30EB+JW1KPbMeg/VEbke0uSuevmOubihKNuS4T/AFj20GDwxcf6NwDq\nNwzKvRpVX+u24bTXsjjSC0IynVHcHSM55gxj4aC1tq8QeBPFSgt3PI4cRX0zFuiQiXTKbIdDqVkL\nCyc5J79/XQeVHh94Ta2jZVOE1JWD3/1DAT+9vGgQZXh58Dc4H2rhXT289Ty6c63/AP0qGg1v/pW8\nBzyRtsluJjqOW7WWcev6jwGgb91+HT6Pu3fZ1V51VEEwrEbdU6ogL5eN2OYpXbcO+gSqN4YfATct\nTRT7SvmQ3UVpLjLEK4AJCQgbt6UuoUobe+dBO7HBng7It2PblQuV2rpjNhpE6dOiOS1ADAK1pbQC\nfnjQR3xJ8EVC4kU6HS7Y4xXNa8GK0pl6n0qfHVEe3K3BSmwlOFemQeughI/Q32uXKhKb4u1OTKnR\n3IwkzaaxJWjmYyrPtCCTgY76BjzfoQqmM/VnF5pf9Xn0BQ/PZOOgkfgR9GDc/Al6q3AzWLbvC5HE\nBq351bp0n2SnhfR1fsu51K1kDoonpoHbxo8DXGCsVKkO8DbnpNswMOm4Yz6VtKeW4U7THDMVaWwk\nBXQbe+gji8fo+PF1XLSq9tU3ifDRTq1zGahb8l2RKjvRkr3NJ5zzZWMDHQAAaCMeFX0U/iO4fX/R\nLwnVGjyWaPJblKitPcxLwR+ooOhIwfXI0HQil2RxDaiNN1OlNtrQANsd5nYkD0CQrAH3aDO7aN3o\nyU0tfXv5kH+CtBXrxl2Txlvrhl/4O8PrUqMmZdjzCKrWRGdVAp9PYeDrnNcbSolTikABCQTjJ0Fa\n7W4DWf4YwzW5nDS6OLN5NFOzn21PRRYbg6ktoUyoOEHspW75Y0FrPBnx64mcXOLdUo16WTU7ThU2\nkPPxkT4UmGwhQkMNhpAeabRnCienXA0Fzond8/F1X7gBoNjQGgQqh5LrpS/94h9H/Ju/6dByj8Rl\nBjwPELxDL6Sd9YkvhOQkYkbXvX9vQMVilod8yE+UZyBlRx3+GglKzbhq3hzrCbvYRR1VgtIbMN2r\nQG5bMScxndy5DqSn0JOCScAeXJ0HxMTZvDDhzVuM8Grrq10cS5LsWTJSgS3EKqRew6wGluGQqOkB\nLiNqAgBJSoEDIRPQaU86ldQqbr8qpVLa/UZklttp955SfMXEsoSMk9T88nQONuit7CVHl5yAtKSV\nJJHQjQJbFkHlPsImtpS+VB5xDYaK93fcEqyCfkR+Gg+ovDe3AyIlVnqfYGU+yowwyEn0wglZ+eVH\nOgULe4d2DbjxkUqAjmOY+1eWt3GOuQF59fhoFirwqLUo/IlxmJTeQQlaUqwU+oKuv5HQaDVKgrb9\nhZb3tHoWS7IcTg9Mbd6unyOgXYFlViMwGaZTeUgY2oYZ5aMfdhONA4onDniFOKGIlPVgAblZCjtJ\n9AjJ0CpI4KcSgvkxoMyWo7erEGSrqRn/AHZP46DInw+cb1tJMe1aq9u6g8lbOfv5vLx+Og3aN4Yu\nP0pwH9DpbIJzufkxWvz3PZzoLT0bhbPpXhem2DxGgBDjbpkOxEvhzyiaiS2eY0ruCM9DoI4d4d2P\nVWmI9Xpf1g3G6MplvvPBKj0JwpzBOOmT6aBUg8N+HkIZiW3T2/gfZm1K6ftA6BZh02hwcIiU6Kye\n+G4zaQCO3ZI0FPfE9wWuW2qhJumkvvHh/JedqNQajDmKp0p7AXzGldmlH3XeoT2UO2QppWHWalcD\nrdusOiK0oiGw2S8sAdyFJSCdx69umcaBz0O2eLNVWmLQbYq8tSwNvIp8oqOexylAH46B6XRwd408\nNeHdWuC/YK6XHrJitNQ3Vl2USkueZ0NFSWgndjDhBJUMDvoEauSnLPRTeQ0lxn2WM7T1ODLS2XEJ\nVvbPr5s7h/W6/DAb7ZFfsO5qouOhEKE3GeZdQnalM9chKGkp6e8UEjAPu+mNBb/wc1yVF4ZmdUbh\nTPjTnj7DRwM/VxaKkugrPcuEhRA6D8dBPZr7LiSU4OfhoBurl3cEZT8emf3Y0DA42Wk5fllvQ6en\nm1KnuCbAQnuspSUrbHzUk9PnjQVBWlaVFC0lKkkhSVDBBHQgg9iNBJfBrjC5w4qDkKroXJok1QVI\nS3lTkd0dOahPr06KT6jt1GgtVQ7rodzwUVK3pzVQjqA+1YWFbcjsod0n5KA0CkZKcAEjI9CcaBOr\nFzUKgQ3KjX5zUKM0CVOOrAz8gB1UfkOugp1xt4qpvu5RVGm3EQIyfY6JBxl53crJVsTnzuK9PQYG\ngmrw28H6hYlNkXheMNX6SVxAT7IoDMCHkKDRz2cXgFfwwE/HQTo2y4cf6Mnb8DtP+egkrhaywVTW\nXGEeZDa8YB7Ej4fPQP76ugHOY6P7o0HyaVTj/sE/gMaDwUqCPdQU/srUP4HQe/Vsf9VbqfudX/no\nD6uSPdkPD/3Sf450B7C4PdlvD8Un+KdAexyh7s1z8Utn/p0B7NPHaXn9ptP8saA5VTHaQ2fvaP8A\nJWgNtVH+0ZP3oWP+rQGaqP1WT+Kx/I6DNHaU2g78blqK1AdgToMugNAhVryV2iO/+a4j+80saCkX\niC8LXG++eON03TZ1uMyqTUXYz0We/NjMhwiK0hfkW4FjC0kdRoG5TPBF4jHVDnRaTBB/rzQQPvDa\nHNA4GPAVxse879boTClYCyVyVED/AIYwz+egUIf0eV9F0uVG9KbGCu5jwn3Dk9+qltaBWY+jyioS\nBUeJSmx+slmnISPzclK/hoFKJ4BOGkVQVU+INQeHqlkQmf4pcOgW4ngh8PUbrJrtYlqzk/6a0kH8\nGo40C5C8I3hnhd6ZPnfEOy5ygfvCCgaBxRPD34dobXKjWKHh3JcTKcJ/F1zQLDXCDgy2EJY4bw1h\nHRAcgxyB/fUdAuQLPtGmACk2JAi47bIsRr96UHQLDLMxoYi0KKx8POkf4W9Bry6zc8WtU2koiRUN\nz0v/AGhW4opUyjeAAAO+gY3F7iVflgSaa1BMDlzm3VKU6y6shbagMD7UDGFDQRk/x74pvZUmqxY4\nPblQmzj7uYV6DTf4z8T3zhdyLQD/ALqLFR//AJk6BNe4jXhUG3Y9VuGZMZc8r0ZxQDZHfBSkJGg1\nk3MUDqSoHsQnHy+eg+Hb3nxilMOEt/cRlXROE+pJURoNOffNyhOIlPU6r02gnp+AOgj+/wC++JUu\ngybfmUlpiFXG3acpyWHOSUvoKVBZQkkDB76CHeEFteJbhpBqlK4T2003EnSecqszGiy+/sQGwoB9\nSSlHQlHTqDoHbKpPjyrpUl+tsQ0qzkIebGP7qVaBqXP4ffFtctPfh165PrGO+MPw/aVFCwCCAUkA\nHqBoE+2uEPiJtylptSvcNYl6UOOoqhxqnyymOpRJVyH25DLyEknO3JT8hoFefwN8Qd9OwaJUrNp9\nr2nTXfaW7ep0mPFYU72Li1cx91xwjpvUokDITjOgnfh1wek2TT/ZYtKagArLrrMVS3G+Y4cqUpSg\nBk40D+apk1DeCnzAd1qG0H8CNBvxoE7JIIUk/qlRz+4aDZ+r3kEFSgMH+qSR+ORoIx4ocIbFuJT1\nadqzNDqygVPSQkch5QHd1vI8x/rJOfjnQVlulim2nJWzMrMGS2kkB+M/uSfwUEqH5aBGp9+UKnyR\nMpNfahyR2ejyuS50+aVA6B1s8d7wSwGo12yn04x9kS+vA/tJQpX79A1q3d193NJC4dDrVwSj0RJf\nYeKB9xdx+7QSrwLp112zU2riqPDZ2ZWP9lV6vIQBGB9I7WAhv9rqr56C1Fv3W8+2JFwiBSknJdCp\nSFKSkDJ7aBZl8SuHNPb3OVyJjIwlDgUVEn02gnQOjgzxZ4e3TeUq2LbqiZc9Mdbi2koWAUoKCSFE\nAHG4dRoJw9ToPdAaA0BoDQGgNAaA0BoDQGgNBpVKmpn8lYWWnWFcxpwAHarGM4ORoNY0ees5cqr5\n/Z2J/gkaD0UEn+knylf+8ofwxoPP0ap6jl1bzn7Tzh/idB6LYon60YL/AGiVfx0GVFAoyPdht/3R\noM6KbT2/cjoT9yRoMqY7CfdbSPwGg+ghA7JA/DQe4Gg90BoDQN25VcmtW5K+Etxkn/1o7if46CJf\nFgypNNtyakeVD0lpZxk+dCFDH906Cu6DKBKm23Fj0+zUfn06aDeZi1N0BSojyifRQSn+JGgys06p\nkkmLyx67lJzn5bSdBvxKVUypI2oH9sqyPjjonQKjdFmIAcU62k9BuAUcZ69sjQKsamvEBIlknp7j\ne0bc/wBpR0CtEpWApRfcJV1JSpKfw6D+egVTRqSIvtDcgPvqIBbAcB7dSVEJBxoMaIMZbqQptKQO\nqspKs/IZPTQZ0RmN2GmkgdfQev56D5+wCzvcSnpnaTjp+7Qaip1NjKJcebSjPmUpQKR9/XpoNFd3\n2rz+WqosBKxt6OIAyD36/A50CJVL8sakuuxptajNlrBJU4nBChkYPY9DoEiXxu4W00pQ/WmCpzol\nCFhWVAZwCD3+WgRql4luGNOY5zb7swHolplPnWcYwnI/foI5uHjxwvqiHJD1uOSznrznwgA/A7Qe\n3bQNZ7iFwznQnJ8ayKe3tBUPaZBWSM9Dt2jv6fPQN9vijazchwm1aVFbT2QIwK0kdB1UfN1+Wg0J\nXHOsRX0qpj8GIG0qw1HYjhJPoE7gcnQb7PGTiJU2g3S5E+YVBIIhRnhnr1wGknqR0/loN6FQfEPc\nzrjsG1LjkslWW0fV81SPRQwXEpyPnoHOzwM8VdzPuqYsmoMsup8iZS40QD1IKZDiT17Z0CxD8Ffi\nmqoZVKpdPp5T0Jk1FkkY90nkF7OPu0E4eGfwm8YeE/E+Bfd5VSkuw2GJjEqNDekuyFCQ1tQE72UI\nwlYB6ntoLheug90BoDQGgNAaA0BoDQGgNAaA0BoDQGgNAaA0BoDQGgNAaA0BoG7emG41Lln/APHq\nMJR+5ToQf3K0DM8Rjav0Lhy0hJ5E5vJV2AW04P440FfG3GGyHUq5fTKs4757A9vy0HiqtTmHVOyZ\njRx7wcWnO77ydBqSb6s1kKW9VYoOMkBxJAx3yQcDQIy+K9ktIDprDK2/1SjcWwnPfIHy0A5xv4fs\nuKb+s1SVNgKLbDalhX8O2gTleJuxojR5DbsjcrbsO1KiD2Pr00GnI8W1LYSFxqOS2kpSEJdGepGD\n5QP89BoueLqQUOOt05tpKUnCysHJPYbc5ydAyKz4vrmqM12mRVIiJKSkqRgOHr3SpJBGgwf/AFCc\nWqqluNSW5UhRAQy1GjvvrWk5PUpTknQbLKfEzdTxcRbFwzgHNzLzdKkICQR28zY6YOMZ/HQKLfAD\nxY3CCI9rVNpKiciW+zGbUlRJHkedGMZ0CzSvBd4qqi6x9ZU2BFZSUrUmVUmuuFA7Vezl0kdOugWr\nl+jr48XhXFVN+56LTWHG0hxsuzHllzrk7W2UJ9fjoFig/Rf3Ew22ms8RWGyCFOKjUtx4k5zj7aSn\n+GgeFL+jKs6PgVS/qu+gZ8kWNEjDCjkgFSXiB+OgctP+ja8PEQh6fIrc9wHKlu1FDQJ+5hlvGgdF\nP8FfhRoTIYk263KAx1qFVmu9vkqQE+nw0DgpnALwr0FwOwLLoClp7KXFalq6df8AaBw6B20ygcKK\nQUqoNswYyh7phUZLePuLbI0C+3Wm208uHSpZQOwSwltP/OpOg9+taws/Y0ZwD4uvMo/wlWg9Mm5n\nB9nBjtfNyQpf7ktj+OgAi6V+89Da/ZbdWf3rToAU+vrOXKsE/JqM2P8AGVaDcgxH4qVCRLclqUc7\nnAgY+QCEpGg2tAaA0BoDQGgNAaA0BoDQGgNAaA0BoDQGgNAaA0BoDQGgNAaBu38n/wC15Tw7x1Mv\n5+HKdSv+Wgizxp0K9bg4AVeJw8hTKjXESae7Fh0xCnJTiRJQlzYlIJOEKJPyGg5+QPDx4ya+kYs6\ntNqOMGXKjxk9uuUuvIx+WgeFL8D3iwqLWJtLhwdwyDMq7SiP2gwXfTQOen/Rw8dJoDtVuKhQCrG5\nCXJchacD4iOgH89A6aL9GfdgG2t8SGI7ZyVNQaUtzv1IBdkI6fhoHdSvo1LMipUmpXzVJAcAS97N\nGixysA5xlYdOM/PQOWF9HL4fooSZsmtzSnqeZUUtJOBjswy3jQOWH4MvClSEJbkW0xIKPWbUpbh/\nEKfA/doHBTeBXhdoG0QLOoJKTkFcVqWrP3uBw6B002g8KKSoOUO2YMdaeiVQ6OlBH3FDI0C81W0I\nRsiUqXtHuhLCWx/zqToPsVWsOf0VHcHzdeZR/hKtAGTczh+zgxmh/wCZIWo/klsaA5d0uDBehs/M\nNuuH9606A+rq+v8ApKuEf+lGbH+Mr0AKJLV/T1aUv9ktN/4EDQH6Nwlf00iU9+3Kex+QUBoPf0Wo\nBOXIaXT8XSpz/GToNhqiUdj+hgsI+YaR/loNpDLLfRtCU/cAP4aD70BoDQGgNAaA0BoDQGgNAaA0\nBoDQGgNAaA0BoDQGgNAaA0BoDQGgNAaA0BoDQJlzU52rW/UKawAXZDLjbee24jp+/QYI9SrYYbbF\nIc3pSkKU480gFQHXsVHvoMntNzOe7BjNftyVr/wtjQHLulfd6GyPk064fzK0/wANAfV1fWcuVcI+\nTUZsf4yvQBokpwYfq0pfx2Ftv/AgHQH6OQ1f00iU98lynsfkFDQAtW3wdyoSHD8XCpw/8xOg2WqJ\nRmP6GCwj5hpH+Wg2kMstjDaEp+4Afw0H3oDQGgNAaA0BoDQGgNAaA0BoDQGgNAaA0BoDQGgNAaA0\nBoDQGgNAaA0H/9k=\n",
532 592 "output_type": "pyout",
533 "prompt_number": 7,
593 "png": "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\n",
594 "prompt_number": 5,
534 595 "text": [
535 "<IPython.core.display.Image at 0x107deaad0>"
596 "<IPython.core.display.Image at 0x105baf950>"
536 597 ]
537 598 }
538 599 ],
539 "prompt_number": 7
600 "prompt_number": 5
540 601 },
541 602 {
542 603 "cell_type": "markdown",
604 "metadata": {},
543 605 "source": [
544 "Today's Google doodle, visible only with an active internet connexion, that should be different from the previous one. This will not work on Qtconsole.",
606 "Today's Google doodle, visible only with an active internet connexion, that should be different from the previous one. This will not work on Qtconsole.\n",
545 607 "Notebook saved with this kind of image will be lighter and always reflect the current version of the source, but the image won't display offline."
546 608 ]
547 609 },
548 610 {
549 611 "cell_type": "code",
550 612 "collapsed": false,
551 613 "input": [
552 614 "SoftLinked"
553 615 ],
554 616 "language": "python",
617 "metadata": {},
555 618 "outputs": [
556 619 {
557 620 "html": [
558 621 "<img src=\"http://www.google.fr/images/srpr/logo3w.png\" />"
559 622 ],
560 623 "output_type": "pyout",
561 "prompt_number": 5,
624 "prompt_number": 6,
562 625 "text": [
563 "<IPython.core.display.Image at 0x107dea890>"
626 "<IPython.core.display.Image at 0x105baf490>"
564 627 ]
565 628 }
566 629 ],
567 "prompt_number": 5
630 "prompt_number": 6
568 631 },
569 632 {
570 633 "cell_type": "markdown",
634 "metadata": {},
571 635 "source": [
572 "Of course, if you re-run this notebook, the two doodles will be the same again.",
636 "Of course, if you re-run this notebook, the two doodles will be the same again.\n",
573 637 "<!-- well actually I cheated a little, by setting Embed Url to http://www.google.com/logos/2012/doisneau12-hp.jpg then editing the ipynb myself and replacing it by the other url -->"
574 638 ]
575 639 },
576 640 {
577 641 "cell_type": "markdown",
642 "metadata": {},
578 643 "source": [
579 644 "### Video"
580 645 ]
581 646 },
582 647 {
583 648 "cell_type": "markdown",
649 "metadata": {},
584 650 "source": [
585 "And more exotic objects can also be displayed, as long as their representation supports ",
586 "the IPython display protocol.",
587 "",
588 "For example, videos hosted externally on YouTube are easy to load (and writing a similar wrapper for other",
651 "And more exotic objects can also be displayed, as long as their representation supports \n",
652 "the IPython display protocol.\n",
653 "\n",
654 "For example, videos hosted externally on YouTube are easy to load (and writing a similar wrapper for other\n",
589 655 "hosted content is trivial):"
590 656 ]
591 657 },
592 658 {
593 659 "cell_type": "code",
594 660 "collapsed": false,
595 661 "input": [
596 "from IPython.lib.display import YouTubeVideo",
597 "# a talk about IPython at Sage Days at U. Washington, Seattle.",
598 "# Video credit: William Stein.",
662 "from IPython.lib.display import YouTubeVideo\n",
663 "# a talk about IPython at Sage Days at U. Washington, Seattle.\n",
664 "# Video credit: William Stein.\n",
599 665 "YouTubeVideo('1j_HxD4iLn8')"
600 666 ],
601 667 "language": "python",
668 "metadata": {},
602 669 "outputs": [
603 670 {
604 671 "html": [
605 "",
606 " <iframe",
607 " width=\"400\"",
608 " height=\"300\"",
609 " src=\"http://www.youtube.com/embed/1j_HxD4iLn8\"",
610 " frameborder=\"0\"",
611 " allowfullscreen",
612 " ></iframe>",
672 "\n",
673 " <iframe\n",
674 " width=\"400\"\n",
675 " height=\"300\"\n",
676 " src=\"http://www.youtube.com/embed/1j_HxD4iLn8\"\n",
677 " frameborder=\"0\"\n",
678 " allowfullscreen\n",
679 " ></iframe>\n",
613 680 " "
614 681 ],
615 682 "output_type": "pyout",
616 "prompt_number": 4,
683 "prompt_number": 7,
617 684 "text": [
618 "&lt;IPython.lib.display.YouTubeVideo at 0x41d4310&gt;"
685 "<IPython.lib.display.YouTubeVideo at 0x105baf9d0>"
619 686 ]
620 687 }
621 688 ],
622 "prompt_number": 4
689 "prompt_number": 7
623 690 },
624 691 {
625 692 "cell_type": "markdown",
693 "metadata": {},
626 694 "source": [
627 "Using the nascent video capabilities of modern browsers, you may also be able to display local",
628 "videos. At the moment this doesn't work very well in all browsers, so it may or may not work for you;",
629 "we will continue testing this and looking for ways to make it more robust. ",
630 "",
631 "The following cell loads a local file called `animation.m4v`, encodes the raw video as base64 for http",
632 "transport, and uses the HTML5 video tag to load it. On Chrome 15 it works correctly, displaying a control",
695 "Using the nascent video capabilities of modern browsers, you may also be able to display local\n",
696 "videos. At the moment this doesn't work very well in all browsers, so it may or may not work for you;\n",
697 "we will continue testing this and looking for ways to make it more robust. \n",
698 "\n",
699 "The following cell loads a local file called `animation.m4v`, encodes the raw video as base64 for http\n",
700 "transport, and uses the HTML5 video tag to load it. On Chrome 15 it works correctly, displaying a control\n",
633 701 "bar at the bottom with a play/pause button and a location slider."
634 702 ]
635 703 },
636 704 {
637 705 "cell_type": "code",
638 706 "collapsed": false,
639 707 "input": [
640 "from IPython.core.display import HTML",
641 "video = open(\"animation.m4v\", \"rb\").read()",
642 "video_encoded = video.encode(\"base64\")",
643 "video_tag = '<video controls alt=\"test\" src=\"data:video/x-m4v;base64,{0}\">'.format(video_encoded)",
708 "from IPython.core.display import HTML\n",
709 "video = open(\"animation.m4v\", \"rb\").read()\n",
710 "video_encoded = video.encode(\"base64\")\n",
711 "video_tag = '<video controls alt=\"test\" src=\"data:video/x-m4v;base64,{0}\">'.format(video_encoded)\n",
644 712 "HTML(data=video_tag)"
645 713 ],
646 714 "language": "python",
715 "metadata": {},
647 716 "outputs": [
648 717 {
649 718 "html": [
650 "<video controls alt=\"test\" src=\"data:video/x-m4v;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAAqiW1kYXQAAAKMBgX//4jcRem9",
651 "5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTE4IC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENv",
652 "cHlsZWZ0IDIwMDMtMjAxMSAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9w",
653 "dGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1o",
654 "ZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2",
655 "IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MSBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0",
656 "X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTEgc2xpY2VkX3RocmVhZHM9MCBu",
657 "cj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9p",
658 "bnRyYT0wIGJmcmFtZXM9MyBiX3B5cmFtaWQ9MiBiX2FkYXB0PTEgYl9iaWFzPTAgZGlyZWN0PTEg",
659 "d2VpZ2h0Yj0xIG9wZW5fZ29wPTAgd2VpZ2h0cD0yIGtleWludD0yNTAga2V5aW50X21pbj0yNSBz",
660 "Y2VuZWN1dD00MCBpbnRyYV9yZWZyZXNoPTAgcmNfbG9va2FoZWFkPTQwIHJjPWNyZiBtYnRyZWU9",
661 "MSBjcmY9MjMuMCBxY29tcD0wLjYwIHFwbWluPTAgcXBtYXg9NjkgcXBzdGVwPTQgaXBfcmF0aW89",
662 "MS40MCBhcT0xOjEuMDAAgAAACqVliIQAV/0TAAI/3gU2tIW7KawwaCmQGTGHKmuYAAADACBcshU+",
663 "yICkgAA14AHowiEeT6ei7v7h3Hu0i2fpUBLGBIkbCMP3Vfz+9BVGCDXnw9Uv5o3iN030tb7eq6rs",
664 "EEhHs2azbdTiE9Csz5Zm6SiUWRdmB43hbD5i6syATuODUJd7LM3d9cbFpc7zFlu5y3vUmNGd6urp",
665 "vKKT9iyleIyTuR1sVS431DhevGfkUllVeIznYUe2USoMW1tufETjyRdmGldN6eNlhAOsGAH4z+Hk",
666 "rwKecPPU7Q5T4gDAIxj9hW84jVExMTSTHxkPTq1I4OotgUxURCGTsw60k/ezPNmNg38j1bqaGmPc",
667 "ruDKEIBDsK5qEytFB90Q68s0h2wmlf2KXd5bleBefiK+/p47ZsyUO4IdlW25rRy+HLjt6wQXfYee",
668 "3IkiQOoOK+U7u/lxcl78zfxwIoEMjUUSKNZjkp8clnmecDDJ3Kz+viF7bPklk7N6QRyizAKPIIpn",
669 "NJUuMWQmqeL2Or6cr4D0/0tOym+4tficxmhuEONKUtO2pPn3hRjMllkd12tXp70fLTfxy0dwB70M",
670 "L9iLEcItHb7zVupHlP5RxdvecpREw+OsIPr9KWilIesNE19jgIbT+TkiRBjOoKvUuwcQnKg7fOTH",
671 "VoLvnKuAfea+oujEdm1Rwd2tEOnkF+ZC11WaNQsiNR/eJ9EnUXjXDYGfhB+Oe7qj8nYTT+eOXg1c",
672 "uJNgLXEs4vOheWEjQOqfIWMQc3DmTof5s0ksBmUQ3PQ+UHPxZSnmOEZB+j6xT3wbm7HGzDjWtSg1",
673 "SjTxd1EiJ8xA4SIxxR8WIKLg+TwFxJNS7Laxq7Uglu3AkXe82P1JCdJX5PsbFbxuDbuJgakzRcTw",
674 "MLLSKCiizS/eCW0uJed/lev9yb80kKlVET4S219cn/zhkpeDV83cHYOr+sJQKDRk/Wh2c7fsuxfx",
675 "aEH/6reSmvFDsAnXAyPXliJ3G4VG3OkEM5K5WyGGrBizZbTrdGsBnzj5VSGGOJdCKuRrUluw/8es",
676 "2vYRPs9BcTqAqvHk9M52SSIf+1T6L53EZP8VbtXB+G29CMW4xVCK/B/YDjaNmqMwJ61dapugjnWJ",
677 "fqeXlGGa3Ch3aA7gi30T8PucNRBjLK3lF67ZDDvkWXRQXd+VMnKWHkBbCkQ/F/fMuNpHO3C00Y2p",
678 "ljna1qImBhVMvPe0F7Qx7G/YyxLRzhyUU8e23HGzp0agtNJRbydbrPV+TqJMSifJMNcZIf8wkdnC",
679 "3/xdpcXnLf2Ye3Kbd0o7utciTG+q5h6WTEk+PaNbXLLA0YyZ2VnLTcyV1QTS76aNCbV9Q1/OQ7QU",
680 "81Gg0hPa9aSiscGary6jLVwDQaik4zLsi7jPqgPVdup7pwx7uJDqRCVcVi5QoZFp/GHdex5sJTF6",
681 "9A6sja69/NLkFIWNSIeRcuGahXpF+wZeYIrqJv975s1TKYKAvp1WtzgtgWNkcbzCtROqf8rPtlAI",
682 "xkX8GLcEo9zfExyfimeXQ64qfFxEy0IMy2Hsxau9fSMqUnIjntuVVjCQtBL+94gx1RZLndE6wROV",
683 "Tq/wHwHrQzo9QL9cpPqPFJjiZ/NGZIFuudS+wsBFe6Hu8Oitf5zToLqLdtU4Smwh4ne3JsiT9lOz",
684 "N+4PPw3VSx9l5FppVwdKUWELw1dYpCOppyVWlJ3YQ8H4FQQM8EcYMG9N3Bxu79y1J1ikuvuhMmLQ",
685 "lehLTbguhbix74hd1VIQC8EjHmOZSSWbssulYwPbr6FF49tifk6PymJvulR9/u+2585HkRfbxveG",
686 "eWCz0ix1pIVfaNpESKmtLy/0mcbMg9hYDz2werz9oe0lT2BiMV6uAin6RaQcT8Vk9MPctfwae+gk",
687 "vtnZA/sOBk8MbpylaHqc0KIVHhhLFMNnkOFiucjtGo/JWTa/F6g8wWeow5ZuIJUORaYHWqegZbTg",
688 "M9dCsYYsfZGjjVMuSlDIvpYvIvFFooGPC7Ye2Jfawmq4Ut7EL/nv/dyAd2HRc5msmUhzeu/XpX3r",
689 "VlzRmf9/Qan8Dbve3QfW1Ym0o5J/KAc3z1VBho7JBr5PgCL68RiD9jZHN0VvsT4gzsEjNlW3D91U",
690 "y4RduaodBFoNTzXwlfUYULBzdiTbH75l/UmVMC4TKeTWhNzw2UezaqeGd8at3WSY7W/VR3+hvZHD",
691 "pkIjgKuNNH0DsCRa/Kk56XQoHIyvvUH/eNekNvziReqS4qgLnXUT4BRGt2BOtCifI6+X/DGHUOmW",
692 "lX7TN5b4pw5U7jwfwshtbhGZM49T8JMk15Mzrc7tM6J11TYxb5R3mQhZ8TZumJ0bMJXPM69HFyih",
693 "r5dJSEJMycxJVUh6NTQALUOoRTHIOwE+FpWI6feTv1SiZ0YpYe5DbkYJJbN7zAHbAKw25XvqR2mA",
694 "jQmOlsfX/tK8DPjP/8h5/xgAF4EUbj1tOnQCBQL8jk9vHtfsXncsprww4Z+P/Z/UrKifuFyEpBWN",
695 "8kLpF7yywE2iYdDruV9+/qKR8rC9ozNKyqQNIwtxrzYkWpE5t8K7gG4JFnrHona/Rp8dOX6VW41+",
696 "jb5LB1LEtE8MwjLp3RCUOq/+6yLzaOEgBTqzvEjDeFpg/u9DMHMr4/2TOchfjg7dl+uQ6Gsx+4Ia",
697 "9W7vivG95027p25eKL0nHvx/OqmAQEZYJL/JO58lOj0zPdJxrQ5dZksjMISzVZNn7DsxqE3zgBBu",
698 "Nzk50R8lTK3U8P12QiOAQYSTeGlYlkvfeofrfO1AitEj02m9aUkxTFd1ZZJoLQT2d3zEU5PmE4lx",
699 "MVfL5ttNnIbqfcIU2RJKNWqdw77xfjfrNc/eNpRKPZ/6z50LzBprgjzBHRfKgSWWkDxHrX0aTbgw",
700 "QFwd51+PoUWH4DkQg26uGslF5Hn3hB58+fkeLTosTANOIBNAeFZtTc4PIaLHw759zae7scY55xcT",
701 "abzlilYIftst2RZ6ntsRC3zFxduCKvL6wLfYT+TiIWJn5P7sTwZwXuSzXY+9Q3xMZ5o4Xcpz6vD9",
702 "FtTjzS69iefEYt4pXiDrZUo4ePGiLeoIFIwYB/v6GXdmG5VLLk+eKbOc9AmsX2zmvqtcvDRGQbzu",
703 "gXbH/kTH/lkNPBTmqN3ZJODUEXVohPEJ6th0xna0EVleB73Q3eNvaVUvhlJbjs3D/T17FRCebN7A",
704 "OXvzzbLE/I5kNfEmJcv4dxtIeo2uQ/z9ohSpiZzbDj1u40nJRyJxUK60wEv0nA9f/NuJ6/PEyU0b",
705 "kK16z2KH12k3Lc4+1f5fawIzkK2qJRB4wnj8VHhUW9mbJhs9vgfFmU3xrXSShY67Ygb+gYNPxxtn",
706 "4K/9eTSwIA9fv/nR33lA2lZoXALRUTmOZIl3R0gAM5h6oX1y1thIyqViBK95VZc8Pvy7G3O90M9S",
707 "4zkpyFQ36jrMazvMveMA4d39fvoaC7p90quiJfjI4yrl+ECVkCJL5MxRSa+iVcIL7Xbl0jVaGhZI",
708 "cMYmcGOBbLzhJgloM1x1zFnnj3ggJRFAM8yNnXxhavk+mA18JC+y3lqGsp6vPReRxGlGHMou17L4",
709 "It070LzkoeCzarpv8Apw59smdS5KN9qVN1WgeL7OSN8BHg94ubCvS7DW6H3/PbtRB62jFLsBhUV5",
710 "YqCIbIN5VZ81AAACpUGaIWxFfwAru8x8uT3FuOjrAeSWXmAWqq9jCNGE+N5AOv//9//xjk4uBAcA",
711 "DN96c97AVGmzRtnWwPsgcCbLrVdQJgbKp4QSmPwQnVhv0hXyBjeFWWlcvx70urEN3FK6/lvk2tQe",
712 "ZgbtlbzXluvTfnSj/Ctz7vZ+O1FjhDzzdpL7uLzewzCIW5VWLAEKUVuS2J6wNk6MR7UblcEd4EtO",
713 "Y+R4/qJgfojCsfRvA0oC5dc41Vd0erZbSkrmPTjLCn815bxlchUJMS8gQD5hJNwoKHvNLNwn7XKu",
714 "TtYIhH2wVNZvDWgzCjlPeQajnrcMsb6bZYJvNJU8HuGHvm50r7VG8qifEwmuyegAZXojh5Ul5Vvj",
715 "DW7kSAZyw8a7I6mHY3FZHd+OA3V4JZMbNliI3Tj1L6+MKTmilVialmyZagRtEMeKRdtxUPd3vVEt",
716 "rOBVIVYWdgAGA7HmZiHQUQNxLkWxbLyWVlrh5EM0Do2NdbclHxxArz90d+MSVeUOIXQ/4V9quq8C",
717 "8qVflo1gPtPMkjO2/UrdOYqhY404ReObOu/fdp4hAEDq6jhy64vOeT7XUK/Onq0rXTldtA6kvgQa",
718 "Jg+mgYSR9hfXtMbOUSLgLj/RmBSO8aAMHuJJZqf1tCM5pZ9eYUsrHmy+/z2NGalon0//uF6+33bQ",
719 "zT/RLRfBbYTjy9QrJqHLlw46lggWPGkHuPKSqk/CB7U4pNPXUbR0DdcJy9Db00wCzVzxVc6h7jfC",
720 "FgiL2Y0HVqd6bgIaVUqn/gJCEyCDVplnzebv0gg3XwMJAGu639lHu7rEvxTp1smIYjWp9R5L4Ssp",
721 "VvS07Nb+Smk1FgsMp1K3EMUT8X2Fty4VG54/Ec6bE8tNVw4/QV1VzBw7Px2/2eEhhUS+FMfbHAlD",
722 "28x00jRgAAACW0GaQjwhkymEVwArOUkEOhoFqiELtH8wgecFLiUq6WqmwAP7iGEwbYzfnHacfqUN",
723 "XAfD+CGR2ap0lAHL25ipuYtd5j2O0PU/MpaWPG/n2y5OkfTzaOpotaR5tWjN55B2XblVVqsFfBC/",
724 "mvsiPvCBWUHFChacdY5whj5mP5rqQ0dqLJCsWjrs4TWnIbL2V/Iwfj3hwI35jfo1JkTOeR+8GhOd",
725 "ma9rgiKWafCbQyhYMTDmVdvhND60Flm97EDSTjF0OC+0gD9b8Yn4tNeHipCa/aWyt0n79bMmjfcj",
726 "ntBCPjrcB5ecRTpfGHbEHy1IRj2cjkGXKC+VYoYJXBp4rd4cMd8ygLCk5nBSd8/cTaKNRjdBscOe",
727 "TXG6QEjSxj9/2pVwx9DMRVtWQR0BSaAcQcZ8W2KPSaeRC4QwmNMu2xx25CSyrDiq2rFSK/JJtmvo",
728 "IjAKq0ciEXoOgw+Ke+Ylb7ULKCS3k1p/613UNRp450uSq5b7CAHo7S0b7fBMLfNmwSjRYEhLlo0H",
729 "UaRe/I+IX2Z6XdZH9Hty/399ZA1PwZGC6EfvUJIf7CBeaxv7cu6IT2/s0zPRGthpvXpYw6A7P4Ww",
730 "z5C4V98KnIUNUanadqabKP6eXWhvbvcQHxAjiOOiKZgXZplZW2g+B2NNyJSLiR+g48DqvWR6t9S2",
731 "aGfFjdOW1Gi6oTtZ1d4p5XIslAr8mryeZ6+htSSQe4AcfVt7k+V6mOthBCYtr/LEU4ZHtl0mW987",
732 "6PK8mRFAaT8DJOUFVz1lPfzRApuPggkkyq+UMvyfKTUbCk7/DpfX8Y4s4QAAAg9BmmNJ4Q8mUwIr",
733 "/wAsWUPjZw3ksgRsxZ6n4fQjprPbkj2aUh30y0bZJnLmiXnWskvOGnCPwBnG9dEhatwX3hoxk7BN",
734 "yG+wQ4emZUpcVzcWl2T9nKQB1euucuZWHTg7TCtM/iHyfPO2vbmGsfzs70b/egIbywUH4y4BQSL1",
735 "nWc1SmpHm2zHMBcUjYLDZ5gL5vdfxn0V8FFw66G88c/LN4I5icUa7xf4fcSBKywU0ajbp1P+aJYj",
736 "BgWT6Ggu0MDLDNl54tfqd42lKosQtM1aif4WXAZFP5Ww3vrQ1rH9+utSYxqZd6N6gGtNbSNMcVia",
737 "Kn5LcnjsbBi3T3EmGqshEbcme8VHKwR3kSfBOAprrIsv6K8R+X6az+MD23rWka/2v64m1qM69D7X",
738 "a+Kcs/n0KLCJdTilyaGadopLeaAn3eYvWTeHcucMM1Fp1KgHD1tiFeO6HvobLkZlRximsA3/7Mio",
739 "hYklLIcJrZL22BH+6W9d6kZsYIsej9RM681nU6mWNjepBAfAfTbrGRrVB/h2DxC5B8YyRjgSIzQj",
740 "NYrse0rzChqbrsLl7mQ7W+1bsNKze5//9ZIa8rSsF+BXh/vgoRTDkPW/ws95B7VPCZEFChfX0icw",
741 "+tpcpN/q7NY87tUn4vESdSiMMlyhKklMjQu/G51J69ZRQLs2oUO6YfoJFqliy4qCFCrf8SZE9Fc6",
742 "DcCagAAAAodBmoRJ4Q8mUwIr/wArPWF/KOw78THwadfPqhJO0CnmR/M74/XYZLqVYKlNcEaYauf+",
743 "vrRUDJPmu75sMKy2Y+Bnslc/iAISSyWtw/h/3CF8fE5ZrbrwSNst+MSyCoNWP+8imtoX2eyojpdC",
744 "k8YP5K+cbK4SJPCkZXbYqSXYk7hO8AdSemBHgXKWiZ+UOr802aJo+98ZOIjX9hWL9bo31Gqx7cy4",
745 "ZG+W/ar/WGlzDa1xPWnPRsEdrIcZlEVGV/jGmbirkxw1lyUYoqj8Vv7Bxube9XPQlBkXOV6Lc1LT",
746 "2IzNq0V7WwVhF0kA6yxfAsFxc9krNEH8vGGntTWI608ovjatXc/CKKXw7AjJSftlTcLI0hIIGXbR",
747 "Ur0NCYNp7M4cVd/n73Rjetnixz4SAKpcz/P47UsijZG7T3SxzK2D79WS42aEalc12hQwCZ01LfmF",
748 "/H2mmGEvOzPBie1D0YT7Jh19vxa4Dd3SQ1FrDfmSUpvv4DjbYcZ2PrPpFpWtMjWqHBeoyMiZf6RP",
749 "3EfYR6z9jsVNIIHxM0bzzBQF8eeYkPgDySydxPXv9Izo+QUY94N8kWi16fI6eZSDc1G0Yo0L91jc",
750 "RQuDMGGS7B2zuf/0GbJyRhUO48UbMrqnILMrbQg1LF00Q3pH9nbGEK/RRQpRN3T/J/4IZQjwW2Ft",
751 "2ipWGztg1Jn9I4DmffKS60QC+JQcyakdVON6zDcKttIKlqeTcmAi4xzmo4QXa2dRKleS+fs3EtTd",
752 "BBtony2wK9T2Imj+NCziOSEL7Q7VuIU8kclUHrJJsSneFcxGRgIgGGUEQM8/pklwTOqab7mMmJeR",
753 "iaBrjJDEnDpkR4Vz3qXxgyn4/5x24FuTMNVPwQAAAhtBmqVJ4Q8mUwIr/wApcLwPT0/Xh9UdWqWX",
754 "Is8Wbj5K1hivmN6qIQnq+aolcegdlM/63MbHsdC6xYZC1e/Q8UjQCt9N/Ejqwms8DzeWv2qxskel",
755 "iZH0kt1QWkErWSEodq7V0ZNksctLkMGWayX33gBT368EehfIeGDolBZoqIbJfb4nqcfU+ev4OzVv",
756 "9zVqWyLck315GFmXxQKIM8pICQc8Q5es34LH1+DmnMnW8kQpVGrztQcDXhjCU3F0fOgoSsXSVWCj",
757 "c6XKqGbCwQDfJUxCfXfIT6YmQoPpVp1mpGy1wQypXus9z0bScDpyDu23hViYDntdj1O45ea0znKZ",
758 "kj1+tLHbBtqAGJ1WTcbGlF6Vya6hQhEsiiZUIC2fRxIj8/wEXCICIbr0gZ/m6gcOhE10tenvE7iy",
759 "+BKY81wLWrnzos3S6FWxYtmCRes+LLhNGOKWRuQo6SyePH2OZ90xZm8oA1MuTe3V59euVNxjAt0F",
760 "LkAc9TEiFhP/8CB+gA8mF+A8h1U01f4DVX55GzCH51jHI2xUS0L9GtsHoBxLPLK/NNel8zcnwG4X",
761 "+UusfcfEb5hh+ffnXteCE9vRGbs2n9wYW0xA3ZicklfadmWKUtMiHYBfkMSULWnkBQr4CXxjpYOs",
762 "6ygeEoA5+5B0B1SZObgZ42wWqddyyYE0NfwQAl75tfdJGqOa7OMHwBYNeatJaJK0zT2+bFaw2qWC",
763 "WwAAAitBmsZJ4Q8mUwIr/wAstkdsayRXchoFk703izqzduZ5WsyXriI9cfUdMUWvm0iGHwYIrUuj",
764 "vz3Yjou+JLwv9df2kt7MJo8u+3P5CjEKbwlz4vkE5AHTAbgXn3+Xc/MMJLgW5cm7iX3KiGNnBpbp",
765 "hhwJRlb3u91NRDr0d1IR2up/z7lKxE7XPAPFe0siPMYVlIqWNSn5KqLABPeuxxbOsvMEb27/nH1L",
766 "UVM8I2F95c1I3Lv1SpkhZXjs1JsmS9X7gsoTxkXyShGC2+zRJSGUbhCPo/q1XSFMHQyMWJ79FKPQ",
767 "SL/RpVsacN2bYwdKo4TFBw1SsKq/L1iOmqMI+4Gxnbbjojdk0ek0JIcDb4bHv1czxchF7FX1Ym8H",
768 "6IpPuE8CeNKjzQ1a1wqhEu+wl1N0x3Y37ZryCCKJRkxj0FT7bOoH3L38/yMUuh/v3aCmxY4eCkyk",
769 "b2p6ZrYMFE044anM/nMjmbErMibfRFuCz58Io1rBlF7JfkIz0R2/5vjUMVskcdbX2mm7DntncOsW",
770 "DIdg/XVmgsC9CzVzUyq4VsS/sk97lJggcddpWLNw/29egz8iLyzWHOAXCvl2fTIPkviYAOQXfVhZ",
771 "UQdxsyJUNFMTiALrZCmoQLMp2LmDbfbW8JQriDeR3fVz6P1sjT8C2yEDvzkCn7sh0aTBK+sx7BKH",
772 "1nb4320+caQepQj4TCJtCeNXjdrVcNEnjvwlcRJwFT1pT+Y7HREbHnT71XYNh4EAAAGEQZrnSeEP",
773 "JlMCK/8AKIjxcI58rm/ML255fOJW1zbznFna7lfgMQrka7OTPPsvVAV4EJXye/Uxiu9dlftmRypJ",
774 "qfDot3xwDe8lX/qAVf6pBkSlUsaLyBYtww/SUSa1bGl1JvrJCN7FXCCXbLd5R4PoYlPiDIm/DQH2",
775 "puO0StIWmrR77Isc/J1pRvdu5+mQa/n0SEHUeM2KkoRzCznfD9zaaRO7BDtvC9SYIT0uYZxrwTjx",
776 "Q7N7UERTrYG0P+vRLAhxkfohFIYl3HXyjPOvnlbUFP2oiiy6nkUFuaIyQcJawJv3GU8k4ObcKsC1",
777 "cNDXjSpsyQRrxLFaCCjke4mikyt7vs0iN0bnrNWv9HXruG9zOFEOer1ggIFTsT1Eos5CXRkgja5H",
778 "N4QUM6MhWpc5du/HgBIH8ANFcoo2kJpqcadw9r/0qk25X91MQSDJQiH8Hny2dQhqR+LFWEawiW75",
779 "3SJhn0ngZcv/mPj3mwcHv1SL9ErBqAjm4JGiDetPKYtFwANYY11OyQAAAVdBmwhJ4Q8mUwIr/wAr",
780 "Ox5HV2505jRePGgMxptW4PGIHEszV1xGZS+flSkF+aq30AaqO7u6XK9jJsuWXTfYCRQTn1bZfFQ2",
781 "2DbO5DXAxK/TUmbQleCflFzeS6/czxkL4PJ8AwOs2U+oehekgCZC8gZyHHaQSaKbNJ46gTjNsLy8",
782 "4ACQ5uNt11TPuCPqPTuh+schdw9S+/lU/6m+EyaqGZ49wDFPiBFBYXglQQBjyP9k/rqq0xL7SiLj",
783 "pe4riYg8SFUuUtOzPdWHyvxnI7Ug/0VLPGAAhgMISUnqe01d5QFf36yHpwMAHexjAZFIGQHAFaut",
784 "uMuEw6HzUZVzNdeHYxvEYOGkTo007bLwbuf/nxzrywGOxlRTYJLRdYI0mk0SdN3+LeTv1RIJwv21",
785 "+e9rT5iFOTCgzeQoekEWXLYz0X8YLq5bVCtijP7/T7w1Ck71j0aqfrEn6wtIAAABNUGbKUnhDyZT",
786 "Aiv/ACcySi7VBgOid6qZNXvhh/JsllHkMLLq0yNbQTqv/Wk2EBoSKICZwFwAD0WRzhvvReCGirep",
787 "1Fe4bxjm49/UR+OYrXRmHR18T0C83AUVeBk7KvDZmb/eHzuzEN4yfXucr/NWFJl+USVMY4r4UQ9C",
788 "ayrfEY9v6AQ6mzAdLy2UMfFxrRJ99g/Rfl8qx+m4jIZNjlrTaThzJ/3OpVmAliDfxVyg8+CVIlI3",
789 "1IykiwQrXcebgajG+av8XU1SfyAG5ibvwbtdSAxkGBcJWL387V+uTdY56w3KN2vBtoQpVKD2zb3y",
790 "azIcATZ02upwIytNcM/rpaLCdMb1myWcikE25agzLhDhOS+4zwjYz2DnW6VY0gFBAPsphhsUMnau",
791 "VVdUVHzCTSdvzEve/H8q4AAAAVdBm0pJ4Q8mUwIr/wAo+x5XKuiN1am7SkJKSMonFZDPU3f5XFcD",
792 "QSs0FLVq2idfsKwuIkt1mxIq8NgMHpzofTnDHqs/WedvAmhBgL0N5azdQa5MNKG2rJ4IAvGQY/uF",
793 "m3jKQAKzvhSS01gO1oIfizF817z9IShS4QK2WT0PeFPELqLSpED8eNOpVTR96vmwpk/WBKRVJdTQ",
794 "JzjiCQ5pgEwjtvk7KqoS0+lwXSbvIrXkYm8DignEts3DLNoLHrPjXlQmbIop76JZSyJEtB+91GrL",
795 "wo6Km5GeebyA2E6qGL3xSkpppej/ruoFprSKrH60UMbrq/SK7eCo+1QFoySPQmqDFsMGiQFqvtld",
796 "5BXDYdVI4yRaoyN7Y7wi83HRC6eVazuHU9OtIY3xJJApBWq1aJOsYwc38aTC3ee863Aa/4n9Lk4D",
797 "AtyFYHNZjB5m2e2vk8G2Gny9YFlBAAABQEGba0nhDyZTAiv/ACoZSZQfHxhfQxEqOBQrP+L3Dmgv",
798 "HSJQtB1iVkcLTxm+vagLHBLG91OGnopwrr7gT/loDypIhoRxjcwAAOeg/jN4WBbXzCJtnWGGllUC",
799 "SdtUZQzKOSp9iM4yX18C6jrY4Sq6R9PUV/lEGNveJR4gw4FMve7110XdEPL1O2VTdHvdqeANyaq0",
800 "nLdEmtXnrzvdrFlBaUvmaR4EdlkqGkvkZKWJej8Vq+msbKa7JdbxjwZtRufiyGfD/NVqMgSrYRzw",
801 "9z/a8Zwbr+9+19CxlWD5bCuAEfPmjY6kZJE2L/CQI6+tnCBTXOmWZtZMBoCLGOf7G2uAC3+kFlbo",
802 "h9as5WCkO6+iqXq29dyhKnsHInorRYsPlgxIXyU1Om/Kyhj1DJV0Am9WJK3Dln0zNUH0q6ZTOnZc",
803 "FD36AAABYkGbjEnhDyZTAiv/ACcwdIOLRFfoGK2ZkKsvgMwG0m0qsY0vMLPSzefc+ebp/aztyF7M",
804 "lsBz/fBeNtxFBcsKgR4pf65GvdfOMHah0ltZ918sMDmXUEZMeRHy/xpnWpTLeGz6uTs/7MATPmU5",
805 "BgHbT/DkD8QeaZnFAzidyFCXDz2l/jaKhEdgqipbB2pH0+fQ039r05z9axxEWGmaLQjg6x9+po1o",
806 "24yhkVO7m03YwWmPyCgy8cOwrvRyJkXJpRN4m8ZBS1zwY80HeN/VyMQQJSMwsTo7R1XMerSFuyx0",
807 "nz+8qOuhiqykc2ohCCsXia/+kIKbJ5Vs+cbWtvkqBKIDSfU7FhAd3GjcY/xar0EVmi6wWFTugAog",
808 "R3I7mTrQDdlTAqYgqO7Gn5NMXQVHu2i1zhFSdo9GjMbeGnbkJwsFbQ2XkoKRIDpuW7AewC9AEBt0",
809 "Ox/Ah6dGXfXO1jl8pEApj2RFmgAAAPlBm61J4Q8mUwIr/wAlR+eW/VZ7bSrmwwMA62G05DZ7p/5F",
810 "UugsSsQdonUq6abtbU5hjFr+I1lPgoiV5c3CkTQZS+K5zivdo+Ti2P4K90xXANp8dSMAu85uJIOC",
811 "Qn2TXbEnNDifLB+3V84ht5tj4lvTaZx317BcliV8D5v2zZQW8RO1mUbuJEBItst8E7hfE+ZXj7tf",
812 "DxNZPTvtpFyUv0fH1cTg1pr2VLy0d0zQLiA58dg+GkRvR1/hs2LyifBgHcj6eTWz0vsypVn9iPXR",
813 "H/unJ6i8cfFL69NO24tQ9QQB+nDFhoP2cRhkAvhHwn56n5PppBD/oxni2f8AAAE9QZvOSeEPJlMC",
814 "K/8AJjAXVGf+Kj2XNJnFeKC/gr7dJDTC2ngpd4WeAHlg04GuJKnn9hAmiECxxo9qM1IYMRiB85t6",
815 "gALnlm9sRqGmioyzAm18RJndc9Ah8RlpGzr+44a6ntRaPx0cIwNIWAA8buL2JP00dmfjNqEiAlCa",
816 "8OdV8FQxjp1vDXsGcAGF3Qbd62KEpkimeI3wH2nuXpbDHm8/ZKOR49s5ifUCkxCoJpfp43aC0lTz",
817 "h2NXpcfVw6h0QnK8G60R4ZAxOxaJB7c0nn8ixXSU2JVY24EtGMF53nxJnHfzUheewUfBOGYSxeo8",
818 "oK7oUCqX4rztzDwoc2QywNqQUJUkFrqIN+sb5ecYvX24Zujn+ZzTW6UDAF3R6WdNyJyRAremgC8s",
819 "pSflTqygQNGfHyGkfIEEJJaFo/pBCBkAAAEWQZvvSeEPJlMCK/8AKI41fuekXG59Knbw4Y6YJrit",
820 "sh9VtQgc3QKvVmxrzzo7f4aXn8N74eyP4b2lV1Z2Q+rohxps7EHTkOY9jLdqxI3MXe7je4g2qepz",
821 "71+hY+jYdX+9LO0kA0Zg3NfyAlIRX7k6c/YHAZNtNaGZgTBMqiPgmEjiJH9Luk7shbgr+srfwiYw",
822 "BX9rdS3fQNNFwcT8orQC+F60LAY9+GbFo2Sw3Ld4Tw9jq9yJtrY8RtHAdzytyek/mv2+j2TbTvAQ",
823 "KbbCYtdC8E/KtR4V5ZTSScr5Wb63vmbw7UpddEXYvl55pARyyvMxWNSh3Li4GF8Jk5JBi5B5ASQw",
824 "xCMYpX5hkAMc+d8tl2bT+IEvUTsAAAElQZoQSeEPJlMCK/8AJIAzFZs00JJ0yfm8CZiew4xWdArL",
825 "klEvBVXo/+ukPLu3XP9HFOfsme3T6BJEKmPPgZw/Lxnraq6Sl2kLVW19YU1qmqgfv+80LkZaWU5g",
826 "RAH4hqyo3bFYcbuY2SC3IW5Wm69gtYyAXOdbAYSEHA16fvCeRQjHEsxKVndJdrRAlrGHsKgUBQ3U",
827 "p/ZXIy1vkdFOfKSjpuZnswkuqr8NZI5tJ/dnBSErBTNWPaNwWV7nNomC0EYVGo+geGBhLXzaLw0U",
828 "AOCYGjiPc3803BDw1GLoLIXjrIFJxwRfBNIAXYZAglu30oYzhpAfRWSprkeULMWYJTlWvbUQ5CNe",
829 "wSZssuDWIRAc3w8AcFaywwn+YSGhtR8VI1OGjYkfBbcAAAD8QZoxSeEPJlMCK/8AJdokjCUETRw/",
830 "nciVPtaZQSBP/VxAQSITASEzlJBl9Na1r0DJhLOz279+KQLtl/xHZ8vAKc528mTMTqtWs4sFbeVg",
831 "HWyBpHcHEtgTzjIqEinp/MPuUXF5poo8YLSSMFn9Ozx2FbU5/Kh9A39oN9NHQflVxV1NA6yT/84H",
832 "HyfMtfdSMS8KTvAEE2lDs14VQayNs5ctjXboQT7xMBf5OLj6thhPvgaDrFB2o/PV9ouK147lruWT",
833 "P2mkoA9oDIMYW1pcBx4yyV/t9GOPZ3aXneMUb2fFmUCX43BjXfUDMaa4GO2/Ankj3UEQwDxA7ZlN",
834 "UQK2AAAA4UGaUknhDyZTAiv/ACJHv33I08bkhybYiJ/JiiheW5zMPBu4n5CxGr3frhE7TkLh0vPk",
835 "tM8m/AhaDiJisdk5QXNe/4WmxEDSAyaVi4eUVu0iHT2ly/KNTGqiORqA2oKpTjh84nYbrpXwnGv9",
836 "SOf/34Z06xN6Yo3t35UZrP8nlcs/63GtnEmnUwVZHBYfPM6bs5M5AeBfAQ/9mIqu7vnEst+5O2wp",
837 "PjzdItjwGCZ2ApHVjGnYYFomlA9nm6AXnxNIWHIsDgxCk3zx+6QbXipu/CWLG1Wf0WIbt4C0JPVl",
838 "3TEb0QAAAMlBmnNJ4Q8mUwIr/wAVV64OfTKmlktYOqZHH1W1DhPy/X/6sD4T6hRdzfOgNtTOX2Ic",
839 "kRJHshfBQVkJIzns079io6kpJFCcS3VD4zrWCn/dNaGV0kWTpFBRuusfn8F0C0R/EhsQeyTsdZft",
840 "EkLGb5tq+nrir3vfmeb7rjmWJRXkIrTEKu8pIuAd+4FBGp8ARgGe80Jqpp//s1433HqBFqXsIFJT",
841 "mU8j/toF9HyueI1Ea4uvsQ6NANGcYCbOAKCmbNiwABMCFaiUTMAAAAPSbW9vdgAAAGxtdmhkAAAA",
842 "AHwlsIB8JbCAAAAD6AAAAyAAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAA",
843 "AAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAv10cmFrAAAAXHRraGQA",
844 "AAAPfCWwgHwlsIAAAAABAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAB",
845 "AAAAAAAAAAAAAAAAAABAAAAAAY4AAAGGAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAMgAAAA",
846 "AgABAAAAAAJ1bWRpYQAAACBtZGhkAAAAAHwlsIB8JbCAAAAAGQAAABRVxAAAAAAALWhkbHIAAAAA",
847 "AAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAACIG1pbmYAAAAUdm1oZAAAAAEAAAAA",
848 "AAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAeBzdGJsAAAAtHN0c2QA",
849 "AAAAAAAAAQAAAKRhdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAY4BhgBIAAAASAAAAAAAAAAB",
850 "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGP//AAAAMmF2Y0MBZAAV/+EAGWdkABWs",
851 "2UGQz6mhAAADAAEAAAMAMg8WLZYBAAZo6+PLIsAAAAAcdXVpZGtoQPJfJE/FujmlG88DI/MAAAAA",
852 "AAAAGHN0dHMAAAAAAAAAAQAAABQAAAABAAAAFHN0c3MAAAAAAAAAAQAAAAEAAAAYY3R0cwAAAAAA",
853 "AAABAAAAFAAAAAIAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAEAAAABAAAAZHN0c3oAAAAAAAAAAAAA",
854 "ABQAAA05AAACqQAAAl8AAAITAAACiwAAAh8AAAIvAAABiAAAAVsAAAE5AAABWwAAAUQAAAFmAAAA",
855 "/QAAAUEAAAEaAAABKQAAAQAAAADlAAAAzQAAAGBzdGNvAAAAAAAAABQAAAAsAAANZQAAEA4AABJt",
856 "AAAUgAAAFwsAABkqAAAbWQAAHOEAAB48AAAfdQAAINAAACIUAAAjegAAJHcAACW4AAAm0gAAJ/sA",
857 "ACj7AAAp4AAAAGF1ZHRhAAAAWW1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAA",
858 "AAAAAAAALGlsc3QAAAAkqXRvbwAAABxkYXRhAAAAAQAAAABMYXZmNTIuMTExLjA=",
719 "<video controls alt=\"test\" src=\"data:video/x-m4v;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAAqiW1kYXQAAAKMBgX//4jcRem9\n",
720 "5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTE4IC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENv\n",
721 "cHlsZWZ0IDIwMDMtMjAxMSAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9w\n",
722 "dGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1o\n",
723 "ZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2\n",
724 "IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MSBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0\n",
725 "X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTEgc2xpY2VkX3RocmVhZHM9MCBu\n",
726 "cj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9p\n",
727 "bnRyYT0wIGJmcmFtZXM9MyBiX3B5cmFtaWQ9MiBiX2FkYXB0PTEgYl9iaWFzPTAgZGlyZWN0PTEg\n",
728 "d2VpZ2h0Yj0xIG9wZW5fZ29wPTAgd2VpZ2h0cD0yIGtleWludD0yNTAga2V5aW50X21pbj0yNSBz\n",
729 "Y2VuZWN1dD00MCBpbnRyYV9yZWZyZXNoPTAgcmNfbG9va2FoZWFkPTQwIHJjPWNyZiBtYnRyZWU9\n",
730 "MSBjcmY9MjMuMCBxY29tcD0wLjYwIHFwbWluPTAgcXBtYXg9NjkgcXBzdGVwPTQgaXBfcmF0aW89\n",
731 "MS40MCBhcT0xOjEuMDAAgAAACqVliIQAV/0TAAI/3gU2tIW7KawwaCmQGTGHKmuYAAADACBcshU+\n",
732 "yICkgAA14AHowiEeT6ei7v7h3Hu0i2fpUBLGBIkbCMP3Vfz+9BVGCDXnw9Uv5o3iN030tb7eq6rs\n",
733 "EEhHs2azbdTiE9Csz5Zm6SiUWRdmB43hbD5i6syATuODUJd7LM3d9cbFpc7zFlu5y3vUmNGd6urp\n",
734 "vKKT9iyleIyTuR1sVS431DhevGfkUllVeIznYUe2USoMW1tufETjyRdmGldN6eNlhAOsGAH4z+Hk\n",
735 "rwKecPPU7Q5T4gDAIxj9hW84jVExMTSTHxkPTq1I4OotgUxURCGTsw60k/ezPNmNg38j1bqaGmPc\n",
736 "ruDKEIBDsK5qEytFB90Q68s0h2wmlf2KXd5bleBefiK+/p47ZsyUO4IdlW25rRy+HLjt6wQXfYee\n",
737 "3IkiQOoOK+U7u/lxcl78zfxwIoEMjUUSKNZjkp8clnmecDDJ3Kz+viF7bPklk7N6QRyizAKPIIpn\n",
738 "NJUuMWQmqeL2Or6cr4D0/0tOym+4tficxmhuEONKUtO2pPn3hRjMllkd12tXp70fLTfxy0dwB70M\n",
739 "L9iLEcItHb7zVupHlP5RxdvecpREw+OsIPr9KWilIesNE19jgIbT+TkiRBjOoKvUuwcQnKg7fOTH\n",
740 "VoLvnKuAfea+oujEdm1Rwd2tEOnkF+ZC11WaNQsiNR/eJ9EnUXjXDYGfhB+Oe7qj8nYTT+eOXg1c\n",
741 "uJNgLXEs4vOheWEjQOqfIWMQc3DmTof5s0ksBmUQ3PQ+UHPxZSnmOEZB+j6xT3wbm7HGzDjWtSg1\n",
742 "SjTxd1EiJ8xA4SIxxR8WIKLg+TwFxJNS7Laxq7Uglu3AkXe82P1JCdJX5PsbFbxuDbuJgakzRcTw\n",
743 "MLLSKCiizS/eCW0uJed/lev9yb80kKlVET4S219cn/zhkpeDV83cHYOr+sJQKDRk/Wh2c7fsuxfx\n",
744 "aEH/6reSmvFDsAnXAyPXliJ3G4VG3OkEM5K5WyGGrBizZbTrdGsBnzj5VSGGOJdCKuRrUluw/8es\n",
745 "2vYRPs9BcTqAqvHk9M52SSIf+1T6L53EZP8VbtXB+G29CMW4xVCK/B/YDjaNmqMwJ61dapugjnWJ\n",
746 "fqeXlGGa3Ch3aA7gi30T8PucNRBjLK3lF67ZDDvkWXRQXd+VMnKWHkBbCkQ/F/fMuNpHO3C00Y2p\n",
747 "ljna1qImBhVMvPe0F7Qx7G/YyxLRzhyUU8e23HGzp0agtNJRbydbrPV+TqJMSifJMNcZIf8wkdnC\n",
748 "3/xdpcXnLf2Ye3Kbd0o7utciTG+q5h6WTEk+PaNbXLLA0YyZ2VnLTcyV1QTS76aNCbV9Q1/OQ7QU\n",
749 "81Gg0hPa9aSiscGary6jLVwDQaik4zLsi7jPqgPVdup7pwx7uJDqRCVcVi5QoZFp/GHdex5sJTF6\n",
750 "9A6sja69/NLkFIWNSIeRcuGahXpF+wZeYIrqJv975s1TKYKAvp1WtzgtgWNkcbzCtROqf8rPtlAI\n",
751 "xkX8GLcEo9zfExyfimeXQ64qfFxEy0IMy2Hsxau9fSMqUnIjntuVVjCQtBL+94gx1RZLndE6wROV\n",
752 "Tq/wHwHrQzo9QL9cpPqPFJjiZ/NGZIFuudS+wsBFe6Hu8Oitf5zToLqLdtU4Smwh4ne3JsiT9lOz\n",
753 "N+4PPw3VSx9l5FppVwdKUWELw1dYpCOppyVWlJ3YQ8H4FQQM8EcYMG9N3Bxu79y1J1ikuvuhMmLQ\n",
754 "lehLTbguhbix74hd1VIQC8EjHmOZSSWbssulYwPbr6FF49tifk6PymJvulR9/u+2585HkRfbxveG\n",
755 "eWCz0ix1pIVfaNpESKmtLy/0mcbMg9hYDz2werz9oe0lT2BiMV6uAin6RaQcT8Vk9MPctfwae+gk\n",
756 "vtnZA/sOBk8MbpylaHqc0KIVHhhLFMNnkOFiucjtGo/JWTa/F6g8wWeow5ZuIJUORaYHWqegZbTg\n",
757 "M9dCsYYsfZGjjVMuSlDIvpYvIvFFooGPC7Ye2Jfawmq4Ut7EL/nv/dyAd2HRc5msmUhzeu/XpX3r\n",
758 "VlzRmf9/Qan8Dbve3QfW1Ym0o5J/KAc3z1VBho7JBr5PgCL68RiD9jZHN0VvsT4gzsEjNlW3D91U\n",
759 "y4RduaodBFoNTzXwlfUYULBzdiTbH75l/UmVMC4TKeTWhNzw2UezaqeGd8at3WSY7W/VR3+hvZHD\n",
760 "pkIjgKuNNH0DsCRa/Kk56XQoHIyvvUH/eNekNvziReqS4qgLnXUT4BRGt2BOtCifI6+X/DGHUOmW\n",
761 "lX7TN5b4pw5U7jwfwshtbhGZM49T8JMk15Mzrc7tM6J11TYxb5R3mQhZ8TZumJ0bMJXPM69HFyih\n",
762 "r5dJSEJMycxJVUh6NTQALUOoRTHIOwE+FpWI6feTv1SiZ0YpYe5DbkYJJbN7zAHbAKw25XvqR2mA\n",
763 "jQmOlsfX/tK8DPjP/8h5/xgAF4EUbj1tOnQCBQL8jk9vHtfsXncsprww4Z+P/Z/UrKifuFyEpBWN\n",
764 "8kLpF7yywE2iYdDruV9+/qKR8rC9ozNKyqQNIwtxrzYkWpE5t8K7gG4JFnrHona/Rp8dOX6VW41+\n",
765 "jb5LB1LEtE8MwjLp3RCUOq/+6yLzaOEgBTqzvEjDeFpg/u9DMHMr4/2TOchfjg7dl+uQ6Gsx+4Ia\n",
766 "9W7vivG95027p25eKL0nHvx/OqmAQEZYJL/JO58lOj0zPdJxrQ5dZksjMISzVZNn7DsxqE3zgBBu\n",
767 "Nzk50R8lTK3U8P12QiOAQYSTeGlYlkvfeofrfO1AitEj02m9aUkxTFd1ZZJoLQT2d3zEU5PmE4lx\n",
768 "MVfL5ttNnIbqfcIU2RJKNWqdw77xfjfrNc/eNpRKPZ/6z50LzBprgjzBHRfKgSWWkDxHrX0aTbgw\n",
769 "QFwd51+PoUWH4DkQg26uGslF5Hn3hB58+fkeLTosTANOIBNAeFZtTc4PIaLHw759zae7scY55xcT\n",
770 "abzlilYIftst2RZ6ntsRC3zFxduCKvL6wLfYT+TiIWJn5P7sTwZwXuSzXY+9Q3xMZ5o4Xcpz6vD9\n",
771 "FtTjzS69iefEYt4pXiDrZUo4ePGiLeoIFIwYB/v6GXdmG5VLLk+eKbOc9AmsX2zmvqtcvDRGQbzu\n",
772 "gXbH/kTH/lkNPBTmqN3ZJODUEXVohPEJ6th0xna0EVleB73Q3eNvaVUvhlJbjs3D/T17FRCebN7A\n",
773 "OXvzzbLE/I5kNfEmJcv4dxtIeo2uQ/z9ohSpiZzbDj1u40nJRyJxUK60wEv0nA9f/NuJ6/PEyU0b\n",
774 "kK16z2KH12k3Lc4+1f5fawIzkK2qJRB4wnj8VHhUW9mbJhs9vgfFmU3xrXSShY67Ygb+gYNPxxtn\n",
775 "4K/9eTSwIA9fv/nR33lA2lZoXALRUTmOZIl3R0gAM5h6oX1y1thIyqViBK95VZc8Pvy7G3O90M9S\n",
776 "4zkpyFQ36jrMazvMveMA4d39fvoaC7p90quiJfjI4yrl+ECVkCJL5MxRSa+iVcIL7Xbl0jVaGhZI\n",
777 "cMYmcGOBbLzhJgloM1x1zFnnj3ggJRFAM8yNnXxhavk+mA18JC+y3lqGsp6vPReRxGlGHMou17L4\n",
778 "It070LzkoeCzarpv8Apw59smdS5KN9qVN1WgeL7OSN8BHg94ubCvS7DW6H3/PbtRB62jFLsBhUV5\n",
779 "YqCIbIN5VZ81AAACpUGaIWxFfwAru8x8uT3FuOjrAeSWXmAWqq9jCNGE+N5AOv//9//xjk4uBAcA\n",
780 "DN96c97AVGmzRtnWwPsgcCbLrVdQJgbKp4QSmPwQnVhv0hXyBjeFWWlcvx70urEN3FK6/lvk2tQe\n",
781 "ZgbtlbzXluvTfnSj/Ctz7vZ+O1FjhDzzdpL7uLzewzCIW5VWLAEKUVuS2J6wNk6MR7UblcEd4EtO\n",
782 "Y+R4/qJgfojCsfRvA0oC5dc41Vd0erZbSkrmPTjLCn815bxlchUJMS8gQD5hJNwoKHvNLNwn7XKu\n",
783 "TtYIhH2wVNZvDWgzCjlPeQajnrcMsb6bZYJvNJU8HuGHvm50r7VG8qifEwmuyegAZXojh5Ul5Vvj\n",
784 "DW7kSAZyw8a7I6mHY3FZHd+OA3V4JZMbNliI3Tj1L6+MKTmilVialmyZagRtEMeKRdtxUPd3vVEt\n",
785 "rOBVIVYWdgAGA7HmZiHQUQNxLkWxbLyWVlrh5EM0Do2NdbclHxxArz90d+MSVeUOIXQ/4V9quq8C\n",
786 "8qVflo1gPtPMkjO2/UrdOYqhY404ReObOu/fdp4hAEDq6jhy64vOeT7XUK/Onq0rXTldtA6kvgQa\n",
787 "Jg+mgYSR9hfXtMbOUSLgLj/RmBSO8aAMHuJJZqf1tCM5pZ9eYUsrHmy+/z2NGalon0//uF6+33bQ\n",
788 "zT/RLRfBbYTjy9QrJqHLlw46lggWPGkHuPKSqk/CB7U4pNPXUbR0DdcJy9Db00wCzVzxVc6h7jfC\n",
789 "FgiL2Y0HVqd6bgIaVUqn/gJCEyCDVplnzebv0gg3XwMJAGu639lHu7rEvxTp1smIYjWp9R5L4Ssp\n",
790 "VvS07Nb+Smk1FgsMp1K3EMUT8X2Fty4VG54/Ec6bE8tNVw4/QV1VzBw7Px2/2eEhhUS+FMfbHAlD\n",
791 "28x00jRgAAACW0GaQjwhkymEVwArOUkEOhoFqiELtH8wgecFLiUq6WqmwAP7iGEwbYzfnHacfqUN\n",
792 "XAfD+CGR2ap0lAHL25ipuYtd5j2O0PU/MpaWPG/n2y5OkfTzaOpotaR5tWjN55B2XblVVqsFfBC/\n",
793 "mvsiPvCBWUHFChacdY5whj5mP5rqQ0dqLJCsWjrs4TWnIbL2V/Iwfj3hwI35jfo1JkTOeR+8GhOd\n",
794 "ma9rgiKWafCbQyhYMTDmVdvhND60Flm97EDSTjF0OC+0gD9b8Yn4tNeHipCa/aWyt0n79bMmjfcj\n",
795 "ntBCPjrcB5ecRTpfGHbEHy1IRj2cjkGXKC+VYoYJXBp4rd4cMd8ygLCk5nBSd8/cTaKNRjdBscOe\n",
796 "TXG6QEjSxj9/2pVwx9DMRVtWQR0BSaAcQcZ8W2KPSaeRC4QwmNMu2xx25CSyrDiq2rFSK/JJtmvo\n",
797 "IjAKq0ciEXoOgw+Ke+Ylb7ULKCS3k1p/613UNRp450uSq5b7CAHo7S0b7fBMLfNmwSjRYEhLlo0H\n",
798 "UaRe/I+IX2Z6XdZH9Hty/399ZA1PwZGC6EfvUJIf7CBeaxv7cu6IT2/s0zPRGthpvXpYw6A7P4Ww\n",
799 "z5C4V98KnIUNUanadqabKP6eXWhvbvcQHxAjiOOiKZgXZplZW2g+B2NNyJSLiR+g48DqvWR6t9S2\n",
800 "aGfFjdOW1Gi6oTtZ1d4p5XIslAr8mryeZ6+htSSQe4AcfVt7k+V6mOthBCYtr/LEU4ZHtl0mW987\n",
801 "6PK8mRFAaT8DJOUFVz1lPfzRApuPggkkyq+UMvyfKTUbCk7/DpfX8Y4s4QAAAg9BmmNJ4Q8mUwIr\n",
802 "/wAsWUPjZw3ksgRsxZ6n4fQjprPbkj2aUh30y0bZJnLmiXnWskvOGnCPwBnG9dEhatwX3hoxk7BN\n",
803 "yG+wQ4emZUpcVzcWl2T9nKQB1euucuZWHTg7TCtM/iHyfPO2vbmGsfzs70b/egIbywUH4y4BQSL1\n",
804 "nWc1SmpHm2zHMBcUjYLDZ5gL5vdfxn0V8FFw66G88c/LN4I5icUa7xf4fcSBKywU0ajbp1P+aJYj\n",
805 "BgWT6Ggu0MDLDNl54tfqd42lKosQtM1aif4WXAZFP5Ww3vrQ1rH9+utSYxqZd6N6gGtNbSNMcVia\n",
806 "Kn5LcnjsbBi3T3EmGqshEbcme8VHKwR3kSfBOAprrIsv6K8R+X6az+MD23rWka/2v64m1qM69D7X\n",
807 "a+Kcs/n0KLCJdTilyaGadopLeaAn3eYvWTeHcucMM1Fp1KgHD1tiFeO6HvobLkZlRximsA3/7Mio\n",
808 "hYklLIcJrZL22BH+6W9d6kZsYIsej9RM681nU6mWNjepBAfAfTbrGRrVB/h2DxC5B8YyRjgSIzQj\n",
809 "NYrse0rzChqbrsLl7mQ7W+1bsNKze5//9ZIa8rSsF+BXh/vgoRTDkPW/ws95B7VPCZEFChfX0icw\n",
810 "+tpcpN/q7NY87tUn4vESdSiMMlyhKklMjQu/G51J69ZRQLs2oUO6YfoJFqliy4qCFCrf8SZE9Fc6\n",
811 "DcCagAAAAodBmoRJ4Q8mUwIr/wArPWF/KOw78THwadfPqhJO0CnmR/M74/XYZLqVYKlNcEaYauf+\n",
812 "vrRUDJPmu75sMKy2Y+Bnslc/iAISSyWtw/h/3CF8fE5ZrbrwSNst+MSyCoNWP+8imtoX2eyojpdC\n",
813 "k8YP5K+cbK4SJPCkZXbYqSXYk7hO8AdSemBHgXKWiZ+UOr802aJo+98ZOIjX9hWL9bo31Gqx7cy4\n",
814 "ZG+W/ar/WGlzDa1xPWnPRsEdrIcZlEVGV/jGmbirkxw1lyUYoqj8Vv7Bxube9XPQlBkXOV6Lc1LT\n",
815 "2IzNq0V7WwVhF0kA6yxfAsFxc9krNEH8vGGntTWI608ovjatXc/CKKXw7AjJSftlTcLI0hIIGXbR\n",
816 "Ur0NCYNp7M4cVd/n73Rjetnixz4SAKpcz/P47UsijZG7T3SxzK2D79WS42aEalc12hQwCZ01LfmF\n",
817 "/H2mmGEvOzPBie1D0YT7Jh19vxa4Dd3SQ1FrDfmSUpvv4DjbYcZ2PrPpFpWtMjWqHBeoyMiZf6RP\n",
818 "3EfYR6z9jsVNIIHxM0bzzBQF8eeYkPgDySydxPXv9Izo+QUY94N8kWi16fI6eZSDc1G0Yo0L91jc\n",
819 "RQuDMGGS7B2zuf/0GbJyRhUO48UbMrqnILMrbQg1LF00Q3pH9nbGEK/RRQpRN3T/J/4IZQjwW2Ft\n",
820 "2ipWGztg1Jn9I4DmffKS60QC+JQcyakdVON6zDcKttIKlqeTcmAi4xzmo4QXa2dRKleS+fs3EtTd\n",
821 "BBtony2wK9T2Imj+NCziOSEL7Q7VuIU8kclUHrJJsSneFcxGRgIgGGUEQM8/pklwTOqab7mMmJeR\n",
822 "iaBrjJDEnDpkR4Vz3qXxgyn4/5x24FuTMNVPwQAAAhtBmqVJ4Q8mUwIr/wApcLwPT0/Xh9UdWqWX\n",
823 "Is8Wbj5K1hivmN6qIQnq+aolcegdlM/63MbHsdC6xYZC1e/Q8UjQCt9N/Ejqwms8DzeWv2qxskel\n",
824 "iZH0kt1QWkErWSEodq7V0ZNksctLkMGWayX33gBT368EehfIeGDolBZoqIbJfb4nqcfU+ev4OzVv\n",
825 "9zVqWyLck315GFmXxQKIM8pICQc8Q5es34LH1+DmnMnW8kQpVGrztQcDXhjCU3F0fOgoSsXSVWCj\n",
826 "c6XKqGbCwQDfJUxCfXfIT6YmQoPpVp1mpGy1wQypXus9z0bScDpyDu23hViYDntdj1O45ea0znKZ\n",
827 "kj1+tLHbBtqAGJ1WTcbGlF6Vya6hQhEsiiZUIC2fRxIj8/wEXCICIbr0gZ/m6gcOhE10tenvE7iy\n",
828 "+BKY81wLWrnzos3S6FWxYtmCRes+LLhNGOKWRuQo6SyePH2OZ90xZm8oA1MuTe3V59euVNxjAt0F\n",
829 "LkAc9TEiFhP/8CB+gA8mF+A8h1U01f4DVX55GzCH51jHI2xUS0L9GtsHoBxLPLK/NNel8zcnwG4X\n",
830 "+UusfcfEb5hh+ffnXteCE9vRGbs2n9wYW0xA3ZicklfadmWKUtMiHYBfkMSULWnkBQr4CXxjpYOs\n",
831 "6ygeEoA5+5B0B1SZObgZ42wWqddyyYE0NfwQAl75tfdJGqOa7OMHwBYNeatJaJK0zT2+bFaw2qWC\n",
832 "WwAAAitBmsZJ4Q8mUwIr/wAstkdsayRXchoFk703izqzduZ5WsyXriI9cfUdMUWvm0iGHwYIrUuj\n",
833 "vz3Yjou+JLwv9df2kt7MJo8u+3P5CjEKbwlz4vkE5AHTAbgXn3+Xc/MMJLgW5cm7iX3KiGNnBpbp\n",
834 "hhwJRlb3u91NRDr0d1IR2up/z7lKxE7XPAPFe0siPMYVlIqWNSn5KqLABPeuxxbOsvMEb27/nH1L\n",
835 "UVM8I2F95c1I3Lv1SpkhZXjs1JsmS9X7gsoTxkXyShGC2+zRJSGUbhCPo/q1XSFMHQyMWJ79FKPQ\n",
836 "SL/RpVsacN2bYwdKo4TFBw1SsKq/L1iOmqMI+4Gxnbbjojdk0ek0JIcDb4bHv1czxchF7FX1Ym8H\n",
837 "6IpPuE8CeNKjzQ1a1wqhEu+wl1N0x3Y37ZryCCKJRkxj0FT7bOoH3L38/yMUuh/v3aCmxY4eCkyk\n",
838 "b2p6ZrYMFE044anM/nMjmbErMibfRFuCz58Io1rBlF7JfkIz0R2/5vjUMVskcdbX2mm7DntncOsW\n",
839 "DIdg/XVmgsC9CzVzUyq4VsS/sk97lJggcddpWLNw/29egz8iLyzWHOAXCvl2fTIPkviYAOQXfVhZ\n",
840 "UQdxsyJUNFMTiALrZCmoQLMp2LmDbfbW8JQriDeR3fVz6P1sjT8C2yEDvzkCn7sh0aTBK+sx7BKH\n",
841 "1nb4320+caQepQj4TCJtCeNXjdrVcNEnjvwlcRJwFT1pT+Y7HREbHnT71XYNh4EAAAGEQZrnSeEP\n",
842 "JlMCK/8AKIjxcI58rm/ML255fOJW1zbznFna7lfgMQrka7OTPPsvVAV4EJXye/Uxiu9dlftmRypJ\n",
843 "qfDot3xwDe8lX/qAVf6pBkSlUsaLyBYtww/SUSa1bGl1JvrJCN7FXCCXbLd5R4PoYlPiDIm/DQH2\n",
844 "puO0StIWmrR77Isc/J1pRvdu5+mQa/n0SEHUeM2KkoRzCznfD9zaaRO7BDtvC9SYIT0uYZxrwTjx\n",
845 "Q7N7UERTrYG0P+vRLAhxkfohFIYl3HXyjPOvnlbUFP2oiiy6nkUFuaIyQcJawJv3GU8k4ObcKsC1\n",
846 "cNDXjSpsyQRrxLFaCCjke4mikyt7vs0iN0bnrNWv9HXruG9zOFEOer1ggIFTsT1Eos5CXRkgja5H\n",
847 "N4QUM6MhWpc5du/HgBIH8ANFcoo2kJpqcadw9r/0qk25X91MQSDJQiH8Hny2dQhqR+LFWEawiW75\n",
848 "3SJhn0ngZcv/mPj3mwcHv1SL9ErBqAjm4JGiDetPKYtFwANYY11OyQAAAVdBmwhJ4Q8mUwIr/wAr\n",
849 "Ox5HV2505jRePGgMxptW4PGIHEszV1xGZS+flSkF+aq30AaqO7u6XK9jJsuWXTfYCRQTn1bZfFQ2\n",
850 "2DbO5DXAxK/TUmbQleCflFzeS6/czxkL4PJ8AwOs2U+oehekgCZC8gZyHHaQSaKbNJ46gTjNsLy8\n",
851 "4ACQ5uNt11TPuCPqPTuh+schdw9S+/lU/6m+EyaqGZ49wDFPiBFBYXglQQBjyP9k/rqq0xL7SiLj\n",
852 "pe4riYg8SFUuUtOzPdWHyvxnI7Ug/0VLPGAAhgMISUnqe01d5QFf36yHpwMAHexjAZFIGQHAFaut\n",
853 "uMuEw6HzUZVzNdeHYxvEYOGkTo007bLwbuf/nxzrywGOxlRTYJLRdYI0mk0SdN3+LeTv1RIJwv21\n",
854 "+e9rT5iFOTCgzeQoekEWXLYz0X8YLq5bVCtijP7/T7w1Ck71j0aqfrEn6wtIAAABNUGbKUnhDyZT\n",
855 "Aiv/ACcySi7VBgOid6qZNXvhh/JsllHkMLLq0yNbQTqv/Wk2EBoSKICZwFwAD0WRzhvvReCGirep\n",
856 "1Fe4bxjm49/UR+OYrXRmHR18T0C83AUVeBk7KvDZmb/eHzuzEN4yfXucr/NWFJl+USVMY4r4UQ9C\n",
857 "ayrfEY9v6AQ6mzAdLy2UMfFxrRJ99g/Rfl8qx+m4jIZNjlrTaThzJ/3OpVmAliDfxVyg8+CVIlI3\n",
858 "1IykiwQrXcebgajG+av8XU1SfyAG5ibvwbtdSAxkGBcJWL387V+uTdY56w3KN2vBtoQpVKD2zb3y\n",
859 "azIcATZ02upwIytNcM/rpaLCdMb1myWcikE25agzLhDhOS+4zwjYz2DnW6VY0gFBAPsphhsUMnau\n",
860 "VVdUVHzCTSdvzEve/H8q4AAAAVdBm0pJ4Q8mUwIr/wAo+x5XKuiN1am7SkJKSMonFZDPU3f5XFcD\n",
861 "QSs0FLVq2idfsKwuIkt1mxIq8NgMHpzofTnDHqs/WedvAmhBgL0N5azdQa5MNKG2rJ4IAvGQY/uF\n",
862 "m3jKQAKzvhSS01gO1oIfizF817z9IShS4QK2WT0PeFPELqLSpED8eNOpVTR96vmwpk/WBKRVJdTQ\n",
863 "JzjiCQ5pgEwjtvk7KqoS0+lwXSbvIrXkYm8DignEts3DLNoLHrPjXlQmbIop76JZSyJEtB+91GrL\n",
864 "wo6Km5GeebyA2E6qGL3xSkpppej/ruoFprSKrH60UMbrq/SK7eCo+1QFoySPQmqDFsMGiQFqvtld\n",
865 "5BXDYdVI4yRaoyN7Y7wi83HRC6eVazuHU9OtIY3xJJApBWq1aJOsYwc38aTC3ee863Aa/4n9Lk4D\n",
866 "AtyFYHNZjB5m2e2vk8G2Gny9YFlBAAABQEGba0nhDyZTAiv/ACoZSZQfHxhfQxEqOBQrP+L3Dmgv\n",
867 "HSJQtB1iVkcLTxm+vagLHBLG91OGnopwrr7gT/loDypIhoRxjcwAAOeg/jN4WBbXzCJtnWGGllUC\n",
868 "SdtUZQzKOSp9iM4yX18C6jrY4Sq6R9PUV/lEGNveJR4gw4FMve7110XdEPL1O2VTdHvdqeANyaq0\n",
869 "nLdEmtXnrzvdrFlBaUvmaR4EdlkqGkvkZKWJej8Vq+msbKa7JdbxjwZtRufiyGfD/NVqMgSrYRzw\n",
870 "9z/a8Zwbr+9+19CxlWD5bCuAEfPmjY6kZJE2L/CQI6+tnCBTXOmWZtZMBoCLGOf7G2uAC3+kFlbo\n",
871 "h9as5WCkO6+iqXq29dyhKnsHInorRYsPlgxIXyU1Om/Kyhj1DJV0Am9WJK3Dln0zNUH0q6ZTOnZc\n",
872 "FD36AAABYkGbjEnhDyZTAiv/ACcwdIOLRFfoGK2ZkKsvgMwG0m0qsY0vMLPSzefc+ebp/aztyF7M\n",
873 "lsBz/fBeNtxFBcsKgR4pf65GvdfOMHah0ltZ918sMDmXUEZMeRHy/xpnWpTLeGz6uTs/7MATPmU5\n",
874 "BgHbT/DkD8QeaZnFAzidyFCXDz2l/jaKhEdgqipbB2pH0+fQ039r05z9axxEWGmaLQjg6x9+po1o\n",
875 "24yhkVO7m03YwWmPyCgy8cOwrvRyJkXJpRN4m8ZBS1zwY80HeN/VyMQQJSMwsTo7R1XMerSFuyx0\n",
876 "nz+8qOuhiqykc2ohCCsXia/+kIKbJ5Vs+cbWtvkqBKIDSfU7FhAd3GjcY/xar0EVmi6wWFTugAog\n",
877 "R3I7mTrQDdlTAqYgqO7Gn5NMXQVHu2i1zhFSdo9GjMbeGnbkJwsFbQ2XkoKRIDpuW7AewC9AEBt0\n",
878 "Ox/Ah6dGXfXO1jl8pEApj2RFmgAAAPlBm61J4Q8mUwIr/wAlR+eW/VZ7bSrmwwMA62G05DZ7p/5F\n",
879 "UugsSsQdonUq6abtbU5hjFr+I1lPgoiV5c3CkTQZS+K5zivdo+Ti2P4K90xXANp8dSMAu85uJIOC\n",
880 "Qn2TXbEnNDifLB+3V84ht5tj4lvTaZx317BcliV8D5v2zZQW8RO1mUbuJEBItst8E7hfE+ZXj7tf\n",
881 "DxNZPTvtpFyUv0fH1cTg1pr2VLy0d0zQLiA58dg+GkRvR1/hs2LyifBgHcj6eTWz0vsypVn9iPXR\n",
882 "H/unJ6i8cfFL69NO24tQ9QQB+nDFhoP2cRhkAvhHwn56n5PppBD/oxni2f8AAAE9QZvOSeEPJlMC\n",
883 "K/8AJjAXVGf+Kj2XNJnFeKC/gr7dJDTC2ngpd4WeAHlg04GuJKnn9hAmiECxxo9qM1IYMRiB85t6\n",
884 "gALnlm9sRqGmioyzAm18RJndc9Ah8RlpGzr+44a6ntRaPx0cIwNIWAA8buL2JP00dmfjNqEiAlCa\n",
885 "8OdV8FQxjp1vDXsGcAGF3Qbd62KEpkimeI3wH2nuXpbDHm8/ZKOR49s5ifUCkxCoJpfp43aC0lTz\n",
886 "h2NXpcfVw6h0QnK8G60R4ZAxOxaJB7c0nn8ixXSU2JVY24EtGMF53nxJnHfzUheewUfBOGYSxeo8\n",
887 "oK7oUCqX4rztzDwoc2QywNqQUJUkFrqIN+sb5ecYvX24Zujn+ZzTW6UDAF3R6WdNyJyRAremgC8s\n",
888 "pSflTqygQNGfHyGkfIEEJJaFo/pBCBkAAAEWQZvvSeEPJlMCK/8AKI41fuekXG59Knbw4Y6YJrit\n",
889 "sh9VtQgc3QKvVmxrzzo7f4aXn8N74eyP4b2lV1Z2Q+rohxps7EHTkOY9jLdqxI3MXe7je4g2qepz\n",
890 "71+hY+jYdX+9LO0kA0Zg3NfyAlIRX7k6c/YHAZNtNaGZgTBMqiPgmEjiJH9Luk7shbgr+srfwiYw\n",
891 "BX9rdS3fQNNFwcT8orQC+F60LAY9+GbFo2Sw3Ld4Tw9jq9yJtrY8RtHAdzytyek/mv2+j2TbTvAQ\n",
892 "KbbCYtdC8E/KtR4V5ZTSScr5Wb63vmbw7UpddEXYvl55pARyyvMxWNSh3Li4GF8Jk5JBi5B5ASQw\n",
893 "xCMYpX5hkAMc+d8tl2bT+IEvUTsAAAElQZoQSeEPJlMCK/8AJIAzFZs00JJ0yfm8CZiew4xWdArL\n",
894 "klEvBVXo/+ukPLu3XP9HFOfsme3T6BJEKmPPgZw/Lxnraq6Sl2kLVW19YU1qmqgfv+80LkZaWU5g\n",
895 "RAH4hqyo3bFYcbuY2SC3IW5Wm69gtYyAXOdbAYSEHA16fvCeRQjHEsxKVndJdrRAlrGHsKgUBQ3U\n",
896 "p/ZXIy1vkdFOfKSjpuZnswkuqr8NZI5tJ/dnBSErBTNWPaNwWV7nNomC0EYVGo+geGBhLXzaLw0U\n",
897 "AOCYGjiPc3803BDw1GLoLIXjrIFJxwRfBNIAXYZAglu30oYzhpAfRWSprkeULMWYJTlWvbUQ5CNe\n",
898 "wSZssuDWIRAc3w8AcFaywwn+YSGhtR8VI1OGjYkfBbcAAAD8QZoxSeEPJlMCK/8AJdokjCUETRw/\n",
899 "nciVPtaZQSBP/VxAQSITASEzlJBl9Na1r0DJhLOz279+KQLtl/xHZ8vAKc528mTMTqtWs4sFbeVg\n",
900 "HWyBpHcHEtgTzjIqEinp/MPuUXF5poo8YLSSMFn9Ozx2FbU5/Kh9A39oN9NHQflVxV1NA6yT/84H\n",
901 "HyfMtfdSMS8KTvAEE2lDs14VQayNs5ctjXboQT7xMBf5OLj6thhPvgaDrFB2o/PV9ouK147lruWT\n",
902 "P2mkoA9oDIMYW1pcBx4yyV/t9GOPZ3aXneMUb2fFmUCX43BjXfUDMaa4GO2/Ankj3UEQwDxA7ZlN\n",
903 "UQK2AAAA4UGaUknhDyZTAiv/ACJHv33I08bkhybYiJ/JiiheW5zMPBu4n5CxGr3frhE7TkLh0vPk\n",
904 "tM8m/AhaDiJisdk5QXNe/4WmxEDSAyaVi4eUVu0iHT2ly/KNTGqiORqA2oKpTjh84nYbrpXwnGv9\n",
905 "SOf/34Z06xN6Yo3t35UZrP8nlcs/63GtnEmnUwVZHBYfPM6bs5M5AeBfAQ/9mIqu7vnEst+5O2wp\n",
906 "PjzdItjwGCZ2ApHVjGnYYFomlA9nm6AXnxNIWHIsDgxCk3zx+6QbXipu/CWLG1Wf0WIbt4C0JPVl\n",
907 "3TEb0QAAAMlBmnNJ4Q8mUwIr/wAVV64OfTKmlktYOqZHH1W1DhPy/X/6sD4T6hRdzfOgNtTOX2Ic\n",
908 "kRJHshfBQVkJIzns079io6kpJFCcS3VD4zrWCn/dNaGV0kWTpFBRuusfn8F0C0R/EhsQeyTsdZft\n",
909 "EkLGb5tq+nrir3vfmeb7rjmWJRXkIrTEKu8pIuAd+4FBGp8ARgGe80Jqpp//s1433HqBFqXsIFJT\n",
910 "mU8j/toF9HyueI1Ea4uvsQ6NANGcYCbOAKCmbNiwABMCFaiUTMAAAAPSbW9vdgAAAGxtdmhkAAAA\n",
911 "AHwlsIB8JbCAAAAD6AAAAyAAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAA\n",
912 "AAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAv10cmFrAAAAXHRraGQA\n",
913 "AAAPfCWwgHwlsIAAAAABAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAB\n",
914 "AAAAAAAAAAAAAAAAAABAAAAAAY4AAAGGAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAMgAAAA\n",
915 "AgABAAAAAAJ1bWRpYQAAACBtZGhkAAAAAHwlsIB8JbCAAAAAGQAAABRVxAAAAAAALWhkbHIAAAAA\n",
916 "AAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAACIG1pbmYAAAAUdm1oZAAAAAEAAAAA\n",
917 "AAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAeBzdGJsAAAAtHN0c2QA\n",
918 "AAAAAAAAAQAAAKRhdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAY4BhgBIAAAASAAAAAAAAAAB\n",
919 "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGP//AAAAMmF2Y0MBZAAV/+EAGWdkABWs\n",
920 "2UGQz6mhAAADAAEAAAMAMg8WLZYBAAZo6+PLIsAAAAAcdXVpZGtoQPJfJE/FujmlG88DI/MAAAAA\n",
921 "AAAAGHN0dHMAAAAAAAAAAQAAABQAAAABAAAAFHN0c3MAAAAAAAAAAQAAAAEAAAAYY3R0cwAAAAAA\n",
922 "AAABAAAAFAAAAAIAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAEAAAABAAAAZHN0c3oAAAAAAAAAAAAA\n",
923 "ABQAAA05AAACqQAAAl8AAAITAAACiwAAAh8AAAIvAAABiAAAAVsAAAE5AAABWwAAAUQAAAFmAAAA\n",
924 "/QAAAUEAAAEaAAABKQAAAQAAAADlAAAAzQAAAGBzdGNvAAAAAAAAABQAAAAsAAANZQAAEA4AABJt\n",
925 "AAAUgAAAFwsAABkqAAAbWQAAHOEAAB48AAAfdQAAINAAACIUAAAjegAAJHcAACW4AAAm0gAAJ/sA\n",
926 "ACj7AAAp4AAAAGF1ZHRhAAAAWW1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAA\n",
927 "AAAAAAAALGlsc3QAAAAkqXRvbwAAABxkYXRhAAAAAQAAAABMYXZmNTIuMTExLjA=\n",
859 928 "\">"
860 929 ],
861 930 "output_type": "pyout",
862 "prompt_number": 5,
931 "prompt_number": 8,
863 932 "text": [
864 "&lt;IPython.core.display.HTML at 0x423a550&gt;"
933 "<IPython.core.display.HTML at 0x105baff50>"
865 934 ]
866 935 }
867 936 ],
868 "prompt_number": 5
937 "prompt_number": 8
869 938 },
870 939 {
871 940 "cell_type": "markdown",
941 "metadata": {},
872 942 "source": [
873 "## Local Files",
874 "",
875 "The above examples embed images and video from the notebook filesystem in the output",
876 "areas of code cells. It is also possible to request these files directly in markdown cells",
877 "if they reside in the notebook directory via relative urls prefixed with `files/`:",
878 "",
879 " files/[subdirectory/]<filename>",
880 "",
881 "",
882 "For example, in the example notebook folder, we have the Python logo, addressed as:",
883 "",
884 " <img src=\"files/python-logo.svg\" />",
885 "",
886 "<img src=\"/files/python-logo.svg\" />",
887 "",
888 "and a video with the HTML5 video tag:",
889 "",
890 " <video controls src=\"files/animation.m4v\" />",
891 "",
892 "<video controls src=\"/files/animation.m4v\" />",
893 "",
894 "These do not embed the data into the notebook file,",
895 "and require that the files exist when you are viewing the notebook.",
896 "",
897 "### Security of local files",
898 "",
899 "Note that this means that the IPython notebook server also acts as a generic file server",
900 "for files inside the same tree as your notebooks. Access is not granted outside the",
901 "notebook folder so you have strict control over what files are visible, but for this",
902 "reason it is highly recommended that you do not run the notebook server with a notebook",
903 "directory at a high level in your filesystem (e.g. your home directory).",
904 "",
905 "When you run the notebook in a password-protected manner, local file access is restricted",
943 "## Local Files\n",
944 "\n",
945 "The above examples embed images and video from the notebook filesystem in the output\n",
946 "areas of code cells. It is also possible to request these files directly in markdown cells\n",
947 "if they reside in the notebook directory via relative urls prefixed with `files/`:\n",
948 "\n",
949 " files/[subdirectory/]<filename>\n",
950 "\n",
951 "\n",
952 "For example, in the example notebook folder, we have the Python logo, addressed as:\n",
953 "\n",
954 " <img src=\"files/python-logo.svg\" />\n",
955 "\n",
956 "<img src=\"/files/python-logo.svg\" />\n",
957 "\n",
958 "and a video with the HTML5 video tag:\n",
959 "\n",
960 " <video controls src=\"files/animation.m4v\" />\n",
961 "\n",
962 "<video controls src=\"/files/animation.m4v\" />\n",
963 "\n",
964 "These do not embed the data into the notebook file,\n",
965 "and require that the files exist when you are viewing the notebook.\n",
966 "\n",
967 "### Security of local files\n",
968 "\n",
969 "Note that this means that the IPython notebook server also acts as a generic file server\n",
970 "for files inside the same tree as your notebooks. Access is not granted outside the\n",
971 "notebook folder so you have strict control over what files are visible, but for this\n",
972 "reason it is highly recommended that you do not run the notebook server with a notebook\n",
973 "directory at a high level in your filesystem (e.g. your home directory).\n",
974 "\n",
975 "When you run the notebook in a password-protected manner, local file access is restricted\n",
906 976 "to authenticated users unless read-only views are active."
907 977 ]
908 978 },
909 979 {
910 980 "cell_type": "markdown",
981 "metadata": {},
911 982 "source": [
912 "### External sites",
913 "",
914 "You can even embed an entire page from another site in an iframe; for example this is today's Wikipedia",
983 "### External sites\n",
984 "\n",
985 "You can even embed an entire page from another site in an iframe; for example this is today's Wikipedia\n",
915 986 "page for mobile users:"
916 987 ]
917 988 },
918 989 {
919 990 "cell_type": "code",
920 991 "collapsed": false,
921 992 "input": [
922 993 "HTML('<iframe src=http://en.mobile.wikipedia.org/?useformat=mobile width=700 height=350>')"
923 994 ],
924 995 "language": "python",
996 "metadata": {},
925 997 "outputs": [
926 998 {
927 999 "html": [
928 1000 "<iframe src=http://en.mobile.wikipedia.org/?useformat=mobile width=700 height=350>"
929 1001 ],
930 1002 "output_type": "pyout",
931 "prompt_number": 6,
1003 "prompt_number": 9,
932 1004 "text": [
933 "&lt;IPython.core.display.HTML at 0x41d4710&gt;"
1005 "<IPython.core.display.HTML at 0x105baff10>"
934 1006 ]
935 1007 }
936 1008 ],
937 "prompt_number": 6
1009 "prompt_number": 9
938 1010 },
939 1011 {
940 1012 "cell_type": "markdown",
1013 "metadata": {},
941 1014 "source": [
942 "### Mathematics",
943 "",
944 "And we also support the display of mathematical expressions typeset in LaTeX, which is rendered",
945 "in the browser thanks to the [MathJax library](http://mathjax.org). ",
946 "",
947 "Note that this is *different* from the above examples. Above we were typing mathematical expressions",
948 "in Markdown cells (along with normal text) and letting the browser render them; now we are displaying",
949 "the output of a Python computation as a LaTeX expression wrapped by the `Math()` object so the browser",
1015 "### Mathematics\n",
1016 "\n",
1017 "And we also support the display of mathematical expressions typeset in LaTeX, which is rendered\n",
1018 "in the browser thanks to the [MathJax library](http://mathjax.org). \n",
1019 "\n",
1020 "Note that this is *different* from the above examples. Above we were typing mathematical expressions\n",
1021 "in Markdown cells (along with normal text) and letting the browser render them; now we are displaying\n",
1022 "the output of a Python computation as a LaTeX expression wrapped by the `Math()` object so the browser\n",
950 1023 "renders it. The `Math` object will add the needed LaTeX delimiters (`$$`) if they are not provided:"
951 1024 ]
952 1025 },
953 1026 {
954 1027 "cell_type": "code",
955 1028 "collapsed": false,
956 1029 "input": [
957 "from IPython.core.display import Math",
1030 "from IPython.core.display import Math\n",
958 1031 "Math(r'F(k) = \\int_{-\\infty}^{\\infty} f(x) e^{2\\pi i k} dx')"
959 1032 ],
960 1033 "language": "python",
1034 "metadata": {},
961 1035 "outputs": [
962 1036 {
963 1037 "latex": [
964 1038 "$$F(k) = \\int_{-\\infty}^{\\infty} f(x) e^{2\\pi i k} dx$$"
965 1039 ],
966 1040 "output_type": "pyout",
967 "prompt_number": 1,
1041 "prompt_number": 10,
968 1042 "text": [
969 "<IPython.core.display.Math object at 0x10ad35e90>"
1043 "<IPython.core.display.Math at 0x105bafb10>"
970 1044 ]
971 1045 }
972 1046 ],
973 "prompt_number": 1
1047 "prompt_number": 10
974 1048 },
975 1049 {
976 1050 "cell_type": "markdown",
1051 "metadata": {},
977 1052 "source": [
978 1053 "With the `Latex` class, you have to include the delimiters yourself. This allows you to use other LaTeX modes such as `eqnarray`:"
979 1054 ]
980 1055 },
981 1056 {
982 1057 "cell_type": "code",
983 1058 "collapsed": false,
984 1059 "input": [
985 "from IPython.core.display import Latex",
986 "Latex(r\"\"\"\\begin{eqnarray}",
987 "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\",
988 "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\",
989 "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\",
990 "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 ",
1060 "from IPython.core.display import Latex\n",
1061 "Latex(r\"\"\"\\begin{eqnarray}\n",
1062 "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n",
1063 "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n",
1064 "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n",
1065 "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 \n",
991 1066 "\\end{eqnarray}\"\"\")"
992 1067 ],
993 1068 "language": "python",
1069 "metadata": {},
994 1070 "outputs": [
995 1071 {
996 1072 "latex": [
997 "\\begin{eqnarray}",
998 "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\ \\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\",
999 "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\",
1000 "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 ",
1073 "\\begin{eqnarray}\n",
1074 "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n",
1075 "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n",
1076 "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n",
1077 "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 \n",
1001 1078 "\\end{eqnarray}"
1002 1079 ],
1003 1080 "output_type": "pyout",
1004 "prompt_number": 5,
1081 "prompt_number": 11,
1005 1082 "text": [
1006 "<IPython.core.display.Latex object at 0x109a38790>"
1083 "<IPython.core.display.Latex at 0x105bafc10>"
1007 1084 ]
1008 1085 }
1009 1086 ],
1010 "prompt_number": 5
1087 "prompt_number": 11
1011 1088 },
1012 1089 {
1013 1090 "cell_type": "markdown",
1091 "metadata": {},
1014 1092 "source": [
1015 "# Loading external codes",
1016 "* Drag and drop a ``.py`` in the dashboard",
1017 "* Use ``%load`` with any local or remote url: [the Matplotlib Gallery!](http://matplotlib.sourceforge.net/gallery.html)",
1018 "",
1019 "In this notebook we've kept the output saved so you can see the result, but you should run the next",
1093 "# Loading external codes\n",
1094 "* Drag and drop a ``.py`` in the dashboard\n",
1095 "* Use ``%load`` with any local or remote url: [the Matplotlib Gallery!](http://matplotlib.sourceforge.net/gallery.html)\n",
1096 "\n",
1097 "In this notebook we've kept the output saved so you can see the result, but you should run the next\n",
1020 1098 "cell yourself (with an active internet connection)."
1021 1099 ]
1022 1100 },
1023 1101 {
1102 "cell_type": "markdown",
1103 "metadata": {},
1104 "source": [
1105 "Let's make sure we have pylab again, in case we have restarted the kernel due to the crash demo above"
1106 ]
1107 },
1108 {
1024 1109 "cell_type": "code",
1025 "collapsed": true,
1110 "collapsed": false,
1111 "input": [
1112 "%pylab inline"
1113 ],
1114 "language": "python",
1115 "metadata": {},
1116 "outputs": [
1117 {
1118 "output_type": "stream",
1119 "stream": "stdout",
1120 "text": [
1121 "\n",
1122 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
1123 "For more information, type 'help(pylab)'.\n"
1124 ]
1125 }
1126 ],
1127 "prompt_number": 12
1128 },
1129 {
1130 "cell_type": "code",
1131 "collapsed": false,
1026 1132 "input": [
1027 1133 "%load http://matplotlib.sourceforge.net/mpl_examples/pylab_examples/integral_demo.py"
1028 1134 ],
1029 1135 "language": "python",
1136 "metadata": {},
1030 1137 "outputs": [],
1031 "prompt_number": 8
1138 "prompt_number": 15
1032 1139 },
1033 1140 {
1034 1141 "cell_type": "code",
1035 1142 "collapsed": false,
1036 1143 "input": [
1037 "#!/usr/bin/env python",
1038 "",
1039 "# implement the example graphs/integral from pyx",
1040 "from pylab import *",
1041 "from matplotlib.patches import Polygon",
1042 "",
1043 "def func(x):",
1044 " return (x-3)*(x-5)*(x-7)+85",
1045 "",
1046 "ax = subplot(111)",
1047 "",
1048 "a, b = 2, 9 # integral area",
1049 "x = arange(0, 10, 0.01)",
1050 "y = func(x)",
1051 "plot(x, y, linewidth=1)",
1052 "",
1053 "# make the shaded region",
1054 "ix = arange(a, b, 0.01)",
1055 "iy = func(ix)",
1056 "verts = [(a,0)] + zip(ix,iy) + [(b,0)]",
1057 "poly = Polygon(verts, facecolor='0.8', edgecolor='k')",
1058 "ax.add_patch(poly)",
1059 "",
1060 "text(0.5 * (a + b), 30,",
1061 " r\"$\\int_a^b f(x)\\mathrm{d}x$\", horizontalalignment='center',",
1062 " fontsize=20)",
1063 "",
1064 "axis([0,10, 0, 180])",
1065 "figtext(0.9, 0.05, 'x')",
1066 "figtext(0.1, 0.9, 'y')",
1067 "ax.set_xticks((a,b))",
1068 "ax.set_xticklabels(('a','b'))",
1069 "ax.set_yticks([])",
1070 "show()"
1144 "#!/usr/bin/env python\n",
1145 "\n",
1146 "# implement the example graphs/integral from pyx\n",
1147 "from pylab import *\n",
1148 "from matplotlib.patches import Polygon\n",
1149 "\n",
1150 "def func(x):\n",
1151 " return (x-3)*(x-5)*(x-7)+85\n",
1152 "\n",
1153 "ax = subplot(111)\n",
1154 "\n",
1155 "a, b = 2, 9 # integral area\n",
1156 "x = arange(0, 10, 0.01)\n",
1157 "y = func(x)\n",
1158 "plot(x, y, linewidth=1)\n",
1159 "\n",
1160 "# make the shaded region\n",
1161 "ix = arange(a, b, 0.01)\n",
1162 "iy = func(ix)\n",
1163 "verts = [(a,0)] + zip(ix,iy) + [(b,0)]\n",
1164 "poly = Polygon(verts, facecolor='0.8', edgecolor='k')\n",
1165 "ax.add_patch(poly)\n",
1166 "\n",
1167 "text(0.5 * (a + b), 30,\n",
1168 " r\"$\\int_a^b f(x)\\mathrm{d}x$\", horizontalalignment='center',\n",
1169 " fontsize=20)\n",
1170 "\n",
1171 "axis([0,10, 0, 180])\n",
1172 "figtext(0.9, 0.05, 'x')\n",
1173 "figtext(0.1, 0.9, 'y')\n",
1174 "ax.set_xticks((a,b))\n",
1175 "ax.set_xticklabels(('a','b'))\n",
1176 "ax.set_yticks([])\n",
1177 "show()\n"
1071 1178 ],
1072 1179 "language": "python",
1180 "metadata": {},
1073 1181 "outputs": [
1074 1182 {
1075 1183 "output_type": "display_data",
1076 "png": "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\nSUVORK5CYII=\n"
1184 "png": "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\ng23UdEXM4ccffzS6hFo5pem+/roj5XrwGEVEmgFPnuWe0uQLaVu3Qno6/PvfzijHM/n4+LBv3z6e\nfvppo0vJDkGKAAAB1ElEQVQRkVrYbDajS6iTxV7L1NkMf2qIiHii87XWWpOup18FFBExGx28KCLi\nRmq6IiJupKZbh9tuu43evXuTnJzMhx9+aHQ5IlKDvLw8uprkziyXP4Ld7D7++GOioqIoLy+nb9++\n3H777bRs2dLoskTEpJR06/D222/TvXt3BgwYQEFBATk5OUaXJCI1qK6uZtSoUXTp0oU777yT8vJy\no0uqkZpuLX788UeWLFlCWloaGzdupHv37lRWVhpdlojUICsri7Fjx5KZmUlERATvvvuu0SXVSE23\nFsXFxURFRREUFMS2bdtIS0szuiQROY/27dszYMAAAEaNGsXy5csNrqhmarq1uP7666murqZLly48\n++yzp/+DiojnOfNmLk8+3lEX0moREBDAwoULjS5DROohPz+ftLQ0+vfvz7x587jiiiuMLqlGSroi\nYnoWi4XExETeeecdunTpwrFjx3j00UeNLqtGtZ69ICIizqWkKyLiRmq6IiJupKYrIuJka9asoVu3\nblRWVlJaWkpycjKZmZmAZroiIi4xadIkKioqKC8vp3379kycOBFQ0xURcYkTJ07Qu3dvgoOD+eWX\nX07vG9Z4QUTEBQ4dOkRpaSklJSVnnQPx/xV9BfkfDyZLAAAAAElFTkSuQmCC\n"
1077 1185 }
1078 1186 ],
1079 "prompt_number": 9
1080 },
1081 {
1082 "cell_type": "code",
1083 "collapsed": true,
1084 "input": [
1085 ""
1086 ],
1087 "language": "python",
1088 "outputs": []
1187 "prompt_number": 16
1089 1188 }
1090 ]
1189 ],
1190 "metadata": {}
1091 1191 }
1092 1192 ]
1093 }
1193 } No newline at end of file
This diff has been collapsed as it changes many lines, (708 lines changed) Show them Hide them
@@ -1,482 +1,602 b''
1 1 {
2 2 "metadata": {
3 3 "name": "01_notebook_introduction"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
11 "cell_type": "heading",
12 "level": 1,
13 "metadata": {},
14 "source": [
15 "An introduction to the IPython notebook"
16 ]
17 },
18 {
10 19 "cell_type": "markdown",
20 "metadata": {},
11 21 "source": [
12 "# An introduction to the IPython notebook",
13 "",
14 "The IPython web notebook is a frontend that allows for new modes",
15 "of interaction with IPython: this web-based interface allows you to execute Python and IPython",
16 "commands in each input cell just like you would at the IPython terminal or Qt console, but you can",
17 "also save an entire session as a document in a file with the `.ipynb` extension.",
18 "",
19 "The document you are reading now is precisely an example of one such notebook, and we will show you",
20 "here how to best use this new interface.",
21 "",
22 "The first thing to understand is that a notebook consists of a sequence of 'cells' that can contain ",
23 "either text (such as this one) or code meant for execution (such as the next one):",
24 "",
25 "* Text cells can be written using [Markdown syntax](http://daringfireball.net/projects/markdown/syntax) ",
26 "(in a future release we will also provide support for reStructuredText and Sphinx integration, and we ",
27 "welcome help from interested contributors to make that happen).",
28 "",
29 "* Code cells take IPython input (i.e. Python code, `%magics`, `!system calls`, etc) like IPython at",
30 "the terminal or at the Qt Console. The only difference is that in order to execute a cell, you *must*",
31 "use `Shift-Enter`, as pressing `Enter` will add a new line of text to the cell. When you type ",
32 "`Shift-Enter`, the cell content is executed, output displayed and a new cell is created below. Try",
22 "\n",
23 "The IPython web notebook is a frontend that allows for new modes\n",
24 "of interaction with IPython: this web-based interface allows you to execute Python and IPython\n",
25 "commands in each input cell just like you would at the IPython terminal or Qt console, but you can\n",
26 "also save an entire session as a document in a file with the `.ipynb` extension.\n",
27 "\n",
28 "The document you are reading now is precisely an example of one such notebook, and we will show you\n",
29 "here how to best use this new interface.\n",
30 "\n",
31 "The first thing to understand is that a notebook consists of a sequence of 'cells' that can contain \n",
32 "either text (such as this one) or code meant for execution (such as the next one):\n",
33 "\n",
34 "* Text cells can be written using [Markdown syntax](http://daringfireball.net/projects/markdown/syntax) \n",
35 "(in a future release we will also provide support for reStructuredText and Sphinx integration, and we \n",
36 "welcome help from interested contributors to make that happen).\n",
37 "\n",
38 "* Code cells take IPython input (i.e. Python code, `%magics`, `!system calls`, etc) like IPython at\n",
39 "the terminal or at the Qt Console. The only difference is that in order to execute a cell, you *must*\n",
40 "use `Shift-Enter`, as pressing `Enter` will add a new line of text to the cell. When you type \n",
41 "`Shift-Enter`, the cell content is executed, output displayed and a new cell is created below. Try\n",
33 42 "it now by putting your cursor on the next cell and typing `Shift-Enter`:"
34 43 ]
35 44 },
36 45 {
37 46 "cell_type": "code",
47 "collapsed": false,
38 48 "input": [
39 49 "\"This is the new IPython notebook\""
40 50 ],
41 51 "language": "python",
52 "metadata": {},
42 53 "outputs": [
43 54 {
44 55 "output_type": "pyout",
45 "prompt_number": 1,
56 "prompt_number": 2,
46 57 "text": [
47 58 "'This is the new IPython notebook'"
48 59 ]
49 60 }
50 61 ],
51 "prompt_number": 1
62 "prompt_number": 2
52 63 },
53 64 {
54 65 "cell_type": "markdown",
66 "metadata": {},
55 67 "source": [
56 "You can re-execute the same cell over and over as many times as you want. Simply put your",
57 "cursor in the cell again, edit at will, and type `Shift-Enter` to execute. ",
58 "",
59 "**Tip:** A cell can also be executed",
60 "*in-place*, where IPython executes its content but leaves the cursor in the same cell. This is done by",
61 "typing `Ctrl-Enter` instead, and is useful if you want to quickly run a command to check something ",
62 "before tping the real content you want to leave in the cell. For example, in the next cell, try issuing",
68 "You can re-execute the same cell over and over as many times as you want. Simply put your\n",
69 "cursor in the cell again, edit at will, and type `Shift-Enter` to execute. \n",
70 "\n",
71 "**Tip:** A cell can also be executed\n",
72 "*in-place*, where IPython executes its content but leaves the cursor in the same cell. This is done by\n",
73 "typing `Ctrl-Enter` instead, and is useful if you want to quickly run a command to check something \n",
74 "before tping the real content you want to leave in the cell. For example, in the next cell, try issuing\n",
63 75 "several system commands in-place with `Ctrl-Enter`, such as `pwd` and then `ls`:"
64 76 ]
65 77 },
66 78 {
67 79 "cell_type": "code",
80 "collapsed": false,
68 81 "input": [
69 82 "ls"
70 83 ],
71 84 "language": "python",
85 "metadata": {},
72 86 "outputs": [
73 87 {
74 88 "output_type": "stream",
75 89 "stream": "stdout",
76 90 "text": [
77 "00_notebook_tour.ipynb formatting.ipynb sympy_quantum_computing.ipynb",
78 "01_notebook_introduction.ipynb python-logo.svg trapezoid_rule.ipynb",
79 "display_protocol.ipynb sympy.ipynb"
91 "00_notebook_tour.ipynb callbacks.ipynb python-logo.svg\r\n",
92 "01_notebook_introduction.ipynb cython_extension.ipynb rmagic_extension.ipynb\r\n",
93 "Animations_and_Progress.ipynb display_protocol.ipynb sympy.ipynb\r\n",
94 "Capturing Output.ipynb formatting.ipynb sympy_quantum_computing.ipynb\r\n",
95 "Script Magics.ipynb octavemagic_extension.ipynb trapezoid_rule.ipynb\r\n",
96 "animation.m4v progbar.ipynb\r\n"
80 97 ]
81 98 }
82 99 ],
83 "prompt_number": 2
100 "prompt_number": 3
84 101 },
85 102 {
86 103 "cell_type": "markdown",
104 "metadata": {},
87 105 "source": [
88 "In a cell, you can type anything from a single python expression to an arbitrarily long amount of code ",
106 "In a cell, you can type anything from a single python expression to an arbitrarily long amount of code \n",
89 107 "(although for reasons of readability, you should probably limit this to a few dozen lines):"
90 108 ]
91 109 },
92 110 {
93 111 "cell_type": "code",
112 "collapsed": false,
94 113 "input": [
95 "def f(x):",
96 " \"\"\"My function",
97 " x : parameter\"\"\"",
98 " ",
99 " return x+1",
100 "",
114 "def f(x):\n",
115 " \"\"\"My function\n",
116 " x : parameter\"\"\"\n",
117 " \n",
118 " return x+1\n",
119 "\n",
101 120 "print \"f(3) = \", f(3)"
102 121 ],
103 122 "language": "python",
123 "metadata": {},
104 124 "outputs": [
105 125 {
106 126 "output_type": "stream",
107 127 "stream": "stdout",
108 128 "text": [
109 "f(3) = 4"
129 "f(3) = 4\n"
110 130 ]
111 131 }
112 132 ],
113 "prompt_number": 3
133 "prompt_number": 4
134 },
135 {
136 "cell_type": "heading",
137 "level": 2,
138 "metadata": {},
139 "source": [
140 "User interface"
141 ]
114 142 },
115 143 {
116 144 "cell_type": "markdown",
145 "metadata": {},
117 146 "source": [
118 "## User interface",
119 "",
120 "When you start a new notebook server with `ipython notebook`, your",
121 "browser should open into the *Dashboard*, a page listing all notebooks",
122 "available in the current directory as well as letting you create new",
123 "notebooks. In this page, you can also drag and drop existing `.py` files",
124 "over the file list to import them as notebooks (see the manual for ",
125 "[further details on how these files are ",
126 "interpreted](http://ipython.org/ipython-doc/stable/interactive/htmlnotebook.html)).",
127 "",
128 "Once you open an existing notebook (like this one) or create a new one,",
129 "you are in the main notebook interface, which consists of a main editing",
130 "area (where these cells are contained) as well as a collapsible left panel, ",
131 "a permanent header area at the top, and a pager that rises from the",
147 "When you start a new notebook server with `ipython notebook`, your\n",
148 "browser should open into the *Dashboard*, a page listing all notebooks\n",
149 "available in the current directory as well as letting you create new\n",
150 "notebooks. In this page, you can also drag and drop existing `.py` files\n",
151 "over the file list to import them as notebooks (see the manual for \n",
152 "[further details on how these files are \n",
153 "interpreted](http://ipython.org/ipython-doc/stable/interactive/htmlnotebook.html)).\n",
154 "\n",
155 "Once you open an existing notebook (like this one) or create a new one,\n",
156 "you are in the main notebook interface, which consists of a main editing\n",
157 "area (where these cells are contained) as well as a menu and \n",
158 "permanent header area at the top, and a pager that rises from the\n",
132 159 "bottom when needed and can be collapsed again."
133 160 ]
134 161 },
135 162 {
163 "cell_type": "heading",
164 "level": 3,
165 "metadata": {},
166 "source": [
167 "Main editing area"
168 ]
169 },
170 {
136 171 "cell_type": "markdown",
172 "metadata": {},
137 173 "source": [
138 "### Main editing area",
139 "",
140 "Here, you can move with the arrow keys or using the ",
141 "scroll bars. The cursor enters code cells immediately, but only selects",
142 "text (markdown) cells without entering in them; to enter a text cell,",
143 "use `Enter`, and `Shift-Enter` to exit it again (just like to execute a ",
174 "Here, you can move with the arrow keys or using the \n",
175 "scroll bars. The cursor enters code cells immediately, but only selects\n",
176 "text (markdown) cells without entering in them; to enter a text cell,\n",
177 "use `Enter` (or double-click), and `Shift-Enter` to exit it again (just like to execute a \n",
144 178 "code cell)."
145 179 ]
146 180 },
147 181 {
182 "cell_type": "heading",
183 "level": 3,
184 "metadata": {},
185 "source": [
186 "Menu"
187 ]
188 },
189 {
148 190 "cell_type": "markdown",
191 "metadata": {},
192 "source": [
193 "The menu bar conains all the commands you can use to manipulate the notebook.\n",
194 "\n",
195 "The *File* menu has the usual open/save file operations, as well as Export,\n",
196 "for downloading the notebook to your computer.\n",
197 "\n",
198 "*Edit* has controls for cut/copy/paste, and moving cells around.\n",
199 "\n",
200 "*View* lets you toggle visibility of the header elements,\n",
201 "to recover precious screen real estate.\n",
202 "\n",
203 "The *Cell* menu lets you manipulate individual cells,\n",
204 "and the names should be fairly self-explanatory.\n",
205 "\n",
206 "The *Kernel* menu lets you signal the kernel executing your code. \n",
207 "`Interrupt` does the equivalent of hitting `Ctrl-C` at a terminal, and\n",
208 "`Restart` fully kills the kernel process and starts a fresh one. Obviously\n",
209 "this means that all your previous variables are destroyed, but it also\n",
210 "makes it easy to get a fresh kernel in which to re-execute a notebook, perhaps\n",
211 "after changing an extension module for which Python's `reload` mechanism\n",
212 "does not work.\n",
213 "\n",
214 "The *Help* menu contains links to the documentation of some projects\n",
215 "closely related to IPython as well as the minimal keybindings you need to\n",
216 "know. But you should use `Ctrl-m h` (or click the `QuickHelp` button at\n",
217 "the top) and learn some of the other keybindings, as it will make your \n",
218 "workflow much more fluid and efficient.\n",
219 "\n",
220 "You will also see a few buttons there for common actions,\n",
221 "and hovering over each button will tell you which command they correspond to,\n",
222 "if the icons are not clear enough."
223 ]
224 },
225 {
226 "cell_type": "heading",
227 "level": 3,
228 "metadata": {},
149 229 "source": [
150 "### Left panel",
151 "",
152 "This panel contains a number of panes that can be",
153 "collapsed vertically by clicking on their title bar, and the whole panel",
154 "can also be collapsed by clicking on the vertical divider (note that you",
155 "can not *drag* the divider, for now you can only click on it).",
156 "",
157 "The *Notebook* section contains actions that pertain to the whole notebook,",
158 "such as downloading the current notebook either in its original format",
159 "or as a `.py` script, and printing it. When you click the `Print` button,",
160 "a new HTML page opens with a static copy of the notebook; you can then",
161 "use your web browser's mechanisms to save or print this file.",
162 "",
163 "The *Cell* section lets you manipulate individual cells, and the names should ",
164 "be fairly self-explanatory.",
165 "",
166 "The *Kernel* section lets you signal the kernel executing your code. ",
167 "`Interrupt` does the equivalent of hitting `Ctrl-C` at a terminal, and",
168 "`Restart` fully kills the kernel process and starts a fresh one. Obviously",
169 "this means that all your previous variables are destroyed, but it also",
170 "makes it easy to get a fresh kernel in which to re-execute a notebook, perhaps",
171 "after changing an extension module for which Python's `reload` mechanism",
172 "does not work. If you check the 'Kill kernel upon exit' box, when you ",
173 "close the page IPython will automatically shut down the running kernel;",
174 "otherwise the kernels won't close until you stop the whole ",
175 "",
176 "The *Help* section contains links to the documentation of some projects",
177 "closely related to IPython as well as the minimal keybindings you need to",
178 "know. But you should use `Ctrl-m h` (or click the `QuickHelp` button at",
179 "the top) and learn some of the other keybindings, as it will make your ",
180 "workflow much more fluid and efficient."
230 "Header bar"
181 231 ]
182 232 },
183 233 {
184 234 "cell_type": "markdown",
235 "metadata": {},
185 236 "source": [
186 "### Header bar",
187 "",
188 "The header area at the top allows you to rename an existing ",
189 "notebook and open up a short help tooltip. This area also indicates",
190 "with a red **Busy** mark on the right whenever the kernel is busy executing",
237 "The header area at the top allows you to rename an existing \n",
238 "notebook and open up a short help tooltip. This area also indicates\n",
239 "with a red **Busy** mark on the right whenever the kernel is busy executing\n",
191 240 "code."
192 241 ]
193 242 },
194 243 {
244 "cell_type": "heading",
245 "level": 3,
246 "metadata": {},
247 "source": [
248 "The pager at the bottom"
249 ]
250 },
251 {
195 252 "cell_type": "markdown",
253 "metadata": {},
196 254 "source": [
197 "### The pager at the bottom",
198 "",
199 "Whenever IPython needs to display additional ",
200 "information, such as when you type `somefunction?` in a cell, the notebook",
201 "opens a pane at the bottom where this information is shown. You can keep",
202 "this pager pane open for reference (it doesn't block input in the main area)",
255 "Whenever IPython needs to display additional \n",
256 "information, such as when you type `somefunction?` in a cell, the notebook\n",
257 "opens a pane at the bottom where this information is shown. You can keep\n",
258 "this pager pane open for reference (it doesn't block input in the main area)\n",
203 259 "or dismiss it by clicking on its divider bar."
204 260 ]
205 261 },
206 262 {
263 "cell_type": "heading",
264 "level": 3,
265 "metadata": {},
266 "source": [
267 "Tab completion and tooltips"
268 ]
269 },
270 {
207 271 "cell_type": "markdown",
272 "metadata": {},
208 273 "source": [
209 "### Tab completion and tooltips",
210 "",
211 "The notebook uses the same underlying machinery for tab completion that ",
212 "IPython uses at the terminal, but displays the information differently.",
213 "Whey you complete with the `Tab` key, IPython shows a drop list with all",
214 "available completions. If you type more characters while this list is open,",
215 "IPython automatically eliminates from the list options that don't match the",
216 "new characters; once there is only one option left you can hit `Tab` once",
217 "more (or `Enter`) to complete. You can also select the completion you",
218 "want with the arrow keys or the mouse, and then hit `Enter`.",
219 "",
220 "In addition, if you hit `Tab` inside of open parentheses, IPython will ",
221 "search for the docstring of the last object left of the parens and will",
222 "display it on a tooltip. For example, type `list(<TAB>` and you will",
274 "The notebook uses the same underlying machinery for tab completion that \n",
275 "IPython uses at the terminal, but displays the information differently.\n",
276 "Whey you complete with the `Tab` key, IPython shows a drop list with all\n",
277 "available completions. If you type more characters while this list is open,\n",
278 "IPython automatically eliminates from the list options that don't match the\n",
279 "new characters; once there is only one option left you can hit `Tab` once\n",
280 "more (or `Enter`) to complete. You can also select the completion you\n",
281 "want with the arrow keys or the mouse, and then hit `Enter`.\n",
282 "\n",
283 "In addition, if you hit `Tab` inside of open parentheses, IPython will \n",
284 "search for the docstring of the last object left of the parens and will\n",
285 "display it on a tooltip. For example, type `list(<TAB>` and you will\n",
223 286 "see the docstring for the builtin `list` constructor:"
224 287 ]
225 288 },
226 289 {
227 290 "cell_type": "code",
291 "collapsed": false,
228 292 "input": [
229 "# Position your cursor after the ( and hit the Tab key:",
293 "# Position your cursor after the ( and hit the Tab key:\n",
230 294 "range("
231 295 ],
232 296 "language": "python",
297 "metadata": {},
233 298 "outputs": []
234 299 },
235 300 {
236 301 "cell_type": "markdown",
302 "metadata": {},
237 303 "source": [
238 "More over pressing tab several time in a row allows you change the behaviour of the tooltip.",
239 "",
240 "* firt `tab` press, you get a classical tooltip",
241 "* second time, the tooltip grow vertically, and allow you to scroll the docstring",
242 "* third tab press, tooltip, will be made sticky for 10 seconds, allowing you to carry on typing while it stays open.",
243 "* forth time press, the tooltip help is sent to the pager at the bottom of the screen , and is dismiss.",
244 "<script>",
245 " IPython.tooltip.tabs_functions = [ function(cell,text){",
246 " IPython.tooltip._request_tooltip(cell,text);",
247 " IPython.notification_widget.set_message('tab again to expand pager',2500);",
248 " setTimeout(function(){",
249 " $('.tooltiptext pre').text(\"function signture : You've invoked a tooltip !\\n\\nWell done! Here usualy lies the current function *call signature* and it's *docstring*. You can now expand the tooltip pressing <tab> a second time...\")},400);",
250 " },",
251 " function(){",
252 " IPython.tooltip.expand();",
253 " IPython.notification_widget.set_message('tab again to make pager sticky for 10s',2500);",
254 " setTimeout(function(){",
255 " $('.tooltiptext pre').text(\"Now the tooltip is expanded !\\",
256 " \\n\\nThis is really usefull if you have long docstring and if you want to be able to scroll them. \\",
257 "For example, I can give you many information about the tooltip:\\n - The tooltip is smart, and \\",
258 "you don't always need to press tab to invoke it, if you press an opening bracket `(` then nothing \\",
259 "for some time, tooltip will be invoked by itself.\\",
260 "\\n - Also you can hoover over the icon on the top right to know what they are dooing...\\",
261 "\\n\\nBack to the next lesson.\\n\\nSometime you need to the tooltip to stay on screen while\\",
262 "you type. That's the reason for the sticky mode (indicated by a small clock on the top left of the tooltip),\\",
263 "\\n\\nNow press <tab> a 3rd time and continue typing some text to test it...\")",
264 " },400);",
265 " },",
266 " function(){",
267 " var time = 35;",
268 " IPython.tooltip.stick(time);",
269 " $('.tooltiptext pre').text(\"Type more text !...\\n\\n range(7,125,3)\\n\\n The tooltip is in sticky mode, it won't be dismissed for at least 10 secondes \",400);",
270 " setTimeout(function(){",
271 " $('.tooltiptext pre').text(\"That was sticky mode...\\nI'll keep it on 15 more seconds just for you.\\n\\nLast thing you can do is send the current help displayed in the tooltip to the pager at the bottom of the screen. To do that, press tab 4 time in a row after a parenthesis. \\n\\n Now I'll stop bothering you and let you Play with the tooltip !\");",
272 " reset_tooltip()",
273 " },15000);",
274 " },",
275 " function(cell){",
276 " IPython.tooltip.cancel_stick();",
277 " reset_tooltip()",
278 " IPython.tooltip.showInPager(cell);",
279 " IPython.tooltip._cmfocus();",
280 " }",
281 " ];",
282 " ",
283 " reset_tooltip = function(){",
284 " IPython.tooltip.tabs_functions = [ function(cell,text){",
285 " IPython.tooltip._request_tooltip(cell,text);",
286 " IPython.notification_widget.set_message('tab again to expand pager',2500);",
287 " },",
288 " function(){",
289 " IPython.tooltip.expand();",
290 " IPython.notification_widget.set_message('tab again to make pager sticky for 10s',2500);",
291 " },",
292 " function(){",
293 " IPython.tooltip.stick();",
294 " IPython.notification_widget.set_message('tab again to open help in pager',2500);",
295 " },",
296 " function(cell){",
297 " IPython.tooltip.cancel_stick();",
298 " IPython.tooltip.showInPager(cell);",
299 " IPython.tooltip._cmfocus();",
300 " }",
301 " ];",
302 " }",
304 "Moreover, pressing tab several time in a row allows you change the behaviour of the tooltip.\n",
305 "\n",
306 "* first `tab` press, you get a classical tooltip\n",
307 "* second tab, the tooltip grow vertically, and allow you to scroll the docstring\n",
308 "* third tab, tooltip will be made sticky for 10 seconds, allowing you to carry on typing while it stays open.\n",
309 "* forth tab, the tooltip help is sent to the pager at the bottom of the screen.\n",
310 "<script>\n",
311 " IPython.tooltip.tabs_functions = [ function(cell,text){\n",
312 " IPython.tooltip._request_tooltip(cell,text);\n",
313 " IPython.notification_widget.set_message('tab again to expand pager',2500);\n",
314 " setTimeout(function(){\n",
315 " $('.tooltiptext pre').text(\"function signture : You've invoked a tooltip !\\n\\nWell done! Here usualy lies the current function *call signature* and it's *docstring*. You can now expand the tooltip pressing <tab> a second time...\")},400);\n",
316 " },\n",
317 " function(){\n",
318 " IPython.tooltip.expand();\n",
319 " IPython.notification_widget.set_message('tab again to make pager sticky for 10s',2500);\n",
320 " setTimeout(function(){\n",
321 " $('.tooltiptext pre').text(\"Now the tooltip is expanded !\\\n",
322 " \\n\\nThis is really usefull if you have long docstring and if you want to be able to scroll them. \\\n",
323 "For example, I can give you many information about the tooltip:\\n - The tooltip is smart, and \\\n",
324 "you don't always need to press tab to invoke it, if you press an opening bracket `(` then nothing \\\n",
325 "for some time, tooltip will be invoked by itself.\\\n",
326 "\\n - Also you can hoover over the icon on the top right to know what they are dooing...\\\n",
327 "\\n\\nBack to the next lesson.\\n\\nSometime you need to the tooltip to stay on screen while\\\n",
328 "you type. That's the reason for the sticky mode (indicated by a small clock on the top left of the tooltip),\\\n",
329 "\\n\\nNow press <tab> a 3rd time and continue typing some text to test it...\")\n",
330 " },400);\n",
331 " },\n",
332 " function(){\n",
333 " var time = 35;\n",
334 " IPython.tooltip.stick(time);\n",
335 " $('.tooltiptext pre').text(\"Type more text !...\\n\\n range(7,125,3)\\n\\n The tooltip is in sticky mode, it won't be dismissed for at least 10 secondes \",400);\n",
336 " setTimeout(function(){\n",
337 " $('.tooltiptext pre').text(\"That was sticky mode...\\nI'll keep it on 15 more seconds just for you.\\n\\nLast thing you can do is send the current help displayed in the tooltip to the pager at the bottom of the screen. To do that, press tab 4 time in a row after a parenthesis. \\n\\n Now I'll stop bothering you and let you Play with the tooltip !\");\n",
338 " reset_tooltip()\n",
339 " },15000);\n",
340 " },\n",
341 " function(cell){\n",
342 " IPython.tooltip.cancel_stick();\n",
343 " reset_tooltip()\n",
344 " IPython.tooltip.showInPager(cell);\n",
345 " IPython.tooltip._cmfocus();\n",
346 " }\n",
347 " ];\n",
348 " \n",
349 " reset_tooltip = function(){\n",
350 " IPython.tooltip.tabs_functions = [ function(cell,text){\n",
351 " IPython.tooltip._request_tooltip(cell,text);\n",
352 " IPython.notification_widget.set_message('tab again to expand pager',2500);\n",
353 " },\n",
354 " function(){\n",
355 " IPython.tooltip.expand();\n",
356 " IPython.notification_widget.set_message('tab again to make pager sticky for 10s',2500);\n",
357 " },\n",
358 " function(){\n",
359 " IPython.tooltip.stick();\n",
360 " IPython.notification_widget.set_message('tab again to open help in pager',2500);\n",
361 " },\n",
362 " function(cell){\n",
363 " IPython.tooltip.cancel_stick();\n",
364 " IPython.tooltip.showInPager(cell);\n",
365 " IPython.tooltip._cmfocus();\n",
366 " }\n",
367 " ];\n",
368 " }\n",
303 369 "</script>"
304 370 ]
305 371 },
306 372 {
373 "cell_type": "heading",
374 "level": 2,
375 "metadata": {},
376 "source": [
377 "The frontend/kernel model"
378 ]
379 },
380 {
307 381 "cell_type": "markdown",
382 "metadata": {},
308 383 "source": [
309 "## The frontend/kernel model",
310 "",
311 "The IPython notebook works on a client/server model where an *IPython kernel*",
312 "starts in a separate process and acts as a server to executes the code you type,",
313 "while the web browser provides acts as a client, providing a front end environment",
314 "for you to type. But one kernel is capable of simultaneously talking to more than",
315 "one client, and they do not all need to be of the same kind. All IPython frontends",
316 "are capable of communicating with a kernel, and any number of them can be active",
317 "at the same time. In addition to allowing you to have, for example, more than one",
318 "browser session active, this lets you connect clients with different user interface features.",
319 "",
320 "For example, you may want to connect a Qt console to your kernel and use it as a help",
321 "browser, calling `??` on objects in the Qt console (whose pager is more flexible than the",
322 "one in the notebook). You can start a new Qt console connected to your current kernel by ",
323 "using the `%qtconsole` magic, this will automatically detect the necessary connection",
324 "information.",
325 "",
326 "If you want to open one manually, or want to open a text console from a terminal, you can ",
384 "The IPython notebook works on a client/server model where an *IPython kernel*\n",
385 "starts in a separate process and acts as a server to executes the code you type,\n",
386 "while the web browser provides acts as a client, providing a front end environment\n",
387 "for you to type. But one kernel is capable of simultaneously talking to more than\n",
388 "one client, and they do not all need to be of the same kind. All IPython frontends\n",
389 "are capable of communicating with a kernel, and any number of them can be active\n",
390 "at the same time. In addition to allowing you to have, for example, more than one\n",
391 "browser session active, this lets you connect clients with different user interface features.\n",
392 "\n",
393 "For example, you may want to connect a Qt console to your kernel and use it as a help\n",
394 "browser, calling `??` on objects in the Qt console (whose pager is more flexible than the\n",
395 "one in the notebook). You can start a new Qt console connected to your current kernel by \n",
396 "using the `%qtconsole` magic, this will automatically detect the necessary connection\n",
397 "information.\n",
398 "\n",
399 "If you want to open one manually, or want to open a text console from a terminal, you can \n",
327 400 "get your kernel's connection information with the `%connect_info` magic:"
328 401 ]
329 402 },
330 403 {
331 404 "cell_type": "code",
405 "collapsed": false,
332 406 "input": [
333 407 "%connect_info"
334 408 ],
335 409 "language": "python",
410 "metadata": {},
336 411 "outputs": [
337 412 {
338 413 "output_type": "stream",
339 414 "stream": "stdout",
340 415 "text": [
341 "{",
342 " \"stdin_port\": 53970, ",
343 " \"ip\": \"127.0.0.1\", ",
344 " \"hb_port\": 53971, ",
345 " \"key\": \"30daac61-6b73-4bae-a7d9-9dca538794d5\", ",
346 " \"shell_port\": 53968, ",
347 " \"iopub_port\": 53969",
348 "}",
349 "",
350 "Paste the above JSON into a file, and connect with:",
351 " $> ipython <app> --existing <file>",
352 "or, if you are local, you can connect with just:",
353 " $> ipython <app> --existing kernel-dd85d1cc-c335-44f4-bed8-f1a2173a819a.json ",
354 "or even just:",
355 " $> ipython <app> --existing ",
356 "if this is the most recent IPython session you have started."
416 "{\n",
417 " \"stdin_port\": 52858, \n",
418 " \"ip\": \"127.0.0.1\", \n",
419 " \"hb_port\": 52859, \n",
420 " \"key\": \"7efd45ca-d8a2-41b0-9cea-d9116d0fb883\", \n",
421 " \"shell_port\": 52856, \n",
422 " \"iopub_port\": 52857\n",
423 "}\n",
424 "\n",
425 "Paste the above JSON into a file, and connect with:\n",
426 " $> ipython <app> --existing <file>\n",
427 "or, if you are local, you can connect with just:\n",
428 " $> ipython <app> --existing kernel-b3bac7c1-8b2c-4536-8082-8d1df24f99ac.json \n",
429 "or even just:\n",
430 " $> ipython <app> --existing \n",
431 "if this is the most recent IPython session you have started.\n"
357 432 ]
358 433 }
359 434 ],
360 "prompt_number": 4
435 "prompt_number": 6
436 },
437 {
438 "cell_type": "heading",
439 "level": 2,
440 "metadata": {},
441 "source": [
442 "The kernel's `raw_input` and `%debug`"
443 ]
361 444 },
362 445 {
363 446 "cell_type": "markdown",
447 "metadata": {},
364 448 "source": [
365 "## The kernel's `raw_input` and `%debug`",
366 "",
367 "The one feature the notebook currently doesn't support as a client is the ability to send data to the kernel's",
368 "standard input socket. That is, if the kernel requires information to be typed interactively by calling the",
369 "builtin `raw_input` function, the notebook will be blocked. This happens for example if you run a script",
370 "that queries interactively for parameters, and very importantly, is how the interactive IPython debugger that ",
371 "activates when you type `%debug` works.",
372 "",
373 "So, in order to be able to use `%debug` or anything else that requires `raw_input`, you can either use a Qt ",
374 "console or a terminal console:",
375 "",
376 "- From the notebook, typing `%qtconsole` finds all the necessary connection data for you.",
377 "- From the terminal, first type `%connect_info` while still in the notebook, and then copy and paste the ",
449 "The one feature the notebook currently doesn't support as a client is the ability to send data to the kernel's\n",
450 "standard input socket. That is, if the kernel requires information to be typed interactively by calling the\n",
451 "builtin `raw_input` function, the notebook will be blocked. This happens for example if you run a script\n",
452 "that queries interactively for parameters, and very importantly, is how the interactive IPython debugger that \n",
453 "activates when you type `%debug` works.\n",
454 "\n",
455 "So, in order to be able to use `%debug` or anything else that requires `raw_input`, you can either use a Qt \n",
456 "console or a terminal console:\n",
457 "\n",
458 "- From the notebook, typing `%qtconsole` finds all the necessary connection data for you.\n",
459 "- From the terminal, first type `%connect_info` while still in the notebook, and then copy and paste the \n",
378 460 "resulting information, using `qtconsole` or `console` depending on which type of client you want."
379 461 ]
380 462 },
381 463 {
464 "cell_type": "heading",
465 "level": 2,
466 "metadata": {},
467 "source": [
468 "Display of complex objects"
469 ]
470 },
471 {
382 472 "cell_type": "markdown",
473 "metadata": {},
383 474 "source": [
384 "## Display of complex objects",
385 "",
386 "As the 'tour' notebook shows, the IPython notebook has fairly sophisticated display capabilities. In addition",
387 "to the examples there, you can study the `display_protocol` notebook in this same examples folder, to ",
388 "learn how to customize arbitrary objects (in your own code or external libraries) to display in the notebook",
475 "As the 'tour' notebook shows, the IPython notebook has fairly sophisticated display capabilities. In addition\n",
476 "to the examples there, you can study the `display_protocol` notebook in this same examples folder, to \n",
477 "learn how to customize arbitrary objects (in your own code or external libraries) to display in the notebook\n",
389 478 "in any way you want, including graphical forms or mathematical expressions."
390 479 ]
391 480 },
392 481 {
482 "cell_type": "heading",
483 "level": 2,
484 "metadata": {},
485 "source": [
486 "Plotting support"
487 ]
488 },
489 {
393 490 "cell_type": "markdown",
491 "metadata": {},
394 492 "source": [
395 "## Plotting support",
396 "",
397 "As we've explained already, the notebook is just another frontend talking to the same IPython kernel that",
398 "you're already familiar with, so the same options for plotting support apply.",
399 "",
400 "If you start the notebook with `--pylab`, you will get matplotlib's floating, interactive windows and you",
401 "can call the `display` function to paste figures into the notebook document. If you start it with ",
402 "`--pylab inline`, all plots will appear inline automatically. In this regard, the notebook works identically",
403 "to the Qt console.",
404 "",
405 "Note that if you start the notebook server with pylab support, *all* kernels are automatically started in",
406 "pylab mode and with the same choice of backend (i.e. floating windows or inline figures). But you can also",
407 "start the notebook server simply by typing `ipython notebook`, and then selectively turn on pylab support ",
408 "only for the notebooks you want by using the `%pylab` magic (see its docstring for details)."
493 "As we've explained already, the notebook is just another frontend talking to the same IPython kernel that\n",
494 "you're familiar with, so the same options for plotting support apply.\n",
495 "\n",
496 "You can enable inline plotting with `%pylab inline`:"
409 497 ]
410 498 },
411 499 {
412 500 "cell_type": "code",
501 "collapsed": false,
413 502 "input": [
414 "%pylab inline",
415 "plot(rand(100))"
503 "%pylab inline"
416 504 ],
417 505 "language": "python",
506 "metadata": {},
418 507 "outputs": [
419 508 {
420 509 "output_type": "stream",
421 510 "stream": "stdout",
422 511 "text": [
423 "",
424 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].",
425 "For more information, type 'help(pylab)'."
512 "\n",
513 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
514 "For more information, type 'help(pylab)'.\n"
426 515 ]
427 },
516 }
517 ],
518 "prompt_number": 7
519 },
520 {
521 "cell_type": "markdown",
522 "metadata": {},
523 "source": [
524 "If you start the notebook server itself with `--pylab`, you will get matplotlib's floating, interactive windows and you\n",
525 "can call the `display` function to paste figures into the notebook document. If you start it with \n",
526 "`--pylab inline`, all plots will appear inline automatically. In this regard, the notebook works identically\n",
527 "to the Qt console.\n",
528 "\n",
529 "Note that if you start the notebook server with pylab support, *all* kernels are automatically started in\n",
530 "pylab mode and with the same choice of backend (i.e. floating windows or inline figures).\n",
531 "For this reason, it is recommended that you\n",
532 "start the notebook server simply by typing `ipython notebook`, and then selectively turn on pylab support \n",
533 "only for the notebooks you want by using the `%pylab` magic (see its docstring for details)."
534 ]
535 },
536 {
537 "cell_type": "code",
538 "collapsed": false,
539 "input": [
540 "plot(rand(100))"
541 ],
542 "language": "python",
543 "metadata": {},
544 "outputs": [
428 545 {
429 546 "output_type": "pyout",
430 "prompt_number": 5,
547 "prompt_number": 8,
431 548 "text": [
432 "[<matplotlib.lines.Line2D at 0x11165bcd0>]"
549 "[<matplotlib.lines.Line2D at 0x1124ba350>]"
433 550 ]
434 551 },
435 552 {
436 553 "output_type": "display_data",
437 "png": "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\n"
554 "png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAD9CAYAAAC2l2x5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztfXt0HcWd5nelK+uF329ZIiZItmwcbLIGh2STmFeMmcQk\nwC7m7CRZQsBLhknIkp1Hcs4Ez544mJw5hBNnsyZMCORhzDBsDASU4ATxCDEGzGuwAUMskOSnbMuy\nbD2upN4/ivKtW7equrq7+nFv13eOjnyvW93V1dVff/39fvWrjOM4DiwsLCwsyg4VcTfAwsLCwiIc\nWIK3sLCwKFNYgrewsLAoU1iCt7CwsChTWIK3sLCwKFNYgrewsLAoUygJ/itf+QpmzpyJj3zkI9Jt\nvv71r6OlpQWLFy/Gyy+/bLyBFhYWFhb+oCT4a6+9Fm1tbdL/f+yxx/DOO+9g9+7duOuuu3DjjTca\nb6CFhYWFhT8oCf6Tn/wkJk+eLP3/hx9+GF/+8pcBAMuWLUNvby8OHDhgtoUWFhYWFr4QyIPv7u5G\nU1PTqc+NjY3o6uoK3CgLCwsLi+DIBt0BX+kgk8kIt5N9b2FhYWGhht+KMoEU/Jw5c9DZ2Xnqc1dX\nF+bMmSPd3nEc++M4+O53vxt7G5LyY/vC9oXtC/VPEAQi+FWrVuG+++4DAGzbtg2TJk3CzJkzAzXI\nwsLCwsIMlBbNNddcg6eeego9PT1oamrC2rVrkcvlAABr1qzBZZddhsceewzNzc2or6/HPffcE0mj\nLSwsLCzcoST4TZs2ue5gw4YNxhqTFixfvjzuJiQGti/ysH2Rh+0LM8g4QU0e3QNlMoH9JAsLC4u0\nIQh3lmSpgkceAX71q7hbIcfzzwNf/WrcrbCwsEg7SpLgX38deOmluFshx/79wJ49cbfCwsIi7ShJ\ngs/lgJGRuFshx/AwMDQU3v6t02VhYaGDkiT4kRFC8knF8DD5CQvnngvYCcMWFhZuKEmCz+WSTfC5\nXLgKvqsLOHYsvP1bWFiUBxJF8K+8Arz2mvt2IyPJt2jCVPDHjyf7/KPEDTeQ/rCwsChGogj+gQeA\nhx5y3y7pCj5MD350FDh5MtnnHyW2bLF2lYWFDIkieF3iTroHn8uFp+D7+/PHsCD9bO2qdKKrK1wr\ntByQKIIfHtazHkrBoglr4FE7IsnnHyUswacT770HLFlC5sRYyBG4XLBJDA8DlZXu25WCRROWgqcE\nn+TzjxK5nCX4tGFgALjiirxdaSFHohS8bn57KVg0VsETvPYa8KMfhbNvx7EEnzY4DnDjjcC8ecBV\nVwGDg3G3yB+uuQZ4993wj5Mogh8e1iPuUpnoFMaEpFJT8Dt3AoplfQOB9kGaCP7b3wZ++9u4WxEf\nfvITMov97ruBmprS9eCffprYTGEjcRZNdbX7dklX8NSeGRkBqqrM7rvUgqwjI+G9RtN+ThPBd3QA\nzCqZqcLICHDLLaRUSX09IfhSVPCjo6ScSV9f+MdKlILX9dZLwYMHwlEXpWbR5HLAiRPh7RtIF8Hn\ncsSDTiOGh8lbcXMz+VxdXZoK/uBBYGwshQTvJYsmyQRP2xYk0PrrXwOPP178falZNGESfBoVfC5X\nmqrVBPg34lIl+L17ye9UErxuHnySFawJBb9tG/nhYRV8Hmkl+LQq+FyukOBL1aLp7ia/U0fw5WbR\nBFHwQ0Ni4rIKvnDfgCX4tCCXA7JM1NAqeHckLshaThZNkMEnmyxlCT4Pq+DThXKyaKZNi6aGUuII\nvlzSJNnffjA0JL6Rjx8nAzvJ589iZIScx9gYUGH4fXF4mLym9/aa3W+SkWaCLxeLZu9eoLU1pRZN\nOSh4Ex788LCYuI4fByZPTvb5s6DtDIOUcjlg+nSr4NOCcrJoUknwXoKsSSY4E1k0Kg9+ypTSUfC0\nL8KwaYaH8wSfllWubBZN/nOpTnTauxeYPz+lBK9DXKVi0VgFHz7B19cD48alpyaJVfD5z9XVpfmw\nS62CL5dywZR4wlLwluAJhocJuU+cmB6bJu0EX+pBVirczjwzhQTvRcEnmeByOeC004IreJH1UGoW\nDW1nGASfy1mCTxNEFk2pKfj9+4GZM4lISyXBl8tEp9NOC67gR0eLidEq+DyGh8kNbwm+tJHLAWvX\n6m1X6kHWvXuBhgZgwoQUEryut550BU8JPqiCB4p9+FJT8NaiMYtyJPj33wduv919u3LIg6cEX1sb\n7spvFIkieC8K3nGIwk0icjlg/PjgCj6bLSR4+gCcMCHZDzgWYRJ8Wi2aUrMl3NDdrT//pdQtmu5u\nQvCZDLmPw57slDiC182DZ38nDaYUPJ/j3d9P9ltVVVoEX1UVTpZLGi2a4eHyU/BdXWScuKW6lpNF\nA0Rj0ySG4EdHyWxH3Sc5+ztpMOXBz5hRqOCPHydvBtlsch9uPHI5YNIka9GYQjlaNLT4ltv9XA55\n8KkleHpxdRV8UBX71lvhDQ5q0QRV8DNmFBIXJfhSUvAjI+ERfJotmnKa2NXVRX67CSJRmmSpWTSp\nJXh6cXUVfG1tMBV7003AAw+4b3frrcAzz3jbtykFP3OmWMGXEsHncoSArYIPDhp3qqoqPeWqgq6C\ntxaNdySG4HM5oLLSnbQdh2xDo9B+MTAAPPec+3Z/+hNw773e9m3Cg6cWjUjBW4uGgPXg01BwjBJc\nbW152TSU4N0EEW/RjBtH+mRsLLy2mUZqCX54GKircyft0VHyIAiqYgcHgT//2X27vj7gkUf0M3Yc\nJ/hEp7ExMpinTSsPBW89eDOgFkUpZo+o0NVFKo16tWgyGXL9w041NIWTJ8mDecoU8jlVWTS6BD8y\nQlRMVVUwFTs4SBbvdXuC9vWRi/L883r7pe2rqfE/8ChxTZpU3go+6MryafPgKcGVk4IfHQUOHCCq\n1qtFA8htmh//OHnKft8+YPZs8mACyL0cu4Jva2tDa2srWlpasH79+qL/7+npwaWXXoolS5Zg0aJF\n+PnPf+6rIZTgaY67DCzBB1XwM2YA27ertzt2DLjqKmDLFr39Uttg3Dj/Cn54mAzcSZPKR8GL0iQ3\nbAC2bvW/77SlSZYjwR84QGZm69Ru4i0aQPw24zgkxpa0AnR79wJz5uQ/x27RjI6O4qabbkJbWxt2\n7tyJTZs2YdeuXQXbbNiwAeeccw5eeeUVtLe345ZbbsGID3mZyxFSq6hQ2yF0kGezwQn+wgvdbZq+\nPuCLX/RG8OPGkXPxq+CHhsTK9Pjx0suDHxmRB1l7e4NnGlkFX9ro7gYaG/WsFt6iAcQKnn5OWgCW\n9d+BBBD89u3b0dzcjLlz56KqqgqrV6/GFo7pZs+ejb4PWtnX14epU6ciy79HaYDerG7Wi0mL5sIL\n1YHWkRGy3ac/Tcj1rbfc90ttgzAVfKlZNDKCP3Ys2E1oLZrSR1cXUbW6BK9j0dC+sQTvQvDd3d1o\namo69bmxsRHdNOT9Aa6//nq88cYbaGhowOLFi3HnnXf6aggleDdlTge5CYvmgguAbdvkXh0l1IoK\nYNUqPRVPbQMTCr6cLJowCJ5V8H195ZUbLkI5Ejyr4L1OdALEFg21ZpJG8LRMAUUUBK+U2hkaDVBg\n3bp1WLJkCdrb2/Huu+/ikksuwauvvorx48cXbXvrrbee+vfy5cuxfPnyU59Z4tZR8CYsmtNPB6ZO\nBd58E1i4sHibY8fIRQCAyy8H/vf/Bv7u79T7paRjQsGLLJpSVPAygjdh0dB4By2HUF/vf39JRzlm\n0XR3EwX/xhvmLBr68Etads3evcCSJfnPMoJvb29He3u7kWMqCX7OnDno7Ow89bmzsxONjY0F2zz3\n3HP4zne+AwA488wzccYZZ+Ctt97C0qVLi/bHEjwPPwreL8nRv8tmgfPPJzaNiOD7+gjJAkTtr15N\ngkIzZ6rbZ8qDtwrefd/jxpF/04dhGgi+nBR8Vxdw0UV6Fg0VdyxKScHrWjS8+F2rU0tZAqVFs3Tp\nUuzevRsdHR0YHh7G5s2bsWrVqoJtWltbsfWDVIgDBw7grbfewoc//GHPDfHjwfsluYEBMjAA4OMf\nl/vwrIKvrgZWrAAefVS9b5NZNDRtlA78JBE8zdV3g6xUwdAQuTFNWDRAOnz4ciT4MIKs1oPPQ0nw\n2WwWGzZswIoVK7Bw4UJcffXVWLBgATZu3IiNGzcCAL797W/jxRdfxOLFi3HxxRfj9ttvxxSaye8B\nutkxJgh+cLCQ4GWZNKyCB4C/+ivg979X79tkFk0mU0hc/f3JsWgefBD42791304WZKXnZMKiASzB\nlyrYIKupPPgkKnjHiYfgXdNdVq5ciZUrVxZ8t2bNmlP/njZtGh555JHADdFV8OyDwC/JsQS/aBFR\nEYcPEz+eBavgAaClBejoUO/bZBYNkJ/sNH26OQWfy5EH1V/9lf99HDkCHD2qd6y6uvy/KSGbInir\n4EsXjpNX8FVV5vLgk6jg6YxVNjQZu4KPEroevGkFX1kJnHceyabhwSv4xsZ85TsZTGbRAIV1VkwF\nWZ94AvjqV/3/PUD6UOf8KCnV1RWqeHpOQQJhIg++nFFuBN/bS+6/8ePNWjRJVPAHD5KJlWzeymmn\nkXsizBm3iSF43eCpiTRJluCBfKCVR19foYKfPRs4dEh9XJNZNEBhuQJTCv6hh4IP/qEhvX3Q61Vf\nX0jw1qLxjnLLoqHqHSj/PPihoULOAcjDra6OWK9hITEEz1o0OgrelEUDAGedBezeXbwdb9Fks+Qp\nvH+/fN+msmgowYsUfBCCHxkBfvOb4IPfq4LnCb63l8wvMGnRlHtFyXJT8NR/B8LJg09SmiT7tski\nbJsmcQTvRtz0KW5SwU+dSjx4HrxFA7jbNKxFE0TB08FAFTzdV3V1sIfbM8+QczCh4N1uIFq/PJsV\nK/hp0+Tt6Olxb4O1aEobrILX8eBLOYuGfdtkEXZFycQQPL1ZdRS8aYtGRvC8ggfIgGSmBhSBtWhM\nKnhahwYIdu7//u/Af/2vxPcLsmi5ToojfdvKZMQEP3OmfB9nnaV+UwJskLXUQSc5Af4tGtGyfUn0\n4EUPJyD8ipKJIXj6hHNTp2FYNCYVPGvR+B1gbJCVTnai9gzg/9zHxoD/9/+AK68MvhqOjkXD3pAi\ni2bGDHkbenuBt99W7z+tHny5EDxv0fjJohEt25dUBW8tGg0FH0aQ1auC17Fogih4UZCVJXi/5/78\n86Q06/z5wQlex6JhVUt9fWH51mPH5AQ/Nkb2/c477vu3Cr50wVs0OnnwprNoopowKFPwqSF4erPq\nKniTBF9fT+wK/qYRKfimJneCN6ngWYuGVfC5nPfiWv/+70S9A8EXLNaxaNhBzadJqiwa+p0bwafV\noqmpKQ+C96PgdUoVDAzoL3rf0hLNuLEKflhPmZue6AQQj1ik4v0oePqgqqwkn/343G4KvqKC/HjJ\nn3Uckh55xRXkcxQKnn2l9mLR0BtWlNnEIs0Wjak0ybffDraqVhD4SZPUVfCTJ7uPb8ch8bSwJxsB\nVsHHNtGJQkTwMg/eLchKL6RfEnVT8ID383/lFfJQOPvsYG2j8KrgvQRZrYIXIwyL5v/+X2DTJjP7\n8oKBATKmp00jn03Xopk0yX1/dJJRFCs/pV7Bs1k0UadJAnKC5xV8QwOpKClrI3sh/U52clPwgPc3\nmCefBC69ND+TLg4P3ouCnziRELzKhmI9eH792nJEGAQ/NBRP4Tpal6XiAwbSuZ+9WDQ6Cp4SaxR2\nl1XwTBaNTppkkHrwOgQ/NESe7pRoKaqqiOo4cEC8b5Z0/E52CkPBnzhBBj1F3Fk0qiDr4CAwaxZp\no6yfgWIFX+6LftDzNUnwuhPWTINNkQTMWzQTJyaL4FOv4KNcsk9E8NOmFRI8tWdEa56ofPiwFDyt\nJEnhleD5AZZki4Zen5YWuU3jOIWKjsZvkrbQskmUk4JnA6yAf4IX5cFTi0aX4KMYM6lX8GwWTdRp\nkkCxghcFWCncCJ714IMqeDoA+vqCWTTs5CnatqAWzciIOtArI3jHcVfwNTVAc7M80Er3zT6Ay92H\nDyOLJi6CP3q0sHqr3ywaUTaYbpA1aosm9Qo+qiX7ZATPTo8XBVgpVIFW0wo+myWKbd++5Cl4QM9O\nA0iaJFVKJ06Q49fUiGfUsgQvU/CiV960ELzJLJq4CJ4d44DZPHivCj4qiybVCt7Lkn1hWDSmFLxp\nDx4gg7Wzs5jg41bw7G8RZAr+2LG8/SVqB21rS4tcwYtuGD8Ev28fWamrFMATvIl4Q1wePP+ADlKq\nwK+Cp2PFKvgIoJtFE0YtGqCY4FUKXjXZiSUeEwoeIO3o6iq2aJKg4FU3pSzI2ttLHlqydugoeNEN\n46ei5KFDwOuve/ubuEAJvqKC/DYxFT9OBe+V4GWlCvymSUbpwVsFr5lFQ0kj7CyaIB58GAq+qytf\nbAzw/oDj96lD8I4jX6JwaIgoySAKXtYOPsgqUqqmLJrBwXCr+ZkE25+mAq1xEjxLeLpL9pmc6GTT\nJCOElywaHa9ehaAKXteiMangBweDBVn5feoQ/MGD+dIGPAYHyeB0U/AigtdV8JMnk78/eFB8PiYs\nmqEhkqEU5qo6plBuBM8+oHXLBbtZNI5D+kU3TTKbjTdNcvx4IjDCSu9NDMHrZtFENZNVpeAbGoh3\nKypDYDqLBsiTYdRB1v5+8eB3HLK/8ePV5ycrVaCr4AG5TSNT8F7VED02vyh4EsESvKlMmlLy4HUs\nmqGhfJxCh+BnzIg3TbK6msSiwqp8mRiC182iYWvRmCT4yZPJBaekrVLw1dWEdGXKkrVo/JYqYNW2\nCYL3E2Tt7yf9wR+HXitRDjILlUWjUvDs8mayXHiRB89XrNQBVX+lYNPwCt5EJk1SFLypiU4DA6Rv\ndMZ3Xx+ZixGnggfCtWkSRfBeluzTsWh+8xtS/5yHiOArK0lHHz1KPovKFLCQBVp5i8aPOhJZNEBw\ni8aPggeKSXNwkPy92/nx1STpfnp73RU8PX9ZLrzohmGPoQt67FIk+HKzaEyUKjh5kowDnfF97BiZ\nMR2nBw+khOB1ywXr1qJ59FHgv/wX8puHiOCBQptGZdEAch/erdjYm2+6r1QUhkXjV8EDxTcAVdhu\nFhTrmVLypZOcdC0amYIXefC1telS8OVE8HEp+Fmz4i02BqSE4HXLBevUomlvB77yFeBv/1a8YrmM\n4NlyBSqLBlATvErB/+AHwAMPyPdL98Er+OrqwsEdpYLniYRV8LoWTWUl+ZuBAf0gKyBX8CKLxip4\n74jLg+evnxvB86UpKLLZwslyrILXSZOMyqJJvYL3s+i2aLsXXiBrjm7eDFx4oTeC96rgRbNZ+YlO\nPHn19YnbxEKk4Fn1DpSOgmcHNfXh/QRZ+SwDUxZNOSl4nYXKeZSKgh8dza+DwIKfLOdHwVsPPgKw\nE510FLxsu//1v4DbbwcuuIDkjcsIvra2+Hu2XIGbgpd58PxEJ37QHj/uTvC8gjdB8HEoeD7rgSV4\nXQU/dSpR/zx5iSyaNCl4URZNa6u3iV5jY+QaJYHgdRf6EYEdQ148eKrg48yiAVJC8F7KBas8+OPH\ngY98hPxbRfBhevAqBa9D8LyCnzy5+GETRbExNwXvJcgK5AneLcjKt1Vk08gsGq9qrFQJns+iOXmS\njF0v6Z703JNA8F7HEgs20EoVvJv4cJxwLJrvfU88F0NWqgBIEcHrLvhBHwSi7VjyFhG84xRmabBg\nCd6vB++WReNHwS9dSiwnFlEqeFkWjZcgK+DPogHEgVZr0RQS06FD5LeX1EmdchNhwSvBi/x3Ct6i\nqasj/TQ6Kl8yc2CAbDNxolmC/z//B3j//eLvZaUKgJQQvKmJTqz6O+20YkUzMkJ8PNFgoQRPn+68\nLcJizhyyaAE/A9Iti8aN4OkkInYwVFQA8+YVbudHwZu0aKiC1w2yAvmFt71YNAAJfh85UriNSYum\nujqdBF8uCp63aGpr5YXsKKjI8JN5pcKRI+JjWovGw0QnFcGz6lyk4GX2DJAn+JMni7NWeNTUiKc5\nu5ULdiN4tqCUCn4UPPtW4DZJCQjHojl5Ui8Pnr1GoglMIgXvN01y+nRL8FGDv36VlUTcyBS3F4um\nro78W/WGSee5mFw85eRJ+UI4qiDr5MnFAsYUEkHwNM1Jp4gYmyYpehCwsyDr6wlJsRkYOgTvNsmJ\ngipSFm7lgt0InlfaMkRRbKy/n/yNLMjqZtGIgqx9fWR/tHCaDsGLlLnJNMlyJ/jubpJ4wGNoiFyT\nJBA8oC44pmvRUAXPf8+D3uN+4jYyUHtXdE+oHlAzZohnxZtApAQvK6hDb9ZMJriCZy2aqiqiDNiL\nrEPwrEesAr8MHaAuFzw8TH5UBM8rbRm8WDTU9vFD8NOnqxW8F4umvj6/cAl9Q/FL8CY9+GnTSo/g\n+SwaShAign/zTeDf/q34+8FB8qBNQjVJQP1G6Kbg+TRJQI/gTSp4qsK9KviZM9VrDwdBpAQv62z2\nYusqeJVFw5IDb9OYVPAygpcpeEoiUSt4mkNcWZn/LgjBewmy8gS/d2/hw1Mni0ZG8KY8+FIkeD6L\nRqXgBwfF3w8NkfsjCUFWQE3wokJjFOyyfTRNkn6vQ/B0hnVQBFHwZUHwMn+Qvdg65YKplcNvR/N6\n2Y70Q/BuKZIUIm9YVS74+HHS7qgVPE+YgD7Bz5gRzIPns2i6u/MBVlk7RApeZYVRUDXm5WaNkuAf\nfhj47nf9/71fi2ZgQKxSh4bI21RSLBqVaBGVCqYQTXQC1G+YlOCzWSJ8TPQBJXg/Cr4sLBoZwbM3\nq5cl+/jtqPplF2L2QvC1tWTfvMqUgScePgNGpOBnz45ewYsGlxcFryo25tWi0VHwfi2aykrvNfij\nDLL+5jfArl3+/15F8AcPkrEuU/ClQPBBLBq/Ch4wZ9NQi8argqe168OYUZsIgmdJ0cuCHyKC58mb\nT5VUETxAVPyePf4smpERQjLUXxYp+FmzyN/IVKaugvdC8EEUvMyi8VOqoK7Ov4LXsWhk26oQpYJ/\n8slgJX7dFHxTkzcFPzhIxvDISHgLTsggegNzs2i8KnidNEnAXKqkXwWfyYQXaHUl+La2NrS2tqKl\npQXr168XbtPe3o5zzjkHixYtwvLly6X70rFovCzZxz8IRETmRcEDhOD/8hd/QVZRIJNX8JMm5Ytu\niaCr4L1YNEEVvN8gqyiLxpSCl80M9ErwUQVZOzrITxCV5pfgVQq+ujrY2gp+YVLBi0oV0O/d0iQB\ncwpeRfCq9gPhBVqVBD86OoqbbroJbW1t2LlzJzZt2oRd3Dtmb28v/uZv/gaPPPII/uM//gMPPvig\ndH86Fo1XBe+WAskT/MCAHsH78eD5i8iTF508JSuhAIgfUiLIFLwon9aPgncc9yCrnzx4upwa2w5+\nH/xMY12LBvCuxqJKk3zqKbISmCmCF2XRnH66OsjKq3T2QZ0Egnfz4L2UKgD0LRpTqZJHjsiD1qpS\nBUBMBL99+3Y0Nzdj7ty5qKqqwurVq7Fly5aCbX7961/jyiuvRGNjIwBg2rRp0v3pWDS6Cp5WlmMn\nRiRNwfMEePy4O8EHCbK++y7wqU+J9+lVwQ8Pk/6dMMFsNUnA3aLhrTYvBO9HwU+eTPbnd41fHbS3\nA5de6t+iYeeKAIVZNAMDpK+nT5dbNEDx/9H7xeuciqAQzdYGzFg0fj14UxZNQ4PcolEp+Fgsmu7u\nbjQ1NZ363NjYiO7u7oJtdu/ejSNHjuCCCy7A0qVL8Ytf/EK6P1NZNOzDgN1WVGOGTnZit3Ej+H37\n/E10css11yH4IEHWvj7xlGc/Cr6/n7RTpG68BFn5LBpAbdGMjBAyY/8ubA++poaca5gq/skngZUr\n/StF+rCkCQSsrXDoECF32TJ+7IOA/z4Ogqdkzc/WNmHR+FHwOhbNpz8NvPeeepvDh0kSRZIUvOSZ\nSJBh01EkyOVy2LFjB/7whz/g5MmTOP/88/Gxj30MLS0tRdveffetaG8n/16+fPkpv563aHRq0bDb\nUsKWBVm9EjzgT8G7LWJgUsGL+knmtar8TscpzDqioAQvUjdBShUAagVP9822yYQH/9xzwLJlhXMB\n2OPR1e0nT5afj190dJBrc845/hU835c8wc+YQc5D9ICn24nexCjBR5kLL3v7UrXDTxaNTpokoGfR\nvPIK0NYGrFkj3+bIEWDJkuJjOo67Bz9jRr5IWXt7O9opUQaEkuDnzJmDTmZVi87OzlNWDEVTUxOm\nTZuG2tpa1NbW4lOf+hReffVVIcFfddWt+Pzni4/DWzQ6M1mBYpITKXi/BK/rwbPL7/GqUqTgJ00y\no+BF/aSa0MLvs6Iif0OJHigswZssVQAUPjz5m1B0fbxaNKKb9a//GnjkEeCss8TnQgk+DLS3A8uX\nBwvmqQj+4EGi4Pn1SSnodyKLJg4PXnbtgpQqoA+2MLJoxsbI2HjiCTXBU4uGvydodp1KL8+cSRYr\nAgrFLwCsXbtW/ocuUFo0S5cuxe7du9HR0YHh4WFs3rwZq1atKtjm8ssvx7PPPovR0VGcPHkSzz//\nPBYuXCjcn2xw8xaNzkxWoJjkTCp4P2mSUXrwMgUvusFl+1TdACqC91uqgCorlUWjIng2SOjVoqE1\ncHhQFRsmwT/5JCF4GQHrwE3BqwheR8EnheCDKvgwLJr+fiKI/vhHeTE0xwGOHiVp0PwxVSmSFLEE\nWbPZLDZs2IAVK1Zg4cKFuPrqq7FgwQJs3LgRGzduBAC0trbi0ksvxdlnn41ly5bh+uuvlxK8yYlO\nQPHAlAVZvebBA/4mOvG2QdgevEjBj4yI00dF+/RL8H7z4HUsGtFbGE2LZY/l1aI5flz8PT2XsAje\ncYiCv+ACswqezaJhLZpS8OBNE3zQNEk3i+bYMULcs2cDL70k319tLRnj/D3lZs8A4QVZlRYNAKxc\nuRIrV64s+G4N957yrW99C9/61rdcD2ZyohPd1o9FQ4lGhKAKnr2QYWfRiBQ8QAYY+zprWsGHGWQV\nvYUBeeKm5+ElTZIWeePPw3HCV/AdHeTY8+bljyeLe6ggUvB0X7oWjUjBT5wYjwcvIjzVg8bkRCd+\nvQc3i4YKfZqmAAAgAElEQVQ+DC65hNg0551XvM3hw4Q7RA+VxCp40zAx0Ym90GFYNDTL09REpyiz\naGReq2yAmbBowlDwKoJnz0nXoqHELQrU0myOsAie2jOZDDmO11IKFHxf0hjK0FAwi6ampvQVPD1v\nx9ErFzw4SDxxKhbc3qyoX08JXoTDh4EpU8TXV0fBT51KLB7TqbqJIHjdiU6OI86iYfdvIk0SyNcr\nV0E00SnOPHiVUvOr4EWE6beaZHU1uVG8evCAux3GbicjeFW/hEXwTz1FCJ5CtFi2DkQkQYlJx6KR\nzWegb2JJJ3i3apJDQ+RvqZ3Hfs+DrxbrZtHQ7T/9aeDFF8X37pEjwRR8NkseEPzi8kGRCILXneg0\nOloYjRZ58EEV/MSJwG9/676iEuBu0WSzpM10Wb+wFTwdzF4UvOya8AqeDXD6LVWQyZA6P2z/B1Hw\nXglelu4JhEfw3d3Ahz+c/yzLVXeDiuDdLJqBAUIepe7Bu1k0rP9O96dD8G4WDVXwp50G/Kf/BDz9\ndPE21KLxq+CBcKpKJobg6QWvrCSEyK91ChRfZP5hYGImayYDXHaZ+jwo3CY6ZTKFg9Z0Fo1Mwctm\nLPLQUfDUwhC9KXm1aIDiPHOdICvgjeB5IpMRPHussAieP5+wFLybBz95cnLy4GVvX0FLFbD+OyAf\n3/yCPm4WDftAkNk01KLxq+CBcOrCJ4Lg2Queychz4XlFyJOcTi0aN4L3AreJTkDhIDOp4FVBVpMe\nPFB8A/gtVSBCFB48myPNIgqLhn+4hqHgdSyaKVPkefCloOB1LBpewZuyaNgHgorgqUUTRMGXJcHz\nF1zmw/MKPow0SS/gPXhZfQ2a7dDfH34ePPubIoiCB4oJ3m8WjQi0DdQCcsuiYfcd1KJhx0IQgh8a\nkv8tfz5+UyVFJFFTQwJzw8Ok/SqLRqXgS8GDV40lumSfSMGL9ieyaHQV/NKlpCLq3r2F21APXmbR\n6Cr4srVoeO9aNOD4pzi/nYmZrF7glkUD5AfZyZPk/7LZcGeyAsWD1bSC95sHLwKtn0/PJUwPPiwF\nf999wLe/Lf4//uFq2qLp7CT2TCbj3aIpNQ9epeAHBwszaOj3Jj14gIzXCy8Etm4t3MbNokmFgpcN\nbP4JJ1PwfC4sv51I/dFXYjoDzSTBV1eTttN9yxYxoAqP5t3GoeCDEDz/Cus3yCoD246gFo3oZj1+\nnDxEwlLwfX1qBR+mRfP++0T5Af4UPLVoklKLJkge/MCAP4vGi4IHgI99DNixo3AbG2SFvkUjU/B+\nLJqKikJyMEnwmUxhoFVEOvSJfvx4fpCEOZOV/U0RZKITUEiaY2P56yWqyc9Cd2D7IXivFo1s4RIT\nCn5wUN6PYQdZ33uPnBvdt98gaykreHrefhW8Fw8eABYsKF56MWiaJFDGQVaeGFUKnt+Ot2hE5MDm\nwpskeLpvluBlCp6dOWdiwQ9ZkDWbNa/gWYVDHxZ04o7fzAdZO0xk0YgIfubM8NIkZTWA6DHCVvAq\ngqfL8ZV6HrxOqQJewcveMI8d82bR8A+EBQuAnTsLtwk60QkoA4tGJ4sG0FfwopmsInJgCTUMgqeD\nQ5ZFQxV8FBbNpEnhKHh20Qh2XyqbRifIyrdDN8jqNU1y5ky5Bw0ED7LK+oA/H9MKnrVostn8wiAU\nNPCoKjmRFAWvsop0LBovCt5LmiSv4D/0IaLY2fEStFQBUOZBVl0P3k3Bx0HwbhaNFw8+aJBVRvCm\nFDxPWDLVRWcdm7Jo3JZHpJClScoUvCmLJg4FX1NTqOBpoFWUdqoqOZEUgle9SejmwYeRJslvX1lJ\nagu9+Sb5PDJC7pdJk8x48CYXQE8Mwetk0eh48CJyYFMlTRM878HLFtZgCZ5uIyLGoAp+4kSzpQoA\ntYKXZdLo1MAWtUPHgx8bkys6mUUzY4ZekNXPzSXz4OkDmG2nTMH/wz8Azz4rP4ZMwff15Qme7p+9\nz1gFL0ufTUqxsaAWjUjB66ZJ6mbRULA+/NGj5P8rKoIp+Joa8nPsmPu2ukgEwXvJouEfBG5L9gHR\nKnjZRCeW4Pk2sQhabCwOBS8jNx3VwrdDh+DpeBE9PFQevOrBR+MKfgqByRS8aDzK7IBXX1UvCScj\neCBv0QDFBO+m4EvFg1dZNDTV9vjxaLJogEKCp/aM7Ji6Ch4wH2hNBMGLLBpZHrxfBd/fT9RZ2B68\naKITr+DZNvEIWmxs8uTgE51GRkg7aD+pspBkKsnLoNYleJUVRiGqnaOj4AH/No1MwYv6XWbRnDih\ntm5UBM8qeL6+0MCAnOBLyYN3G0/V1URJm86iyeVIm9gHBwAsXJgPtNIMGvYc+MVpdEQbYD7QmhiC\nN2XRqBQ8/Xt+Xc4gKEcFT9W7aIFn3SBrEIJ3y6JRzQykJXnZPtBR8EAwgheNbZHgkFk0pghepOBr\na4uP6zh5MZEUgle9Sbi9EVKC96PgqUgRrdZEt+XfFnkFP2UK+bcos8zLvWA6Fz4RBB+VRWNavQP+\nPHi2TTyCKPihITHBe1XwrD0D+Auy6mbQ8O3QyaJxU0S8TaOTJgn4J3hZFk1UCt6PRUNFFbs2b1SQ\nPaD9lioA8mUb/BQbU80CFvnvANDcTALcQ0OFFg09D/a4uqUKgBK3aHTWZAXMB1lpHnwYBM8qeNFN\nGIeCD1qqQEXwukHWMCwaluBV++ZfuXXSJIFwFDxP8DIFT8enDLIsmnHjCseVKsjKz0ambUuSgg9i\n0fT2FhK86O2SrubEe+oym0a0Ld333LnA7t2FFg1tC3seuqUKgBJX8KOjYmVucqJT1ApeZ6JTGAq+\nspL0J+v1ySwarxOdvCp40xaNbpBVBj7j5sQJYmPwC3ebtGhEfSALssoUvFvhNpGCp3VoKHQVPNu2\npARZ3fLg/Vg0/P6Ghkh/ia6LKJNGpuCBvE3DWjRAihU8n6NLYXKikypNMiyCV1kHYSl4UVllrxOd\nZNfDi4KXqa4ws2i8WDQnTpD2jxtHHoqqmc9J9uBFKrC2ttCeofvXVfC0bUlS8Ko8eK8WDR2b7ENd\npshlmTSy7YF8oJW3aIIq+JIleJl68TLRKUiQNWwPXlZsLAwFDxSeP13QOQwFzxImT1phWDRuQVYv\nBM/2O6/STCr4XK54kRqZBy+y0HI57xZNQwNRkSx0FTxv0SSh2FhQi4ZX8KL4goywZRaNjoIXWTS8\ngk+FRSMLZPgtF5xEiyYqDx4oVPD02HV1wUsVuCn4JFg0bh68iOD54KspBc8GiPnvdSwadhKeDKJz\nXrYM+NWvCr+TEXx1deFDqNQ8eB2Lpr+/UMHT79nrYlLB61o0XtIkS96iEQ1i3SwalUVDFWzcBB9E\nwdPUNd3BwN6Y9NxEfWzSg/cSZI0ri4ZV6ryCl6lYIJiCp/tjoRtk1SV43dmQIouGzxRJqgcfxKIB\nivPV+THOFxqj8OPBt7aSIOuhQ2qLxovYmTMHuPZavW11kAiC182iUSn4kZG8L80jbIJ3Kzamq+BH\nRshrpW6evozgRRZAmGmSUSj46mrSP3QSlh+LhlfwptIkBweLc+/p92EqeBFkCp7+n+g6loKC17Fo\nAHcF39tbvC4w/TuvCr6+nijuXbvUaZJeRFt9PfCd7+htq4PEELxOFo0qTVKm/IDo0iRFFo0XBS97\nA5GBfYNRKfgw0ySjCrLS2vsDA3ppkjKCl2WSAMEIfuJEsYLXCbKyZTRk8Evw7DJ2/IO6lDx4t/Ek\nU/A82R45IiZ4Px48QGyakZFCiyaIgjeNRBC8bhaNaqKTihzjnOhUXU3IZmiIPAz4NrHw8qQHxApe\nVVSKhwkFH1UePJAnbp00SdpeVoGFEWSl1uCECXr9HqeCVxF8EhS8W6kClUWjUvDsPo8eLSRjCplF\no1LwACH4qqrC+yWIgjeNRBC8bhaNSsHLAqxAdB68LIump4dsx+Yrm1DwbD/R8+f72HHk5GBKwZuy\naGitIFkfUIIPYtGI1pal8EPwtC21tcE8eLcywqYJPm4PXlZNMkipAsDdojlyRE7wfhX81KmF93aq\nFbyoE71k0fixaMLOg3fLounpKVYBJhQ8208yi4buU1R50USapMlSBbkciT/IYhD0bSlJaZJuwW2d\nNMkTJ4Bp06K3aErNg9cJsvoleK8zWSkWLSqei8AfM/UK3kQtmjgVvNtEp8OHC/13tk0s/Ch4tyCr\nanCZSJM0ZdEMD6sf0kChRWPCgzcRZGXTEPm+FI1J0T3Q309UoNeZrCL4tWiSUItGVImR/Rs3BZ/N\nytOUKVQK3msWDUAW4G5rK/xONJM1NQo+SBaN3yAr3XdfXzwTnXp69AjeyyQnQBxkpWTJ5jubJviw\nLBq3B7CuRaNKk+Tz4E0p+OpqsYIXBVnZ6wOQ8TN1ajQKnk3pTJoHTzPIdMQdj+rq4gAr/T6IReOm\n4DMZYPbs4mPyFk1qFTxd2o0nbq+1aFQKHiCE1dMTj0Vz5Ii+gvcbZKVkQuts0EGtemh4JXgaUNSx\naPxk0Zgi+CjTJNnYh44Hz18fgIyfKVPi8+CTQvCA3IfXsWh4ewYIbtG4KXgRREHWVCh4USCJDlzW\nI5YNONVEJzd7IyyCpwN1eFg+0Wl0NBwFzwdZ2RuZVWpBFXw2S9QVnU7PT3QyqeBV5x/UolEV3AL8\nETx9SIj6QTYmeRstbA/eLQ8+KROdaFv8WH4yBS9Kk9S1aGSVJ92Q6iCrTo62qNY5oFbwbv5tfT2Z\ncWaa4Om+Zel79AYPQ8GLgqxAYT+rHhr0Ycn3NU/wQJ4cvQRZ41TwbJqkSsGzfUOD8V7WZfUaZAWK\nhQ714MNS8Dp58EkneJ08eJmC59MkdSc6DQyQe8SrvWLTJBmIXl90FXwSLBogb9PIJjoBxQRP0+rY\nVWT8KHg3gnd7aIiUp4zgT54Mt1RBFBaNKk0ymyVtoZabDrwGWQGxgg+T4JMWZFVdP1FbaKqvWx68\nmwefy5G+1i025ke902NaBf8BRKpXN02St2hU5HDaaSSbJQyCZ9P3RB48UEzwmUyhfw/4U/Aii4Yl\nELeHhi7B0xsgzFIFulk0XmeyiiY6jY2RhytPGl5tGjcFLzofXi1SD15UkZLCdJpkWB78Cy8Af/iD\nehuvHvzoKLEIKxRsVV3t7sH39pJqq6L9iCwaP/47f0zAKviiky+lICtAiPrYMXEOt0zB0zaxNk0S\nFPzYGBnovBqi5BBmqQJdBa8zk9VNwbNBaRZ+CL662rsHz94HJ06QsSCLZwDhKPgwPPhHHwV+8xv1\nNl4tGp2xVFPjruBl/jsgtmj8KviSSpNsa2tDa2srWlpasH79eul2L7zwArLZLB566CHpNrJCWPzJ\nm06TBPL+algEf/SofLYooEfwfrJo3IKsXhX8yZPk7/kHlcyDN5EHT2+IKNMkZYLAK8HT/vDqwbP3\nQX8/GUOyNGIg/Fo0pgj+0CFxPjkFrZgqOxcRwevYfbNmAR/6UPH3ugQvsmiCKHh+wY9EKvjR0VHc\ndNNNaGtrw86dO7Fp0ybsokuJc9v9/d//PS699FI4igiVrkXjRcF7yaKhbTCN+nry+iebnQeEo+B1\ng6xeFLzIngEKFXxYFo1uFo0JD14mCCZOJMpNFyoP3ouCpwQftoKX5cGb8uB7etQET+0W2WxlUVt0\nzv2CC4CNG4u/twpege3bt6O5uRlz585FVVUVVq9ejS1bthRt96Mf/QhXXXUVpk+frjyYlywa3TRJ\nLxYNbYNp1NXJCT5sBa9j0XhR8DoEr2PRhJFFw2Yr6XjwQ0PEcmLrlLgp+AkTiHLThcqDlx1D5MGf\ndlo4Cj7qPHg3gnd7OIvsIi92n2h/dHzLCo0B5j34klDw3d3daGpqOvW5sbER3d3dRdts2bIFN954\nIwAgIyp68gG8ZNF4XbJPx6KhbTANlUUTtoLXCbKaUvCUNHmLRqbgvWbReAmy6qRJUvVOhyRfU0fU\n16YVvCzIyqdJ1teLZ8NS+CH4sbHCNsjy4LPZ4gXc/cLNonELkPu1aGRgyTaNCl7ZbSqyprj55ptx\n2223IZPJwHEcpUXz0EO34vXXgVtvBZYvX47ly5d7yqLhO0pUTVEGWqo3TIKPW8HTYwUJssoInpJm\nnAqeZitVVrp78AMDhTnw7PeA/FgTJ3pX8HQmq64HL0qTDMODp8ent7HMg89k8mMpqNIUFdZjoaPg\n/QRZZeAtGlEOPBCuB++1X9vb29He3u79wAIoCX7OnDno7Ow89bmzsxONjY0F27z00ktYvXo1AKCn\npwePP/44qqqqsGrVqqL9XXfdrThwgBA8hdcsGplFMzQkJlGKuDx4OjB1Cd7ETFbdiU6Ad4tGN8ga\nZhZNba163xUVZJ+HDhX2u46C92rR+JnJKrJowiB4NsDKH5dvG/W+gxC84xCCnzVLvo0b2fn14GXg\nCf7MM8XbiSyavj6yCLZXBC1VQMUvxdq1a7034gMoLZqlS5di9+7d6OjowPDwMDZv3lxE3H/5y1+w\nZ88e7NmzB1dddRV+8pOfCMkd0Ldo/CzZl4Qgq+giZjLkgutaNCZmsuqWKgCKbQEVwZ84UXwNTARZ\nqWobGDATZKXbHjhQqCZVC5dQ+LVovCp4uq3jmCV4+tAfHS1+YKreYEz48MeOkWOb9uCDWjRegqys\nAWFCwdNaW4kMsmazWWzYsAErVqzAwoULcfXVV2PBggXYuHEjNopC1i4ImkUTdCYrbYNp1NXJLRqA\n3LyigWJCwQcpVQB4U/C9vYWv/IAZi6aigmzrVu3TD8HLFLxsvPixaFQzWd0mOg0OknPPZs0QPF1c\ne2iosA4Nf1x+rJnIhe/pIfsJSvBhWjQygs9mifXH9kGQmazs7NlsVrweQxRwfS6uXLkSK1euLPhu\nzZo1wm3vuece5b6CZtG4LdkXZ5BVZtEAwCuviAeWCQUvOv8gHvyxY+K3jdpa8hDj+89EqQK6n74+\nUnRLBi8EX1srJng3BW8yi0ZHwVP1zn/PYmyM/Oguxk73w9ahAdwtmqAEf+gQ0NREiFQGt2sns2jC\nVvBA3qah7fOr4Nm32jgDrEBCZrLqZtEkVcGrgqwAcPrp8jaFpeD9lirYtw9oaCjejhI8vy8TFg1t\nx7Fj+jNZ3fZdVwccPCgOsqqWBvRj0XidycoSLU2RBOQEL6q4qgJL8LoK3kQufE8PmWxkWsEHIUnd\nNEmgODZiohZNnCmSQAKW7AtSi8ZPmqQXAtWFyoNXIYmlCvbuVRM838cmShXQdugSvF+LpqIif8Ob\nCrJGoeC9BunofkRBVrr/MDz4nh6gsZG0ly2ixyLqPHjdNEmgOJPGKniPCFqLhu8sNn/XTf3W15O/\n1X3N9QI3D16GoGmSsjz4IKUKZARPJ3Px+1LlwcdN8Pv3i6t40qqYJoKssiwaOiVf1E5WKdIceEA+\nk9VrX8oUPJ8HH4ZFM2OGfHUkwL+CD2rRjI3JSwVT8Jk0fX3Bg6ypU/BBs2jYC53J5Jf40rFowrBn\nAHKDjowEJ/gwFLzXiU7d3f4UPD/9wS/Bq86fEoeOohUpePo9nbBlMsjKj236sJZVLhQpeNlEJ78E\n7yVN0lSQddq04rr7LPx68EGDrMePk3apHhT8g+nYseATnVKl4OkAZskgSC0aum0u527RzJwJ3Huv\n/7arQG9Qrxdy2jTgvffy/WFKwQcpVbB3LzBnTvF2bBYNi4oK8QItYSh4OsGpr8+fRUPPQ5TPT+HX\nouH7UdXvrJLW9eC9jIs4PfigBB+GRTM05G7PAIUWzdgYuTaquTWqY6ZSwYtSkWQWjU4tGrpPHQVf\nUQF84Qv+264CJXivF3LpUnIjvPQS+WxSwfspVdDfT7afNKl4O5mCB8SBVr9ZNG5vWaq6P6LteAVG\nyUdVi6a/X16XnYdsJquK4FUWjUkFLyoMx+bIh2HRTJ8enODDsGh0CJ6vQlpfr65B73ZMIGUKHiiu\nw+E1TZK/0LoKPkzQOtReCb6iAvjqV4Gf/pR8jrvYGM2gEWVr1NaSQS8j+KCv1dXV8v2zoLX33fZN\nrQmvCr6yklxPfjlFGfwqeC9BVlMWTSaTv470zYvCVJDVhIIPIw/eLYMGKHzw+vXfgULBkyoFDxQP\nYtHg1Q2y0m1zOXcFHyb8WjQAcO21wAMP5NWzn2JjfNqfXw++u1tszwB5ohC1T5QL7yeLxnH0FPzo\nqJ6CB+QevGq8eLFpZPXgdRV8mAQvCiTLrLYoPXjVuZj24CnZerVo/PrvQOH9ELeC9/ni4x/8IA6q\n4CnJec0hNwm/Fg1AFPOnPgXcf79/BT8yUqjIvJYqoAQvy6AB8oTpxaLxSvDsbxl035ZUBE8VvOxY\nXjJpZApeVVeHV/C6efC6kCl4QD6fwYQHr2PRuMUTwihVMDysb9E8+yywaxfwxBNk0pYf0L6ka8mm\nWsEHSZOk28Zt0QQheAC44QZi0/jx4EXxBy+lCtjUPBXBqxS8KYuGtkeFoATvliYJeMuk4QmeDZjH\n6cHLirdRBc9/H9SiyeXIw2rixGRaNDoEv3gx8MYb5Breeivwb//m75i09EYu530Og2nEruBFg9eP\nBx+nRVNZSY7t90JeeinwP/4HGYR+io2J8p39Kng3i0ZEiqJceD9BVtn+WVDi1kmTBPwp+AkTvCn4\n6ur8TU0fqF48eFqeIQyLhj//mhpxOmpQgu/pIQRaURFOkNUEwauqXALA179OfkyAvtXGbdHEouDZ\nXNMgi24DhRZNXAoeIIPar4KvrAS+8hVyU/jJolFNaPEy0UmWAw+Un4JXjRc/Ch7QD277LVWgCzeL\nJgwPvqeH2DNAOHnwQbNoDh9WT3IyDWoNpT7IGmTJPiA/IOLuyPr6YMe/7rp8aWFdsCmiphS8G8Hr\nZtH4CbLK9s+iri4/wc1tO6C4MqZs4RIWfoKsQGFf+gmympoV7BZklXnwQQmevokkKQ++spK8VRw6\n5G7RmAS9lqlU8H6zaGQWzYkTZGDEVZITyJdC8IvTTwcef5zU8tCFLP7gt1SBX4KXWTRhEbxO4a26\nOnJN+AeBroLXsWjGxgqDaOzY1g2yhpkHr1LwIg8+SJD10CFzBG/SogHI2Nq3L1qCpxZN3MIzdoJX\nKXh2xqvjkPQ4URZNf3+89gwQXMEDwIoV3iZWsEHWoArecdQEn82Sn7AtGh3rRaefa2vFsxB10iR1\nLRqq0unDRlfBV1eT/hkdTU6apAkFn0SLBiDH278/egU/PGwVvPCCV1SQH3Y24cgIUWO8cquqIgQf\nV4CVIogH7xeyICtbEkJXwdPXdko2ItTVyRW8CYKX1W7h26DTz3V18rr2OkFWHYJXZS+p9p/J5Ps9\nbA8+SoIPS8EHXRGpupqUrbAKPgLoWDRAsQ8vu8hVVXozIMNGUIvGD2RB1srKfP/pTnRSqXeK2lq5\ngjeRRaNzDalF44amJuBjHxP/vU6apI5FI3qw6ih4IP+gCcOioQ94fsEPelxZXf8gBE9z4AHzHnxQ\nBV9dTd6WrIKPADqlCoBiH152kalFE7eCN2HReIUsyArkM2l0SxWoUiQpamvDLVWgS/A6/fyhDwH3\n3Sf+e52JTroWjejNif6f2/yDwcH4LBrTHjyr4Ovrk+fB19QUP+zChFXwH0DWAV4U/IkT8Sv4xYuB\nuXOjPaZMwQP5ftZV8KoUSQqZghcFWf1k0ZgkeBl0gqy6efCi2AftB9UbAm3HwEC0tWjo/4WVB89a\nNCdOiLfz48GbsGiiVO/0mElQ8Imc6AToK3hq0cSt4P/pn6I/pizICuTflHSDrLoWjY6Cp1O0wyD4\noG9KOmmSugpeFvsA9BQ8JfiwPHivQVZRiqYuTFo0poOs1dXR5sADhROdrILXVPAygk+CRRMHZEFW\noFDBm7RodLJoRkfFAXEVqqv1rqGuBy+DyYlOoiCrFw/+5MlClR1nLRoTE52SmAcPxKfgqUWTKg9e\nZyYrIFbwsmBsEtIk44CbRXPiBMlEUk0K8qLgp0wR14rnLRo/r6VRWTS6E538Bll1FXxtLZk+X1ub\nzxxis59YmFbwoqSEIB684+gTvNu5hOHBjxtnLZrIUFNDUpYovGTRWAVfCLcgK/VaVUraiwe/aZM4\nUMXflH5eqU1n0cjAKnjTQVZewavOp6aGkCI707ayMr8EJXuOpgkeMOvB9/eT6033nbQ8+DgUPBtk\nVaUeh43EWjT8gFMFWa2CL75hKcG7qV36StzV5U7wshVu+Dx4P6/UtbV6WQ7LlgG33eZt3yzc1mQF\nSN+Njbl70qo0Sbfid7W1hOD5m19k05i2aGhbWQQheFa9A8nMg7cKPiKwA/jVV4kfKJqe7zVNcvbs\ncNqbZLgFWfv63N9saP2bAwf89+G4cYW2m59BfeGFQEuL+3b19aR+vl/U1pIHXzYrn1SVyeRtGho4\nFMFtBrFbkFVF8OwkLT8ET20oXQUfxINnyxQA4eTBlxrBpz5N0nGAm28Gvvvd4oJQgLVodOAWZNVR\n8ADpu2nTgq2aw1s0fjz45mZ/x/eCujr52rIsdGwaXqV7neh0+HB4Cl60LB89Lt2GRRAPni1TANgs\nGnrMVCv4LVvIk/+GG8Tb6QZZrUUjJ3gdBQ+QbdzsGbe/DxpkjQq1tWRcufWLTrmCoAr+0KFicSMj\neC/Lx9XUiCcz0f8Dglk0jgO8/TYwfz75zFs0NM7hOMXxnzjy4L/5zejf8FOr4Okr8re+Bdxxh/zJ\nrKvgkzKTNQ6oauF7VfBuKZIqmAiyRgXaTzoK3i2Txq1UgdtEp7A9eNHxTXjwu3YBZ50FvPAC+cxb\nNFVVJFgseiOIYybrRz8aPcGnulzwU08BCxYAl1wi386Lgk9CLZo44KbgRTMWRQiq4E1YNFGhokKe\nz89Cx6IRZdGw5YJNWTRec6lpm0RBaxMefE8P2c9f/zVR6rxFA8htGjeCz2bJPAq20GCSBYMM1KKJ\nW8HHYtFUVgL/8i/q7awH746KCvIKfPKkmOAPHNBX8CYtmqCv1GFDh+B1cuGDFBtzC7Ky8PrAZOvT\n83wn7rQAABNPSURBVDDhwR89SoLi48cDf/d35FzPOKNwG0rwvPftRniZTF640P5L+ngSYdw4Ijzj\nFjuRE/zixcBvfwvMm6fejlfwsouczZKnfRoJHiDnL3qDoVZYXBZNkm9IWdljFrpBVpagvXjwVMHr\nevBe+jOTkRfXMmHRHDlCiPuHPyT389gYsHJl4TZ+FTyQH0+0jUkfTyIkRcHH4sF/5jPu2/EKXlWL\nBkinRQPILaqog6ylRPCmLJqgCn5kpFjBiwq3+enPmprwPPgjR/Kzmn/+czKHwpRFAxTbRbK39yQj\ntYtu60Kk4FUEn2YFL8oi8hJk/cd/BD7xCf9t4OvBxz2o3aCj4P1YNLyCdwuyAvoWjVcVGLaCp3nl\nF1wAPPYYcO65hduYUPAUSR9PIrBpkqlS8LoQKXiZRQNYBR8kyHr55eIaM7oopSwaILwgq5eZrPTv\nwrBo6H68ePCi7BUZjh4tnDi0cmXx/oIQPB8PKEWCZ9MkrYIXwCp4PbgRfBTqodSCrCY9eL958F4V\nvCmCpzN4TXjwKsgIXudc+IdNKVo0SZno5ErwbW1taG1tRUtLC9avX1/0/7/61a+wePFinH322fjE\nJz6B1157zUjDdBV82gleZtHQqoFR9EupvVKbzKLxO5OVXq8wCV5k0WQy4vP3a9HIIFrViaY/qqqb\nAsUefNLHkwhsueDEpkmOjo7ipptuwtatWzFnzhyce+65WLVqFRYsWHBqmw9/+MN4+umnMXHiRLS1\nteGGG27Atm3bAjdMV8Fbi4YMIpGCd5xoBlepEXxdXThB1lJQ8PTYojRJXYLnLRoRRAqe+tFu6wSU\nmuUnQkkEWbdv347m5mbMnTsXVVVVWL16NbZs2VKwzfnnn4+JEycCAJYtW4auri4jDfOSBw+kV8HL\nzl82JT0MlFKpAkDfogl7JisQrgcvq875pS8BM2cWfudlopOuRcMv26erZnkPPumWnwglkSbZ3d2N\npqamU58bGxvR3d0t3f5f//VfcdlllxlpmJeZrEB6FbzsDYZ+jkvBJ1lx6Vo0fmeyjoyQtydVH0Rh\n0cjuiX/5l+LjepnopGPRiBS8LtmV2huhCElR8MrbMONhzbUnn3wSP/vZz/CnP/1Jus2tt9566t/L\nly/H8uXL5Q3zUIsGsApeRvDWgy9GXZ27DxwkD97NngHUFk1vb+F3pgleBF2LZnSUxHY+eGmXIijB\n68yBSTKCKPj29na0t7cbaYey2+bMmYPOzs5Tnzs7O9EoKN7+2muv4frrr0dbWxsmK97dWIJ3g1cF\nn1aCz2bz07tZRKngSzGLxg3jx5Pg9diYvG68aE1WutC523iUKXh22T8K0xaNCLoEf+wYebtxe0DW\n1ZGZuiz8KvikjycRgih4XvyuXbvWdzuUBL906VLs3r0bHR0daGhowObNm7Fp06aCbd5//31cccUV\n+OUvf4lmgwW9vXrwabVoqqrIufMvW/TmtkHWYnz1q+7bVFYSkurvl5fqNaHgRR58mDNZZdD14HX8\nd4D0HaMNAegT/KRJhQ+HpI8nEZLiwSsJPpvNYsOGDVixYgVGR0dx3XXXYcGCBdi4cSMAYM2aNfjn\nf/5nHD16FDfeeCMAoKqqCtu3bw/cMF5RuE10SquCpwTPI+ogK13EJZNJ/g35oQ/pbUdtGl2CZxW8\nG7mG7cFPnOhuo7DQ9eB1/HcgmEXT0gLs3p3/XIoWTUl48ACwcuVKrOQqCa1Zs+bUv++++27cfffd\nxhvmdaJTWhV8Nqsm+CjUQ00NMGMGuSnnzYt/UJuCWy68bCar2yxWgBDglCni7CcTBP+973n7m8pK\nYkepLClAL0USCEbw8+YBTzyR/1yKFg1bDz6xWTRxwqZJ6iEJCj6TAS6+GNi6lXwuRcUlgluglVfw\nlZXkR6d89bhxwPvvF1trpgi+vt4bsbBlelXwYtGYUPCjo6RtqodOEkEJPu5ZuIntNt0ga9otmiQo\neAC46CLgD38g/y4XBe+WCy9S6tXV+jWAeHsGMEfwfqBL8FEo+LffJpZf3ATpF+PGkQc9TYKIC4kl\neBtk1UMSFDxACP7JJ4niKsVXahFUufAjI+RcRdlLfX3+x2OcBK9TcCwIwevaFVOnkt+HD5euWKBB\n1jjtGSDBBO8lTVK0enxaICN4ui5mVANs9mzy8/LLpXtT8lBZNNR/59WZFwUvQtIVfFAPXuc8Mpm8\nii/VsUTbHHfbE0vwXhR8WtU7ILdoAPJ9lNYV9eFL9abkobJoZJkyXso0i8ATvONEpwST4sEDeYIv\nVYumooL0p1XwEnjx4NPqvwPqB1xNTbQDjPrw5ULwKotGtNA5YF7B9/SQXPkoxnhSPHggH2gt5bE0\nblz8bU8swXtR8Gkm+CQp+E9/Gti2jUxlL0XVxWPqVEKwIshSIb0slSgCP5P1vff08/aDImwP3o+C\nL2WCr662Cl4K3Tz4pibgrruia1fSoHrARa3gJ04EFi0Cnn66dG9KFg0NwL594v9zU/BBgqzsTNYo\nCV7Xg4/CoqEKvlQtGoCMhbjvg8QSvO6CH5WVwOc+F127kgaVRVNbG72CuOgi4J134h/YJtDQAOzd\nK/6/qCyapBG8roKvqSGEPjqa/84Pwce95F0QjBtnFbwUugo+7VBZNP/wDwCzNkskuPhi8rtUb0oW\nfgjedJA1SQTvOPpB1kyGqPiBgfx3Xgh+wgRS8O2990r3vrcKXgFdBZ92qBT8f/tv5CaJEuefT94c\nyuFazZoFHDxYqEIpZFk01dXBPHgqbOgxk+TBDwyQN2bdKpW8TeM1G2jePGDnztIdS1bBK2AVvB5U\nCj4OVFcDF14Y/YMlDFRVEbV66FDx/6mCrEEUfCZT6MO/9x4wd66/fXmFm4LXVe8UaSf4JCj4xFKm\nSMFbgi/GzJnxToUW4cEH41cupkBtmlmzCr9XefBBZrICeZumrg7o6EiORaPrv1Pwy/Z5JfiWFmDL\nltK975Og4BPbdSIFH/fTMIn4xjfibkExkvRGERSU4D/60cLvw/Lg6T4GB8mDYng4P3U/bIRB8LyC\n11lshYIq+MWL9f8mSbAKXgHdPHgLizAhC7SqFLxONUkVKMEfPkzUe1RvaG414XVTJClEBD9pkv7f\nt7SQh2XcJOkX1dXxc1ZiKVN3wQ8LizAxe7aY4FWlCoBgBE8nO0UZYAXcV3UKquC91kY/80zycIub\nJP1i3Lj4257YIGs2a4OsFvFDpeBFJE6/C6rgh4aiJ/goLBovBF9bSyYylqqwS4JFk1iCr6oiq8vf\ncQfJynjnHaKmLCyihGw2q8qDZ3/7AbVokkbwupUkKUQE75Xw5s2LnyT9IglB1sQS/PTp5Am4axdw\n881AdzfQ2Bh3qyzSBj8ePPvbD5JK8FGnSQKE4Ev1zT0JCj6xXTdrFvDmm3G3wiLtUBG8aFFrEx48\nS/BR5cAD7hOdorZoABJo7e319jdJQdzqHUgwwVtYJAEzZpBsFj4GpJrJyv72gyQr+KgJ/uqrgf/8\nn739TVJQXU0WMY8TluAtLBTIZoFp04ADB4A5c/Lfq2aysr/9oKaGqNYjR6KNO+l48FFbNHSlsFLE\nuHHxE3xiPXgLi6RAZNOE7cG//TaJOVVEeIcmUcGXMqwHb2FRAvBC8KY8+LfeitaeAcL34IMUYStF\ntLS4l18OG5bgLSxcELWCr64mBH/eef734QdVVYXlfVmMjJC6MhMm6O+PJfg33wT27In+nOLEl78c\ndwusRWNh4QrRbNYwZ7LW1JB5H1EreJVF09tLsoa8WEYswd9xB3Djjfqlhi3MwCp4CwsXNDQAzz9f\n+J3bTNagQdbh4WQRvFd7BsgT/MGDwAMPkLcSi2hhFbyFhQt4i8ZxiMJms2ooTCl4INoceEDtwfsh\n+Pp6QvA//jFJd5wxI3gbLbzBKngLCxfwBE8n4M2fX7ytqSwaIFkK3muKJEAUfE8P8JOfAM88E7x9\nFt5hFbyFhQt4gv/d74AVK8RlfCk5B0kHrKkh+466NEcYFs3OnWQZR9HD0CJ8WIK3sHDB9OkkyEjt\nC0rwItDc5yD56zU15KESdc54GAQPALfcEqxdFv5hCd7CwgUVFWRpxP37SXD12WeBiy4Sb1tbGzxT\npKYmensGkC/48f77wObN3t8oZs8G1q4FPvlJM+2z8A5L8BYWGqA2zTPPAB/5iNyPnjIluN+8eDHw\n3/97sH34Ab/gx+gocOedZLnClSuB//k/ve2vpgb4p39K3prBaYINslpYaIAS/HPPAZdeqt727LOD\nHWvBAvITNViLZmQE+MxnCMn/6U/WQy9VWIK3sNAAnez0u98Bd98dd2vCAUvw69eTz1u3RlsPx8Is\nLMFbWGigoQF48UVC8kuXxt2acEA9+NdeA374Q2DHDkvupQ7Xy9fW1obW1la0tLRg/fr1wm2+/vWv\no6WlBYsXL8bLL79svJHlhvb29ribkBiUSl80NAAPPghcfDFQWRnOMeLui3HjyMSkL38ZuP12sh5q\nXIi7L8oFSoIfHR3FTTfdhLa2NuzcuRObNm3Crl27CrZ57LHH8M4772D37t246667cOONN4ba4HKA\nHbx5lEpfNDSQYluy9EgTiLsvqqqA7dvJucYR5GURd1+UC5QEv337djQ3N2Pu3LmoqqrC6tWrsWXL\nloJtHn74YXz5g7Jpy5YtQ29vLw4cOBBeiy0sYkBDA/n9mc/E244wMWECMGkScNddNvOlXKAk+O7u\nbjQx72mNjY3o7u523aarq8twMy0s4kVzM/CP/1jeC78vXEhy3kU1dixKE8oga0bzMe44jtbf6e4v\nDVi7dm3cTUgMSqkvvv/9cPdfSn0RNmxfBIeS4OfMmYPOzs5Tnzs7O9HISRh+m66uLswRSAD+IWBh\nYWFhES6UFs3SpUuxe/dudHR0YHh4GJs3b8aqVasKtlm1ahXuu+8+AMC2bdswadIkzJw5M7wWW1hY\nWFhoQangs9ksNmzYgBUrVmB0dBTXXXcdFixYgI0bNwIA1qxZg8suuwyPPfYYmpubUV9fj3vuuSeS\nhltYWFhYuMAJGY8//rgzf/58p7m52bntttvCPlyi8P777zvLly93Fi5c6Jx11lnOnXfe6TiO4xw+\nfNi5+OKLnZaWFueSSy5xjh49GnNLo8PIyIizZMkS57Of/azjOOnti6NHjzpXXnml09ra6ixYsMDZ\ntm1bavti3bp1zsKFC51FixY511xzjTM4OJiavrj22mudGTNmOIsWLTr1nerc161b5zQ3Nzvz5893\nfve737nuP9R5ajp59OWMqqoq3HHHHXjjjTewbds2/PjHP8auXbtw22234ZJLLsHbb7+Niy66CLfd\ndlvcTY0Md955JxYuXHgq4J7WvvjGN76Byy67DLt27cJrr72G1tbWVPZFR0cHfvrTn2LHjh14/fXX\nMTo6ivvvvz81fXHttdeira2t4DvZue/cuRObN2/Gzp070dbWhq997WsYGxtTHyCUx9IHeO6555wV\nK1ac+vz973/f+f73vx/mIRONyy+/3HniiSec+fPnO/v373ccx3H27dvnzJ8/P+aWRYPOzk7noosu\ncv74xz+eUvBp7Ive3l7njDPOKPo+jX1x+PBhZ968ec6RI0ecXC7nfPazn3V+//vfp6ov9uzZU6Dg\nZee+bt26AhdkxYoVzp///GflvkNV8Dp59GlBR0cHXn75ZSxbtgwHDhw4FYieOXNmaiaGffOb38QP\nfvADVDAFTtLYF3v27MH06dNx7bXX4qMf/Siuv/56nDhxIpV9MWXKFNxyyy04/fTT0dDQgEmTJuGS\nSy5JZV9QyM597969BVmMOnwaKsHbvHeC/v5+XHnllbjzzjsxfvz4gv/LZDKp6KdHH30UM2bMwDnn\nnCNNmU1LX4yMjGDHjh342te+hh07dqC+vr7IgkhLX7z77rv44Q9/iI6ODuzduxf9/f345S9/WbBN\nWvpCBLdzd+uXUAleJ4++3JHL5XDllVfii1/8Ij7/+c8DIE/l/fv3AwD27duHGSlYbv65557Dww8/\njDPOOAPXXHMN/vjHP+KLX/xiKvuisbERjY2NOPfccwEAV111FXbs2IFZs2alri9efPFFfPzjH8fU\nqVORzWZxxRVX4M9//nMq+4JCdk/ozjliESrB6+TRlzMcx8F1112HhQsX4uabbz71/apVq3DvvfcC\nAO69995TxF/OWLduHTo7O7Fnzx7cf//9uPDCC/GLX/wilX0xa9YsNDU14e233wYAbN26FWeddRY+\n97nPpa4vWltbsW3bNgwMDMBxHGzduhULFy5MZV9QyO6JVatW4f7778fw8DD27NmD3bt347zzzlPv\nzHTAgMdjjz3mzJs3zznzzDOddevWhX24ROGZZ55xMpmMs3jxYmfJkiXOkiVLnMcff9w5fPiwc9FF\nF5V9CpgM7e3tzuc+9znHcZzU9sUrr7ziLF261Dn77LOdL3zhC05vb29q+2L9+vWn0iS/9KUvOcPD\nw6npi9WrVzuzZ892qqqqnMbGRudnP/uZ8ty/973vOWeeeaYzf/58p62tzXX/GcexNQQsLCwsyhF2\nvRYLCwuLMoUleAsLC4syhSV4CwsLizKFJXgLCwuLMoUleAsLC4syhSV4CwsLizLF/weSDoopnVla\nxAAAAABJRU5ErkJggg==\n"
438 555 }
439 556 ],
440 "prompt_number": 5
557 "prompt_number": 8
441 558 },
442 559 {
443 "cell_type": "markdown",
560 "cell_type": "heading",
561 "level": 2,
562 "metadata": {},
444 563 "source": [
445 "## Security",
446 "",
447 "By default the notebook only listens on localhost, so it does not expose your computer to attacks coming from",
448 "the internet. By default the notebook does not require any authentication, but you can configure it to",
449 "ask for a password before allowing access to the files. ",
450 "",
451 "Furthermore, you can require the notebook to encrypt all communications by using SSL and making all connections",
452 "using the https protocol instead of plain http. This is a good idea if you decide to run your notebook on",
453 "addresses that are visible from the internet. For further details on how to configure this, see the",
454 "[security section](http://ipython.org/ipython-doc/stable/interactive/htmlnotebook.html#security) of the ",
455 "manual.",
456 "",
457 "Finally, note that you can also run a notebook with the `--read-only` flag, which lets you provide access",
458 "to your notebook documents to others without letting them execute code (which can be useful to broadcast",
459 "a computation to colleagues or students, for example). The read-only flag behaves differently depending",
460 "on whether the server has a password or not:",
461 "",
462 "- Passwordless server: users directly see all notebooks in read-only mode.",
463 "- Password-protected server: users can see all notebooks in read-only mode, but a login button is available",
464 "and once a user authenticates, he or she obtains write/execute privileges.",
465 "",
466 "The first case above makes it easy to broadcast on the fly an existing notebook by simply starting a *second* ",
467 "notebook server in the same directory as the first, but in read-only mode. This can be done without having",
468 "to configure a password first (which requires calling a hashing function and editing a configuration file)."
564 "Security"
469 565 ]
470 566 },
471 567 {
472 "cell_type": "code",
473 "input": [
474 ""
475 ],
476 "language": "python",
477 "outputs": []
568 "cell_type": "markdown",
569 "metadata": {},
570 "source": [
571 "By default the notebook only listens on localhost, so it does not expose your computer to attacks coming from\n",
572 "the internet. By default the notebook does not require any authentication, but you can configure it to\n",
573 "ask for a password before allowing access to the files. \n",
574 "\n",
575 "Furthermore, you can require the notebook to encrypt all communications by using SSL and making all connections\n",
576 "using the https protocol instead of plain http. This is a good idea if you decide to run your notebook on\n",
577 "addresses that are visible from the internet. For further details on how to configure this, see the\n",
578 "[security section](http://ipython.org/ipython-doc/stable/interactive/htmlnotebook.html#security) of the \n",
579 "manual.\n",
580 "\n",
581 "Finally, note that you can also run a notebook with the `--read-only` flag, which lets you provide access\n",
582 "to your notebook documents to others without letting them execute code (which can be useful to broadcast\n",
583 "a computation to colleagues or students, for example). The read-only flag behaves differently depending\n",
584 "on whether the server has a password or not:\n",
585 "\n",
586 "- Passwordless server: users directly see all notebooks in read-only mode.\n",
587 "- Password-protected server: users can see all notebooks in read-only mode, but a login button is available\n",
588 "and once a user authenticates, he or she obtains write/execute privileges.\n",
589 "\n",
590 "The first case above makes it easy to broadcast on the fly an existing notebook by simply starting a *second* \n",
591 "notebook server in the same directory as the first, but in read-only mode. This can be done without having\n",
592 "to configure a password first (which requires calling a hashing function and editing a configuration file).\n",
593 "\n",
594 "**NOTE:** IPython 0.13's javascript rewrite did not include read-only UI, so it does not work well.\n",
595 "Code/notebooks are still protected from unauthorized access, but the UI is not appropriately restricted."
596 ]
478 597 }
479 ]
598 ],
599 "metadata": {}
480 600 }
481 601 ]
482 602 } No newline at end of file
@@ -1,274 +1,275 b''
1 1 {
2 2 "metadata": {
3 3 "name": "Animations_and_Progress"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
10 11 "cell_type": "heading",
11 12 "level": 1,
13 "metadata": {},
12 14 "source": [
13 15 "Simple animations, progress bars, and clearing output"
14 16 ]
15 17 },
16 18 {
17 19 "cell_type": "markdown",
20 "metadata": {},
18 21 "source": [
19 "Sometimes you want to print progress in-place, but don't want",
20 "to keep growing the output area. In terminals, there is the carriage-return",
21 "(`'\\r'`) for overwriting a single line, but the notebook frontend does not support this",
22 "behavior (yet).",
23 "",
24 "What the notebook *does* support is explicit `clear_output`, and you can use this to replace previous",
22 "Sometimes you want to print progress in-place, but don't want\n",
23 "to keep growing the output area. In terminals, there is the carriage-return\n",
24 "(`'\\r'`) for overwriting a single line, but the notebook frontend does not support this\n",
25 "behavior (yet).\n",
26 "\n",
27 "What the notebook *does* support is explicit `clear_output`, and you can use this to replace previous\n",
25 28 "output (specifying stdout/stderr or the special IPython display outputs)."
26 29 ]
27 30 },
28 31 {
29 32 "cell_type": "markdown",
33 "metadata": {},
30 34 "source": [
31 35 "A simple example printing our progress iterating through a list:"
32 36 ]
33 37 },
34 38 {
35 39 "cell_type": "code",
36 40 "collapsed": true,
37 41 "input": [
38 "import sys",
42 "import sys\n",
39 43 "import time"
40 44 ],
41 45 "language": "python",
42 "outputs": [],
43 "prompt_number": 16
46 "metadata": {},
47 "outputs": []
44 48 },
45 49 {
46 50 "cell_type": "code",
47 51 "collapsed": false,
48 52 "input": [
49 "from IPython.core.display import clear_output",
50 "for i in range(10):",
51 " time.sleep(0.25)",
52 " clear_output()",
53 " print i",
53 "from IPython.core.display import clear_output\n",
54 "for i in range(10):\n",
55 " time.sleep(0.25)\n",
56 " clear_output()\n",
57 " print i\n",
54 58 " sys.stdout.flush()"
55 59 ],
56 60 "language": "python",
57 "outputs": [],
58 "prompt_number": 12
61 "metadata": {},
62 "outputs": []
59 63 },
60 64 {
61 65 "cell_type": "markdown",
66 "metadata": {},
62 67 "source": [
63 "The AsyncResult object has a special `wait_interactive()` method, which prints its progress interactively,",
64 "so you can watch as your parallel computation completes.",
65 "",
68 "The AsyncResult object has a special `wait_interactive()` method, which prints its progress interactively,\n",
69 "so you can watch as your parallel computation completes.\n",
70 "\n",
66 71 "**This example assumes you have an IPython cluster running, which you can start from the [cluster panel](/#tab2)**"
67 72 ]
68 73 },
69 74 {
70 75 "cell_type": "code",
71 76 "collapsed": false,
72 77 "input": [
73 "from IPython import parallel",
74 "rc = parallel.Client()",
75 "view = rc.load_balanced_view()",
76 "",
77 "amr = view.map_async(time.sleep, [0.5]*100)",
78 "",
78 "from IPython import parallel\n",
79 "rc = parallel.Client()\n",
80 "view = rc.load_balanced_view()\n",
81 "\n",
82 "amr = view.map_async(time.sleep, [0.5]*100)\n",
83 "\n",
79 84 "amr.wait_interactive()"
80 85 ],
81 86 "language": "python",
82 "outputs": [],
83 "prompt_number": 13
87 "metadata": {},
88 "outputs": []
84 89 },
85 90 {
86 91 "cell_type": "markdown",
92 "metadata": {},
87 93 "source": [
88 "You can also use `clear_output()` to clear figures and plots.",
89 "",
94 "You can also use `clear_output()` to clear figures and plots.\n",
95 "\n",
90 96 "This time, we need to make sure we are using inline pylab (**requires matplotlib**)"
91 97 ]
92 98 },
93 99 {
94 100 "cell_type": "code",
95 101 "collapsed": false,
96 102 "input": [
97 103 "%pylab inline"
98 104 ],
99 105 "language": "python",
100 "outputs": [
101 {
102 "output_type": "stream",
103 "stream": "stdout",
104 "text": [
105 "",
106 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].",
107 "For more information, type 'help(pylab)'."
108 ]
109 }
110 ],
111 "prompt_number": 17
106 "metadata": {},
107 "outputs": []
112 108 },
113 109 {
114 110 "cell_type": "code",
115 111 "collapsed": false,
116 112 "input": [
117 "from scipy.special import jn",
118 "x = np.linspace(0,5)",
119 "f, ax = plt.subplots()",
120 "ax.set_title(\"Bessel functions\")",
121 "",
122 "for n in range(1,10):",
123 " time.sleep(1)",
124 " ax.plot(x, jn(x,n))",
125 " clear_output()",
126 " display(f)",
127 "",
128 "# close the figure at the end, so we don't get a duplicate",
129 "# of the last plot",
113 "from scipy.special import jn\n",
114 "x = np.linspace(0,5)\n",
115 "f, ax = plt.subplots()\n",
116 "ax.set_title(\"Bessel functions\")\n",
117 "\n",
118 "for n in range(1,10):\n",
119 " time.sleep(1)\n",
120 " ax.plot(x, jn(x,n))\n",
121 " clear_output()\n",
122 " display(f)\n",
123 "\n",
124 "# close the figure at the end, so we don't get a duplicate\n",
125 "# of the last plot\n",
130 126 "plt.close()"
131 127 ],
132 128 "language": "python",
133 "outputs": [
134 {
135 "output_type": "display_data",
136 "png": "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\nYII=\n",
137 "text": [
138 "<matplotlib.figure.Figure at 0x1083272d0>"
139 ]
140 }
141 ],
142 "prompt_number": 20
129 "metadata": {},
130 "outputs": []
143 131 },
144 132 {
145 133 "cell_type": "heading",
146 134 "level": 2,
135 "metadata": {},
147 136 "source": [
148 137 "A Javascript Progress Bar"
149 138 ]
150 139 },
151 140 {
152 141 "cell_type": "markdown",
142 "metadata": {},
153 143 "source": [
154 "`clear_output()` is still something of a hack, and if you want to do a progress bar in the notebook",
155 "it is better to just use Javascript/HTML if you can.",
156 "",
144 "`clear_output()` is still something of a hack, and if you want to do a progress bar in the notebook\n",
145 "it is better to just use Javascript/HTML if you can.\n",
146 "\n",
157 147 "Here is a simple progress bar using HTML/Javascript:"
158 148 ]
159 149 },
160 150 {
161 151 "cell_type": "code",
162 152 "collapsed": false,
163 153 "input": [
164 "import uuid",
165 "from IPython.core.display import HTML, Javascript, display",
166 "",
167 "divid = str(uuid.uuid4())",
168 "",
169 "pb = HTML(",
170 "\"\"\"",
171 "<div style=\"border: 1px solid black; width:500px\">",
172 " <div id=\"%s\" style=\"background-color:blue; width:0%%\">&nbsp;</div>",
173 "</div> ",
174 "\"\"\" % divid)",
175 "display(pb)",
176 "for i in range(1,101):",
177 " time.sleep(0.1)",
178 " ",
154 "import uuid\n",
155 "from IPython.core.display import HTML, Javascript, display\n",
156 "\n",
157 "divid = str(uuid.uuid4())\n",
158 "\n",
159 "pb = HTML(\n",
160 "\"\"\"\n",
161 "<div style=\"border: 1px solid black; width:500px\">\n",
162 " <div id=\"%s\" style=\"background-color:blue; width:0%%\">&nbsp;</div>\n",
163 "</div> \n",
164 "\"\"\" % divid)\n",
165 "display(pb)\n",
166 "for i in range(1,101):\n",
167 " time.sleep(0.1)\n",
168 " \n",
179 169 " display(Javascript(\"$('div#%s').width('%i%%')\" % (divid, i)))"
180 170 ],
181 171 "language": "python",
182 "outputs": [],
183 "prompt_number": 15
172 "metadata": {},
173 "outputs": []
184 174 },
185 175 {
186 176 "cell_type": "markdown",
177 "metadata": {},
187 178 "source": [
188 "The above simply makes a div that is a box, and a blue div inside it with a unique ID ",
189 "(so that the javascript won't collide with other similar progress bars on the same page). ",
190 "",
191 "Then, at every progress point, we run a simple jQuery call to resize the blue box to",
192 "the appropriate fraction of the width of its containing box, and voil\u00e0 a nice",
179 "The above simply makes a div that is a box, and a blue div inside it with a unique ID \n",
180 "(so that the javascript won't collide with other similar progress bars on the same page). \n",
181 "\n",
182 "Then, at every progress point, we run a simple jQuery call to resize the blue box to\n",
183 "the appropriate fraction of the width of its containing box, and voil\u00e0 a nice\n",
193 184 "HTML/Javascript progress bar!"
194 185 ]
195 186 },
196 187 {
197 188 "cell_type": "heading",
198 189 "level": 2,
190 "metadata": {},
199 191 "source": [
200 192 "ProgressBar class"
201 193 ]
202 194 },
203 195 {
204 196 "cell_type": "markdown",
197 "metadata": {},
205 198 "source": [
206 199 "And finally, here is a progress bar *class* extracted from [PyMC](http://code.google.com/p/pymc/), which will work in regular Python as well as in the IPython Notebook"
207 200 ]
208 201 },
209 202 {
210 203 "cell_type": "code",
211 204 "collapsed": true,
212 205 "input": [
213 "import sys, time",
214 "try:",
215 " from IPython.core.display import clear_output",
216 " have_ipython = True",
217 "except ImportError:",
218 " have_ipython = False",
219 "",
220 "class ProgressBar:",
221 " def __init__(self, iterations):",
222 " self.iterations = iterations",
223 " self.prog_bar = '[]'",
224 " self.fill_char = '*'",
225 " self.width = 40",
226 " self.__update_amount(0)",
227 " if have_ipython:",
228 " self.animate = self.animate_ipython",
229 " else:",
230 " self.animate = self.animate_noipython",
231 "",
232 " def animate_ipython(self, iter):",
233 " clear_output()",
234 " print '\\r', self,",
235 " sys.stdout.flush()",
236 " self.update_iteration(iter + 1)",
237 "",
238 " def update_iteration(self, elapsed_iter):",
239 " self.__update_amount((elapsed_iter / float(self.iterations)) * 100.0)",
240 " self.prog_bar += ' %d of %s complete' % (elapsed_iter, self.iterations)",
241 "",
242 " def __update_amount(self, new_amount):",
243 " percent_done = int(round((new_amount / 100.0) * 100.0))",
244 " all_full = self.width - 2",
245 " num_hashes = int(round((percent_done / 100.0) * all_full))",
246 " self.prog_bar = '[' + self.fill_char * num_hashes + ' ' * (all_full - num_hashes) + ']'",
247 " pct_place = (len(self.prog_bar) // 2) - len(str(percent_done))",
248 " pct_string = '%d%%' % percent_done",
249 " self.prog_bar = self.prog_bar[0:pct_place] + \\",
250 " (pct_string + self.prog_bar[pct_place + len(pct_string):])",
251 "",
252 " def __str__(self):",
206 "import sys, time\n",
207 "try:\n",
208 " from IPython.core.display import clear_output\n",
209 " have_ipython = True\n",
210 "except ImportError:\n",
211 " have_ipython = False\n",
212 "\n",
213 "class ProgressBar:\n",
214 " def __init__(self, iterations):\n",
215 " self.iterations = iterations\n",
216 " self.prog_bar = '[]'\n",
217 " self.fill_char = '*'\n",
218 " self.width = 40\n",
219 " self.__update_amount(0)\n",
220 " if have_ipython:\n",
221 " self.animate = self.animate_ipython\n",
222 " else:\n",
223 " self.animate = self.animate_noipython\n",
224 "\n",
225 " def animate_ipython(self, iter):\n",
226 " print '\\r', self,\n",
227 " sys.stdout.flush()\n",
228 " self.update_iteration(iter + 1)\n",
229 "\n",
230 " def update_iteration(self, elapsed_iter):\n",
231 " self.__update_amount((elapsed_iter / float(self.iterations)) * 100.0)\n",
232 " self.prog_bar += ' %d of %s complete' % (elapsed_iter, self.iterations)\n",
233 "\n",
234 " def __update_amount(self, new_amount):\n",
235 " percent_done = int(round((new_amount / 100.0) * 100.0))\n",
236 " all_full = self.width - 2\n",
237 " num_hashes = int(round((percent_done / 100.0) * all_full))\n",
238 " self.prog_bar = '[' + self.fill_char * num_hashes + ' ' * (all_full - num_hashes) + ']'\n",
239 " pct_place = (len(self.prog_bar) // 2) - len(str(percent_done))\n",
240 " pct_string = '%d%%' % percent_done\n",
241 " self.prog_bar = self.prog_bar[0:pct_place] + \\\n",
242 " (pct_string + self.prog_bar[pct_place + len(pct_string):])\n",
243 "\n",
244 " def __str__(self):\n",
253 245 " return str(self.prog_bar)"
254 246 ],
255 247 "language": "python",
256 "outputs": [],
257 "prompt_number": 10
248 "metadata": {},
249 "outputs": []
258 250 },
259 251 {
260 252 "cell_type": "code",
261 253 "collapsed": false,
262 254 "input": [
263 "p = ProgressBar(1000)",
264 "for i in range(1001):",
255 "p = ProgressBar(1000)\n",
256 "for i in range(1001):\n",
265 257 " p.animate(i)"
266 258 ],
267 259 "language": "python",
268 "outputs": [],
269 "prompt_number": 11
260 "metadata": {},
261 "outputs": []
262 },
263 {
264 "cell_type": "code",
265 "collapsed": false,
266 "input": [],
267 "language": "python",
268 "metadata": {},
269 "outputs": []
270 270 }
271 ]
271 ],
272 "metadata": {}
272 273 }
273 274 ]
274 275 } No newline at end of file
@@ -1,182 +1,209 b''
1 1 {
2 2 "metadata": {
3 3 "name": "Capturing Output"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
10 11 "cell_type": "heading",
11 12 "level": 1,
13 "metadata": {},
12 14 "source": [
13 15 "Capturing Output with <tt>%%capture</tt>"
14 16 ]
15 17 },
16 18 {
17 19 "cell_type": "markdown",
20 "metadata": {},
18 21 "source": [
19 "One of IPython's new cell magics is `%%capture`, which captures stdout/err for a cell,",
22 "One of IPython's new cell magics is `%%capture`, which captures stdout/err for a cell,\n",
20 23 "and discards them or stores them in variables in your namespace."
21 24 ]
22 25 },
23 26 {
24 27 "cell_type": "code",
28 "collapsed": false,
25 29 "input": [
26 30 "import sys"
27 31 ],
28 32 "language": "python",
33 "metadata": {},
29 34 "outputs": []
30 35 },
31 36 {
32 37 "cell_type": "markdown",
38 "metadata": {},
33 39 "source": [
34 40 "By default, it just swallows it up. This is a simple way to suppress unwanted output."
35 41 ]
36 42 },
37 43 {
38 44 "cell_type": "code",
45 "collapsed": false,
39 46 "input": [
40 "%%capture",
41 "print 'hi, stdout'",
47 "%%capture\n",
48 "print 'hi, stdout'\n",
42 49 "print >> sys.stderr, 'hi, stderr'"
43 50 ],
44 51 "language": "python",
52 "metadata": {},
45 53 "outputs": []
46 54 },
47 55 {
48 56 "cell_type": "markdown",
57 "metadata": {},
49 58 "source": [
50 59 "If you specify a name, then stdout and stderr will be stored in an object in your namespace."
51 60 ]
52 61 },
53 62 {
54 63 "cell_type": "code",
64 "collapsed": false,
55 65 "input": [
56 "%%capture captured",
57 "print 'hi, stdout'",
66 "%%capture captured\n",
67 "print 'hi, stdout'\n",
58 68 "print >> sys.stderr, 'hi, stderr'"
59 69 ],
60 70 "language": "python",
71 "metadata": {},
61 72 "outputs": []
62 73 },
63 74 {
64 75 "cell_type": "code",
76 "collapsed": false,
65 77 "input": [
66 78 "captured"
67 79 ],
68 80 "language": "python",
81 "metadata": {},
69 82 "outputs": []
70 83 },
71 84 {
72 85 "cell_type": "markdown",
86 "metadata": {},
73 87 "source": [
74 88 "Calling the object writes the output to stdout/err as appropriate."
75 89 ]
76 90 },
77 91 {
78 92 "cell_type": "code",
93 "collapsed": false,
79 94 "input": [
80 95 "captured()"
81 96 ],
82 97 "language": "python",
98 "metadata": {},
83 99 "outputs": []
84 100 },
85 101 {
86 102 "cell_type": "code",
103 "collapsed": false,
87 104 "input": [
88 105 "captured.stdout"
89 106 ],
90 107 "language": "python",
108 "metadata": {},
91 109 "outputs": []
92 110 },
93 111 {
94 112 "cell_type": "code",
113 "collapsed": false,
95 114 "input": [
96 115 "captured.stderr"
97 116 ],
98 117 "language": "python",
118 "metadata": {},
99 119 "outputs": []
100 120 },
101 121 {
102 122 "cell_type": "markdown",
123 "metadata": {},
103 124 "source": [
104 125 "`%%capture` only captures stdout/err, not displaypub, so you can still do plots and use the display protocol inside %%capture"
105 126 ]
106 127 },
107 128 {
108 129 "cell_type": "code",
130 "collapsed": false,
109 131 "input": [
110 132 "%pylab inline"
111 133 ],
112 134 "language": "python",
135 "metadata": {},
113 136 "outputs": []
114 137 },
115 138 {
116 139 "cell_type": "code",
140 "collapsed": false,
117 141 "input": [
118 "%%capture wontshutup",
119 "",
120 "print \"setting up X\"",
121 "x = np.linspace(0,5,1000)",
122 "print \"step 2: constructing y-data\"",
123 "y = np.sin(x)",
124 "print \"step 3: display info about y\"",
125 "plt.plot(x,y)",
142 "%%capture wontshutup\n",
143 "\n",
144 "print \"setting up X\"\n",
145 "x = np.linspace(0,5,1000)\n",
146 "print \"step 2: constructing y-data\"\n",
147 "y = np.sin(x)\n",
148 "print \"step 3: display info about y\"\n",
149 "plt.plot(x,y)\n",
126 150 "print \"okay, I'm done now\""
127 151 ],
128 152 "language": "python",
153 "metadata": {},
129 154 "outputs": []
130 155 },
131 156 {
132 157 "cell_type": "code",
158 "collapsed": false,
133 159 "input": [
134 160 "wontshutup()"
135 161 ],
136 162 "language": "python",
163 "metadata": {},
137 164 "outputs": []
138 165 },
139 166 {
140 167 "cell_type": "markdown",
168 "metadata": {},
141 169 "source": [
142 170 "And you can selectively disable capturing stdout or stderr by passing `--no-stdout/err`."
143 171 ]
144 172 },
145 173 {
146 174 "cell_type": "code",
175 "collapsed": false,
147 176 "input": [
148 "%%capture cap --no-stderr",
149 "print 'hi, stdout'",
177 "%%capture cap --no-stderr\n",
178 "print 'hi, stdout'\n",
150 179 "print >> sys.stderr, \"hello, stderr\""
151 180 ],
152 181 "language": "python",
182 "metadata": {},
153 183 "outputs": []
154 184 },
155 185 {
156 186 "cell_type": "code",
187 "collapsed": false,
157 188 "input": [
158 189 "cap.stdout"
159 190 ],
160 191 "language": "python",
192 "metadata": {},
161 193 "outputs": []
162 194 },
163 195 {
164 196 "cell_type": "code",
197 "collapsed": false,
165 198 "input": [
166 199 "cap.stderr"
167 200 ],
168 201 "language": "python",
169 "outputs": []
170 },
171 {
172 "cell_type": "code",
173 "input": [
174 ""
175 ],
176 "language": "python",
202 "metadata": {},
177 203 "outputs": []
178 204 }
179 ]
205 ],
206 "metadata": {}
180 207 }
181 208 ]
182 209 } No newline at end of file
@@ -1,448 +1,474 b''
1 1 {
2 2 "metadata": {
3 3 "name": "Script Magics"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
10 11 "cell_type": "heading",
11 12 "level": 1,
13 "metadata": {},
12 14 "source": [
13 15 "Running Scripts from IPython"
14 16 ]
15 17 },
16 18 {
17 19 "cell_type": "markdown",
20 "metadata": {},
18 21 "source": [
19 "IPython has a `%%script` cell magic, which lets you run a cell in",
20 "a subprocess of any interpreter on your system, such as: bash, ruby, perl, zsh, R, etc.",
21 "",
22 "IPython has a `%%script` cell magic, which lets you run a cell in\n",
23 "a subprocess of any interpreter on your system, such as: bash, ruby, perl, zsh, R, etc.\n",
24 "\n",
22 25 "It can even be a script of your own, which expects input on stdin."
23 26 ]
24 27 },
25 28 {
26 29 "cell_type": "code",
30 "collapsed": false,
27 31 "input": [
28 32 "import sys"
29 33 ],
30 34 "language": "python",
35 "metadata": {},
31 36 "outputs": [],
32 37 "prompt_number": 1
33 38 },
34 39 {
35 40 "cell_type": "markdown",
41 "metadata": {},
36 42 "source": [
37 "To use it, simply pass a path or shell command to the program you want to run on the `%%script` line,",
43 "To use it, simply pass a path or shell command to the program you want to run on the `%%script` line,\n",
38 44 "and the rest of the cell will be run by that script, and stdout/err from the subprocess are captured and displayed."
39 45 ]
40 46 },
41 47 {
42 48 "cell_type": "code",
49 "collapsed": false,
43 50 "input": [
44 "%%script python",
45 "import sys",
51 "%%script python\n",
52 "import sys\n",
46 53 "print 'hello from Python %s' % sys.version"
47 54 ],
48 55 "language": "python",
56 "metadata": {},
49 57 "outputs": [
50 58 {
51 59 "output_type": "stream",
52 60 "stream": "stdout",
53 61 "text": [
54 "hello from Python 2.7.1 (r271:86832, Jul 31 2011, 19:30:53) ",
55 "[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)]",
56 ""
62 "hello from Python 2.7.1 (r271:86832, Jul 31 2011, 19:30:53) \n",
63 "[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)]\n"
57 64 ]
58 65 }
59 66 ],
60 67 "prompt_number": 2
61 68 },
62 69 {
63 70 "cell_type": "code",
71 "collapsed": false,
64 72 "input": [
65 "%%script python3",
66 "import sys",
73 "%%script python3\n",
74 "import sys\n",
67 75 "print('hello from Python: %s' % sys.version)"
68 76 ],
69 77 "language": "python",
78 "metadata": {},
70 79 "outputs": [
71 80 {
72 81 "output_type": "stream",
73 82 "stream": "stdout",
74 83 "text": [
75 "hello from Python: 3.2.3 (v3.2.3:3d0686d90f55, Apr 10 2012, 11:25:50) ",
76 "[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]",
77 ""
84 "hello from Python: 3.2.3 (v3.2.3:3d0686d90f55, Apr 10 2012, 11:25:50) \n",
85 "[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]\n"
78 86 ]
79 87 }
80 88 ],
81 89 "prompt_number": 3
82 90 },
83 91 {
84 92 "cell_type": "markdown",
93 "metadata": {},
85 94 "source": [
86 "IPython also creates aliases for a few common interpreters, such as bash, ruby, perl, etc.",
87 "",
95 "IPython also creates aliases for a few common interpreters, such as bash, ruby, perl, etc.\n",
96 "\n",
88 97 "These are all equivalent to `%%script <name>`"
89 98 ]
90 99 },
91 100 {
92 101 "cell_type": "code",
102 "collapsed": false,
93 103 "input": [
94 "%%ruby",
104 "%%ruby\n",
95 105 "puts \"Hello from Ruby #{RUBY_VERSION}\""
96 106 ],
97 107 "language": "python",
108 "metadata": {},
98 109 "outputs": [
99 110 {
100 111 "output_type": "stream",
101 112 "stream": "stdout",
102 113 "text": [
103 "Hello from Ruby 1.8.7",
104 ""
114 "Hello from Ruby 1.8.7\n"
105 115 ]
106 116 }
107 117 ],
108 118 "prompt_number": 4
109 119 },
110 120 {
111 121 "cell_type": "code",
122 "collapsed": false,
112 123 "input": [
113 "%%bash",
124 "%%bash\n",
114 125 "echo \"hello from $BASH\""
115 126 ],
116 127 "language": "python",
128 "metadata": {},
117 129 "outputs": [
118 130 {
119 131 "output_type": "stream",
120 132 "stream": "stdout",
121 133 "text": [
122 "hello from /usr/local/bin/bash",
123 ""
134 "hello from /usr/local/bin/bash\n"
124 135 ]
125 136 }
126 137 ],
127 138 "prompt_number": 5
128 139 },
129 140 {
130 141 "cell_type": "heading",
131 142 "level": 2,
143 "metadata": {},
132 144 "source": [
133 145 "Capturing output"
134 146 ]
135 147 },
136 148 {
137 149 "cell_type": "markdown",
150 "metadata": {},
138 151 "source": [
139 152 "You can also capture stdout/err from these subprocesses into Python variables, instead of letting them go directly to stdout/err"
140 153 ]
141 154 },
142 155 {
143 156 "cell_type": "code",
157 "collapsed": false,
144 158 "input": [
145 "%%bash",
146 "echo \"hi, stdout\"",
147 "echo \"hello, stderr\" >&2",
148 ""
159 "%%bash\n",
160 "echo \"hi, stdout\"\n",
161 "echo \"hello, stderr\" >&2\n"
149 162 ],
150 163 "language": "python",
164 "metadata": {},
151 165 "outputs": [
152 166 {
153 167 "output_type": "stream",
154 168 "stream": "stdout",
155 169 "text": [
156 "hi, stdout",
157 ""
170 "hi, stdout\n"
158 171 ]
159 172 },
160 173 {
161 174 "output_type": "stream",
162 175 "stream": "stderr",
163 176 "text": [
164 "hello, stderr",
165 ""
177 "hello, stderr\n"
166 178 ]
167 179 }
168 180 ],
169 181 "prompt_number": 6
170 182 },
171 183 {
172 184 "cell_type": "code",
185 "collapsed": false,
173 186 "input": [
174 "%%bash --out output --err error",
175 "echo \"hi, stdout\"",
187 "%%bash --out output --err error\n",
188 "echo \"hi, stdout\"\n",
176 189 "echo \"hello, stderr\" >&2"
177 190 ],
178 191 "language": "python",
192 "metadata": {},
179 193 "outputs": [],
180 194 "prompt_number": 7
181 195 },
182 196 {
183 197 "cell_type": "code",
198 "collapsed": false,
184 199 "input": [
185 "print error",
200 "print error\n",
186 201 "print output"
187 202 ],
188 203 "language": "python",
204 "metadata": {},
189 205 "outputs": [
190 206 {
191 207 "output_type": "stream",
192 208 "stream": "stdout",
193 209 "text": [
194 "hello, stderr",
195 "",
196 "hi, stdout",
197 "",
198 ""
210 "hello, stderr\n",
211 "\n",
212 "hi, stdout\n",
213 "\n"
199 214 ]
200 215 }
201 216 ],
202 217 "prompt_number": 8
203 218 },
204 219 {
205 220 "cell_type": "heading",
206 221 "level": 2,
222 "metadata": {},
207 223 "source": [
208 224 "Background Scripts"
209 225 ]
210 226 },
211 227 {
212 228 "cell_type": "markdown",
229 "metadata": {},
213 230 "source": [
214 "These scripts can be run in the background, by adding the `--bg` flag.",
215 "",
216 "When you do this, output is discarded unless you use the `--out/err`",
231 "These scripts can be run in the background, by adding the `--bg` flag.\n",
232 "\n",
233 "When you do this, output is discarded unless you use the `--out/err`\n",
217 234 "flags to store output as above."
218 235 ]
219 236 },
220 237 {
221 238 "cell_type": "code",
239 "collapsed": false,
222 240 "input": [
223 "%%ruby --bg --out ruby_lines",
224 "for n in 1...10",
225 " sleep 1",
226 " puts \"line #{n}\"",
227 " STDOUT.flush",
241 "%%ruby --bg --out ruby_lines\n",
242 "for n in 1...10\n",
243 " sleep 1\n",
244 " puts \"line #{n}\"\n",
245 " STDOUT.flush\n",
228 246 "end"
229 247 ],
230 248 "language": "python",
249 "metadata": {},
231 250 "outputs": [
232 251 {
233 252 "output_type": "stream",
234 253 "stream": "stdout",
235 254 "text": [
236 "Starting job # 0 in a separate thread.",
237 ""
255 "Starting job # 0 in a separate thread.\n"
238 256 ]
239 257 }
240 258 ],
241 259 "prompt_number": 9
242 260 },
243 261 {
244 262 "cell_type": "markdown",
263 "metadata": {},
245 264 "source": [
246 "When you do store output of a background thread, these are the stdout/err *pipes*,",
265 "When you do store output of a background thread, these are the stdout/err *pipes*,\n",
247 266 "rather than the text of the output."
248 267 ]
249 268 },
250 269 {
251 270 "cell_type": "code",
271 "collapsed": false,
252 272 "input": [
253 273 "ruby_lines"
254 274 ],
255 275 "language": "python",
276 "metadata": {},
256 277 "outputs": [
257 278 {
258 279 "output_type": "pyout",
259 280 "prompt_number": 10,
260 281 "text": [
261 "<open file '<fdopen>', mode 'rb' at 0x10dc651e0>"
282 "<open file '<fdopen>', mode 'rb' at 0x10a4be660>"
262 283 ]
263 284 }
264 285 ],
265 286 "prompt_number": 10
266 287 },
267 288 {
268 289 "cell_type": "code",
290 "collapsed": false,
269 291 "input": [
270 292 "print ruby_lines.read()"
271 293 ],
272 294 "language": "python",
295 "metadata": {},
273 296 "outputs": [
274 297 {
275 298 "output_type": "stream",
276 299 "stream": "stdout",
277 300 "text": [
278 "line 1",
279 "line 2",
280 "line 3",
281 "line 4",
282 "line 5",
283 "line 6",
284 "line 7",
285 "line 8",
286 "line 9",
287 "",
288 ""
301 "line 1\n",
302 "line 2\n",
303 "line 3\n",
304 "line 4\n",
305 "line 5\n",
306 "line 6\n",
307 "line 7\n",
308 "line 8\n",
309 "line 9\n",
310 "\n"
289 311 ]
290 312 }
291 313 ],
292 314 "prompt_number": 11
293 315 },
294 316 {
295 317 "cell_type": "heading",
296 318 "level": 2,
319 "metadata": {},
297 320 "source": [
298 321 "Arguments to subcommand"
299 322 ]
300 323 },
301 324 {
302 325 "cell_type": "markdown",
326 "metadata": {},
303 327 "source": [
304 "You can pass arguments the subcommand as well,",
328 "You can pass arguments the subcommand as well,\n",
305 329 "such as this example instructing Python to use integer division from Python 3:"
306 330 ]
307 331 },
308 332 {
309 333 "cell_type": "code",
334 "collapsed": false,
310 335 "input": [
311 "%%script python -Qnew",
336 "%%script python -Qnew\n",
312 337 "print 1/3"
313 338 ],
314 339 "language": "python",
340 "metadata": {},
315 341 "outputs": [
316 342 {
317 343 "output_type": "stream",
318 344 "stream": "stdout",
319 345 "text": [
320 "0.333333333333",
321 ""
346 "0.333333333333\n"
322 347 ]
323 348 }
324 349 ],
325 350 "prompt_number": 12
326 351 },
327 352 {
328 353 "cell_type": "markdown",
354 "metadata": {},
329 355 "source": [
330 "You can really specify *any* program for `%%script`,",
356 "You can really specify *any* program for `%%script`,\n",
331 357 "for instance here is a 'program' that echos the lines of stdin, with delays between each line."
332 358 ]
333 359 },
334 360 {
335 361 "cell_type": "code",
362 "collapsed": false,
336 363 "input": [
337 "%%script --bg --out bashout bash -c \"while read line; do echo $line; sleep 1; done\"",
338 "line 1",
339 "line 2",
340 "line 3",
341 "line 4",
342 "line 5",
343 ""
364 "%%script --bg --out bashout bash -c \"while read line; do echo $line; sleep 1; done\"\n",
365 "line 1\n",
366 "line 2\n",
367 "line 3\n",
368 "line 4\n",
369 "line 5\n"
344 370 ],
345 371 "language": "python",
372 "metadata": {},
346 373 "outputs": [
347 374 {
348 375 "output_type": "stream",
349 376 "stream": "stdout",
350 377 "text": [
351 "Starting job # 2 in a separate thread.",
352 ""
378 "Starting job # 2 in a separate thread.\n"
353 379 ]
354 380 }
355 381 ],
356 382 "prompt_number": 13
357 383 },
358 384 {
359 385 "cell_type": "markdown",
386 "metadata": {},
360 387 "source": [
361 "Remember, since the output of a background script is just the stdout pipe,",
388 "Remember, since the output of a background script is just the stdout pipe,\n",
362 389 "you can read it as lines become available:"
363 390 ]
364 391 },
365 392 {
366 393 "cell_type": "code",
394 "collapsed": false,
367 395 "input": [
368 "import time",
369 "tic = time.time()",
370 "line = True",
371 "while True:",
372 " line = bashout.readline()",
373 " if not line:",
374 " break",
375 " sys.stdout.write(\"%.1fs: %s\" %(time.time()-tic, line))",
376 " sys.stdout.flush()",
377 ""
396 "import time\n",
397 "tic = time.time()\n",
398 "line = True\n",
399 "while True:\n",
400 " line = bashout.readline()\n",
401 " if not line:\n",
402 " break\n",
403 " sys.stdout.write(\"%.1fs: %s\" %(time.time()-tic, line))\n",
404 " sys.stdout.flush()\n"
378 405 ],
379 406 "language": "python",
407 "metadata": {},
380 408 "outputs": [
381 409 {
382 410 "output_type": "stream",
383 411 "stream": "stdout",
384 412 "text": [
385 "0.0s: line 1",
386 ""
413 "0.0s: line 1\n"
387 414 ]
388 415 },
389 416 {
390 417 "output_type": "stream",
391 418 "stream": "stdout",
392 419 "text": [
393 "1.0s: line 2",
394 ""
420 "1.0s: line 2\n"
395 421 ]
396 422 },
397 423 {
398 424 "output_type": "stream",
399 425 "stream": "stdout",
400 426 "text": [
401 "2.0s: line 3",
402 ""
427 "2.0s: line 3\n"
403 428 ]
404 429 },
405 430 {
406 431 "output_type": "stream",
407 432 "stream": "stdout",
408 433 "text": [
409 "3.0s: line 4",
410 ""
434 "3.0s: line 4\n"
411 435 ]
412 436 },
413 437 {
414 438 "output_type": "stream",
415 439 "stream": "stdout",
416 440 "text": [
417 "4.0s: line 5",
418 ""
441 "4.0s: line 5\n"
419 442 ]
420 443 }
421 444 ],
422 445 "prompt_number": 14
423 446 },
424 447 {
425 448 "cell_type": "heading",
426 449 "level": 2,
450 "metadata": {},
427 451 "source": [
428 452 "Configuring the default ScriptMagics"
429 453 ]
430 454 },
431 455 {
432 456 "cell_type": "markdown",
457 "metadata": {},
433 458 "source": [
434 "The list of aliased script magics is configurable.",
435 "",
436 "The default is to pick from a few common interpreters, and use them if found, but you can specify your own in ipython_config.py:",
437 "",
438 " c.ScriptMagics.scripts = ['R', 'pypy', 'myprogram']",
439 "",
440 "And if any of these programs do not apear on your default PATH, then you would also need to specify their location with:",
441 "",
459 "The list of aliased script magics is configurable.\n",
460 "\n",
461 "The default is to pick from a few common interpreters, and use them if found, but you can specify your own in ipython_config.py:\n",
462 "\n",
463 " c.ScriptMagics.scripts = ['R', 'pypy', 'myprogram']\n",
464 "\n",
465 "And if any of these programs do not apear on your default PATH, then you would also need to specify their location with:\n",
466 "\n",
442 467 " c.ScriptMagics.script_paths = {'myprogram': '/opt/path/to/myprogram'}"
443 468 ]
444 469 }
445 ]
470 ],
471 "metadata": {}
446 472 }
447 473 ]
448 474 } No newline at end of file
@@ -1,239 +1,270 b''
1 1 {
2 2 "metadata": {
3 3 "name": "cython_extension"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
10 11 "cell_type": "heading",
11 12 "level": 1,
13 "metadata": {},
12 14 "source": [
13 15 "Cython Magic Functions Extension"
14 16 ]
15 17 },
16 18 {
17 19 "cell_type": "heading",
18 20 "level": 2,
21 "metadata": {},
19 22 "source": [
20 23 "Loading the extension"
21 24 ]
22 25 },
23 26 {
24 27 "cell_type": "markdown",
28 "metadata": {},
25 29 "source": [
26 30 "IPtyhon has a `cythonmagic` extension that contains a number of magic functions for working with Cython code. This extension can be loaded using the `%load_ext` magic as follows:"
27 31 ]
28 32 },
29 33 {
30 34 "cell_type": "code",
35 "collapsed": false,
31 36 "input": [
32 37 "%load_ext cythonmagic"
33 38 ],
34 39 "language": "python",
40 "metadata": {},
35 41 "outputs": [],
36 42 "prompt_number": 1
37 43 },
38 44 {
39 45 "cell_type": "heading",
40 46 "level": 2,
47 "metadata": {},
41 48 "source": [
42 49 "The %cython_inline magic"
43 50 ]
44 51 },
45 52 {
46 53 "cell_type": "markdown",
54 "metadata": {},
47 55 "source": [
48 56 "The `%%cython_inline` magic uses `Cython.inline` to compile a Cython expression. This allows you to enter and run a function body with Cython code. Use a bare `return` statement to return values. "
49 57 ]
50 58 },
51 59 {
52 60 "cell_type": "code",
61 "collapsed": false,
53 62 "input": [
54 63 "a = 10\n",
55 64 "b = 20"
56 65 ],
57 66 "language": "python",
67 "metadata": {},
58 68 "outputs": [],
59 "prompt_number": 8
69 "prompt_number": 2
60 70 },
61 71 {
62 72 "cell_type": "code",
73 "collapsed": false,
63 74 "input": [
64 75 "%%cython_inline\n",
65 76 "return a+b"
66 77 ],
67 78 "language": "python",
79 "metadata": {},
68 80 "outputs": [
69 81 {
70 82 "output_type": "pyout",
71 "prompt_number": 9,
83 "prompt_number": 3,
72 84 "text": [
73 85 "30"
74 86 ]
75 87 }
76 88 ],
77 "prompt_number": 9
89 "prompt_number": 3
78 90 },
79 91 {
80 92 "cell_type": "heading",
81 93 "level": 2,
94 "metadata": {},
82 95 "source": [
83 96 "The %cython_pyximport magic"
84 97 ]
85 98 },
86 99 {
87 100 "cell_type": "markdown",
101 "metadata": {},
88 102 "source": [
89 103 "The `%%cython_pyximport` magic allows you to enter arbitrary Cython code into a cell. That Cython code is written as a `.pyx` file in the current working directory and then imported using `pyximport`. You have the specify the name of the module that the Code will appear in. All symbols from the module are imported automatically by the magic function."
90 104 ]
91 105 },
92 106 {
93 107 "cell_type": "code",
108 "collapsed": false,
94 109 "input": [
95 110 "%%cython_pyximport foo\n",
96 111 "def f(x):\n",
97 112 " return 4.0*x"
98 113 ],
99 114 "language": "python",
115 "metadata": {},
100 116 "outputs": [],
101 "prompt_number": 18
117 "prompt_number": 4
102 118 },
103 119 {
104 120 "cell_type": "code",
121 "collapsed": false,
105 122 "input": [
106 123 "f(10)"
107 124 ],
108 125 "language": "python",
126 "metadata": {},
109 127 "outputs": [
110 128 {
111 129 "output_type": "pyout",
112 "prompt_number": 19,
130 "prompt_number": 5,
113 131 "text": [
114 132 "40.0"
115 133 ]
116 134 }
117 135 ],
118 "prompt_number": 19
136 "prompt_number": 5
119 137 },
120 138 {
121 139 "cell_type": "heading",
122 140 "level": 2,
141 "metadata": {},
123 142 "source": [
124 143 "The %cython magic"
125 144 ]
126 145 },
127 146 {
128 147 "cell_type": "markdown",
148 "metadata": {},
129 149 "source": [
130 150 "Probably the most important magic is the `%cython` magic. This is similar to the `%%cython_pyximport` magic, but doesn't require you to specify a module name. Instead, the `%%cython` magic uses manages everything using temporary files in the `~/.cython/magic` directory. All of the symbols in the Cython module are imported automatically by the magic.\n",
131 151 "\n",
132 152 "Here is a simple example of a Black-Scholes options pricing algorithm written in Cython:"
133 153 ]
134 154 },
135 155 {
136 156 "cell_type": "code",
157 "collapsed": false,
137 158 "input": [
138 159 "%%cython\n",
139 160 "cimport cython\n",
140 161 "from libc.math cimport exp, sqrt, pow, log, erf\n",
141 162 "\n",
142 163 "@cython.cdivision(True)\n",
143 164 "cdef double std_norm_cdf(double x) nogil:\n",
144 165 " return 0.5*(1+erf(x/sqrt(2.0)))\n",
145 166 "\n",
146 167 "@cython.cdivision(True)\n",
147 168 "def black_scholes(double s, double k, double t, double v,\n",
148 169 " double rf, double div, double cp):\n",
149 170 " \"\"\"Price an option using the Black-Scholes model.\n",
150 171 " \n",
151 172 " s : initial stock price\n",
152 173 " k : strike price\n",
153 174 " t : expiration time\n",
154 175 " v : volatility\n",
155 176 " rf : risk-free rate\n",
156 177 " div : dividend\n",
157 178 " cp : +1/-1 for call/put\n",
158 179 " \"\"\"\n",
159 180 " cdef double d1, d2, optprice\n",
160 181 " with nogil:\n",
161 182 " d1 = (log(s/k)+(rf-div+0.5*pow(v,2))*t)/(v*sqrt(t))\n",
162 183 " d2 = d1 - v*sqrt(t)\n",
163 184 " optprice = cp*s*exp(-div*t)*std_norm_cdf(cp*d1) - \\\n",
164 185 " cp*k*exp(-rf*t)*std_norm_cdf(cp*d2)\n",
165 186 " return optprice"
166 187 ],
167 188 "language": "python",
189 "metadata": {},
168 190 "outputs": [],
169 191 "prompt_number": 6
170 192 },
171 193 {
172 194 "cell_type": "code",
195 "collapsed": false,
173 196 "input": [
174 197 "black_scholes(100.0, 100.0, 1.0, 0.3, 0.03, 0.0, -1)"
175 198 ],
176 199 "language": "python",
200 "metadata": {},
177 201 "outputs": [
178 202 {
179 203 "output_type": "pyout",
180 204 "prompt_number": 7,
181 205 "text": [
182 206 "10.327861752731728"
183 207 ]
184 208 }
185 209 ],
186 210 "prompt_number": 7
187 211 },
188 212 {
189 213 "cell_type": "code",
214 "collapsed": false,
190 215 "input": [
191 216 "%timeit black_scholes(100.0, 100.0, 1.0, 0.3, 0.03, 0.0, -1)"
192 217 ],
193 218 "language": "python",
219 "metadata": {},
194 220 "outputs": [
195 221 {
196 222 "output_type": "stream",
197 223 "stream": "stdout",
198 224 "text": [
199 "1000000 loops, best of 3: 621 ns per loop\n"
225 "1000000 loops, best of 3: 821 ns per loop\n"
200 226 ]
201 227 }
202 228 ],
203 "prompt_number": 14
229 "prompt_number": 8
204 230 },
205 231 {
206 232 "cell_type": "markdown",
233 "metadata": {},
207 234 "source": [
208 235 "Cython allows you to specify additional libraries to be linked with your extension, you can do so with the `-l` flag (also spelled `--lib`). Note that this flag can be passed more than once to specify multiple libraries, such as `-lm -llib2 --lib lib3`. Here's a simple example of how to access the system math library:"
209 236 ]
210 237 },
211 238 {
212 239 "cell_type": "code",
240 "collapsed": false,
213 241 "input": [
214 242 "%%cython -lm\n",
215 243 "from libc.math cimport sin\n",
216 244 "print 'sin(1)=', sin(1)"
217 245 ],
218 246 "language": "python",
247 "metadata": {},
219 248 "outputs": [
220 249 {
221 250 "output_type": "stream",
222 251 "stream": "stdout",
223 252 "text": [
224 253 "sin(1)= 0.841470984808\n"
225 254 ]
226 255 }
227 256 ],
228 "prompt_number": 2
257 "prompt_number": 9
229 258 },
230 259 {
231 260 "cell_type": "markdown",
261 "metadata": {},
232 262 "source": [
233 263 "You can similarly use the `-I/--include` flag to add include directories to the search path, and `-c/--compile-args` to add extra flags that are passed to Cython via the `extra_compile_args` of the distutils `Extension` class. Please see [the Cython docs on C library usage](http://docs.cython.org/src/tutorial/clibraries.html) for more details on the use of these flags."
234 264 ]
235 265 }
236 ]
266 ],
267 "metadata": {}
237 268 }
238 269 ]
239 270 } No newline at end of file
@@ -1,378 +1,404 b''
1 1 {
2 2 "metadata": {
3 3 "name": "display_protocol"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
11 "cell_type": "heading",
12 "level": 1,
13 "metadata": {},
14 "source": [
15 "Using the IPython display protocol for your own objects"
16 ]
17 },
18 {
19 "cell_type": "markdown",
20 "metadata": {},
21 "source": [
22 "IPython extends the idea of the ``__repr__`` method in Python to support multiple representations for a given\n",
23 "object, which clients can use to display the object according to their capabilities. An object can return multiple\n",
24 "representations of itself by implementing special methods, and you can also define at runtime custom display \n",
25 "functions for existing objects whose methods you can't or won't modify. In this notebook, we show how both approaches work.\n",
26 "\n",
27 "<br/>\n",
28 "**Note:** this notebook has had all output cells stripped out so we can include it in the IPython documentation with \n",
29 "a minimal file size. You'll need to manually execute the cells to see the output (you can run all of them with the \n",
30 "\"Run All\" button, or execute each individually)."
31 ]
32 },
33 {
34 "cell_type": "markdown",
35 "metadata": {},
36 "source": [
37 "Parts of this notebook need the inline matplotlib backend:"
38 ]
39 },
40 {
41 "cell_type": "code",
42 "collapsed": false,
43 "input": [
44 "%pylab inline"
45 ],
46 "language": "python",
47 "metadata": {},
48 "outputs": []
49 },
50 {
51 "cell_type": "heading",
52 "level": 2,
53 "metadata": {},
54 "source": [
55 "Custom-built classes with dedicated ``_repr_*_`` methods"
56 ]
57 },
58 {
10 59 "cell_type": "markdown",
60 "metadata": {},
11 61 "source": [
12 "# Using the IPython display protocol for your own objects",
13 "",
14 "IPython extends the idea of the ``__repr__`` method in Python to support multiple representations for a given",
15 "object, which clients can use to display the object according to their capabilities. An object can return multiple",
16 "representations of itself by implementing special methods, and you can also define at runtime custom display ",
17 "functions for existing objects whose methods you can't or won't modify. In this notebook, we show how both approaches work.",
18 "",
19 "<br/>",
20 "**Note:** this notebook has had all output cells stripped out so we can include it in the IPython documentation with ",
21 "a minimal file size. You'll need to manually execute the cells to see the output (you can run all of them with the ",
22 "\"Run All\" button, or execute each individually). You must start this notebook with",
23 "<pre>",
24 "ipython notebook --pylab inline",
25 "</pre>",
26 "",
27 "to ensure pylab support is available for plots.",
28 "",
29 "## Custom-built classes with dedicated ``_repr_*_`` methods",
30 "",
31 "In our first example, we illustrate how objects can expose directly to IPython special representations of",
32 "themselves, by providing methods such as ``_repr_svg_``, ``_repr_png_``, ``_repr_latex_``, etc. For a full",
33 "list of the special ``_repr_*_`` methods supported, see the code in ``IPython.core.displaypub``.",
34 "",
35 "As an illustration, we build a class that holds data generated by sampling a Gaussian distribution with given mean ",
36 "and variance. The class can display itself in a variety of ways: as a LaTeX expression or as an image in PNG or SVG ",
37 "format. Each frontend can then decide which representation it can handle.",
38 "Further, we illustrate how to expose directly to the user the ability to directly access the various alternate ",
39 "representations (since by default displaying the object itself will only show one, and which is shown will depend on the ",
40 "required representations that even cache necessary data in cases where it may be expensive to compute.",
41 "",
62 "In our first example, we illustrate how objects can expose directly to IPython special representations of\n",
63 "themselves, by providing methods such as ``_repr_svg_``, ``_repr_png_``, ``_repr_latex_``, etc. For a full\n",
64 "list of the special ``_repr_*_`` methods supported, see the code in ``IPython.core.displaypub``.\n",
65 "\n",
66 "As an illustration, we build a class that holds data generated by sampling a Gaussian distribution with given mean \n",
67 "and variance. The class can display itself in a variety of ways: as a LaTeX expression or as an image in PNG or SVG \n",
68 "format. Each frontend can then decide which representation it can handle.\n",
69 "Further, we illustrate how to expose directly to the user the ability to directly access the various alternate \n",
70 "representations (since by default displaying the object itself will only show one, and which is shown will depend on the \n",
71 "required representations that even cache necessary data in cases where it may be expensive to compute.\n",
72 "\n",
42 73 "The next cell defines the Gaussian class:"
43 74 ]
44 75 },
45 76 {
46 77 "cell_type": "code",
47 78 "collapsed": false,
48 79 "input": [
49 "from IPython.core.pylabtools import print_figure",
50 "from IPython.core.display import Image, SVG, Math",
51 "",
52 "class Gaussian(object):",
53 " \"\"\"A simple object holding data sampled from a Gaussian distribution.",
54 " \"\"\"",
55 " def __init__(self, mean=0, std=1, size=1000):",
56 " self.data = np.random.normal(mean, std, size)",
57 " self.mean = mean",
58 " self.std = std",
59 " self.size = size",
60 " # For caching plots that may be expensive to compute",
61 " self._png_data = None",
62 " self._svg_data = None",
63 " ",
64 " def _figure_data(self, format):",
65 " fig, ax = plt.subplots()",
66 " ax.plot(self.data, 'o')",
67 " ax.set_title(self._repr_latex_())",
68 " data = print_figure(fig, format)",
69 " # We MUST close the figure, otherwise IPython's display machinery",
70 " # will pick it up and send it as output, resulting in a double display",
71 " plt.close(fig)",
72 " return data",
73 " ",
74 " # Here we define the special repr methods that provide the IPython display protocol",
75 " # Note that for the two figures, we cache the figure data once computed.",
76 " ",
77 " def _repr_png_(self):",
78 " if self._png_data is None:",
79 " self._png_data = self._figure_data('png')",
80 " return self._png_data",
81 "",
82 "",
83 " def _repr_svg_(self):",
84 " if self._svg_data is None:",
85 " self._svg_data = self._figure_data('svg')",
86 " return self._svg_data",
87 " ",
88 " def _repr_latex_(self):",
89 " return r'$\\mathcal{N}(\\mu=%.2g, \\sigma=%.2g),\\ N=%d$' % (self.mean,",
90 " self.std, self.size)",
91 " ",
92 " # We expose as properties some of the above reprs, so that the user can see them",
93 " # directly (since otherwise the client dictates which one it shows by default)",
94 " @property",
95 " def png(self):",
96 " return Image(self._repr_png_(), embed=True)",
97 " ",
98 " @property",
99 " def svg(self):",
100 " return SVG(self._repr_svg_())",
101 " ",
102 " @property",
103 " def latex(self):",
104 " return Math(self._repr_svg_())",
105 " ",
106 " # An example of using a property to display rich information, in this case",
107 " # the histogram of the distribution. We've hardcoded the format to be png",
108 " # in this case, but in production code it would be trivial to make it an option",
109 " @property",
110 " def hist(self):",
111 " fig, ax = plt.subplots()",
112 " ax.hist(self.data, bins=100)",
113 " ax.set_title(self._repr_latex_())",
114 " data = print_figure(fig, 'png')",
115 " plt.close(fig)",
80 "from IPython.core.pylabtools import print_figure\n",
81 "from IPython.display import Image, SVG, Math\n",
82 "\n",
83 "class Gaussian(object):\n",
84 " \"\"\"A simple object holding data sampled from a Gaussian distribution.\n",
85 " \"\"\"\n",
86 " def __init__(self, mean=0, std=1, size=1000):\n",
87 " self.data = np.random.normal(mean, std, size)\n",
88 " self.mean = mean\n",
89 " self.std = std\n",
90 " self.size = size\n",
91 " # For caching plots that may be expensive to compute\n",
92 " self._png_data = None\n",
93 " self._svg_data = None\n",
94 " \n",
95 " def _figure_data(self, format):\n",
96 " fig, ax = plt.subplots()\n",
97 " ax.plot(self.data, 'o')\n",
98 " ax.set_title(self._repr_latex_())\n",
99 " data = print_figure(fig, format)\n",
100 " # We MUST close the figure, otherwise IPython's display machinery\n",
101 " # will pick it up and send it as output, resulting in a double display\n",
102 " plt.close(fig)\n",
103 " return data\n",
104 " \n",
105 " # Here we define the special repr methods that provide the IPython display protocol\n",
106 " # Note that for the two figures, we cache the figure data once computed.\n",
107 " \n",
108 " def _repr_png_(self):\n",
109 " if self._png_data is None:\n",
110 " self._png_data = self._figure_data('png')\n",
111 " return self._png_data\n",
112 "\n",
113 "\n",
114 " def _repr_svg_(self):\n",
115 " if self._svg_data is None:\n",
116 " self._svg_data = self._figure_data('svg')\n",
117 " return self._svg_data\n",
118 " \n",
119 " def _repr_latex_(self):\n",
120 " return r'$\\mathcal{N}(\\mu=%.2g, \\sigma=%.2g),\\ N=%d$' % (self.mean,\n",
121 " self.std, self.size)\n",
122 " \n",
123 " # We expose as properties some of the above reprs, so that the user can see them\n",
124 " # directly (since otherwise the client dictates which one it shows by default)\n",
125 " @property\n",
126 " def png(self):\n",
127 " return Image(self._repr_png_(), embed=True)\n",
128 " \n",
129 " @property\n",
130 " def svg(self):\n",
131 " return SVG(self._repr_svg_())\n",
132 " \n",
133 " @property\n",
134 " def latex(self):\n",
135 " return Math(self._repr_svg_())\n",
136 " \n",
137 " # An example of using a property to display rich information, in this case\n",
138 " # the histogram of the distribution. We've hardcoded the format to be png\n",
139 " # in this case, but in production code it would be trivial to make it an option\n",
140 " @property\n",
141 " def hist(self):\n",
142 " fig, ax = plt.subplots()\n",
143 " ax.hist(self.data, bins=100)\n",
144 " ax.set_title(self._repr_latex_())\n",
145 " data = print_figure(fig, 'png')\n",
146 " plt.close(fig)\n",
116 147 " return Image(data, embed=True)"
117 148 ],
118 149 "language": "python",
119 "outputs": [],
120 "prompt_number": 1
150 "metadata": {},
151 "outputs": []
121 152 },
122 153 {
123 154 "cell_type": "markdown",
155 "metadata": {},
124 156 "source": [
125 157 "Now, we create an instance of the Gaussian distribution, whose default representation will be its LaTeX form:"
126 158 ]
127 159 },
128 160 {
129 161 "cell_type": "code",
130 162 "collapsed": false,
131 163 "input": [
132 "x = Gaussian()",
164 "x = Gaussian()\n",
133 165 "x"
134 166 ],
135 167 "language": "python",
136 "outputs": [],
137 "prompt_number": 2
168 "metadata": {},
169 "outputs": []
138 170 },
139 171 {
140 172 "cell_type": "markdown",
173 "metadata": {},
141 174 "source": [
142 175 "We can view the data in png or svg formats:"
143 176 ]
144 177 },
145 178 {
146 179 "cell_type": "code",
147 180 "collapsed": false,
148 181 "input": [
149 182 "x.png"
150 183 ],
151 184 "language": "python",
152 "outputs": [],
153 "prompt_number": 3
185 "metadata": {},
186 "outputs": []
154 187 },
155 188 {
156 189 "cell_type": "code",
157 190 "collapsed": false,
158 191 "input": [
159 192 "x.svg"
160 193 ],
161 194 "language": "python",
162 "outputs": [],
163 "prompt_number": 4
195 "metadata": {},
196 "outputs": []
164 197 },
165 198 {
166 199 "cell_type": "markdown",
200 "metadata": {},
167 201 "source": [
168 "Since IPython only displays by default as an ``Out[]`` cell the result of the last computation, we can use the",
202 "Since IPython only displays by default as an ``Out[]`` cell the result of the last computation, we can use the\n",
169 203 "``display()`` function to show more than one representation in a single cell:"
170 204 ]
171 205 },
172 206 {
173 207 "cell_type": "code",
174 208 "collapsed": false,
175 209 "input": [
176 "display(x.png)",
210 "display(x.png)\n",
177 211 "display(x.svg)"
178 212 ],
179 213 "language": "python",
180 "outputs": [],
181 "prompt_number": 5
214 "metadata": {},
215 "outputs": []
182 216 },
183 217 {
184 218 "cell_type": "markdown",
219 "metadata": {},
185 220 "source": [
186 221 "Now let's create a new Gaussian with different parameters"
187 222 ]
188 223 },
189 224 {
190 225 "cell_type": "code",
191 226 "collapsed": false,
192 227 "input": [
193 "x2 = Gaussian(0.5, 0.2, 2000)",
228 "x2 = Gaussian(0.5, 0.2, 2000)\n",
194 229 "x2"
195 230 ],
196 231 "language": "python",
197 "outputs": [],
198 "prompt_number": 6
232 "metadata": {},
233 "outputs": []
199 234 },
200 235 {
201 236 "cell_type": "markdown",
237 "metadata": {},
202 238 "source": [
203 239 "We can easily compare them by displaying their histograms"
204 240 ]
205 241 },
206 242 {
207 243 "cell_type": "code",
208 244 "collapsed": false,
209 245 "input": [
210 "display(x.hist)",
246 "display(x.hist)\n",
211 247 "display(x2.hist)"
212 248 ],
213 249 "language": "python",
214 "outputs": [],
215 "prompt_number": 7
250 "metadata": {},
251 "outputs": []
216 252 },
217 253 {
218 254 "cell_type": "markdown",
255 "metadata": {},
219 256 "source": [
220 "## Adding IPython display support to existing objects",
221 "",
222 "When you are directly writing your own classes, you can adapt them for display in IPython by ",
223 "following the above example. But in practice, we often need to work with existing code we",
224 "can't modify. ",
225 "",
226 "We now illustrate how to add these kinds of extended display capabilities to existing objects.",
227 "We will use the numpy polynomials and change their default representation to be a formatted",
228 "LaTeX expression.",
229 "",
257 "## Adding IPython display support to existing objects\n",
258 "\n",
259 "When you are directly writing your own classes, you can adapt them for display in IPython by \n",
260 "following the above example. But in practice, we often need to work with existing code we\n",
261 "can't modify. \n",
262 "\n",
263 "We now illustrate how to add these kinds of extended display capabilities to existing objects.\n",
264 "We will use the numpy polynomials and change their default representation to be a formatted\n",
265 "LaTeX expression.\n",
266 "\n",
230 267 "First, consider how a numpy polynomial object renders by default:"
231 268 ]
232 269 },
233 270 {
234 271 "cell_type": "code",
235 272 "collapsed": false,
236 273 "input": [
237 "p = np.polynomial.Polynomial([1,2,3], [-10, 10])",
274 "p = np.polynomial.Polynomial([1,2,3], [-10, 10])\n",
238 275 "p"
239 276 ],
240 277 "language": "python",
241 "outputs": [],
242 "prompt_number": 8
278 "metadata": {},
279 "outputs": []
243 280 },
244 281 {
245 282 "cell_type": "markdown",
283 "metadata": {},
246 284 "source": [
247 285 "Next, we define a function that pretty-prints a polynomial as a LaTeX string:"
248 286 ]
249 287 },
250 288 {
251 289 "cell_type": "code",
252 "collapsed": true,
290 "collapsed": false,
253 291 "input": [
254 "def poly2latex(p):",
255 " terms = ['%.2g' % p.coef[0]]",
256 " if len(p) > 1:",
257 " term = 'x'",
258 " c = p.coef[1]",
259 " if c!=1:",
260 " term = ('%.2g ' % c) + term",
261 " terms.append(term)",
262 " if len(p) > 2:",
263 " for i in range(2, len(p)):",
264 " term = 'x^%d' % i",
265 " c = p.coef[i]",
266 " if c!=1:",
267 " term = ('%.2g ' % c) + term",
268 " terms.append(term)",
269 " px = '$P(x)=%s$' % '+'.join(terms)",
270 " dom = r', domain: $[%.2g,\\ %.2g]$' % tuple(p.domain)",
292 "def poly2latex(p):\n",
293 " terms = ['%.2g' % p.coef[0]]\n",
294 " if len(p) > 1:\n",
295 " term = 'x'\n",
296 " c = p.coef[1]\n",
297 " if c!=1:\n",
298 " term = ('%.2g ' % c) + term\n",
299 " terms.append(term)\n",
300 " if len(p) > 2:\n",
301 " for i in range(2, len(p)):\n",
302 " term = 'x^%d' % i\n",
303 " c = p.coef[i]\n",
304 " if c!=1:\n",
305 " term = ('%.2g ' % c) + term\n",
306 " terms.append(term)\n",
307 " px = '$P(x)=%s$' % '+'.join(terms)\n",
308 " dom = r', domain: $[%.2g,\\ %.2g]$' % tuple(p.domain)\n",
271 309 " return px+dom"
272 310 ],
273 311 "language": "python",
274 "outputs": [],
275 "prompt_number": 9
312 "metadata": {},
313 "outputs": []
276 314 },
277 315 {
278 316 "cell_type": "markdown",
317 "metadata": {},
279 318 "source": [
280 319 "This produces, on our polynomial ``p``, the following:"
281 320 ]
282 321 },
283 322 {
284 323 "cell_type": "code",
285 324 "collapsed": false,
286 325 "input": [
287 326 "poly2latex(p)"
288 327 ],
289 328 "language": "python",
290 "outputs": [],
291 "prompt_number": 10
292 },
293 {
294 "cell_type": "markdown",
295 "source": [
296 "Note that this did *not* produce a formated LaTeX object, because it is simply a string ",
297 "with LaTeX code. In order for this to be interpreted as a mathematical expression, it",
298 "must be properly wrapped into a Math object:"
299 ]
329 "metadata": {},
330 "outputs": []
300 331 },
301 332 {
302 333 "cell_type": "code",
303 334 "collapsed": false,
304 335 "input": [
305 "from IPython.core.display import Math",
306 "Math(poly2latex(p))"
336 "from IPython.display import Latex\n",
337 "Latex(poly2latex(p))"
307 338 ],
308 339 "language": "python",
309 "outputs": [],
310 "prompt_number": 11
340 "metadata": {},
341 "outputs": []
311 342 },
312 343 {
313 344 "cell_type": "markdown",
345 "metadata": {},
314 346 "source": [
315 "But we can configure IPython to do this automatically for us as follows. We hook into the",
316 "IPython display system and instruct it to use ``poly2latex`` for the latex mimetype, when",
317 "encountering objects of the ``Polynomial`` type defined in the",
347 "But we can configure IPython to do this automatically for us as follows. We hook into the\n",
348 "IPython display system and instruct it to use ``poly2latex`` for the latex mimetype, when\n",
349 "encountering objects of the ``Polynomial`` type defined in the\n",
318 350 "``numpy.polynomial.polynomial`` module:"
319 351 ]
320 352 },
321 353 {
322 354 "cell_type": "code",
323 "collapsed": true,
355 "collapsed": false,
324 356 "input": [
325 "ip = get_ipython()",
326 "latex_formatter = ip.display_formatter.formatters['text/latex']",
327 "latex_formatter.for_type_by_name('numpy.polynomial.polynomial',",
357 "ip = get_ipython()\n",
358 "latex_formatter = ip.display_formatter.formatters['text/latex']\n",
359 "latex_formatter.for_type_by_name('numpy.polynomial.polynomial',\n",
328 360 " 'Polynomial', poly2latex)"
329 361 ],
330 362 "language": "python",
331 "outputs": [],
332 "prompt_number": 12
363 "metadata": {},
364 "outputs": []
333 365 },
334 366 {
335 367 "cell_type": "markdown",
368 "metadata": {},
336 369 "source": [
337 "For more examples on how to use the above system, and how to bundle similar print functions",
338 "into a convenient IPython extension, see the ``IPython/extensions/sympyprinting.py`` file. ",
339 "The machinery that defines the display system is in the ``display.py`` and ``displaypub.py`` ",
340 "files in ``IPython/core``.",
341 "",
342 "Once our special printer has been loaded, all polynomials will be represented by their ",
370 "For more examples on how to use the above system, and how to bundle similar print functions\n",
371 "into a convenient IPython extension, see the ``IPython/extensions/sympyprinting.py`` file. \n",
372 "The machinery that defines the display system is in the ``display.py`` and ``displaypub.py`` \n",
373 "files in ``IPython/core``.\n",
374 "\n",
375 "Once our special printer has been loaded, all polynomials will be represented by their \n",
343 376 "mathematical form instead:"
344 377 ]
345 378 },
346 379 {
347 380 "cell_type": "code",
348 381 "collapsed": false,
349 382 "input": [
350 383 "p"
351 384 ],
352 385 "language": "python",
353 "outputs": [],
354 "prompt_number": 13
386 "metadata": {},
387 "outputs": []
355 388 },
356 389 {
357 390 "cell_type": "code",
358 391 "collapsed": false,
359 392 "input": [
360 "p2 = np.polynomial.Polynomial([-20, 71, -15, 1])",
393 "p2 = np.polynomial.Polynomial([-20, 71, -15, 1])\n",
361 394 "p2"
362 395 ],
363 396 "language": "python",
364 "outputs": [],
365 "prompt_number": 14
366 },
367 {
368 "cell_type": "code",
369 "collapsed": true,
370 "input": [],
371 "language": "python",
372 "outputs": [],
373 "prompt_number": 14
397 "metadata": {},
398 "outputs": []
374 399 }
375 ]
400 ],
401 "metadata": {}
376 402 }
377 403 ]
378 404 } No newline at end of file
@@ -1,126 +1,139 b''
1 1 {
2 2 "metadata": {
3 3 "name": "formatting"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
10 11 "cell_type": "markdown",
12 "metadata": {},
11 13 "source": [
12 "# Examples of basic formatting in the notebook",
13 "",
14 "Normal and formatted text cells such as this one use the ",
15 "[Markdown](http://daringfireball.net/projects/markdown/basics) syntax.",
16 "",
17 "",
18 "# Title (h1)",
19 "",
20 "## Heading (h2)",
21 "",
22 "### Heading (h3)",
23 "",
24 "Here is a paragraph of text.",
25 "",
26 "* One.",
27 " - Sublist",
28 " - Here we go",
29 " - Sublist",
30 " - Here we go",
31 " - Here we go",
32 "* Two.",
33 " - Sublist",
34 "* Three.",
35 " - Sublist",
36 "",
37 "Now another list:",
38 "",
39 "---",
40 "",
41 "1. Here we go",
42 " 1. Sublist",
43 " 2. Sublist",
44 "2. There we go",
45 "3. Now this",
46 "",
47 "And another paragraph.",
48 "",
49 "### Heading (h3)",
50 "",
51 "#### Heading (h4)",
52 "",
53 "##### Heading (h5)",
54 "",
55 "###### Heading (h6)",
56 "",
14 "# Examples of basic formatting in the notebook\n",
15 "\n",
16 "Normal and formatted text cells such as this one use the \n",
17 "[Markdown](http://daringfireball.net/projects/markdown/basics) syntax.\n",
18 "\n",
19 "\n",
20 "# Title (h1)\n",
21 "\n",
22 "## Heading (h2)\n",
23 "\n",
24 "### Heading (h3)\n",
25 "\n",
26 "Here is a paragraph of text.\n",
27 "\n",
28 "* One.\n",
29 " - Sublist\n",
30 " - Here we go\n",
31 " - Sublist\n",
32 " - Here we go\n",
33 " - Here we go\n",
34 "* Two.\n",
35 " - Sublist\n",
36 "* Three.\n",
37 " - Sublist\n",
38 "\n",
39 "Now another list:\n",
40 "\n",
41 "---\n",
42 "\n",
43 "1. Here we go\n",
44 " 1. Sublist\n",
45 " 2. Sublist\n",
46 "2. There we go\n",
47 "3. Now this\n",
48 "\n",
49 "And another paragraph.\n",
50 "\n",
51 "### Heading (h3)\n",
52 "\n",
53 "#### Heading (h4)\n",
54 "\n",
55 "##### Heading (h5)\n",
56 "\n",
57 "###### Heading (h6)\n",
58 "\n",
57 59 "## Heading (h2)"
58 60 ]
59 61 },
60 62 {
61 63 "cell_type": "markdown",
64 "metadata": {},
62 65 "source": [
63 "# Heading (h1)",
64 "",
65 "## Heading (h2)",
66 "",
67 "### Heading (h3)",
68 "",
69 "#### Heading (h4)",
70 "",
71 "##### Heading (h5)",
72 "",
73 "###### Heading (h6)",
74 "",
75 "Now for a simple code example:",
76 "",
77 " for i in range(10):",
78 " print i",
79 "",
66 "# Heading (h1)\n",
67 "\n",
68 "## Heading (h2)\n",
69 "\n",
70 "### Heading (h3)\n",
71 "\n",
72 "#### Heading (h4)\n",
73 "\n",
74 "##### Heading (h5)\n",
75 "\n",
76 "###### Heading (h6)\n",
77 "\n",
78 "Now for a simple code example:\n",
79 "\n",
80 " for i in range(10):\n",
81 " print i\n",
82 "\n",
80 83 "Now more text"
81 84 ]
82 85 },
83 86 {
84 "cell_type": "markdown",
87 "cell_type": "heading",
88 "level": 1,
89 "metadata": {},
85 90 "source": [
86 "## Heading (h2)",
87 "",
88 "Here is text.",
89 "",
90 "> This is a *block* quote. This is a block quote. This is a block quote. ",
91 "> This is a **block** quote. This is a block quote. This is a block quote. ",
92 "> This is a `block` quote. This is a block quote. This is a block quote. ",
93 "> This is a block quote. This is a block quote. This is a block quote. ",
94 "> This is a block quote. This is a block quote. This is a block quote. ",
95 "> This is a block quote. This is a block quote. This is a block quote. ",
96 "",
97 "Here is text",
98 "",
99 "<table>",
100 "<tr>",
101 "<th>Header 1</th>",
102 "<th>Header 2</th>",
103 "</tr>",
104 "<tr>",
105 "<td>row 1, cell 1</td>",
106 "<td>row 1, cell 2</td>",
107 "</tr>",
108 "<tr>",
109 "<td>row 2, cell 1</td>",
110 "<td>row 2, cell 2</td>",
111 "</tr>",
112 "</table>"
91 "This is a Heading Cell (level 1)"
92 ]
93 },
94 {
95 "cell_type": "heading",
96 "level": 4,
97 "metadata": {},
98 "source": [
99 "This is a Heading Cell (level 4)"
113 100 ]
114 101 },
115 102 {
116 "cell_type": "code",
117 "collapsed": true,
118 "input": [],
119 "language": "python",
120 "outputs": [],
121 "prompt_number": "&nbsp;"
103 "cell_type": "markdown",
104 "metadata": {},
105 "source": [
106 "## Heading (h2)\n",
107 "\n",
108 "Here is text.\n",
109 "\n",
110 "> This is a *block* quote. This is a block quote. This is a block quote. \n",
111 "> This is a **block** quote. This is a block quote. This is a block quote. \n",
112 "> This is a `block` quote. This is a block quote. This is a block quote. \n",
113 "> This is a block quote. This is a block quote. This is a block quote. \n",
114 "> This is a block quote. This is a block quote. This is a block quote. \n",
115 "> This is a block quote. This is a block quote. This is a block quote. \n",
116 "\n",
117 "Here is text\n",
118 "\n",
119 "<table>\n",
120 "<tr>\n",
121 "<th>Header 1</th>\n",
122 "<th>Header 2</th>\n",
123 "</tr>\n",
124 "<tr>\n",
125 "<td>row 1, cell 1</td>\n",
126 "<td>row 1, cell 2</td>\n",
127 "</tr>\n",
128 "<tr>\n",
129 "<td>row 2, cell 1</td>\n",
130 "<td>row 2, cell 2</td>\n",
131 "</tr>\n",
132 "</table>"
133 ]
122 134 }
123 ]
135 ],
136 "metadata": {}
124 137 }
125 138 ]
126 139 } No newline at end of file
@@ -1,342 +1,371 b''
1 1 {
2 2 "metadata": {
3 3 "name": "octavemagic_extension"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
10 11 "cell_type": "heading",
11 12 "level": 1,
13 "metadata": {},
12 14 "source": [
13 15 "octavemagic: Octave inside IPython"
14 16 ]
15 17 },
16 18 {
17 19 "cell_type": "heading",
18 20 "level": 2,
21 "metadata": {},
19 22 "source": [
20 23 "Installation"
21 24 ]
22 25 },
23 26 {
24 27 "cell_type": "markdown",
28 "metadata": {},
25 29 "source": [
26 "The `octavemagic` extension provides the ability to interact with Octave. It depends on the `oct2py` and `h5py` packages,",
27 "which may be installed using `easy_install`.",
28 "",
30 "The `octavemagic` extension provides the ability to interact with Octave. It depends on the `oct2py` and `h5py` packages,\n",
31 "which may be installed using `easy_install`.\n",
32 "\n",
29 33 "To enable the extension, load it as follows:"
30 34 ]
31 35 },
32 36 {
33 37 "cell_type": "code",
38 "collapsed": false,
34 39 "input": [
35 40 "%load_ext octavemagic"
36 41 ],
37 42 "language": "python",
43 "metadata": {},
38 44 "outputs": [],
39 45 "prompt_number": 18
40 46 },
41 47 {
42 48 "cell_type": "heading",
43 49 "level": 2,
50 "metadata": {},
44 51 "source": [
45 52 "Overview"
46 53 ]
47 54 },
48 55 {
49 56 "cell_type": "markdown",
57 "metadata": {},
50 58 "source": [
51 "Loading the extension enables three magic functions: `%octave`, `%octave_push`, and `%octave_pull`.",
52 "",
53 "The first is for executing one or more lines of Octave, while the latter allow moving variables between the Octave and Python workspace.",
59 "Loading the extension enables three magic functions: `%octave`, `%octave_push`, and `%octave_pull`.\n",
60 "\n",
61 "The first is for executing one or more lines of Octave, while the latter allow moving variables between the Octave and Python workspace.\n",
54 62 "Here you see an example of how to execute a single line of Octave, and how to transfer the generated value back to Python:"
55 63 ]
56 64 },
57 65 {
58 66 "cell_type": "code",
67 "collapsed": false,
59 68 "input": [
60 "x = %octave [1 2; 3 4];",
69 "x = %octave [1 2; 3 4];\n",
61 70 "x"
62 71 ],
63 72 "language": "python",
73 "metadata": {},
64 74 "outputs": [
65 75 {
66 76 "output_type": "pyout",
67 77 "prompt_number": 19,
68 78 "text": [
69 "array([[ 1., 2.],",
79 "array([[ 1., 2.],\n",
70 80 " [ 3., 4.]])"
71 81 ]
72 82 }
73 83 ],
74 84 "prompt_number": 19
75 85 },
76 86 {
77 87 "cell_type": "code",
88 "collapsed": false,
78 89 "input": [
79 "a = [1, 2, 3]",
80 "",
81 "%octave_push a",
82 "%octave a = a * 2;",
83 "%octave_pull a",
90 "a = [1, 2, 3]\n",
91 "\n",
92 "%octave_push a\n",
93 "%octave a = a * 2;\n",
94 "%octave_pull a\n",
84 95 "a"
85 96 ],
86 97 "language": "python",
98 "metadata": {},
87 99 "outputs": [
88 100 {
89 101 "output_type": "pyout",
90 102 "prompt_number": 20,
91 103 "text": [
92 104 "array([[2, 4, 6]])"
93 105 ]
94 106 }
95 107 ],
96 108 "prompt_number": 20
97 109 },
98 110 {
99 111 "cell_type": "markdown",
112 "metadata": {},
100 113 "source": [
101 "When using the cell magic, `%%octave` (note the double `%`), multiple lines of Octave can be executed together. Unlike",
114 "When using the cell magic, `%%octave` (note the double `%`), multiple lines of Octave can be executed together. Unlike\n",
102 115 "with the single cell magic, no value is returned, so we use the `-i` and `-o` flags to specify input and output variables."
103 116 ]
104 117 },
105 118 {
106 119 "cell_type": "code",
120 "collapsed": false,
107 121 "input": [
108 "%%octave -i x -o y",
122 "%%octave -i x -o y\n",
109 123 "y = x + 3;"
110 124 ],
111 125 "language": "python",
126 "metadata": {},
112 127 "outputs": [],
113 128 "prompt_number": 21
114 129 },
115 130 {
116 131 "cell_type": "code",
132 "collapsed": false,
117 133 "input": [
118 134 "y"
119 135 ],
120 136 "language": "python",
137 "metadata": {},
121 138 "outputs": [
122 139 {
123 140 "output_type": "pyout",
124 141 "prompt_number": 22,
125 142 "text": [
126 "array([[ 4., 5.],",
143 "array([[ 4., 5.],\n",
127 144 " [ 6., 7.]])"
128 145 ]
129 146 }
130 147 ],
131 148 "prompt_number": 22
132 149 },
133 150 {
134 151 "cell_type": "heading",
135 152 "level": 2,
153 "metadata": {},
136 154 "source": [
137 155 "Plotting"
138 156 ]
139 157 },
140 158 {
141 159 "cell_type": "markdown",
160 "metadata": {},
142 161 "source": [
143 162 "Plot output is automatically captured and displayed, and using the `-f` flag you may choose its format (currently, `png` and `svg` are supported)."
144 163 ]
145 164 },
146 165 {
147 166 "cell_type": "code",
167 "collapsed": false,
148 168 "input": [
149 "%%octave -f svg",
150 "",
151 "p = [12 -2.5 -8 -0.1 8];",
152 "x = 0:0.01:1;",
153 "",
154 "polyout(p, 'x')",
169 "%%octave -f svg\n",
170 "\n",
171 "p = [12 -2.5 -8 -0.1 8];\n",
172 "x = 0:0.01:1;\n",
173 "\n",
174 "polyout(p, 'x')\n",
155 175 "plot(x, polyval(p, x));"
156 176 ],
157 177 "language": "python",
178 "metadata": {},
158 179 "outputs": [
159 180 {
160 181 "output_type": "display_data",
161 182 "text": [
162 183 "12*x^4 - 2.5*x^3 - 8*x^2 - 0.1*x^1 + 8"
163 184 ]
164 185 },
165 186 {
166 187 "output_type": "display_data",
167 188 "svg": [
168 "<svg height=\"240px\" viewBox=\"0 0 192 115\" width=\"400px\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">",
169 "",
170 "<desc>Produced by GNUPLOT 4.4 patchlevel 0 </desc>",
171 "",
172 "<defs>",
173 "",
174 "\t<circle id=\"gpDot\" r=\"0.5\" stroke-width=\"0.5\"/>",
175 "\t<path d=\"M-1,0 h2 M0,-1 v2\" id=\"gpPt0\" stroke=\"currentColor\" stroke-width=\"0.333\"/>",
176 "\t<path d=\"M-1,-1 L1,1 M1,-1 L-1,1\" id=\"gpPt1\" stroke=\"currentColor\" stroke-width=\"0.333\"/>",
177 "\t<path d=\"M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1\" id=\"gpPt2\" stroke=\"currentColor\" stroke-width=\"0.333\"/>",
178 "\t<rect height=\"2\" id=\"gpPt3\" stroke=\"currentColor\" stroke-width=\"0.333\" width=\"2\" x=\"-1\" y=\"-1\"/>",
179 "\t<rect fill=\"currentColor\" height=\"2\" id=\"gpPt4\" stroke=\"currentColor\" stroke-width=\"0.333\" width=\"2\" x=\"-1\" y=\"-1\"/>",
180 "\t<circle cx=\"0\" cy=\"0\" id=\"gpPt5\" r=\"1\" stroke=\"currentColor\" stroke-width=\"0.333\"/>",
181 "\t<use fill=\"currentColor\" id=\"gpPt6\" stroke=\"none\" xlink:href=\"#gpPt5\"/>",
182 "\t<path d=\"M0,-1.33 L-1.33,0.67 L1.33,0.67 z\" id=\"gpPt7\" stroke=\"currentColor\" stroke-width=\"0.333\"/>",
183 "\t<use fill=\"currentColor\" id=\"gpPt8\" stroke=\"none\" xlink:href=\"#gpPt7\"/>",
184 "\t<use id=\"gpPt9\" stroke=\"currentColor\" transform=\"rotate(180)\" xlink:href=\"#gpPt7\"/>",
185 "\t<use fill=\"currentColor\" id=\"gpPt10\" stroke=\"none\" xlink:href=\"#gpPt9\"/>",
186 "\t<use id=\"gpPt11\" stroke=\"currentColor\" transform=\"rotate(45)\" xlink:href=\"#gpPt3\"/>",
187 "\t<use fill=\"currentColor\" id=\"gpPt12\" stroke=\"none\" xlink:href=\"#gpPt11\"/>",
188 "</defs>",
189 "<g style=\"fill:none; color:white; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter\">",
190 "</g>",
191 "<g style=\"fill:none; color:white; stroke:currentColor; stroke-width:0.50; stroke-linecap:butt; stroke-linejoin:miter\">",
192 "</g>",
193 "<g style=\"fill:none; color:black; stroke:currentColor; stroke-width:0.50; stroke-linecap:butt; stroke-linejoin:miter\">",
194 "\t<path d=\"M36.4,91.2 L44.8,91.2 M177.9,91.2 L169.5,91.2 \"/>",
195 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:end\" transform=\"translate(30.8,94.2)\">",
196 "\t\t<text><tspan>6</tspan>",
197 "\t\t</text>",
198 "\t</g>",
199 "\t<path d=\"M36.4,79.8 L44.8,79.8 M177.9,79.8 L169.5,79.8 \"/>",
200 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:end\" transform=\"translate(30.8,82.8)\">",
201 "\t\t<text><tspan>6.5</tspan>",
202 "\t\t</text>",
203 "\t</g>",
204 "\t<path d=\"M36.4,68.4 L44.8,68.4 M177.9,68.4 L169.5,68.4 \"/>",
205 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:end\" transform=\"translate(30.8,71.4)\">",
206 "\t\t<text><tspan>7</tspan>",
207 "\t\t</text>",
208 "\t</g>",
209 "\t<path d=\"M36.4,57.0 L44.8,57.0 M177.9,57.0 L169.5,57.0 \"/>",
210 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:end\" transform=\"translate(30.8,60.0)\">",
211 "\t\t<text><tspan>7.5</tspan>",
212 "\t\t</text>",
213 "\t</g>",
214 "\t<path d=\"M36.4,45.5 L44.8,45.5 M177.9,45.5 L169.5,45.5 \"/>",
215 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:end\" transform=\"translate(30.8,48.5)\">",
216 "\t\t<text><tspan>8</tspan>",
217 "\t\t</text>",
218 "\t</g>",
219 "\t<path d=\"M36.4,34.1 L44.8,34.1 M177.9,34.1 L169.5,34.1 \"/>",
220 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:end\" transform=\"translate(30.8,37.1)\">",
221 "\t\t<text><tspan>8.5</tspan>",
222 "\t\t</text>",
223 "\t</g>",
224 "\t<path d=\"M36.4,22.7 L44.8,22.7 M177.9,22.7 L169.5,22.7 \"/>",
225 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:end\" transform=\"translate(30.8,25.7)\">",
226 "\t\t<text><tspan>9</tspan>",
227 "\t\t</text>",
228 "\t</g>",
229 "\t<path d=\"M36.4,11.3 L44.8,11.3 M177.9,11.3 L169.5,11.3 \"/>",
230 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:end\" transform=\"translate(30.8,14.3)\">",
231 "\t\t<text><tspan>9.5</tspan>",
232 "\t\t</text>",
233 "\t</g>",
234 "\t<path d=\"M36.4,91.2 L36.4,82.8 M36.4,11.3 L36.4,19.7 \"/>",
235 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:middle\" transform=\"translate(36.4,106.2)\">",
236 "\t\t<text><tspan>0</tspan>",
237 "\t\t</text>",
238 "\t</g>",
239 "\t<path d=\"M64.7,91.2 L64.7,82.8 M64.7,11.3 L64.7,19.7 \"/>",
240 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:middle\" transform=\"translate(64.7,106.2)\">",
241 "\t\t<text><tspan>0.2</tspan>",
242 "\t\t</text>",
243 "\t</g>",
244 "\t<path d=\"M93.0,91.2 L93.0,82.8 M93.0,11.3 L93.0,19.7 \"/>",
245 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:middle\" transform=\"translate(93.0,106.2)\">",
246 "\t\t<text><tspan>0.4</tspan>",
247 "\t\t</text>",
248 "\t</g>",
249 "\t<path d=\"M121.3,91.2 L121.3,82.8 M121.3,11.3 L121.3,19.7 \"/>",
250 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:middle\" transform=\"translate(121.3,106.2)\">",
251 "\t\t<text><tspan>0.6</tspan>",
252 "\t\t</text>",
253 "\t</g>",
254 "\t<path d=\"M149.6,91.2 L149.6,82.8 M149.6,11.3 L149.6,19.7 \"/>",
255 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:middle\" transform=\"translate(149.6,106.2)\">",
256 "\t\t<text><tspan>0.8</tspan>",
257 "\t\t</text>",
258 "\t</g>",
259 "\t<path d=\"M177.9,91.2 L177.9,82.8 M177.9,11.3 L177.9,19.7 \"/>",
260 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:middle\" transform=\"translate(177.9,106.2)\">",
261 "\t\t<text><tspan>1</tspan>",
262 "\t\t</text>",
263 "\t</g>",
264 "\t<path d=\"M36.4,11.3 L36.4,91.2 L177.9,91.2 L177.9,11.3 L36.4,11.3 Z \"/>",
265 "</g>",
266 "\t<a xlink:title=\"Plot #1\">",
267 "<g style=\"fill:none; color:red; stroke:currentColor; stroke-width:0.50; stroke-linecap:butt; stroke-linejoin:miter\">",
268 "\t<path d=\"M36.4,45.5 L37.8,45.6 L39.2,45.7 L40.6,45.8 L42.1,45.9 L43.5,46.1 L44.9,46.3 L46.3,46.6 L47.7,46.9 L49.1,47.3 L50.6,47.6 L52.0,48.0 L53.4,48.5 L54.8,49.0 L56.2,49.5 L57.6,50.0 L59.0,50.6 L60.5,51.3 L61.9,51.9 L63.3,52.6 L64.7,53.3 L66.1,54.1 L67.5,54.9 L68.9,55.7 L70.4,56.5 L71.8,57.3 L73.2,58.2 L74.6,59.1 L76.0,60.1 L77.4,61.0 L78.9,62.0 L80.3,63.0 L81.7,64.0 L83.1,65.0 L84.5,66.0 L85.9,67.0 L87.3,68.1 L88.8,69.1 L90.2,70.2 L91.6,71.3 L93.0,72.3 L94.4,73.4 L95.8,74.4 L97.2,75.5 L98.7,76.5 L100.1,77.5 L101.5,78.5 L102.9,79.5 L104.3,80.5 L105.7,81.4 L107.2,82.4 L108.6,83.2 L110.0,84.1 L111.4,84.9 L112.8,85.7 L114.2,86.5 L115.6,87.2 L117.1,87.8 L118.5,88.4 L119.9,89.0 L121.3,89.5 L122.7,89.9 L124.1,90.3 L125.5,90.6 L127.0,90.8 L128.4,91.0 L129.8,91.0 L131.2,91.0 L132.6,90.9 L134.0,90.7 L135.5,90.4 L136.9,90.0 L138.3,89.5 L139.7,88.9 L141.1,88.2 L142.5,87.4 L143.9,86.4 L145.4,85.3 L146.8,84.1 L148.2,82.8 L149.6,81.3 L151.0,79.6 L152.4,77.8 L153.8,75.9 L155.3,73.8 L156.7,71.5 L158.1,69.0 L159.5,66.4 L160.9,63.6 L162.3,60.6 L163.8,57.4 L165.2,54.0 L166.6,50.4 L168.0,46.6 L169.4,42.6 L170.8,38.3 L172.2,33.9 L173.7,29.2 L175.1,24.2 L176.5,19.0 L177.9,13.6 \" stroke=\"rgb( 0, 0, 255)\"/>",
269 "</g>",
270 "\t</a>",
271 "<g style=\"fill:none; color:black; stroke:currentColor; stroke-width:0.50; stroke-linecap:butt; stroke-linejoin:miter\">",
272 "</g>",
189 "<svg height=\"240px\" viewBox=\"0 0 192 115\" width=\"400px\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
190 "\n",
191 "<desc>Produced by GNUPLOT 4.4 patchlevel 0 </desc>\n",
192 "\n",
193 "<defs>\n",
194 "\n",
195 "\t<circle id=\"gpDot\" r=\"0.5\" stroke-width=\"0.5\"/>\n",
196 "\t<path d=\"M-1,0 h2 M0,-1 v2\" id=\"gpPt0\" stroke=\"currentColor\" stroke-width=\"0.333\"/>\n",
197 "\t<path d=\"M-1,-1 L1,1 M1,-1 L-1,1\" id=\"gpPt1\" stroke=\"currentColor\" stroke-width=\"0.333\"/>\n",
198 "\t<path d=\"M-1,0 L1,0 M0,-1 L0,1 M-1,-1 L1,1 M-1,1 L1,-1\" id=\"gpPt2\" stroke=\"currentColor\" stroke-width=\"0.333\"/>\n",
199 "\t<rect height=\"2\" id=\"gpPt3\" stroke=\"currentColor\" stroke-width=\"0.333\" width=\"2\" x=\"-1\" y=\"-1\"/>\n",
200 "\t<rect fill=\"currentColor\" height=\"2\" id=\"gpPt4\" stroke=\"currentColor\" stroke-width=\"0.333\" width=\"2\" x=\"-1\" y=\"-1\"/>\n",
201 "\t<circle cx=\"0\" cy=\"0\" id=\"gpPt5\" r=\"1\" stroke=\"currentColor\" stroke-width=\"0.333\"/>\n",
202 "\t<use fill=\"currentColor\" id=\"gpPt6\" stroke=\"none\" xlink:href=\"#gpPt5\"/>\n",
203 "\t<path d=\"M0,-1.33 L-1.33,0.67 L1.33,0.67 z\" id=\"gpPt7\" stroke=\"currentColor\" stroke-width=\"0.333\"/>\n",
204 "\t<use fill=\"currentColor\" id=\"gpPt8\" stroke=\"none\" xlink:href=\"#gpPt7\"/>\n",
205 "\t<use id=\"gpPt9\" stroke=\"currentColor\" transform=\"rotate(180)\" xlink:href=\"#gpPt7\"/>\n",
206 "\t<use fill=\"currentColor\" id=\"gpPt10\" stroke=\"none\" xlink:href=\"#gpPt9\"/>\n",
207 "\t<use id=\"gpPt11\" stroke=\"currentColor\" transform=\"rotate(45)\" xlink:href=\"#gpPt3\"/>\n",
208 "\t<use fill=\"currentColor\" id=\"gpPt12\" stroke=\"none\" xlink:href=\"#gpPt11\"/>\n",
209 "</defs>\n",
210 "<g style=\"fill:none; color:white; stroke:currentColor; stroke-width:1.00; stroke-linecap:butt; stroke-linejoin:miter\">\n",
211 "</g>\n",
212 "<g style=\"fill:none; color:white; stroke:currentColor; stroke-width:0.50; stroke-linecap:butt; stroke-linejoin:miter\">\n",
213 "</g>\n",
214 "<g style=\"fill:none; color:black; stroke:currentColor; stroke-width:0.50; stroke-linecap:butt; stroke-linejoin:miter\">\n",
215 "\t<path d=\"M36.4,91.2 L44.8,91.2 M177.9,91.2 L169.5,91.2 \"/>\n",
216 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:end\" transform=\"translate(30.8,94.2)\">\n",
217 "\t\t<text><tspan>6</tspan>\n",
218 "\t\t</text>\n",
219 "\t</g>\n",
220 "\t<path d=\"M36.4,79.8 L44.8,79.8 M177.9,79.8 L169.5,79.8 \"/>\n",
221 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:end\" transform=\"translate(30.8,82.8)\">\n",
222 "\t\t<text><tspan>6.5</tspan>\n",
223 "\t\t</text>\n",
224 "\t</g>\n",
225 "\t<path d=\"M36.4,68.4 L44.8,68.4 M177.9,68.4 L169.5,68.4 \"/>\n",
226 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:end\" transform=\"translate(30.8,71.4)\">\n",
227 "\t\t<text><tspan>7</tspan>\n",
228 "\t\t</text>\n",
229 "\t</g>\n",
230 "\t<path d=\"M36.4,57.0 L44.8,57.0 M177.9,57.0 L169.5,57.0 \"/>\n",
231 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:end\" transform=\"translate(30.8,60.0)\">\n",
232 "\t\t<text><tspan>7.5</tspan>\n",
233 "\t\t</text>\n",
234 "\t</g>\n",
235 "\t<path d=\"M36.4,45.5 L44.8,45.5 M177.9,45.5 L169.5,45.5 \"/>\n",
236 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:end\" transform=\"translate(30.8,48.5)\">\n",
237 "\t\t<text><tspan>8</tspan>\n",
238 "\t\t</text>\n",
239 "\t</g>\n",
240 "\t<path d=\"M36.4,34.1 L44.8,34.1 M177.9,34.1 L169.5,34.1 \"/>\n",
241 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:end\" transform=\"translate(30.8,37.1)\">\n",
242 "\t\t<text><tspan>8.5</tspan>\n",
243 "\t\t</text>\n",
244 "\t</g>\n",
245 "\t<path d=\"M36.4,22.7 L44.8,22.7 M177.9,22.7 L169.5,22.7 \"/>\n",
246 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:end\" transform=\"translate(30.8,25.7)\">\n",
247 "\t\t<text><tspan>9</tspan>\n",
248 "\t\t</text>\n",
249 "\t</g>\n",
250 "\t<path d=\"M36.4,11.3 L44.8,11.3 M177.9,11.3 L169.5,11.3 \"/>\n",
251 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:end\" transform=\"translate(30.8,14.3)\">\n",
252 "\t\t<text><tspan>9.5</tspan>\n",
253 "\t\t</text>\n",
254 "\t</g>\n",
255 "\t<path d=\"M36.4,91.2 L36.4,82.8 M36.4,11.3 L36.4,19.7 \"/>\n",
256 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:middle\" transform=\"translate(36.4,106.2)\">\n",
257 "\t\t<text><tspan>0</tspan>\n",
258 "\t\t</text>\n",
259 "\t</g>\n",
260 "\t<path d=\"M64.7,91.2 L64.7,82.8 M64.7,11.3 L64.7,19.7 \"/>\n",
261 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:middle\" transform=\"translate(64.7,106.2)\">\n",
262 "\t\t<text><tspan>0.2</tspan>\n",
263 "\t\t</text>\n",
264 "\t</g>\n",
265 "\t<path d=\"M93.0,91.2 L93.0,82.8 M93.0,11.3 L93.0,19.7 \"/>\n",
266 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:middle\" transform=\"translate(93.0,106.2)\">\n",
267 "\t\t<text><tspan>0.4</tspan>\n",
268 "\t\t</text>\n",
269 "\t</g>\n",
270 "\t<path d=\"M121.3,91.2 L121.3,82.8 M121.3,11.3 L121.3,19.7 \"/>\n",
271 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:middle\" transform=\"translate(121.3,106.2)\">\n",
272 "\t\t<text><tspan>0.6</tspan>\n",
273 "\t\t</text>\n",
274 "\t</g>\n",
275 "\t<path d=\"M149.6,91.2 L149.6,82.8 M149.6,11.3 L149.6,19.7 \"/>\n",
276 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:middle\" transform=\"translate(149.6,106.2)\">\n",
277 "\t\t<text><tspan>0.8</tspan>\n",
278 "\t\t</text>\n",
279 "\t</g>\n",
280 "\t<path d=\"M177.9,91.2 L177.9,82.8 M177.9,11.3 L177.9,19.7 \"/>\n",
281 "\t<g style=\"stroke:none; fill:rgb(0,0,0); font-family:{}; font-size:10.00pt; text-anchor:middle\" transform=\"translate(177.9,106.2)\">\n",
282 "\t\t<text><tspan>1</tspan>\n",
283 "\t\t</text>\n",
284 "\t</g>\n",
285 "\t<path d=\"M36.4,11.3 L36.4,91.2 L177.9,91.2 L177.9,11.3 L36.4,11.3 Z \"/>\n",
286 "</g>\n",
287 "\t<a xlink:title=\"Plot #1\">\n",
288 "<g style=\"fill:none; color:red; stroke:currentColor; stroke-width:0.50; stroke-linecap:butt; stroke-linejoin:miter\">\n",
289 "\t<path d=\"M36.4,45.5 L37.8,45.6 L39.2,45.7 L40.6,45.8 L42.1,45.9 L43.5,46.1 L44.9,46.3 L46.3,46.6 L47.7,46.9 L49.1,47.3 L50.6,47.6 L52.0,48.0 L53.4,48.5 L54.8,49.0 L56.2,49.5 L57.6,50.0 L59.0,50.6 L60.5,51.3 L61.9,51.9 L63.3,52.6 L64.7,53.3 L66.1,54.1 L67.5,54.9 L68.9,55.7 L70.4,56.5 L71.8,57.3 L73.2,58.2 L74.6,59.1 L76.0,60.1 L77.4,61.0 L78.9,62.0 L80.3,63.0 L81.7,64.0 L83.1,65.0 L84.5,66.0 L85.9,67.0 L87.3,68.1 L88.8,69.1 L90.2,70.2 L91.6,71.3 L93.0,72.3 L94.4,73.4 L95.8,74.4 L97.2,75.5 L98.7,76.5 L100.1,77.5 L101.5,78.5 L102.9,79.5 L104.3,80.5 L105.7,81.4 L107.2,82.4 L108.6,83.2 L110.0,84.1 L111.4,84.9 L112.8,85.7 L114.2,86.5 L115.6,87.2 L117.1,87.8 L118.5,88.4 L119.9,89.0 L121.3,89.5 L122.7,89.9 L124.1,90.3 L125.5,90.6 L127.0,90.8 L128.4,91.0 L129.8,91.0 L131.2,91.0 L132.6,90.9 L134.0,90.7 L135.5,90.4 L136.9,90.0 L138.3,89.5 L139.7,88.9 L141.1,88.2 L142.5,87.4 L143.9,86.4 L145.4,85.3 L146.8,84.1 L148.2,82.8 L149.6,81.3 L151.0,79.6 L152.4,77.8 L153.8,75.9 L155.3,73.8 L156.7,71.5 L158.1,69.0 L159.5,66.4 L160.9,63.6 L162.3,60.6 L163.8,57.4 L165.2,54.0 L166.6,50.4 L168.0,46.6 L169.4,42.6 L170.8,38.3 L172.2,33.9 L173.7,29.2 L175.1,24.2 L176.5,19.0 L177.9,13.6 \" stroke=\"rgb( 0, 0, 255)\"/>\n",
290 "</g>\n",
291 "\t</a>\n",
292 "<g style=\"fill:none; color:black; stroke:currentColor; stroke-width:0.50; stroke-linecap:butt; stroke-linejoin:miter\">\n",
293 "</g>\n",
273 294 "</svg>"
274 295 ]
275 296 }
276 297 ],
277 298 "prompt_number": 23
278 299 },
279 300 {
280 301 "cell_type": "markdown",
302 "metadata": {},
281 303 "source": [
282 304 "The plot size is adjusted using the `-s` flag:"
283 305 ]
284 306 },
285 307 {
286 308 "cell_type": "code",
309 "collapsed": false,
287 310 "input": [
288 "%%octave -s 500,500",
289 "",
290 "# butterworth filter, order 2, cutoff pi/2 radians",
291 "b = [0.292893218813452 0.585786437626905 0.292893218813452];",
292 "a = [1 0 0.171572875253810];",
311 "%%octave -s 500,500\n",
312 "\n",
313 "# butterworth filter, order 2, cutoff pi/2 radians\n",
314 "b = [0.292893218813452 0.585786437626905 0.292893218813452];\n",
315 "a = [1 0 0.171572875253810];\n",
293 316 "freqz(b, a, 32);"
294 317 ],
295 318 "language": "python",
319 "metadata": {},
296 320 "outputs": [
297 321 {
298 322 "output_type": "display_data",
299 323 "png": "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\n"
300 324 }
301 325 ],
302 326 "prompt_number": 24
303 327 },
304 328 {
305 329 "cell_type": "code",
330 "collapsed": false,
306 331 "input": [
307 "%%octave -s 600,200 -f png",
308 "",
309 "subplot(121);",
310 "[x, y] = meshgrid(0:0.1:3);",
311 "r = sin(x - 0.5).^2 + cos(y - 0.5).^2;",
312 "surf(x, y, r);",
313 "",
314 "subplot(122);",
332 "%%octave -s 600,200 -f png\n",
333 "\n",
334 "subplot(121);\n",
335 "[x, y] = meshgrid(0:0.1:3);\n",
336 "r = sin(x - 0.5).^2 + cos(y - 0.5).^2;\n",
337 "surf(x, y, r);\n",
338 "\n",
339 "subplot(122);\n",
315 340 "sombrero()"
316 341 ],
317 342 "language": "python",
343 "metadata": {},
318 344 "outputs": [
319 345 {
320 346 "output_type": "display_data",
321 347 "png": "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\nUzfATHmCZdmtW7f+/fffe/fulUgk9+/fd3Z27tev39y5c03dNDNmTMnu3bt//fXXc+fOPXz4MC8v\nr2LFitWrV583b55UKjV108z8O2aL0My/o9PpBg4c2LJly8DAwJ9++qlNmzYJCQnx8fFNmjSJi4vT\n6XReXl4RERHmUbCZ/xR6vf7LL78MCAho3LjxypUrK1eurNFobt++XadOnbi4OA8Pj7Zt24aGhur1\nelO31My/YBZCM2+HZVm1Wt20aVMvLy+VSlWhQoX//e9/cXFxR48e7dmzJ38YwzAHDhy4cOHCs2fP\nvL29zXJo5qMnNja2U6dOFStWDA0Nff78+axZs+Li4jQazfTp0xmG4Q9bsmRJUlKSTCZr0aJF//79\ndTqdCdts5v0Q88a8Zgqi1Wq1Wu2mTZtcXV07d+7cvHnz7t27v+vgwMBAjUZTsEStVs+ZM8fX1zc6\nOto8KWTmo0Gn02m12nXr1qWmpn7xxRe+vr6DBw9+18Fv9gutVjtr1qy7d+9+//33crm8xJtrppCY\nhdAM9Ho9p38nT55s27Ztr1695HJ5wbHtu3izw3PMnz9/3bp1/v7+U6dO9fPzK4EmmzFT4rAsy/WL\nX3/9tWLFioMHD5bL5R8yvHtXv9i8efOmTZsyMjLCwsIGDhxYAk02U0TMQvjfZeXKlbzbS/fu3UNC\nQmQyWaFqeFeH5+tfuXJl3bp1FQqFeRRsprxw7Nix7du3c24vLVu2HDZsWGGf3vf3iwsXLkyZMkWv\n1yuVSoVCUez2mjECZiH8b6HT6ZYuXZqYmHj//v0qVaoMGjToPTM8/8r7OzyHVqsdNWqUlZXV4sWL\nzXJopmyi1+vXr19/6tSp27dve3p6duzYceTIkR8yKfJWPqRf6PX6cePGnT59ev78+WY5NDnm8ImP\nH5ZlY2Nj169fn56e7uvr6+npOXv27FJbwJPL5Tdu3NDpdGq1esiQIZMmTZowYULp/LQZM+8nNjZ2\n69at165dq1KlSq1atWbNmhUQEFA6Py2VSvft28eyrEqlcnFx6dat25IlS4osvWaKidki/GjR6XSx\nsbG820vdunWNvizxISPfgly4cGH58uUnTpwwhx6aMRWc28vWrVuTk5O/+OKLypUr9+/f37gKVNh+\nwbLs9OnTDx069Mknn6xatcosh6WP2SL8qHjN7SUgIODatWtlp1/5+flt2LBBr9ePHj26fv36AwYM\n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\n"
322 348 }
323 349 ],
324 350 "prompt_number": 25
325 351 },
326 352 {
327 353 "cell_type": "heading",
328 354 "level": 2,
355 "metadata": {},
329 356 "source": [
330 357 "Future work"
331 358 ]
332 359 },
333 360 {
334 361 "cell_type": "markdown",
362 "metadata": {},
335 363 "source": [
336 364 "After the next release of `oct2py`, we'll add the ability to interrupt/kill the current Octave session without restarting the Python kernel."
337 365 ]
338 366 }
339 ]
367 ],
368 "metadata": {}
340 369 }
341 370 ]
342 371 } No newline at end of file
@@ -1,874 +1,912 b''
1 1 {
2 2 "metadata": {
3 3 "name": "rmagic_extension"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
10 11 "cell_type": "heading",
11 12 "level": 1,
13 "metadata": {},
12 14 "source": [
13 15 "Rmagic Functions Extension"
14 16 ]
15 17 },
16 18 {
17 19 "cell_type": "heading",
18 20 "level": 2,
21 "metadata": {},
19 22 "source": [
20 23 "Line magics"
21 24 ]
22 25 },
23 26 {
24 27 "cell_type": "markdown",
28 "metadata": {},
25 29 "source": [
26 30 "IPython has an `rmagic` extension that contains a some magic functions for working with R via rpy2. This extension can be loaded using the `%load_ext` magic as follows:"
27 31 ]
28 32 },
29 33 {
30 34 "cell_type": "code",
31 35 "collapsed": true,
32 36 "input": [
33 "%load_ext rmagic",
37 "%load_ext rmagic\n",
34 38 " "
35 39 ],
36 40 "language": "python",
41 "metadata": {},
37 42 "outputs": [],
38 43 "prompt_number": 1
39 44 },
40 45 {
41 46 "cell_type": "markdown",
47 "metadata": {},
42 48 "source": [
43 "A typical use case one imagines is having some numpy arrays, wanting to compute some statistics of interest on these",
49 "A typical use case one imagines is having some numpy arrays, wanting to compute some statistics of interest on these\n",
44 50 " arrays and return the result back to python. Let's suppose we just want to fit a simple linear model to a scatterplot."
45 51 ]
46 52 },
47 53 {
48 54 "cell_type": "code",
49 55 "collapsed": false,
50 56 "input": [
51 "import numpy as np",
52 "import pylab",
53 "X = np.array([0,1,2,3,4])",
54 "Y = np.array([3,5,4,6,7])",
55 "pylab.scatter(X, Y)",
56 ""
57 "import numpy as np\n",
58 "import pylab\n",
59 "X = np.array([0,1,2,3,4])\n",
60 "Y = np.array([3,5,4,6,7])\n",
61 "pylab.scatter(X, Y)\n"
57 62 ],
58 63 "language": "python",
64 "metadata": {},
59 65 "outputs": [
60 66 {
61 67 "output_type": "pyout",
62 68 "prompt_number": 2,
63 69 "text": [
64 70 "<matplotlib.collections.PathCollection at 0x10f32f610>"
65 71 ]
66 72 }
67 73 ],
68 74 "prompt_number": 2
69 75 },
70 76 {
71 77 "cell_type": "markdown",
78 "metadata": {},
72 79 "source": [
73 80 "We can accomplish this by first pushing variables to R, fitting a model and returning the results. The line magic %Rpush copies its arguments to variables of the same name in rpy2. The %R line magic evaluates the string in rpy2 and returns the results. In this case, the coefficients of a linear model."
74 81 ]
75 82 },
76 83 {
77 84 "cell_type": "code",
78 85 "collapsed": false,
79 86 "input": [
80 "%Rpush X Y",
87 "%Rpush X Y\n",
81 88 "%R lm(Y~X)$coef"
82 89 ],
83 90 "language": "python",
91 "metadata": {},
84 92 "outputs": [
85 93 {
86 94 "output_type": "pyout",
87 95 "prompt_number": 3,
88 96 "text": [
89 97 "array([ 3.2, 0.9])"
90 98 ]
91 99 }
92 100 ],
93 101 "prompt_number": 3
94 102 },
95 103 {
96 104 "cell_type": "markdown",
105 "metadata": {},
97 106 "source": [
98 107 "We can check that this is correct fairly easily:"
99 108 ]
100 109 },
101 110 {
102 111 "cell_type": "code",
103 112 "collapsed": false,
104 113 "input": [
105 "Xr = X - X.mean(); Yr = Y - Y.mean()",
106 "slope = (Xr*Yr).sum() / (Xr**2).sum()",
107 "intercept = Y.mean() - X.mean() * slope",
114 "Xr = X - X.mean(); Yr = Y - Y.mean()\n",
115 "slope = (Xr*Yr).sum() / (Xr**2).sum()\n",
116 "intercept = Y.mean() - X.mean() * slope\n",
108 117 "(intercept, slope)"
109 118 ],
110 119 "language": "python",
120 "metadata": {},
111 121 "outputs": [
112 122 {
113 123 "output_type": "pyout",
114 124 "prompt_number": 4,
115 125 "text": [
116 126 "(3.2000000000000002, 0.90000000000000002)"
117 127 ]
118 128 }
119 129 ],
120 130 "prompt_number": 4
121 131 },
122 132 {
123 133 "cell_type": "markdown",
134 "metadata": {},
124 135 "source": [
125 136 "It is also possible to return more than one value with %R."
126 137 ]
127 138 },
128 139 {
129 140 "cell_type": "code",
130 141 "collapsed": false,
131 142 "input": [
132 "%R resid(lm(Y~X)); coef(lm(X~Y))",
133 ""
143 "%R resid(lm(Y~X)); coef(lm(X~Y))\n"
134 144 ],
135 145 "language": "python",
146 "metadata": {},
136 147 "outputs": [
137 148 {
138 149 "output_type": "pyout",
139 150 "prompt_number": 5,
140 151 "text": [
141 152 "array([-2.5, 0.9])"
142 153 ]
143 154 }
144 155 ],
145 156 "prompt_number": 5
146 157 },
147 158 {
148 159 "cell_type": "markdown",
160 "metadata": {},
149 161 "source": [
150 "One can also easily capture the results of %R into python objects. Like R, the return value of this multiline expression (multiline in the sense that it is separated by ';') is the final value, which is ",
162 "One can also easily capture the results of %R into python objects. Like R, the return value of this multiline expression (multiline in the sense that it is separated by ';') is the final value, which is \n",
151 163 "the *coef(lm(X~Y))*. To pull other variables from R, there is one more magic."
152 164 ]
153 165 },
154 166 {
155 167 "cell_type": "markdown",
168 "metadata": {},
156 169 "source": [
157 "There are two more line magics, %Rpull and %Rget. Both are useful after some R code has been executed and there are variables",
158 "in the rpy2 namespace that one would like to retrieve. The main difference is that one",
159 " returns the value (%Rget), while the other pulls it to self.shell.user_ns (%Rpull). Imagine we've stored the results",
160 "of some calculation in the variable \"a\" in rpy2's namespace. By using the %R magic, we can obtain these results and",
170 "There are two more line magics, %Rpull and %Rget. Both are useful after some R code has been executed and there are variables\n",
171 "in the rpy2 namespace that one would like to retrieve. The main difference is that one\n",
172 " returns the value (%Rget), while the other pulls it to self.shell.user_ns (%Rpull). Imagine we've stored the results\n",
173 "of some calculation in the variable \"a\" in rpy2's namespace. By using the %R magic, we can obtain these results and\n",
161 174 "store them in b. We can also pull them directly to user_ns with %Rpull. They are both views on the same data."
162 175 ]
163 176 },
164 177 {
165 178 "cell_type": "code",
166 179 "collapsed": false,
167 180 "input": [
168 "b = %R a=resid(lm(Y~X))",
169 "%Rpull a",
170 "print a",
171 "assert id(b.data) == id(a.data)",
181 "b = %R a=resid(lm(Y~X))\n",
182 "%Rpull a\n",
183 "print a\n",
184 "assert id(b.data) == id(a.data)\n",
172 185 "%R -o a"
173 186 ],
174 187 "language": "python",
188 "metadata": {},
175 189 "outputs": [
176 190 {
177 191 "output_type": "stream",
178 192 "stream": "stdout",
179 193 "text": [
180 "[-0.2 0.9 -1. 0.1 0.2]",
181 ""
194 "[-0.2 0.9 -1. 0.1 0.2]\n"
182 195 ]
183 196 }
184 197 ],
185 198 "prompt_number": 6
186 199 },
187 200 {
188 201 "cell_type": "markdown",
202 "metadata": {},
189 203 "source": [
190 "%Rpull is equivalent to calling %R with just -o",
191 ""
204 "%Rpull is equivalent to calling %R with just -o\n"
192 205 ]
193 206 },
194 207 {
195 208 "cell_type": "code",
196 209 "collapsed": false,
197 210 "input": [
198 "%R d=resid(lm(Y~X)); e=coef(lm(Y~X))",
199 "%R -o d -o e",
200 "%Rpull e",
201 "print d",
202 "print e",
203 "import numpy as np",
211 "%R d=resid(lm(Y~X)); e=coef(lm(Y~X))\n",
212 "%R -o d -o e\n",
213 "%Rpull e\n",
214 "print d\n",
215 "print e\n",
216 "import numpy as np\n",
204 217 "np.testing.assert_almost_equal(d, a)"
205 218 ],
206 219 "language": "python",
220 "metadata": {},
207 221 "outputs": [
208 222 {
209 223 "output_type": "stream",
210 224 "stream": "stdout",
211 225 "text": [
212 "[-0.2 0.9 -1. 0.1 0.2]",
213 "[ 3.2 0.9]",
214 ""
226 "[-0.2 0.9 -1. 0.1 0.2]\n",
227 "[ 3.2 0.9]\n"
215 228 ]
216 229 }
217 230 ],
218 231 "prompt_number": 7
219 232 },
220 233 {
221 234 "cell_type": "markdown",
235 "metadata": {},
222 236 "source": [
223 237 "On the other hand %Rpush is equivalent to calling %R with just -i and no trailing code."
224 238 ]
225 239 },
226 240 {
227 241 "cell_type": "code",
228 242 "collapsed": false,
229 243 "input": [
230 "A = np.arange(20)",
231 "%R -i A",
232 "%R mean(A)",
233 ""
244 "A = np.arange(20)\n",
245 "%R -i A\n",
246 "%R mean(A)\n"
234 247 ],
235 248 "language": "python",
249 "metadata": {},
236 250 "outputs": [
237 251 {
238 252 "output_type": "pyout",
239 253 "prompt_number": 8,
240 254 "text": [
241 255 "array([ 9.5])"
242 256 ]
243 257 }
244 258 ],
245 259 "prompt_number": 8
246 260 },
247 261 {
248 262 "cell_type": "markdown",
263 "metadata": {},
249 264 "source": [
250 265 "The magic %Rget retrieves one variable from R."
251 266 ]
252 267 },
253 268 {
254 269 "cell_type": "code",
255 270 "collapsed": false,
256 271 "input": [
257 272 "%Rget A"
258 273 ],
259 274 "language": "python",
275 "metadata": {},
260 276 "outputs": [
261 277 {
262 278 "output_type": "pyout",
263 279 "prompt_number": 9,
264 280 "text": [
265 "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,",
281 "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n",
266 282 " 17, 18, 19], dtype=int32)"
267 283 ]
268 284 }
269 285 ],
270 286 "prompt_number": 9
271 287 },
272 288 {
273 289 "cell_type": "heading",
274 290 "level": 2,
291 "metadata": {},
275 292 "source": [
276 293 "Plotting and capturing output"
277 294 ]
278 295 },
279 296 {
280 297 "cell_type": "markdown",
298 "metadata": {},
281 299 "source": [
282 300 "R's console (i.e. its stdout() connection) is captured by ipython, as are any plots which are published as PNG files like the notebook with arguments --pylab inline. As a call to %R may produce a return value (see above) we must ask what happens to a magic like the one below. The R code specifies that something is published to the notebook. If anything is published to the notebook, that call to %R returns None."
283 301 ]
284 302 },
285 303 {
286 304 "cell_type": "code",
287 305 "collapsed": false,
288 306 "input": [
289 "v1 = %R plot(X,Y); print(summary(lm(Y~X))); vv=mean(X)*mean(Y)",
290 "print 'v1 is:', v1",
291 "v2 = %R mean(X)*mean(Y)",
307 "v1 = %R plot(X,Y); print(summary(lm(Y~X))); vv=mean(X)*mean(Y)\n",
308 "print 'v1 is:', v1\n",
309 "v2 = %R mean(X)*mean(Y)\n",
292 310 "print 'v2 is:', v2"
293 311 ],
294 312 "language": "python",
313 "metadata": {},
295 314 "outputs": [
296 315 {
297 316 "output_type": "display_data",
298 317 "text": [
299 "",
300 "Call:",
301 "lm(formula = Y ~ X)",
302 "",
303 "Residuals:",
304 " 1 2 3 4 5 ",
305 "-0.2 0.9 -1.0 0.1 0.2 ",
306 "",
307 "Coefficients:",
308 " Estimate Std. Error t value Pr(>|t|) ",
309 "(Intercept) 3.2000 0.6164 5.191 0.0139 *",
310 "X 0.9000 0.2517 3.576 0.0374 *",
311 "---",
312 "Signif. codes: 0 \u2018***\u2019 0.001 \u2018**\u2019 0.01 \u2018*\u2019 0.05 \u2018.\u2019 0.1 \u2018 \u2019 1 ",
313 "",
314 "Residual standard error: 0.7958 on 3 degrees of freedom",
315 "Multiple R-squared: 0.81,\tAdjusted R-squared: 0.7467 ",
316 "F-statistic: 12.79 on 1 and 3 DF, p-value: 0.03739 ",
317 "",
318 ""
318 "\n",
319 "Call:\n",
320 "lm(formula = Y ~ X)\n",
321 "\n",
322 "Residuals:\n",
323 " 1 2 3 4 5 \n",
324 "-0.2 0.9 -1.0 0.1 0.2 \n",
325 "\n",
326 "Coefficients:\n",
327 " Estimate Std. Error t value Pr(>|t|) \n",
328 "(Intercept) 3.2000 0.6164 5.191 0.0139 *\n",
329 "X 0.9000 0.2517 3.576 0.0374 *\n",
330 "---\n",
331 "Signif. codes: 0 \u2018***\u2019 0.001 \u2018**\u2019 0.01 \u2018*\u2019 0.05 \u2018.\u2019 0.1 \u2018 \u2019 1 \n",
332 "\n",
333 "Residual standard error: 0.7958 on 3 degrees of freedom\n",
334 "Multiple R-squared: 0.81,\tAdjusted R-squared: 0.7467 \n",
335 "F-statistic: 12.79 on 1 and 3 DF, p-value: 0.03739 \n",
336 "\n"
319 337 ]
320 338 },
321 339 {
322 340 "output_type": "display_data",
323 341 "png": "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\nUpK06OAUzDPgiIjOnTvHggULYtWqVTFjxoz41re+FevWrYshQ4bEQw899B9/vmvXrtG1a9f9nnv5\n5Zdj/fr1h3oyAEkGDBgQEyZMiEceeSSaNGkS8+bNi5tvvvmgnrhlKqgA/9spp5wSU6dOjalTp8aO\nHTti06ZN2ZMAKDBlZWWxYcOGOOOMM6Jr167RvHnzeO+996JFixbZ02qlIAI8YcKE6Nix437PNWvW\nLJo1a1bHiwD4NBg5cmSMHDkye8Z/pSACPHDgwOwJAFCnCuZNWABQnwgwACQQYABIIMAAkECAASCB\nAANAAgEGgAQCDAAJBBgAEggwACQQYABIIMAAkECAASCBAANAAgEGgAQCDAAJBBgAEggwACQQYABI\nIMAAkECAASCBAANAAgEGgAQCDAAJBBgAEggwACQQYABIIMAAkECAASCBAANAAgEGgAQCDAAJBBgA\nEggwACQQYABIIMAAkECAASCBAANAAgEGgAQCDAAJBBgAEggwACQQYABIIMAAkECAASCBAANAAgEG\ngAQCDAAJBBgAEggwACQQYABIIMAAkECAASCBAANAAgEGgAQCDAAJBBgAEggwACQQYABIIMAAkECA\nASCBAANAAgEGgAQCDAAJBBgAEggwACQQYABIIMAAkECAASCBAANAAgEGgAQCDAAJGmUPOJCdO3dG\nw4YNo6SkJHsKwEGprq6OGTNmxC9/+cs44ogj4rrrroszzzwzexYFpiCeAa9bty4GDx4cy5Ytiw0b\nNsTQoUOjXbt2cdRRR8WQIUNi9+7d2RMBam3w4MGxYMGCmDx5cowZMya+//3vx4svvpg9iwJTEAG+\n9dZb4/jjj4/Pf/7zcd9990VVVVWsXLky3nzzzdi+fXtMmjSpVteprq6Oqqqq/X5VV1dHTU3NYf6X\nAPXd66+/Hu+++248+eST0alTp+jevXvMmDEj7rvvvuxpFJiCuAX92muvxapVq+KII46IZ555JubN\nmxelpaURETFp0qQYMWJEra4zc+bMmDNnzn7PrV69Ok488cRDNRlgvyorK6N3794fO9ahQ4eorq5O\nWkShKogAd+3aNWbNmhXXXHNN9OzZM+bPnx+jR4+OiIgXXnghunTpUqvrDB06NIYOHbrfc2PHjo31\n69cfss0A+9O1a9e49957Y9OmTXHsscdGRMSiRYviww8/TF5GoSmIAE+bNi2+/vWvx8MPPxydO3eO\nG2+8MR555JH4zGc+E9u2bYvXXnsteyJArZxwwgkxdOjQaN26dcyePTu2bt0azz77bDz55JPZ0ygw\nBRHgk08+Od56661YsGBBrF69Oo4//vg4+uijo0uXLtG3b99o1KggZgLUSv/+/WP58uWxaNGiaNKk\nSZSXl+97Ngz/VjBla9CgQVx00UVx0UUXZU8B+J917949unfvnj2DAlYQ74IGgPpGgAEggQADQAIB\nBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBA\ngAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAk\nEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwA\nCQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQAD\nQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASPCJ\nAN90002xffv2jC3UY5WVlfHyyy/HwoUL46OPPsqeA3DYfSLA69ati9NOOy0WLVqUsWefDRs2RFVV\nVeoG6sbatWvj0ksvjddffz0qKiqiZcuWsX79+uxZAIfVJwL8+OOPxx133BFlZWUxYcKE2L1792Ef\nMXjw4Fi1alVERKxevTr69u0bHTt2jHbt2sWoUaNiz549h30DOT766KM47bTT4rvf/W5873vfiylT\npsTMmTNjwoQJsXfv3ux5AIdNo/0dHDhwYHz1q1+NG2+8Mc4666y4/PLL95079dRT49JLLz2kI1au\nXBk7duyIiIgpU6bEKaecErNnz46NGzfGuHHjYsqUKXHrrbf+x+s899xzsWDBgv2eW7RoURx77LGH\ndDf/uz//+c9x1VVXRe/evfcdGzRoUDz33HPx/vvvR8eOHRPXARw++w1wRESDBg2ipKQk1q9fHytX\nrtx3vHnz5od10EsvvRRr1qyJFi1axDHHHBOTJ0+OcePG1SrAPXr0iJNOOmm/5yorK/dFnsLRuHHj\nqKys/Nix6urqWLt2bTRp0iRpFcDht98Al5eXx/XXXx9f/vKXY8WKFdGmTZvDPmTJkiXRvn37OOec\nc2LTpk3RokWLiIhYsWJFnH766bW6Rtu2baNt27b7Pde6dWuvKRegLl26xMknnxy33357TJgwIaqq\nquIrX/lK9OzZM1q3bp09D+Cw+USAr7jiiqioqIj7778/vvnNb9bJiKuuuiqef/75mDRpUmzdujUa\nN24c5eXlcdttt8W0adOioqKiTnaQY9KkSXH99dfHxRdfHE2bNo0hQ4bE8OHDs2cBHFafCHCrVq3i\nj3/84wGfSR4O48ePj/Hjx0dExN///vfYtm1bRET06dMnbrzxxsN+25tcDRs2jGnTpmXPAKhTnwjw\ngw8+mLFjnw4dOkSHDh0iIuKcc85J3QIAh4vfhAUACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIB\nBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBA\ngAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAk\nEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwA\nCQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQAD\nQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEBRvgnTt3xrZt27JnQFFZtmxZ\nDBw4MPr06RNlZWWxadOm7ElQbxVsgOfOnRvjxo3LngFF469//WvccMMNMX78+Hj22Wdj6NChcfnl\nl8fmzZuzp0G91Ch7QEREly5dYuPGjR87tnv37qiqqoq5c+dG//79Y+bMmf/xOlu2bInKysr9ntu6\ndWvs2bPnkOyFT6O77ror7rjjjjjzzDMjIuJrX/tavPPOO/HYY4/F6NGjk9dB/VMQAZ45c2YMGTIk\nBg0aFFdffXVERMybNy+WLl0aP/jBD6JZs2a1uk5FRUXMnz9/v+d+85vfRNu2bQ/ZZvi0+fDDD6Nd\nu3YfO1ZaWhqrV69OWgT1W0EE+Pzzz49ly5bFqFGjYty4cfHAAw9E69ato3nz5nHCCSfU+jplZWVR\nVla233Njx46N9evXH6rJ8KnTo0eP+OEPfxgzZsyIiH/dZfrOd74Tc+fOTV4G9VNBBDgiomXLljFr\n1qx44okn4oILLogePXpEw4YNs2dB0Rg2bFjMnz8/evfuHf37948FCxbExIkTo1evXtnToF4qmAD/\n2+WXXx7nnXdejBw5Mrp37549B4pGw4YN47nnnouKiorYvHlzTJw4Mc4444zsWVBvFVyAI/71utTz\nzz+fPQOK0oUXXpg9AYgC/hgSABQzAQaABAIMAAkEGAASCDAAJBBgAEggwACQQIABIIEAA0ACAQaA\nBAIMAAkEGAASCDAAJBBgAEggwACQQIABIIEAA0ACAQaABAIMAAkEGAASCDAAJBBgAEggwACQQIAB\nIIEAA0ACAQaABAIMAAkEGAASCDAAJBBgAEggwACQQIABIIEAA0ACAQaABAIMAAkEGAASCDAAJBBg\nAEggwACQQIABIIEAA0ACAQaABAIMAAkEGAASCDAAJBBgAEggwACQQIABIIEAA0ACAQaABAIMAAkE\nGAASCDAAJBBgAEggwACQQIABIIEAA0ACAQaABAIMAAkEGAASCDAAJBBgAEggwACQQIABIIEAA0AC\nAQaABAIMAAkEGAASCDAAJBBgAEggwACQQIABIEGj7AGF7qWXXor3338/jjvuuOjTp0/2HACKRME+\nA967d29s27YtdcPVV18dTz31VJSUlMRdd90Vl112WVRXV6duAqA4FESA9+zZE1OmTIkhQ4bEG2+8\nEXPmzIm2bdvGUUcdFZdeemns2rWrzjeVl5fHW2+9FQ899FAMGjQofvGLX0TLli3jpz/9aZ1vAaD4\nFMQt6JtuuinefvvtOOOMM+KKK66IRo0axdy5c6O0tDTGjh0b8+bNiyuuuOI/Xmf27Nnx9NNP7/fc\nm2++GaWlpbXetHz58rjnnns+dmz48OHx+OOP1/oaAHAgBRHg+fPnx7Jly6Jly5bRpEmT+OCDD+LL\nX/5yRERMnjw5Jk6cWKsAX3bZZXHJJZfs99yTTz4ZO3bsqPWmli1bxurVq+P888/fd+z3v/99tGzZ\nstbXAIADKYgAn3TSSbFq1ao4++yz45prrom//e1v+86tWLEiOnfuXKvrNG7cOBo3brzfcy1btoy9\ne/fWetOwYcOirKws2rVrF2effXYsWrQoRowYEZWVlbW+BgAcSEEEeNy4cdGvX7/48Y9/HP369Yv2\n7dtHRMQtt9wSjzzySCxcuLDON7Vp0ybmzZsXN910U8yaNSvatGkT69ati1atWtX5FgCKT0EE+KKL\n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\nrkJggg==\n"
324 342 },
325 343 {
326 344 "output_type": "stream",
327 345 "stream": "stdout",
328 346 "text": [
329 "v1 is: [ 10.]",
330 "v2 is: [ 10.]",
331 ""
347 "v1 is: [ 10.]\n",
348 "v2 is: [ 10.]\n"
332 349 ]
333 350 }
334 351 ],
335 352 "prompt_number": 10
336 353 },
337 354 {
338 355 "cell_type": "heading",
339 356 "level": 2,
357 "metadata": {},
340 358 "source": [
341 359 "What value is returned from %R?"
342 360 ]
343 361 },
344 362 {
345 363 "cell_type": "markdown",
364 "metadata": {},
346 365 "source": [
347 366 "Some calls have no particularly interesting return value, the magic %R will not return anything in this case. The return value in rpy2 is actually NULL so %R returns None."
348 367 ]
349 368 },
350 369 {
351 370 "cell_type": "code",
352 371 "collapsed": false,
353 372 "input": [
354 "v = %R plot(X,Y)",
373 "v = %R plot(X,Y)\n",
355 374 "assert v == None"
356 375 ],
357 376 "language": "python",
377 "metadata": {},
358 378 "outputs": [
359 379 {
360 380 "output_type": "display_data",
361 381 "png": "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\nUpK06OAUzDPgiIjOnTvHggULYtWqVTFjxoz41re+FevWrYshQ4bEQw899B9/vmvXrtG1a9f9nnv5\n5Zdj/fr1h3oyAEkGDBgQEyZMiEceeSSaNGkS8+bNi5tvvvmgnrhlKqgA/9spp5wSU6dOjalTp8aO\nHTti06ZN2ZMAKDBlZWWxYcOGOOOMM6Jr167RvHnzeO+996JFixbZ02qlIAI8YcKE6Nix437PNWvW\nLJo1a1bHiwD4NBg5cmSMHDkye8Z/pSACPHDgwOwJAFCnCuZNWABQnwgwACQQYABIIMAAkECAASCB\nAANAAgEGgAQCDAAJBBgAEggwACQQYABIIMAAkECAASCBAANAAgEGgAQCDAAJBBgAEggwACQQYABI\nIMAAkECAASCBAANAAgEGgAQCDAAJBBgAEggwACQQYABIIMAAkECAASCBAANAAgEGgAQCDAAJBBgA\nEggwACQQYABIIMAAkECAASCBAANAAgEGgAQCDAAJBBgAEggwACQQYABIIMAAkECAASCBAANAAgEG\ngAQCDAAJBBgAEggwACQQYABIIMAAkECAASCBAANAAgEGgAQCDAAJBBgAEggwACQQYABIIMAAkECA\nASCBAANAAgEGgAQCDAAJBBgAEggwACQQYABIIMAAkECAASCBAANAAgEGgAQCDAAJGmUPOJCdO3dG\nw4YNo6SkJHsKwEGprq6OGTNmxC9/+cs44ogj4rrrroszzzwzexYFpiCeAa9bty4GDx4cy5Ytiw0b\nNsTQoUOjXbt2cdRRR8WQIUNi9+7d2RMBam3w4MGxYMGCmDx5cowZMya+//3vx4svvpg9iwJTEAG+\n9dZb4/jjj4/Pf/7zcd9990VVVVWsXLky3nzzzdi+fXtMmjSpVteprq6Oqqqq/X5VV1dHTU3NYf6X\nAPXd66+/Hu+++248+eST0alTp+jevXvMmDEj7rvvvuxpFJiCuAX92muvxapVq+KII46IZ555JubN\nmxelpaURETFp0qQYMWJEra4zc+bMmDNnzn7PrV69Ok488cRDNRlgvyorK6N3794fO9ahQ4eorq5O\nWkShKogAd+3aNWbNmhXXXHNN9OzZM+bPnx+jR4+OiIgXXnghunTpUqvrDB06NIYOHbrfc2PHjo31\n69cfss0A+9O1a9e49957Y9OmTXHsscdGRMSiRYviww8/TF5GoSmIAE+bNi2+/vWvx8MPPxydO3eO\nG2+8MR555JH4zGc+E9u2bYvXXnsteyJArZxwwgkxdOjQaN26dcyePTu2bt0azz77bDz55JPZ0ygw\nBRHgk08+Od56661YsGBBrF69Oo4//vg4+uijo0uXLtG3b99o1KggZgLUSv/+/WP58uWxaNGiaNKk\nSZSXl+97Ngz/VjBla9CgQVx00UVx0UUXZU8B+J917949unfvnj2DAlYQ74IGgPpGgAEggQADQAIB\nBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBA\ngAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAk\nEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwA\nCQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQAD\nQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASPCJ\nAN90002xffv2jC3UY5WVlfHyyy/HwoUL46OPPsqeA3DYfSLA69ati9NOOy0WLVqUsWefDRs2RFVV\nVeoG6sbatWvj0ksvjddffz0qKiqiZcuWsX79+uxZAIfVJwL8+OOPxx133BFlZWUxYcKE2L1792Ef\nMXjw4Fi1alVERKxevTr69u0bHTt2jHbt2sWoUaNiz549h30DOT766KM47bTT4rvf/W5873vfiylT\npsTMmTNjwoQJsXfv3ux5AIdNo/0dHDhwYHz1q1+NG2+8Mc4666y4/PLL95079dRT49JLLz2kI1au\nXBk7duyIiIgpU6bEKaecErNnz46NGzfGuHHjYsqUKXHrrbf+x+s899xzsWDBgv2eW7RoURx77LGH\ndDf/uz//+c9x1VVXRe/evfcdGzRoUDz33HPx/vvvR8eOHRPXARw++w1wRESDBg2ipKQk1q9fHytX\nrtx3vHnz5od10EsvvRRr1qyJFi1axDHHHBOTJ0+OcePG1SrAPXr0iJNOOmm/5yorK/dFnsLRuHHj\nqKys/Nix6urqWLt2bTRp0iRpFcDht98Al5eXx/XXXx9f/vKXY8WKFdGmTZvDPmTJkiXRvn37OOec\nc2LTpk3RokWLiIhYsWJFnH766bW6Rtu2baNt27b7Pde6dWuvKRegLl26xMknnxy33357TJgwIaqq\nquIrX/lK9OzZM1q3bp09D+Cw+USAr7jiiqioqIj7778/vvnNb9bJiKuuuiqef/75mDRpUmzdujUa\nN24c5eXlcdttt8W0adOioqKiTnaQY9KkSXH99dfHxRdfHE2bNo0hQ4bE8OHDs2cBHFafCHCrVq3i\nj3/84wGfSR4O48ePj/Hjx0dExN///vfYtm1bRET06dMnbrzxxsN+25tcDRs2jGnTpmXPAKhTnwjw\ngw8+mLFjnw4dOkSHDh0iIuKcc85J3QIAh4vfhAUACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIB\nBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBA\ngAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAk\nEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwA\nCQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQAD\nQAIBBoAEAgwACQQYABIIMAAkEGAASCDAAJBAgAEggQADQAIBBoAEBRvgnTt3xrZt27JnQFFZtmxZ\nDBw4MPr06RNlZWWxadOm7ElQbxVsgOfOnRvjxo3LngFF469//WvccMMNMX78+Hj22Wdj6NChcfnl\nl8fmzZuzp0G91Ch7QEREly5dYuPGjR87tnv37qiqqoq5c+dG//79Y+bMmf/xOlu2bInKysr9ntu6\ndWvs2bPnkOyFT6O77ror7rjjjjjzzDMjIuJrX/tavPPOO/HYY4/F6NGjk9dB/VMQAZ45c2YMGTIk\nBg0aFFdffXVERMybNy+WLl0aP/jBD6JZs2a1uk5FRUXMnz9/v+d+85vfRNu2bQ/ZZvi0+fDDD6Nd\nu3YfO1ZaWhqrV69OWgT1W0EE+Pzzz49ly5bFqFGjYty4cfHAAw9E69ato3nz5nHCCSfU+jplZWVR\nVla233Njx46N9evXH6rJ8KnTo0eP+OEPfxgzZsyIiH/dZfrOd74Tc+fOTV4G9VNBBDgiomXLljFr\n1qx44okn4oILLogePXpEw4YNs2dB0Rg2bFjMnz8/evfuHf37948FCxbExIkTo1evXtnToF4qmAD/\n2+WXXx7nnXdejBw5Mrp37549B4pGw4YN47nnnouKiorYvHlzTJw4Mc4444zsWVBvFVyAI/71utTz\nzz+fPQOK0oUXXpg9AYgC/hgSABQzAQaABAIMAAkEGAASCDAAJBBgAEggwACQQIABIIEAA0ACAQaA\nBAIMAAkEGAASCDAAJBBgAEggwACQQIABIIEAA0ACAQaABAIMAAkEGAASCDAAJBBgAEggwACQQIAB\nIIEAA0ACAQaABAIMAAkEGAASCDAAJBBgAEggwACQQIABIIEAA0ACAQaABAIMAAkEGAASCDAAJBBg\nAEggwACQQIABIIEAA0ACAQaABAIMAAkEGAASCDAAJBBgAEggwACQQIABIIEAA0ACAQaABAIMAAkE\nGAASCDAAJBBgAEggwACQQIABIIEAA0ACAQaABAIMAAkEGAASCDAAJBBgAEggwACQQIABIIEAA0AC\nAQaABAIMAAkEGAASCDAAJBBgAEggwACQQIABIEGj7AGF7qWXXor3338/jjvuuOjTp0/2HACKRME+\nA967d29s27YtdcPVV18dTz31VJSUlMRdd90Vl112WVRXV6duAqA4FESA9+zZE1OmTIkhQ4bEG2+8\nEXPmzIm2bdvGUUcdFZdeemns2rWrzjeVl5fHW2+9FQ899FAMGjQofvGLX0TLli3jpz/9aZ1vAaD4\nFMQt6JtuuinefvvtOOOMM+KKK66IRo0axdy5c6O0tDTGjh0b8+bNiyuuuOI/Xmf27Nnx9NNP7/fc\nm2++GaWlpbXetHz58rjnnns+dmz48OHx+OOP1/oaAHAgBRHg+fPnx7Jly6Jly5bRpEmT+OCDD+LL\nX/5yRERMnjw5Jk6cWKsAX3bZZXHJJZfs99yTTz4ZO3bsqPWmli1bxurVq+P888/fd+z3v/99tGzZ\nstbXAIADKYgAn3TSSbFq1ao4++yz45prrom//e1v+86tWLEiOnfuXKvrNG7cOBo3brzfcy1btoy9\ne/fWetOwYcOirKws2rVrF2effXYsWrQoRowYEZWVlbW+BgAcSEEEeNy4cdGvX7/48Y9/HP369Yv2\n7dtHRMQtt9wSjzzySCxcuLDON7Vp0ybmzZsXN910U8yaNSvatGkT69ati1atWtX5FgCKT0EE+KKL\n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\nrkJggg==\n"
362 382 }
363 383 ],
364 384 "prompt_number": 11
365 385 },
366 386 {
367 387 "cell_type": "markdown",
388 "metadata": {},
368 389 "source": [
369 390 "Also, if the return value of a call to %R (in line mode) has just been printed to the console, then its value is also not returned."
370 391 ]
371 392 },
372 393 {
373 394 "cell_type": "code",
374 395 "collapsed": false,
375 396 "input": [
376 "v = %R print(X)",
397 "v = %R print(X)\n",
377 398 "assert v == None"
378 399 ],
379 400 "language": "python",
401 "metadata": {},
380 402 "outputs": [
381 403 {
382 404 "output_type": "display_data",
383 405 "text": [
384 "[1] 0 1 2 3 4",
385 ""
406 "[1] 0 1 2 3 4\n"
386 407 ]
387 408 }
388 409 ],
389 410 "prompt_number": 12
390 411 },
391 412 {
392 413 "cell_type": "markdown",
414 "metadata": {},
393 415 "source": [
394 "But, if the last value did not print anything to console, the value is returned:",
395 ""
416 "But, if the last value did not print anything to console, the value is returned:\n"
396 417 ]
397 418 },
398 419 {
399 420 "cell_type": "code",
400 421 "collapsed": false,
401 422 "input": [
402 "v = %R print(summary(X)); X",
423 "v = %R print(summary(X)); X\n",
403 424 "print 'v:', v"
404 425 ],
405 426 "language": "python",
427 "metadata": {},
406 428 "outputs": [
407 429 {
408 430 "output_type": "display_data",
409 431 "text": [
410 " Min. 1st Qu. Median Mean 3rd Qu. Max. ",
411 " 0 1 2 2 3 4 ",
412 ""
432 " Min. 1st Qu. Median Mean 3rd Qu. Max. \n",
433 " 0 1 2 2 3 4 \n"
413 434 ]
414 435 },
415 436 {
416 437 "output_type": "stream",
417 438 "stream": "stdout",
418 439 "text": [
419 "v: [0 1 2 3 4]",
420 ""
440 "v: [0 1 2 3 4]\n"
421 441 ]
422 442 }
423 443 ],
424 444 "prompt_number": 13
425 445 },
426 446 {
427 447 "cell_type": "markdown",
448 "metadata": {},
428 449 "source": [
429 "The return value can be suppressed by a trailing ';' or an -n argument.",
430 ""
450 "The return value can be suppressed by a trailing ';' or an -n argument.\n"
431 451 ]
432 452 },
433 453 {
434 454 "cell_type": "code",
435 455 "collapsed": true,
436 456 "input": [
437 457 "%R -n X"
438 458 ],
439 459 "language": "python",
460 "metadata": {},
440 461 "outputs": [],
441 462 "prompt_number": 14
442 463 },
443 464 {
444 465 "cell_type": "code",
445 466 "collapsed": true,
446 467 "input": [
447 468 "%R X; "
448 469 ],
449 470 "language": "python",
471 "metadata": {},
450 472 "outputs": [],
451 473 "prompt_number": 15
452 474 },
453 475 {
454 476 "cell_type": "heading",
455 477 "level": 2,
478 "metadata": {},
456 479 "source": [
457 480 "Cell level magic"
458 481 ]
459 482 },
460 483 {
461 484 "cell_type": "markdown",
485 "metadata": {},
462 486 "source": [
463 "Often, we will want to do more than a simple linear regression model. There may be several lines of R code that we want to ",
464 "use before returning to python. This is the cell-level magic.",
465 "",
466 "",
467 "For the cell level magic, inputs can be passed via the -i or --inputs argument in the line. These variables are copied ",
468 "from the shell namespace to R's namespace using rpy2.robjects.r.assign. It would be nice not to have to copy these into R: rnumpy ( http://bitbucket.org/njs/rnumpy/wiki/API ) has done some work to limit or at least make transparent the number of copies of an array. This seems like a natural thing to try to build on. Arrays can be output from R via the -o or --outputs argument in the line. All other arguments are sent to R's png function, which is the graphics device used to create the plots.",
469 "",
470 "We can redo the above calculations in one ipython cell. We might also want to add some output such as a summary",
487 "Often, we will want to do more than a simple linear regression model. There may be several lines of R code that we want to \n",
488 "use before returning to python. This is the cell-level magic.\n",
489 "\n",
490 "\n",
491 "For the cell level magic, inputs can be passed via the -i or --inputs argument in the line. These variables are copied \n",
492 "from the shell namespace to R's namespace using rpy2.robjects.r.assign. It would be nice not to have to copy these into R: rnumpy ( http://bitbucket.org/njs/rnumpy/wiki/API ) has done some work to limit or at least make transparent the number of copies of an array. This seems like a natural thing to try to build on. Arrays can be output from R via the -o or --outputs argument in the line. All other arguments are sent to R's png function, which is the graphics device used to create the plots.\n",
493 "\n",
494 "We can redo the above calculations in one ipython cell. We might also want to add some output such as a summary\n",
471 495 " from R or perhaps the standard plotting diagnostics of the lm."
472 496 ]
473 497 },
474 498 {
475 499 "cell_type": "code",
476 500 "collapsed": false,
477 501 "input": [
478 "%%R -i X,Y -o XYcoef",
479 "XYlm = lm(Y~X)",
480 "XYcoef = coef(XYlm)",
481 "print(summary(XYlm))",
482 "par(mfrow=c(2,2))",
502 "%%R -i X,Y -o XYcoef\n",
503 "XYlm = lm(Y~X)\n",
504 "XYcoef = coef(XYlm)\n",
505 "print(summary(XYlm))\n",
506 "par(mfrow=c(2,2))\n",
483 507 "plot(XYlm)"
484 508 ],
485 509 "language": "python",
510 "metadata": {},
486 511 "outputs": [
487 512 {
488 513 "output_type": "display_data",
489 514 "text": [
490 "",
491 "Call:",
492 "lm(formula = Y ~ X)",
493 "",
494 "Residuals:",
495 " 1 2 3 4 5 ",
496 "-0.2 0.9 -1.0 0.1 0.2 ",
497 "",
498 "Coefficients:",
499 " Estimate Std. Error t value Pr(>|t|) ",
500 "(Intercept) 3.2000 0.6164 5.191 0.0139 *",
501 "X 0.9000 0.2517 3.576 0.0374 *",
502 "---",
503 "Signif. codes: 0 \u2018***\u2019 0.001 \u2018**\u2019 0.01 \u2018*\u2019 0.05 \u2018.\u2019 0.1 \u2018 \u2019 1 ",
504 "",
505 "Residual standard error: 0.7958 on 3 degrees of freedom",
506 "Multiple R-squared: 0.81,\tAdjusted R-squared: 0.7467 ",
507 "F-statistic: 12.79 on 1 and 3 DF, p-value: 0.03739 ",
508 "",
509 ""
515 "\n",
516 "Call:\n",
517 "lm(formula = Y ~ X)\n",
518 "\n",
519 "Residuals:\n",
520 " 1 2 3 4 5 \n",
521 "-0.2 0.9 -1.0 0.1 0.2 \n",
522 "\n",
523 "Coefficients:\n",
524 " Estimate Std. Error t value Pr(>|t|) \n",
525 "(Intercept) 3.2000 0.6164 5.191 0.0139 *\n",
526 "X 0.9000 0.2517 3.576 0.0374 *\n",
527 "---\n",
528 "Signif. codes: 0 \u2018***\u2019 0.001 \u2018**\u2019 0.01 \u2018*\u2019 0.05 \u2018.\u2019 0.1 \u2018 \u2019 1 \n",
529 "\n",
530 "Residual standard error: 0.7958 on 3 degrees of freedom\n",
531 "Multiple R-squared: 0.81,\tAdjusted R-squared: 0.7467 \n",
532 "F-statistic: 12.79 on 1 and 3 DF, p-value: 0.03739 \n",
533 "\n"
510 534 ]
511 535 },
512 536 {
513 537 "output_type": "display_data",
514 538 "png": "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\n"
515 539 }
516 540 ],
517 541 "prompt_number": 16
518 542 },
519 543 {
520 544 "cell_type": "heading",
521 545 "level": 2,
546 "metadata": {},
522 547 "source": [
523 548 "Passing data back and forth"
524 549 ]
525 550 },
526 551 {
527 552 "cell_type": "markdown",
553 "metadata": {},
528 554 "source": [
529 "Currently, data is passed through RMagics.pyconverter when going from python to R and RMagics.Rconverter when ",
530 "going from R to python. These currently default to numpy.ndarray. Future work will involve writing better converters, most likely involving integration with http://pandas.sourceforge.net.",
531 "",
532 "Passing ndarrays into R seems to require a copy, though once an object is returned to python, this object is NOT copied, and it is possible to change its values.",
533 ""
555 "Currently, data is passed through RMagics.pyconverter when going from python to R and RMagics.Rconverter when \n",
556 "going from R to python. These currently default to numpy.ndarray. Future work will involve writing better converters, most likely involving integration with http://pandas.sourceforge.net.\n",
557 "\n",
558 "Passing ndarrays into R seems to require a copy, though once an object is returned to python, this object is NOT copied, and it is possible to change its values.\n"
534 559 ]
535 560 },
536 561 {
537 562 "cell_type": "code",
538 563 "collapsed": true,
539 564 "input": [
540 565 "seq1 = np.arange(10)"
541 566 ],
542 567 "language": "python",
568 "metadata": {},
543 569 "outputs": [],
544 570 "prompt_number": 17
545 571 },
546 572 {
547 573 "cell_type": "code",
548 574 "collapsed": false,
549 575 "input": [
550 "%%R -i seq1 -o seq2",
551 "seq2 = rep(seq1, 2)",
576 "%%R -i seq1 -o seq2\n",
577 "seq2 = rep(seq1, 2)\n",
552 578 "print(seq2)"
553 579 ],
554 580 "language": "python",
581 "metadata": {},
555 582 "outputs": [
556 583 {
557 584 "output_type": "display_data",
558 585 "text": [
559 " [1] 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9",
560 ""
586 " [1] 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9\n"
561 587 ]
562 588 }
563 589 ],
564 590 "prompt_number": 18
565 591 },
566 592 {
567 593 "cell_type": "code",
568 594 "collapsed": false,
569 595 "input": [
570 "seq2[::2] = 0",
596 "seq2[::2] = 0\n",
571 597 "seq2"
572 598 ],
573 599 "language": "python",
600 "metadata": {},
574 601 "outputs": [
575 602 {
576 603 "output_type": "pyout",
577 604 "prompt_number": 19,
578 605 "text": [
579 606 "array([0, 1, 0, 3, 0, 5, 0, 7, 0, 9, 0, 1, 0, 3, 0, 5, 0, 7, 0, 9], dtype=int32)"
580 607 ]
581 608 }
582 609 ],
583 610 "prompt_number": 19
584 611 },
585 612 {
586 613 "cell_type": "code",
587 614 "collapsed": false,
588 615 "input": [
589 "%%R",
616 "%%R\n",
590 617 "print(seq2)"
591 618 ],
592 619 "language": "python",
620 "metadata": {},
593 621 "outputs": [
594 622 {
595 623 "output_type": "display_data",
596 624 "text": [
597 " [1] 0 1 0 3 0 5 0 7 0 9 0 1 0 3 0 5 0 7 0 9",
598 ""
625 " [1] 0 1 0 3 0 5 0 7 0 9 0 1 0 3 0 5 0 7 0 9\n"
599 626 ]
600 627 }
601 628 ],
602 629 "prompt_number": 20
603 630 },
604 631 {
605 632 "cell_type": "markdown",
633 "metadata": {},
606 634 "source": [
607 635 "Once the array data has been passed to R, modifring its contents does not modify R's copy of the data."
608 636 ]
609 637 },
610 638 {
611 639 "cell_type": "code",
612 640 "collapsed": false,
613 641 "input": [
614 "seq1[0] = 200",
642 "seq1[0] = 200\n",
615 643 "%R print(seq1)"
616 644 ],
617 645 "language": "python",
646 "metadata": {},
618 647 "outputs": [
619 648 {
620 649 "output_type": "display_data",
621 650 "text": [
622 " [1] 0 1 2 3 4 5 6 7 8 9",
623 ""
651 " [1] 0 1 2 3 4 5 6 7 8 9\n"
624 652 ]
625 653 }
626 654 ],
627 655 "prompt_number": 21
628 656 },
629 657 {
630 658 "cell_type": "markdown",
659 "metadata": {},
631 660 "source": [
632 "But, if we pass data as both input and output, then the value of \"data\" in user_ns will be overwritten and the",
661 "But, if we pass data as both input and output, then the value of \"data\" in user_ns will be overwritten and the\n",
633 662 "new array will be a view of the data in R's copy."
634 663 ]
635 664 },
636 665 {
637 666 "cell_type": "code",
638 667 "collapsed": false,
639 668 "input": [
640 "print seq1",
641 "%R -i seq1 -o seq1",
642 "print seq1",
643 "seq1[0] = 200",
644 "%R print(seq1)",
645 "seq1_view = %R seq1",
669 "print seq1\n",
670 "%R -i seq1 -o seq1\n",
671 "print seq1\n",
672 "seq1[0] = 200\n",
673 "%R print(seq1)\n",
674 "seq1_view = %R seq1\n",
646 675 "assert(id(seq1_view.data) == id(seq1.data))"
647 676 ],
648 677 "language": "python",
678 "metadata": {},
649 679 "outputs": [
650 680 {
651 681 "output_type": "stream",
652 682 "stream": "stdout",
653 683 "text": [
654 "[200 1 2 3 4 5 6 7 8 9]",
655 "[200 1 2 3 4 5 6 7 8 9]",
656 ""
684 "[200 1 2 3 4 5 6 7 8 9]\n",
685 "[200 1 2 3 4 5 6 7 8 9]\n"
657 686 ]
658 687 },
659 688 {
660 689 "output_type": "display_data",
661 690 "text": [
662 " [1] 200 1 2 3 4 5 6 7 8 9",
663 ""
691 " [1] 200 1 2 3 4 5 6 7 8 9\n"
664 692 ]
665 693 }
666 694 ],
667 695 "prompt_number": 22
668 696 },
669 697 {
670 698 "cell_type": "heading",
671 699 "level": 2,
700 "metadata": {},
672 701 "source": [
673 "Exception handling",
674 ""
702 "Exception handling\n"
675 703 ]
676 704 },
677 705 {
678 706 "cell_type": "markdown",
707 "metadata": {},
679 708 "source": [
680 709 "Exceptions are handled by passing back rpy2's exception and the line that triggered it."
681 710 ]
682 711 },
683 712 {
684 713 "cell_type": "code",
685 714 "collapsed": false,
686 715 "input": [
687 "try:",
688 " %R -n nosuchvar",
689 "except Exception as e:",
690 " print e.message",
716 "try:\n",
717 " %R -n nosuchvar\n",
718 "except Exception as e:\n",
719 " print e.message\n",
691 720 " pass"
692 721 ],
693 722 "language": "python",
723 "metadata": {},
694 724 "outputs": [
695 725 {
696 726 "output_type": "stream",
697 727 "stream": "stdout",
698 728 "text": [
699 "parsing and evaluating line \"nosuchvar\".",
700 "R error message: \"Error in eval(expr, envir, enclos) : object 'nosuchvar' not found",
701 "\"",
702 " R stdout:\"Error in eval(expr, envir, enclos) : object 'nosuchvar' not found",
703 "\"",
704 "",
705 ""
729 "parsing and evaluating line \"nosuchvar\".\n",
730 "R error message: \"Error in eval(expr, envir, enclos) : object 'nosuchvar' not found\n",
731 "\"\n",
732 " R stdout:\"Error in eval(expr, envir, enclos) : object 'nosuchvar' not found\n",
733 "\"\n",
734 "\n"
706 735 ]
707 736 }
708 737 ],
709 738 "prompt_number": 23
710 739 },
711 740 {
712 741 "cell_type": "heading",
713 742 "level": 2,
743 "metadata": {},
714 744 "source": [
715 "Structured arrays and data frames",
716 ""
745 "Structured arrays and data frames\n"
717 746 ]
718 747 },
719 748 {
720 749 "cell_type": "markdown",
750 "metadata": {},
721 751 "source": [
722 752 "In R, data frames play an important role as they allow array-like objects of mixed type with column names (and row names). In bumpy, the closest analogy is a structured array with named fields. In future work, it would be nice to use pandas to return full-fledged DataFrames from rpy2. In the mean time, structured arrays can be passed back and forth with the -d flag to %R, %Rpull, and %Rget"
723 753 ]
724 754 },
725 755 {
726 756 "cell_type": "code",
727 757 "collapsed": true,
728 758 "input": [
729 "datapy= np.array([(1, 2.9, 'a'), (2, 3.5, 'b'), (3, 2.1, 'c')],",
730 " dtype=[('x', '<i4'), ('y', '<f8'), ('z', '|S1')])",
731 ""
759 "datapy= np.array([(1, 2.9, 'a'), (2, 3.5, 'b'), (3, 2.1, 'c')],\n",
760 " dtype=[('x', '<i4'), ('y', '<f8'), ('z', '|S1')])\n"
732 761 ],
733 762 "language": "python",
763 "metadata": {},
734 764 "outputs": [],
735 765 "prompt_number": 24
736 766 },
737 767 {
738 768 "cell_type": "code",
739 769 "collapsed": true,
740 770 "input": [
741 "%%R -i datapy -d datar",
771 "%%R -i datapy -d datar\n",
742 772 "datar = datapy"
743 773 ],
744 774 "language": "python",
775 "metadata": {},
745 776 "outputs": [],
746 777 "prompt_number": 25
747 778 },
748 779 {
749 780 "cell_type": "code",
750 781 "collapsed": false,
751 782 "input": [
752 783 "datar"
753 784 ],
754 785 "language": "python",
786 "metadata": {},
755 787 "outputs": [
756 788 {
757 789 "output_type": "pyout",
758 790 "prompt_number": 26,
759 791 "text": [
760 "array([(1, 2.9, 'a'), (2, 3.5, 'b'), (3, 2.1, 'c')], ",
792 "array([(1, 2.9, 'a'), (2, 3.5, 'b'), (3, 2.1, 'c')], \n",
761 793 " dtype=[('x', '<i4'), ('y', '<f8'), ('z', '|S1')])"
762 794 ]
763 795 }
764 796 ],
765 797 "prompt_number": 26
766 798 },
767 799 {
768 800 "cell_type": "code",
769 801 "collapsed": false,
770 802 "input": [
771 "%R datar2 = datapy",
772 "%Rpull -d datar2",
803 "%R datar2 = datapy\n",
804 "%Rpull -d datar2\n",
773 805 "datar2"
774 806 ],
775 807 "language": "python",
808 "metadata": {},
776 809 "outputs": [
777 810 {
778 811 "output_type": "pyout",
779 812 "prompt_number": 27,
780 813 "text": [
781 "array([(1, 2.9, 'a'), (2, 3.5, 'b'), (3, 2.1, 'c')], ",
814 "array([(1, 2.9, 'a'), (2, 3.5, 'b'), (3, 2.1, 'c')], \n",
782 815 " dtype=[('x', '<i4'), ('y', '<f8'), ('z', '|S1')])"
783 816 ]
784 817 }
785 818 ],
786 819 "prompt_number": 27
787 820 },
788 821 {
789 822 "cell_type": "code",
790 823 "collapsed": false,
791 824 "input": [
792 825 "%Rget -d datar2"
793 826 ],
794 827 "language": "python",
828 "metadata": {},
795 829 "outputs": [
796 830 {
797 831 "output_type": "pyout",
798 832 "prompt_number": 28,
799 833 "text": [
800 "array([(1, 2.9, 'a'), (2, 3.5, 'b'), (3, 2.1, 'c')], ",
834 "array([(1, 2.9, 'a'), (2, 3.5, 'b'), (3, 2.1, 'c')], \n",
801 835 " dtype=[('x', '<i4'), ('y', '<f8'), ('z', '|S1')])"
802 836 ]
803 837 }
804 838 ],
805 839 "prompt_number": 28
806 840 },
807 841 {
808 842 "cell_type": "markdown",
843 "metadata": {},
809 844 "source": [
810 845 "For arrays without names, the -d argument has no effect because the R object has no colnames or names."
811 846 ]
812 847 },
813 848 {
814 849 "cell_type": "code",
815 850 "collapsed": false,
816 851 "input": [
817 "Z = np.arange(6)",
818 "%R -i Z",
852 "Z = np.arange(6)\n",
853 "%R -i Z\n",
819 854 "%Rget -d Z"
820 855 ],
821 856 "language": "python",
857 "metadata": {},
822 858 "outputs": [
823 859 {
824 860 "output_type": "pyout",
825 861 "prompt_number": 29,
826 862 "text": [
827 863 "array([0, 1, 2, 3, 4, 5], dtype=int32)"
828 864 ]
829 865 }
830 866 ],
831 867 "prompt_number": 29
832 868 },
833 869 {
834 870 "cell_type": "markdown",
871 "metadata": {},
835 872 "source": [
836 "For mixed-type data frames in R, if the -d flag is not used, then an array of a single type is returned and",
873 "For mixed-type data frames in R, if the -d flag is not used, then an array of a single type is returned and\n",
837 874 "its value is transposed. This would be nice to fix, but it seems something that should be fixed at the rpy2 level (See: https://bitbucket.org/lgautier/rpy2/issue/44/numpyrecarray-as-dataframe)"
838 875 ]
839 876 },
840 877 {
841 878 "cell_type": "code",
842 879 "collapsed": false,
843 880 "input": [
844 881 "%Rget datar2"
845 882 ],
846 883 "language": "python",
884 "metadata": {},
847 885 "outputs": [
848 886 {
849 887 "output_type": "pyout",
850 888 "prompt_number": 30,
851 889 "text": [
852 "array([['1', '2', '3'],",
853 " ['2', '3', '2'],",
854 " ['a', 'b', 'c']], ",
890 "array([['1', '2', '3'],\n",
891 " ['2', '3', '2'],\n",
892 " ['a', 'b', 'c']], \n",
855 893 " dtype='|S1')"
856 894 ]
857 895 }
858 896 ],
859 897 "prompt_number": 30
860 898 },
861 899 {
862 900 "cell_type": "code",
863 901 "collapsed": true,
864 "input": [
865 ""
866 ],
902 "input": [],
867 903 "language": "python",
904 "metadata": {},
868 905 "outputs": [],
869 906 "prompt_number": 30
870 907 }
871 ]
908 ],
909 "metadata": {}
872 910 }
873 911 ]
874 912 } No newline at end of file
@@ -1,626 +1,658 b''
1 1 {
2 2 "metadata": {
3 3 "name": "sympy"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
10 11 "cell_type": "markdown",
12 "metadata": {},
11 13 "source": [
12 "# SymPy: Open Source Symbolic Mathematics",
13 "",
14 "This notebook uses the [SymPy](http://sympy.org) package to perform symbolic manipulations,",
15 "and combined with numpy and matplotlib, also displays numerical visualizations of symbolically",
16 "constructed expressions.",
17 "",
14 "# SymPy: Open Source Symbolic Mathematics\n",
15 "\n",
16 "This notebook uses the [SymPy](http://sympy.org) package to perform symbolic manipulations,\n",
17 "and combined with numpy and matplotlib, also displays numerical visualizations of symbolically\n",
18 "constructed expressions.\n",
19 "\n",
18 20 "We first load sympy printing and plotting support, as well as all of sympy:"
19 21 ]
20 22 },
21 23 {
22 24 "cell_type": "code",
23 25 "collapsed": false,
24 26 "input": [
25 "%load_ext sympyprinting",
26 "%pylab inline",
27 "",
28 "from __future__ import division",
29 "import sympy as sym",
30 "from sympy import *",
31 "x, y, z = symbols(\"x y z\")",
32 "k, m, n = symbols(\"k m n\", integer=True)",
27 "%load_ext sympyprinting\n",
28 "%pylab inline\n",
29 "\n",
30 "from __future__ import division\n",
31 "import sympy as sym\n",
32 "from sympy import *\n",
33 "x, y, z = symbols(\"x y z\")\n",
34 "k, m, n = symbols(\"k m n\", integer=True)\n",
33 35 "f, g, h = map(Function, 'fgh')"
34 36 ],
35 37 "language": "python",
38 "metadata": {},
36 39 "outputs": [
37 40 {
38 41 "output_type": "stream",
39 42 "stream": "stdout",
40 43 "text": [
41 "",
42 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].",
44 "\n",
45 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
43 46 "For more information, type 'help(pylab)'."
44 47 ]
45 48 }
46 49 ],
47 50 "prompt_number": 1
48 51 },
49 52 {
50 53 "cell_type": "markdown",
54 "metadata": {},
51 55 "source": [
52 56 "<h2>Elementary operations</h2>"
53 57 ]
54 58 },
55 59 {
56 60 "cell_type": "code",
57 61 "collapsed": false,
58 62 "input": [
59 63 "Rational(3,2)*pi + exp(I*x) / (x**2 + y)"
60 64 ],
61 65 "language": "python",
66 "metadata": {},
62 67 "outputs": [
63 68 {
64 69 "latex": [
65 70 "$$\\frac{3}{2} \\pi + \\frac{e^{\\mathbf{\\imath} x}}{x^{2} + y}$$"
66 71 ],
67 72 "output_type": "pyout",
68 73 "png": "iVBORw0KGgoAAAANSUhEUgAAAFAAAAAlCAYAAADV/m7fAAAABHNCSVQICAgIfAhkiAAAA91JREFU\naIHt2luIVVUcx/HPjFNm2YxhZA0hk5HkJbtAWTReioIuUyFRmBZGE12wIoiUHoLpoXsRCRFBDyNS\nPmQWVg9RD0FRD5bagwRpdKUYGro4mSHk9PDfR7cnxzn7nL3P8cj5wmHWOrPP//8/e6/1X7+1/ocW\nNdHW6ADqxDm4AluxDb2Yi2FcjnuwqxrD7al2L27DA3gzcXi0sAun4yechHfRgS9xrypvXjk/YEXS\n7sdfmJiH4SOA47EeZ6BT3LxNYgD11GK4I9W+Bt8m7T8xoRbDRxhTxQA5FXfie/FdF+N3fFet4bFy\n4OvYjserNdxg7sbf+AcnYLAoRx1l/QtwHXbjhaKcFswTYga9gsm4vxFB3IUvMKkOvub5/4Oslqni\n4a/ActwkbmLhzMeQSLIwG6O4qg6+B9WYyFNcj89zslURJRkzjB34Oemfi71iFDYTOxwszY4RGq8w\nvVuaOt/geZEvjsUlWIhfy64/EauwUuipQzGKRfg472Ar4CusxcP4Rciw15KYCiGde96q4PqX8Rtu\nxQ3YLCTAgyJp7xEr36e5RpmNFxvo+7DcgqWp/hsOaMWParA7KL8cWHeyrH7rU+0pyWf/FSv1yXkG\n1UxUKx+W47OkPUuI1vFYKxancqbjIrFoldOvSRay0XFe5WzDhUn7WoyofqUbVNkUHi/GhrxKIzDL\nl18oRs2WpN8pxOpZ+DqDnayMF2M7VmOfSC3PFRjLQU6z8hA+FEFyQDuen0tE1dOHjXhayLCz6+E0\nfQPn4zE8ibfFFutQzMSaVH+zyId7iggwAzOEtCJ07cx6Op+Ml1L9m0Ve66qD70H5yJiJQujD++jO\nwWbFzBO548yk3ymSZF8dfK8R53R5sQCP5GivItrEFC4l6jniBs6qdyA10oVHGx0ErBN742ZjpThA\nmIQrM3zuvjyD6Mczmq9it0wUh4bFMf3cDJ8dyCuIPnEDiafYk5fhnLhUVA6fxY1ixG0UK3AtDIzx\n/gTcgVdFWiO2rft3R2kZswjT8J5I6ktwWo2B5Umn0HbrxGnPKqEcRlS2layGJXhH1FVmJ+9dhh9L\nF5Sm6QxRIy0//u6SU800B44TSmEvnsIfyd+sTBPHb+kU1YtPUv0RUVArybidYjbuFg9tp+atGSGm\nUGkvPiUHewOH+d9SbEj1t4viG6rbyjWKq8XI6RELxFYR/7KC/XaLnQ2hk7vFYQqaq3i+QPzG5RRx\ngHte0t+g9m3kYmMfCg+Jw+R9Qu4MiTJBixSrK7zuA9xeYBxHHXNEzadNSKgtQqjvp5mmcCNoF6v2\ndFwsfldTlGRq0aJFi6bjP9GM0XhICUQDAAAAAElFTkSuQmCC\n",
69 74 "prompt_number": 2,
70 75 "text": [
71 "",
72 " \u2148\u22c5x ",
73 "3\u22c5\u03c0 \u212f ",
74 "\u2500\u2500\u2500 + \u2500\u2500\u2500\u2500\u2500\u2500",
75 " 2 2 ",
76 "\n",
77 " \u2148\u22c5x \n",
78 "3\u22c5\u03c0 \u212f \n",
79 "\u2500\u2500\u2500 + \u2500\u2500\u2500\u2500\u2500\u2500\n",
80 " 2 2 \n",
76 81 " x + y"
77 82 ]
78 83 }
79 84 ],
80 85 "prompt_number": 2
81 86 },
82 87 {
83 88 "cell_type": "code",
84 89 "collapsed": false,
85 90 "input": [
86 91 "exp(I*x).subs(x,pi).evalf()"
87 92 ],
88 93 "language": "python",
94 "metadata": {},
89 95 "outputs": [
90 96 {
91 97 "latex": [
92 98 "$$-1.0$$"
93 99 ],
94 100 "output_type": "pyout",
95 101 "png": "iVBORw0KGgoAAAANSUhEUgAAACsAAAASCAYAAADCKCelAAAABHNCSVQICAgIfAhkiAAAAU1JREFU\nSInt1csrBlEcxvGPWxKFhcsCK5QFJVlYsfJPsLKQjf8CG8qejVKWkhUbsRBZuWzct0okxQK5LGam\npmmU923evMpTp9N5njm/+c7MmXP4QyopQM0WbKM9j3mzuMEjKjCP+yzhIlVjGOf4zHFuGS4xHvOm\nsInSTOhi6sIaZrArd9gRvAgeOFJHWGcsC8DvtCR32ENspfhXWI0Gmb/iPFSOHlykZJcYigbFANsk\n+NGfUrJn1KOS4oBtDvvnlCzy6igO2Jew/0jJKuJZMcCe4fWbrBpvuCNY3JG6seDnB8UhJvIEjOsN\np4K1mVQNboW7Sxz2BAMZ3DwfHaM14ZWhF3uR8RvLoBVVCe8Igwm/H7WYKyTMuuCzNaZkfXjHRsKv\nFxzTkzFvAfuFAGzEjmBj/wzbAw4wGruuDdeYTqnRiWUshm0FDYWA/def1heszTze5axPeQAAAABJ\nRU5ErkJggg==\n",
96 102 "prompt_number": 4,
97 103 "text": [
98 104 "-1.00000000000000"
99 105 ]
100 106 }
101 107 ],
102 108 "prompt_number": 4
103 109 },
104 110 {
105 111 "cell_type": "code",
106 112 "collapsed": true,
107 113 "input": [
108 114 "e = x + 2*y"
109 115 ],
110 116 "language": "python",
117 "metadata": {},
111 118 "outputs": [],
112 119 "prompt_number": 5
113 120 },
114 121 {
115 122 "cell_type": "code",
116 123 "collapsed": false,
117 124 "input": [
118 125 "srepr(e)"
119 126 ],
120 127 "language": "python",
128 "metadata": {},
121 129 "outputs": [
122 130 {
123 131 "output_type": "pyout",
124 132 "prompt_number": 6,
125 133 "text": [
126 134 "Add(Symbol('x'), Mul(Integer(2), Symbol('y')))"
127 135 ]
128 136 }
129 137 ],
130 138 "prompt_number": 6
131 139 },
132 140 {
133 141 "cell_type": "code",
134 142 "collapsed": false,
135 143 "input": [
136 144 "exp(pi * sqrt(163)).evalf(50)"
137 145 ],
138 146 "language": "python",
147 "metadata": {},
139 148 "outputs": [
140 149 {
141 150 "latex": [
142 151 "$$262537412640768743.99999999999925007259719818568888$$"
143 152 ],
144 153 "output_type": "pyout",
145 154 "png": "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\n",
146 155 "prompt_number": 7,
147 156 "text": [
148 157 "262537412640768743.99999999999925007259719818568888"
149 158 ]
150 159 }
151 160 ],
152 161 "prompt_number": 7
153 162 },
154 163 {
155 164 "cell_type": "markdown",
165 "metadata": {},
156 166 "source": [
157 167 "<h2>Algebra<h2>"
158 168 ]
159 169 },
160 170 {
161 171 "cell_type": "code",
162 172 "collapsed": false,
163 173 "input": [
164 "eq = ((x+y)**2 * (x+1))",
174 "eq = ((x+y)**2 * (x+1))\n",
165 175 "eq"
166 176 ],
167 177 "language": "python",
178 "metadata": {},
168 179 "outputs": [
169 180 {
170 181 "latex": [
171 182 "$$\\left(x + 1\\right) \\left(x + y\\right)^{2}$$"
172 183 ],
173 184 "output_type": "pyout",
174 185 "png": "iVBORw0KGgoAAAANSUhEUgAAAHQAAAAbCAYAAACtOKuoAAAABHNCSVQICAgIfAhkiAAAA/tJREFU\naIHt2luoVFUcx/GPZp7Ek0bUKcrsImVmnlMhSUFmUhbhSxASkUQJBV3einrq9tCN0tDEkB4mouuT\nLxldKC0sDOqhyEq7GEFlGBVGZlb28N+Hs9yz9zkz4+wzh858YZi9Lnvt/3+tvX7rv9YMXf5XTOi0\nAV1aYgGuxGTMwT34uKMWdWmZXqxN0suwB9M7Y06XQ6Uf/2JWlp6GA1jaMYu6HBIThOQOLpdzxYDO\nGe6mS3FEtXY1zQx8WZDfI+wdrzyLxwcTEwsqLMZM/DlaFo3AVCzBW4ZkJmUfFuKc0TRqjLACP+CO\nsgq9eKFiI/oxqcG6c7ABD2KLkJYijsRWwwcGVatOM341wkjKs1QMKEzBKUWV7lf94lore3gD95UN\nKFyD20rKFuPGFp7ZDDWt+TUcDyhWnovFYB6ffa7FBUUNbMNhbTYqT001A9qreC82GqpDNQNapDyn\niW3KgdxnGgdLxDyhx//kGj0LNwgJmI6bhWYfg+NwN75trx8t8buw6Ux8nuTfiecK6nfSrz7cgvlY\nh1eSsltxlZDbPViF5XgyK/9aDPSIXIencnknY6Wh4OllfIrLMmP246amXKluhsImcYKSUqQ6nfbr\nMfES3YX3cmVb8WKSLlOeQtIo91j8liu/HfeKjSxx1LQXb2AXHhKdMVbY7uBOLVOdTvrVjx2iry/B\n90nZVJyHzUleqjwjkg5oj/o3ea2Y9oPMx2vZ9XfiDPHXRh40SuxxsBwNiM7L00m/fsIzOFEoQroc\nXCiWwXdy92wXa+eIpGvobvWR0jfJ9ezMiLcbaVgYPVCQPxPn46+CshX4sMH2izgdnyTpItWhs379\nmH0vE7NvY1LvIjEO23L355WnlHRAd+KMYeouzoxNNX8Wviqpf31Jfg33Zc9rN7NF0DBIkerk6ZRf\nl4uXaF+StxDvqo8V8spTSiq5W3CCoQ7oEdIzL0tfIaLHP7J0r/J9XyeYJNaa95O83WLWpowVv07C\nFzm7FqiXW8KHXY00mg7oXvHGnJ2lF4mDhlk4V0z5v7OyyaJTnmjkIW3i6Oy7r6R8rlgH9yd5O9Wr\nziJjw6/PhEwPsk6cZG0uqJtXnoYZwKvZ9VFiwV4jDn8Px2qsxyOiM1qhpvHwvk84uMPQBvoXfCC2\nWSkb1f/iMEWsoansjgW/iBn6Jp4WivC6CMTy5+uT8HNmZ0usFAt2VdS0/0RlmdjbFbFBcRDTbmpa\n92uiCJZWFZQN4PkW20X8zvaweLurYLU4f2wXPXhU+d9pUtWpkmb8WoOPkvRyERzNKKhbpDzjnqpV\np1l2iogYThVHjEsK6g2nPOOaqlWnWa7GS+J8dr3iX1RGUp4uXbp06dKlSxv5DwKJ3tRzwoGmAAAA\nAElFTkSuQmCC\n",
175 186 "prompt_number": 8,
176 187 "text": [
177 "",
178 " 2",
188 "\n",
189 " 2\n",
179 190 "(x + 1)\u22c5(x + y) "
180 191 ]
181 192 }
182 193 ],
183 194 "prompt_number": 8
184 195 },
185 196 {
186 197 "cell_type": "code",
187 198 "collapsed": false,
188 199 "input": [
189 200 "expand(eq)"
190 201 ],
191 202 "language": "python",
203 "metadata": {},
192 204 "outputs": [
193 205 {
194 206 "latex": [
195 207 "$$x^{3} + 2 x^{2} y + x^{2} + x y^{2} + 2 x y + y^{2}$$"
196 208 ],
197 209 "output_type": "pyout",
198 210 "png": "iVBORw0KGgoAAAANSUhEUgAAAQ0AAAAbCAYAAABm6to6AAAABHNCSVQICAgIfAhkiAAABQhJREFU\neJzt3FmoVVUcx/GPF/FaWiY0SINlBqKWUUiiZNpgSPgimFA+lAhFgw9BUBBNZBSNRlRQQTuKiqDh\nQUMwaCACi6KBJposIpKCBqPRtIe1Lx5P9+reZ+199jnd9YXL2Wutff7r//uv5Tp7DVsSiUSiBGM6\n/N6pmIbJWIQH8GJVTjXAPJyDcZiJ6/Beox7FkfQkYqgl3l/jgvx6DX7FYKzRhpiI+1rSK7Edk5px\nJ5qkJxFDbfE+HhPy6xX4Xf8OGnOwE9Pz9IHYhWWNeRRH0pOIoSvxfgLXVGmwy4wRHseGpmqzhSDN\nbMyjOJKeRAy1xvtkXI+HsH8VBkswCxuxGW9gvbC+UgWP4c6KbPUCSU88dfa3XqeWeF+Et7Bf1YZH\nYAZew9Q8PRnv53+HR9peg9t0vkDcayQ98dTZ33qdyuI9D9uE3RPCKLwLSyNszsHYgvc+hwVteQty\nH+6J8GGZECTCAHhMhK2ilNFdlir11OlnUZrSU1d/q5I62qfSfw/ThZF3aOHzPPyJQyJsZiWc2oaP\ncUBL3lj8gQ86rH+REKAp+d/5mN+hrTJk6hmcqtaT6c4gOhJN6qmjv1VNptr22Wu8OxmdPhfmOGuF\nfdz5OA3fx3pakM9wkrB7sz3P26HzgetYbBC2mlrp1y29pKdaqu5vvc4+490+aMzCauEpYhIuxpU4\nGIfhanwlPLI1xSJB0E8teVOFraENbfcW0fOFPX9F9sWhuBRzhUNtG1vKLsNynFXCXhnq0FMHRftR\n0Vg2qafq/lZGdx0UqbtwvI/GXRjI008Lj19L8gr+FhY96yAT93h1K/6x59yzLj13CB3iKrzeVrYF\nT5WwlSmuu1/ap4yfVcayDJlm+1vVujPF9UTXPdByvVbYQt2Zp8cJh7Y2C/O6W4RA9BrH4XKss2cQ\n6tAzB5/iZ5yOb1vKJgjb0K+UtFmUfmmfon42GcsYYvtbk7orr3taW/ob3BzhYBkynY384/GmsC3U\nTh16puR1HiH80ixvKVsirKjPLmEvU1x3v7RPUT+rjmUZMs31tzp0Z4rpqaTu1jWNL1uuZ+SGXyrg\nSBkexYnD5E/FKfhrmLI1wjmQdsbgEWzCtcOU16Hnu/xzpfC+zQstZQvxAz4c5ntV6O6X9inqZ6ex\nLEMv9rcY3bF6ao35JcLqcOtJz+kj3FsFmfIj/zr/bbwLR7i3aj2b8Hxb3st4tqSdTGe/eP3QPhTz\ns6pYliHTfH+rUnemnJ6ouofWNAaF119PyNNLhb3p3/L0RGEe1yusFuaON7XlL8w/69ZzFD5pSQ8K\nh95ejbC5N/qlfTrxs9ux7IQ6+luTuqPqHpqeLMaNwjvzY4VRa0deNk4IyPpoV6vhDNwujJaPt+QP\n2r0ItVi9ej6y+1gxYetqvPoWsBbrj/ZZrLyf3Y5lWerqb03qjqp7aNDYIryteqYwL5orHOB6ED/i\nSWF/uRd4Bgdh1TBl6/LPuvVcIcxvH8Y7OFJYkX43wube6Jf26cTPbseyLHX1tyZ193rMC5Fp9phy\nDAPCAtPdHXw30x+6M93xMyaWZcj0VtxjdWc611O67oF939IVfhHO8vcD9+LtlvQq4c3HTl4f7hfd\ndflZZSzL0HTcq9ZdRk9TMR/VbMUN+fU04bHz7Kac6XO2Gp2x3Ko53dF1/1/+n4VusgLnCi/ojcP9\nwrwwUZ7RGssmdY/WmCcSiUQikUgkEolEIpEY5fwLmrvyxplDsPoAAAAASUVORK5CYII=\n",
199 211 "prompt_number": 9,
200 212 "text": [
201 "",
202 " 3 2 2 2 2",
213 "\n",
214 " 3 2 2 2 2\n",
203 215 "x + 2\u22c5x \u22c5y + x + x\u22c5y + 2\u22c5x\u22c5y + y "
204 216 ]
205 217 }
206 218 ],
207 219 "prompt_number": 9
208 220 },
209 221 {
210 222 "cell_type": "code",
211 223 "collapsed": false,
212 224 "input": [
213 "a = 1/x + (x*sin(x) - 1)/x",
225 "a = 1/x + (x*sin(x) - 1)/x\n",
214 226 "a"
215 227 ],
216 228 "language": "python",
229 "metadata": {},
217 230 "outputs": [
218 231 {
219 232 "latex": [
220 233 "$$\\frac{x \\operatorname{sin}\\left(x\\right) -1}{x} + \\frac{1}{x}$$"
221 234 ],
222 235 "output_type": "pyout",
223 236 "png": "iVBORw0KGgoAAAANSUhEUgAAAFwAAAAbCAYAAADxsuiMAAAABHNCSVQICAgIfAhkiAAAAolJREFU\naIHt2duLjVEYx/HPMONYaHIYFyYkF3KYQkiKuEEyLgwhh5kQV3Io/4C4JbmR2pMLKTXiSiTlAiHl\nmEPKFSlFKUY0LtaavGl2+52xZ+/X3vtbb3u9z177+a3D8z5rvWtT479kLh6XuxF/MQ7X0Zwl3foi\nibzE+iL5Kga7MR6rMKQKdDNDD6ZmSTcZ4UsxXUgPd9GElTiMt1iHKfiIblwVZnEnFuMknqERezEf\nxzAz/m4yDkWtmXiVQndk9FlxjEFHLG/AvVjuFAZgOB5E2wRcSdSdiPPYGG17MAyvsSnh/0ssNwiP\nXBrdSVjyD/3KbIT/EAYNFqErlnck6o3FE1xDe7TfQB1WCAMNF4RJGY6L0Tbfn0hdlCgX0oU1uIP9\nwpOQj/sJvWIyF8/xcxB8g4dYGMvjEvaRaMVtHE/Y9+E0RgvRC9uRS9Q5g4PCpG3V92KdT7e9j7pp\nKUaE5wbgI69u70q6Ggdipdl4FL/bImxv3uMXLuMc3iR8bBNSQFsUIuTgm4k6bULkb8ZnIV0U0u2l\nQQUxNH4uwxwhH99CS7y/JCyS9ZgmDH4jziZ8zBAi9yneRdsRnMDXeD8LI4R14Hn0/baA7reo24wX\n/ezXDmEiW2K7m4QFeSC0xrZ9LrFuUVmbst5yjBrEdqQhpzwLb9WSU8QBr8q3oXJSV+4GZIhOzOvD\n3owPwhb2bzqE3VW/6amyqz/kpEspqbR798O1SP93Uo1hLYeXmGIdz6al0AHZ/06m+lfooCqr5KTL\n4Znr3wjhFJHwFnq0HI0YAKekG7BM9y/fQVWlkIn+JQ+quoX1Y4hw7FoJpOpfKbeDu7BA+GOiHt/j\n1YVPJWzHYFHp/atRo0aNquc3S/HNyBXE+1kAAAAASUVORK5CYII=\n",
224 237 "prompt_number": 10,
225 238 "text": [
226 "",
227 "x\u22c5sin(x) - 1 1",
228 "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 + \u2500",
239 "\n",
240 "x\u22c5sin(x) - 1 1\n",
241 "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 + \u2500\n",
229 242 " x x"
230 243 ]
231 244 }
232 245 ],
233 246 "prompt_number": 10
234 247 },
235 248 {
236 249 "cell_type": "code",
237 250 "collapsed": false,
238 251 "input": [
239 252 "simplify(a)"
240 253 ],
241 254 "language": "python",
255 "metadata": {},
242 256 "outputs": [
243 257 {
244 258 "latex": [
245 259 "$$\\operatorname{sin}\\left(x\\right)$$"
246 260 ],
247 261 "output_type": "pyout",
248 262 "png": "iVBORw0KGgoAAAANSUhEUgAAADAAAAASCAYAAAAdZl26AAAABHNCSVQICAgIfAhkiAAAAnNJREFU\nSInt1VuojmkUB/Df3mO22cgph7Bz2kn5UCMXUqa5MG3JuFNuHAs55kJsZWaScOHQ1IxpXM0lI8lc\nKHMqKRGGpI2UiJkmJYfSyGHsuXjW63u8fV8T7ZLa/5vv+6/nWev5r+dZa7285/jgLf164w8043TX\nyXlzNL6lXz/8gzNdqKUb3XgXaKhhG4CteCTV+XPsjrUWrMRk7MPxzG82Fkj9sRgDMR+9MA1bcDLb\n34jP8HPwCViCnhFjBTZgEIaiPbQ9ws16CTXiKiYGb8U9fBJ8H/pgM05lfk34Pv5fxlGsUr2gdlwp\nnTUvYsEo7FUdKofQEQlOlS5xeaxtKgvOMR0jcSv4Q+zEObThBB5jJu5kfjOk223AcLzAd+iM9QYM\nKZ01LGLBWnyFl8Gb8AS/4m5oOBRrHaiogwlx6A18E8IKjJK+G2PjoLaSmGaptDpLfnAQv2S8Gesz\nPqa0/09sr6NxvFRqdbEMt0NIp1TzOXZIL1TrG7Je6pumzPah9JIbM9tw1ZKoJbBTeuVaaJZK+H9R\nwSWcz2w98De+CN5a8vkJv5dsc/EvRkgN2iI19rY6567E09hTID9nHNYUJL/F/biY8Q78KDV1gTZp\nIvyA/liarTVKzX6iJGhh2P7CIgyWXulFrPfEl5gUfBauxR5So78SHAmcq5VABUcyPgSfY1dma8F1\nqUbXqU4e+DiSKicwAr9JI7Ciekl3IplPpbHdGjFGZ8k1RXJfZ/Em42xB8u9ARcq+L55FkONSGRUY\ngAORxGGvz/W5Un9MCf8Cc7BaKsVvpalSiJuHY9J4vh9+7diDj/BAGgBF0lPi94JudKNr8B+fxX1B\n89kW1gAAAABJRU5ErkJggg==\n",
249 263 "prompt_number": 11,
250 264 "text": [
251 265 "sin(x)"
252 266 ]
253 267 }
254 268 ],
255 269 "prompt_number": 11
256 270 },
257 271 {
258 272 "cell_type": "code",
259 273 "collapsed": false,
260 274 "input": [
261 "eq = Eq(x**3 + 2*x**2 + 4*x + 8, 0)",
275 "eq = Eq(x**3 + 2*x**2 + 4*x + 8, 0)\n",
262 276 "eq"
263 277 ],
264 278 "language": "python",
279 "metadata": {},
265 280 "outputs": [
266 281 {
267 282 "latex": [
268 283 "$$x^{3} + 2 x^{2} + 4 x + 8 = 0$$"
269 284 ],
270 285 "output_type": "pyout",
271 286 "png": "iVBORw0KGgoAAAANSUhEUgAAALIAAAAZCAYAAACVUXRFAAAABHNCSVQICAgIfAhkiAAABSRJREFU\neJzt2nnsHVMUwPHPrz+UtlpNiKK6KJFaSkQsjajtD0sliFRCE0uF8I9dbN2oiCKI0NhfEZTYUoJY\n/7DE9gciSC2xhFhraS1Ff/44M/p+09f2zXtvOn0y32QyM3fu3HvOzJ1zzzl3qKj4H9DT4n37YCyG\nYxLm4dlOCVUCe+JQbIDxmIF3SpWoYq3wOY5PjqdhCQaWJ05bDMGNdedT8CuGlSNOxdpkJwxOjo/G\n77p3IE/AcoxLzoeiD5NLk6iiFO7FxWUL0QY9wrVI3awdxUAeX5pEFblp1UeG3XA4RuIM/NYRiZpj\nB1wlfNpheAWzsbgDbd+Nb3FOB9pqlXOxPq4oUYZGDMcF6BXPvRcz8UXB/Y4U7/tr/CyezbX4oZOd\nnIK3sFEnG10N2+MljErOh+PdZNuyzbanYa72PvB2GY2lmFWiDI3YBAuwRV3ZBLwnBlpR9OIjMc5S\n5uBpDGin4T3xjchaENaxDwe30eYErNdk3UcwMVM2MZHh+jZkmCwGMvFRjmmjrTz6ZLlF6DKrjf6b\nJY+cU3FJg/K5OLtjEq3McfjTipgMthPP6KS0oJUR/T0W4avkfBcsE1a5Vc7W/Fc9EXdg47qy14Wy\nB7XY/yRsjicwAkfqb3nykkefeo7C8230m5c8cu4mMlXZoP4fxWZ4zsPLYpZKWYRPdCAgP1L4cRdh\nobDS7VDTvAV8WfjjIzLlPwvfNi/biHRbX2Yb2kJbKTX5LfoQ3JYcry2LXNO8nFOEXAuEOweDhEtX\nVGC8nsgo3dzg2tP4sb5iPTvgRPHVDcOpYsBuKizWBfhMTO9lMUm89J/qykaJgfd4pm4z+nyiv3Uv\niwutObhr9v0UwaNi0WsK9sX5OEYExe8X1OfmIl5Z0uDaUvFBDcSf9QN5NE4WD2Y5HhDuwpkiG/Aq\nXhA+XJn8rf8ghtOFzPUDoVv0gV3Fy/p4NXXK1mcZjsCDOAR3CVfs7dXcc4dwSfJwJl5MjtNZd2mD\nemnZJiJm+4+r9bdMj+LN5HhrXJrcVAQ1rQdX24pBMDtT3i36DMB8kUpMaeRaFKFPTb7nfqxYBT1M\nzGR9yb6orMVOVu1m3Z9c2yx7YWzm/Etc3mnJVkFNawN5Q7whIucs3aLPadg/U9bo5RWhT03zcp4g\nLHDKYJHLXS7y+EWwvgjiZzW4tlDMEj3095E/rTveHluJqaqTzBdZjiyjsEciWJZpGmdEenAnnsL0\nBte7QZ8Rwu+d10Rf7ejTied+qlj4SlmKs/AhbhKW8bsm5WmWv/CBFcFlPUNEcN+3ugZOE1/CoLqy\ncauo2wlq8lvkOVYewCesou66qs9UPCPchHR7QrycD5Lzoxrc1yl9mpVzsLC8jVyXHvxi5RkDbhXu\nT55tUqaNu/FwpqxXxElPZjscKH5d3Dk5f0x/J36ImEaKoibfQD5R+IRZbk/23aZPPWOs7FoUpU9N\n83K+Ln5JyLK3WN0rinPFUnT9yvFe4hkdmBakrsV+Ilh6JykbI7IDRBAyA9cVKGweDhDr7k/hnrry\ngcJq0F36ZBma2bNu6HOZiEUWidmCCPJmiExDUdwulqdPxg1J2Ul4Dc+lldKB/Jr4i+1A4S/tjmtE\nKmcx7lNcfjIvD4kp7rgG1+Yk+27SJ2WosLSp1T1DWLsrRTqqbH0WJn3MFFN7r/Bhp1uRPSmCxWIF\nb7pwVQhXp9HsUDo17f3bsK5R0x361HSHnGukrb+HOsgv+KNsITpIt+jTLXJWVFRUVFRUVFRUVOTk\nX/JnRRiZjdxGAAAAAElFTkSuQmCC\n",
272 287 "prompt_number": 12,
273 288 "text": [
274 "",
275 " 3 2 ",
289 "\n",
290 " 3 2 \n",
276 291 "x + 2\u22c5x + 4\u22c5x + 8 = 0"
277 292 ]
278 293 }
279 294 ],
280 295 "prompt_number": 12
281 296 },
282 297 {
283 298 "cell_type": "code",
284 299 "collapsed": false,
285 300 "input": [
286 301 "solve(eq, x)"
287 302 ],
288 303 "language": "python",
304 "metadata": {},
289 305 "outputs": [
290 306 {
291 307 "output_type": "pyout",
292 308 "prompt_number": 13,
293 309 "text": [
294 310 "[-2, -2\u22c5\u2148, 2\u22c5\u2148]"
295 311 ]
296 312 }
297 313 ],
298 314 "prompt_number": 13
299 315 },
300 316 {
301 317 "cell_type": "code",
302 318 "collapsed": false,
303 319 "input": [
304 "a, b = symbols('a b')",
320 "a, b = symbols('a b')\n",
305 321 "Sum(6*n**2 + 2**n, (n, a, b))"
306 322 ],
307 323 "language": "python",
324 "metadata": {},
308 325 "outputs": [
309 326 {
310 327 "latex": [
311 328 "$$\\sum_{n=a}^{b} \\left(2^{n} + 6 n^{2}\\right)$$"
312 329 ],
313 330 "output_type": "pyout",
314 331 "png": "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\nTkSuQmCC\n",
315 332 "prompt_number": 14,
316 333 "text": [
317 "",
318 " b ",
319 " ___ ",
320 " \u2572 ",
321 " \u2572 \u239b n 2\u239e",
322 " \u2571 \u239d2 + 6\u22c5n \u23a0",
323 " \u2571 ",
324 " \u203e\u203e\u203e ",
334 "\n",
335 " b \n",
336 " ___ \n",
337 " \u2572 \n",
338 " \u2572 \u239b n 2\u239e\n",
339 " \u2571 \u239d2 + 6\u22c5n \u23a0\n",
340 " \u2571 \n",
341 " \u203e\u203e\u203e \n",
325 342 "n = a "
326 343 ]
327 344 }
328 345 ],
329 346 "prompt_number": 14
330 347 },
331 348 {
332 349 "cell_type": "markdown",
350 "metadata": {},
333 351 "source": [
334 352 "<h2>Calculus</h2>"
335 353 ]
336 354 },
337 355 {
338 356 "cell_type": "code",
339 357 "collapsed": false,
340 358 "input": [
341 359 "limit((sin(x)-x)/x**3, x, 0)"
342 360 ],
343 361 "language": "python",
362 "metadata": {},
344 363 "outputs": [
345 364 {
346 365 "latex": [
347 366 "$$- \\frac{1}{6}$$"
348 367 ],
349 368 "output_type": "pyout",
350 369 "png": "iVBORw0KGgoAAAANSUhEUgAAABkAAAAeCAYAAADZ7LXbAAAABHNCSVQICAgIfAhkiAAAAPpJREFU\nSInt1aFKBFEUh/Gfq0WDCO6iguhoMwg2k6YFi7DRaBKMvoDZavYhDBaDLyBo2CfQJhgMgm6wjGHu\nLOOAgnIWXHa/cs+ce/n+3GHmXoaMOdxgpT4xFRRwhCbaaAQ5vyVHVm8OPHUc8j9DJoM8hzjBFtaw\niNsg96gxUak3cVHr/UQXx78N+St5gGNIiHhdJR1MYwazOA90o7hHzlKd4SMFhdHAE1YrvfXqgoib\ncQNLih3sYhtXeAhw9zlQfMY76Xker1guF0Scwm9pvE/jC3rYjwzpKnZSPdFzvAe4v3CNvVS38IyF\ncjLqP2niFI9Jfom7IPeYAfAJyood4uaM00cAAAAASUVORK5CYII=\n",
351 370 "prompt_number": 15,
352 371 "text": [
353 372 "-1/6"
354 373 ]
355 374 }
356 375 ],
357 376 "prompt_number": 15
358 377 },
359 378 {
360 379 "cell_type": "code",
361 380 "collapsed": false,
362 381 "input": [
363 382 "(1/cos(x)).series(x, 0, 6)"
364 383 ],
365 384 "language": "python",
385 "metadata": {},
366 386 "outputs": [
367 387 {
368 388 "latex": [
369 389 "$$1 + \\frac{1}{2} x^{2} + \\frac{5}{24} x^{4} + \\operatorname{\\mathcal{O}}\\left(x^{6}\\right)$$"
370 390 ],
371 391 "output_type": "pyout",
372 392 "png": "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\n",
373 393 "prompt_number": 16,
374 394 "text": [
375 "",
376 " 2 4 ",
377 " x 5\u22c5x \u239b 6\u239e",
378 "1 + \u2500\u2500 + \u2500\u2500\u2500\u2500 + O\u239dx \u23a0",
395 "\n",
396 " 2 4 \n",
397 " x 5\u22c5x \u239b 6\u239e\n",
398 "1 + \u2500\u2500 + \u2500\u2500\u2500\u2500 + O\u239dx \u23a0\n",
379 399 " 2 24 "
380 400 ]
381 401 }
382 402 ],
383 403 "prompt_number": 16
384 404 },
385 405 {
386 406 "cell_type": "code",
387 407 "collapsed": false,
388 408 "input": [
389 409 "diff(cos(x**2)**2 / (1+x), x)"
390 410 ],
391 411 "language": "python",
412 "metadata": {},
392 413 "outputs": [
393 414 {
394 415 "latex": [
395 416 "$$- 4 \\frac{x \\operatorname{sin}\\left(x^{2}\\right) \\operatorname{cos}\\left(x^{2}\\right)}{x + 1} - \\frac{\\operatorname{cos}^{2}\\left(x^{2}\\right)}{\\left(x + 1\\right)^{2}}$$"
396 417 ],
397 418 "output_type": "pyout",
398 419 "png": "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\nRCKRSCQWBq8BH7XPIH70GuoAAAAASUVORK5CYII=\n",
399 420 "prompt_number": 17,
400 421 "text": [
401 "",
402 " 2 ",
403 " \u239b 2\u239e \u239b 2\u239e \u239b 2\u239e",
404 " 4\u22c5x\u22c5sin\u239dx \u23a0\u22c5cos\u239dx \u23a0 cos \u239dx \u23a0",
405 "- \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 - \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",
406 " x + 1 2",
422 "\n",
423 " 2 \n",
424 " \u239b 2\u239e \u239b 2\u239e \u239b 2\u239e\n",
425 " 4\u22c5x\u22c5sin\u239dx \u23a0\u22c5cos\u239dx \u23a0 cos \u239dx \u23a0\n",
426 "- \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 - \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n",
427 " x + 1 2\n",
407 428 " (x + 1) "
408 429 ]
409 430 }
410 431 ],
411 432 "prompt_number": 17
412 433 },
413 434 {
414 435 "cell_type": "code",
415 436 "collapsed": false,
416 437 "input": [
417 438 "integrate(x**2 * cos(x), (x, 0, pi/2))"
418 439 ],
419 440 "language": "python",
441 "metadata": {},
420 442 "outputs": [
421 443 {
422 444 "latex": [
423 445 "$$-2 + \\frac{1}{4} \\pi^{2}$$"
424 446 ],
425 447 "output_type": "pyout",
426 448 "png": "iVBORw0KGgoAAAANSUhEUgAAAEwAAAAfCAYAAABNjStyAAAABHNCSVQICAgIfAhkiAAAArVJREFU\naIHt2UuojVEUwPHfRd7PgRK6ySNdQgaIcCUjr5HkMUAoQyUDA0oMRPIoAyaOmBmYEGFgIEIkjwgD\nIzGhkLwZ7A+f757rnu/Y373Hdf61u3vvb5+11ll37bXW16FOLho62oAaZBrmozuasA13OtSiyAzE\nBTRGkNUXh1LrpXiDARFk1wTrsQXfMCKCvIn4ilHJun8ie2EE2TVFLIc1CFfyR6oan8huiiC7BeNw\nRrge17Efg4pQVIZYDstyHHsLkGssLvuVRwbhbjKGFqEwQxEOW4vdCiqMpzAjszdD+CIHqpA3Ed1y\nnI/tsIWCw6BXZNngBR6iX2qvG97jfhXySvIZGdNhzYKzhiRjBab/eJjnv/gnnmAy+ghlGD7jAwZH\n0tEejMRpob1I87Ot6BJJUbOQq56n9hqFsnwtko5yrMLRZL4fG1s51w878FKIxnLjK4YlZxsy43Ux\n5v/OLnzRMrdVQkncvHECB4UO/jDWYZ4QTYuS+UzxAig3o/EW26v8fEk8hy3HstT6JLom80uRdPwV\nPXFDKMnVUlJMXzVQqOiE6ncvr4B00p+AIyrvO25jQ2avQcgp57C1AhnHMKnMfiOm4mOZZ2txs0Ib\ns6zE1WTehHdVyonGTi0dtboKOSVtR1hryTs9stzGlGS+QKjouRrTmElujVBpdmT2Z0XUkSZbycqN\nNLOFyL2VrPsL7cOYPEpj9WFzsUe4iidS+z0EJ9YCm3BRqNzwLPk7GY/a25hXWr8W2YirhJL8SX+v\n0Bq0xoPM8964gsU59dQkJfkc1iy8ns0pwJbf6LBGrQ1eC++hlTBAqLQPijOnc7FZyJWX/McRVimL\ncVZ4yW8X/mWHDRU699zd+t/Qte0jNcsSwWkzkzHfrzbmcQfa9c/wVDvksM7AcOzDJ5zXCX8Sq1On\nTp1YfAdxIoFGVphKVAAAAABJRU5ErkJggg==\n",
427 449 "prompt_number": 18,
428 450 "text": [
429 "",
430 " 2",
431 " \u03c0 ",
432 "-2 + \u2500\u2500",
451 "\n",
452 " 2\n",
453 " \u03c0 \n",
454 "-2 + \u2500\u2500\n",
433 455 " 4 "
434 456 ]
435 457 }
436 458 ],
437 459 "prompt_number": 18
438 460 },
439 461 {
440 462 "cell_type": "code",
441 463 "collapsed": false,
442 464 "input": [
443 "eqn = Eq(Derivative(f(x),x,x) + 9*f(x), 1)",
444 "display(eqn)",
465 "eqn = Eq(Derivative(f(x),x,x) + 9*f(x), 1)\n",
466 "display(eqn)\n",
445 467 "dsolve(eqn, f(x))"
446 468 ],
447 469 "language": "python",
470 "metadata": {},
448 471 "outputs": [
449 472 {
450 473 "latex": [
451 474 "$$9 \\operatorname{f}\\left(x\\right) + \\frac{\\partial^{2}}{\\partial^{2} x} \\operatorname{f}\\left(x\\right) = 1$$"
452 475 ],
453 476 "output_type": "display_data",
454 477 "png": "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\n",
455 478 "text": [
456 "",
457 " 2 ",
458 " d ",
459 "9\u22c5f(x) + \u2500\u2500\u2500(f(x)) = 1",
460 " 2 ",
479 "\n",
480 " 2 \n",
481 " d \n",
482 "9\u22c5f(x) + \u2500\u2500\u2500(f(x)) = 1\n",
483 " 2 \n",
461 484 " dx "
462 485 ]
463 486 },
464 487 {
465 488 "latex": [
466 489 "$$\\operatorname{f}\\left(x\\right) = C_{1} \\operatorname{sin}\\left(3 x\\right) + C_{2} \\operatorname{cos}\\left(3 x\\right) + \\frac{1}{9}$$"
467 490 ],
468 491 "output_type": "pyout",
469 492 "png": "iVBORw0KGgoAAAANSUhEUgAAAQUAAAAeCAYAAAAl8At9AAAABHNCSVQICAgIfAhkiAAACFtJREFU\neJzt3HvQVVUZx/EPCBgKKIlgJiAgYoI0gYoYKTPh2CDiZYZqKgejAbKbjmVi3tJKy6jMZIqcqdex\nTBMdbWoKm+6hTYOalNLkkMpQlBYmVnax6I9n784++z2Xfc5747zs78yZ9+y19tr72eu39lrPetY6\nLyUlJSUlJSX7PAfju5iUzxjW/7aUlJQMMCsxDoswdIBtKSkp2YvYgyPziUV6iaNwBz6Ndb1rU59z\nNC7GXdiE+3E7pmAIbsVhvXSvA7EluV9PGa67WDNwCz6PH+BOvLrN60/AmHaN6wX6U5feJK/LYNKk\nMCOwDSuwHi/igAG1qBj7YQ1+j3dheiZvIn6IL+PXvXjPw/EznNzD6wzD1arreTo2YnRyPEQ0wN2Y\n1cY9hmOt/p8+DoQuvUVel8GgSU1PoRlnJgWn4UQ9b/D9wSQ8iKdwTJ1z5ojnurmfbGqF92N2Lu1K\n/EfokfIW8QzXtXmf1+KGNsvO1nrjHWy6DAZN2po+LMSfhbfwczzQ4k37m2HCJT0M89UfcR7GM/he\nP9lVlNGi492SS38MO7Erk/bf5O9f2rzXJhGBPqiNshfjiBbOH4y6dLomdWnWKZwoOoNO4Vph85VC\nsEY8IeaBexOnidE0zz1C8E2ZtPn4J77Zg/ttwfIelC/KYNSl0zWpSz13Yz0mY4Ho1b8jxLpQVNDG\nzLnH4u3YX/Rwq/EBseQxQcwhx+J5PNnrT1DhNbgUj4ugVTM+p3iPPhbXiGf4O/4t5n9Ew7hAuG/r\nRF2lLMZ5ol7Ox8vxZjEvPQlX4MeZ8xfi7gL2zMLbRKzn8VxeET2eTs79TWLXTQXu2S59qcvRwmWf\nJNrn31Q/y1RR39MwUrT3C3XvmBrpSzFdOkmT5eKZ4EYRy7mxSMGpYs5xbiZtGUZljieLVYnU4/i6\ncKtOw/GiclcleZc2uNeX8IsWPwtz17g8sXdlkYdrgaHYqhI8moY/4ZTkeJ2ok8tUjxoj8IXk+y9x\nrwiuDUnS1ujeeO7BzAa2LMHHRaOuNZq0okd6fjtTwi7FA1R9pcvx+J3oeNPjZ1TiXrOxA2ep1PlH\nsVm1h9xMXxrr0omatM25QsypmbT35c5ZqxJ9JRr+5uT7ROE2HpwcL9G4wfeUbwt75/bydReIESjt\nDA8RQaeROF10lMQ8+I5MudeLUWyIiMtsyF33MtH4smzEqwrYNEzsRvt+YkdKK3oQy6jtRPq7FG+A\nfaHLDDyLqzJpZ4oR71CxjL5TPG+WBYkt83Np9fRNKaJLJ2nSNtcKdyrtZUfiotw5U3LHO/CxOteb\nIVyovmKXiAaPbHaicDuLcqxoSNuEa/u6TN5kscw2VQSZTs/kvSKxZXZSPluO6EDuz6V9RXU0uxGn\nJNftyqS1oofEtp8UvF+WLsUbYF/ocqd46Q+sk387/qDaqyUGpj04J5PWSN+Uorp0iiZt8w38KHN8\nuGo3J88MUSGL6uSPFKNjX/GIGJGbcSiub/HaK7FdPN8eEUPIcp1YaqsVuL1IzFNHZNKGi3nzB3Pn\nXiHmmnkm6r5MOSaxZXdyvTzN9CC8nC82yL9V7anbLjH1qZWX9wh6W5ehwsPqapD/bJ38NaJO8i9q\nM31r6dLJmrTN0/hs5vgAfKTB+ReIyGt20820zPfpeE+dsrcIl6qVz6m5a3xGVHi3H3jkuEYEd7LU\n/XFIjpl4VMX9I9zGnSKyTvUzw326L7EtFaPnK0XwKV1KmivqIsvLhMf2Uu7aE8Tz/jU5J08zPYjG\nflaNss3oUnxUaleXeUna9cLlTl/A45Lr1eo8m+U/pnscJ0stfemuSydrsqfApyaHJJkrculXZ77v\nL+Z0xyXH94kKTRklGkTKYiF0X3ES/iFGg3qsTj5ZVgoPptZGjvVipMvyIdyWOT5DTB2OEJ1L1jUc\niudUOoyUDSodxSoRoU+5W/U69VARUHtEtQu+NLH53uS4VT2GC28w68EUpUvxTqEdXUap3lL/Rrwg\n6uUgUd/n1bjOLPFC1cpPO+JsPKGIvilZXTpdk7ZYpHZwaIVw84j58x6cLRr1o3goyRshdmZNzpRd\noxKf6CveIFz196oWa4aIEC+uVSihVqfwU9Uv9HixXp11G1erBIauEm5lyly14wkPio5orGpvjFjP\nzy8PXSI6m7T+xoulz+0qAbB29FimPbq01gBb1WW2eLHTUTR1y5ckx3eJeX6WxSKoN7xG/jHiJT4/\nV6aIvil5XTpdk7rUe0kvEUtJ44SLlDJCGP1VMSquE3OZf4kH+pRwm54TgbS0F56T/H24N4xuwgl4\nk/BKXhSu/ROJzY32SaRzzacyaTNFgx4jnvElIXy2tx+Lr4n15Q2q9x0sFfGGOUn5lCV4t3BTb8Yf\nc7acLRpXtr7OEKsZRHR9i3CvdyRpregxUYyo7W4n7sKHVddVM1rRZYjKxrk9QodfiaDgVjECrxUD\n1HYxcj8kdJDL350cfzK5RpYi+mbJ69KpmhwlBrPfCl3WajytQhhbZBPNYKKtH4fso3Tp37q6TbxM\nJfXpUkyTkcJrSqc0U4Sn+/8geTZavkplN94JurtnJSUpu0WcoD94h/Aq6gUWS4KimiwQK4lbk+Mn\nRYB0fq2THxAdwTzxE+B9jdJT2PtYIjoFYoQ7cuBMGTTME209uwLyvNhti2pP4RNirrcMb+0P60pK\nGnCqGMG+JX5deY7YEFbSMzaLnZ/pkv7JYgNefqPXPs1y8Y890qWk/K7Nkv5nqliCzK+fd8R/JuoA\nRuOd4gdcc8XmsiUNS5SUlAxqsquO48Rmq/EDZEtJSclewDaVX5NeLvd/Rffrd3NKSkoGmhfExrD0\np9s3abC9uaSkpKSkpKSkpKSkpKSkpKQI/wMAw3NBVNU8+QAAAABJRU5ErkJggg==\n",
470 493 "prompt_number": 19,
471 494 "text": [
472 495 "f(x) = C\u2081\u22c5sin(3\u22c5x) + C\u2082\u22c5cos(3\u22c5x) + 1/9"
473 496 ]
474 497 }
475 498 ],
476 499 "prompt_number": 19
477 500 },
478 501 {
479 502 "cell_type": "markdown",
503 "metadata": {},
480 504 "source": [
481 "# Illustrating Taylor series",
482 "",
483 "We will define a function to compute the Taylor series expansions of a symbolically defined expression at",
505 "# Illustrating Taylor series\n",
506 "\n",
507 "We will define a function to compute the Taylor series expansions of a symbolically defined expression at\n",
484 508 "various orders and visualize all the approximations together with the original function"
485 509 ]
486 510 },
487 511 {
488 512 "cell_type": "code",
489 513 "collapsed": true,
490 514 "input": [
491 "# You can change the default figure size to be a bit larger if you want,",
492 "# uncomment the next line for that:",
515 "# You can change the default figure size to be a bit larger if you want,\n",
516 "# uncomment the next line for that:\n",
493 517 "#plt.rc('figure', figsize=(10, 6))"
494 518 ],
495 519 "language": "python",
520 "metadata": {},
496 521 "outputs": [],
497 522 "prompt_number": 20
498 523 },
499 524 {
500 525 "cell_type": "code",
501 526 "collapsed": true,
502 527 "input": [
503 "def plot_taylor_approximations(func, x0=None, orders=(2, 4), xrange=(0,1), yrange=None, npts=200):",
504 " \"\"\"Plot the Taylor series approximations to a function at various orders.",
505 "",
506 " Parameters",
507 " ----------",
508 " func : a sympy function",
509 " x0 : float",
510 " Origin of the Taylor series expansion. If not given, x0=xrange[0].",
511 " orders : list",
512 " List of integers with the orders of Taylor series to show. Default is (2, 4).",
513 " xrange : 2-tuple or array.",
514 " Either an (xmin, xmax) tuple indicating the x range for the plot (default is (0, 1)),",
515 " or the actual array of values to use.",
516 " yrange : 2-tuple",
517 " (ymin, ymax) tuple indicating the y range for the plot. If not given,",
518 " the full range of values will be automatically used. ",
519 " npts : int",
520 " Number of points to sample the x range with. Default is 200.",
521 " \"\"\"",
522 " if not callable(func):",
523 " raise ValueError('func must be callable')",
524 " if isinstance(xrange, (list, tuple)):",
525 " x = np.linspace(float(xrange[0]), float(xrange[1]), npts)",
526 " else:",
527 " x = xrange",
528 " if x0 is None: x0 = x[0]",
529 " xs = sym.Symbol('x')",
530 " # Make a numpy-callable form of the original function for plotting",
531 " fx = func(xs)",
532 " f = sym.lambdify(xs, fx, modules=['numpy'])",
533 " # We could use latex(fx) instead of str(), but matploblib gets confused",
534 " # with some of the (valid) latex constructs sympy emits. So we play it safe.",
535 " plot(x, f(x), label=str(fx), lw=2)",
536 " # Build the Taylor approximations, plotting as we go",
537 " apps = {}",
538 " for order in orders:",
539 " app = fx.series(xs, x0, n=order).removeO()",
540 " apps[order] = app",
541 " # Must be careful here: if the approximation is a constant, we can't",
542 " # blindly use lambdify as it won't do the right thing. In that case, ",
543 " # evaluate the number as a float and fill the y array with that value.",
544 " if isinstance(app, sym.numbers.Number):",
545 " y = np.zeros_like(x)",
546 " y.fill(app.evalf())",
547 " else:",
548 " fa = sym.lambdify(xs, app, modules=['numpy'])",
549 " y = fa(x)",
550 " tex = sym.latex(app).replace('$', '')",
551 " plot(x, y, label=r'$n=%s:\\, %s$' % (order, tex) )",
552 " ",
553 " # Plot refinements",
554 " if yrange is not None:",
555 " plt.ylim(*yrange)",
556 " grid()",
528 "def plot_taylor_approximations(func, x0=None, orders=(2, 4), xrange=(0,1), yrange=None, npts=200):\n",
529 " \"\"\"Plot the Taylor series approximations to a function at various orders.\n",
530 "\n",
531 " Parameters\n",
532 " ----------\n",
533 " func : a sympy function\n",
534 " x0 : float\n",
535 " Origin of the Taylor series expansion. If not given, x0=xrange[0].\n",
536 " orders : list\n",
537 " List of integers with the orders of Taylor series to show. Default is (2, 4).\n",
538 " xrange : 2-tuple or array.\n",
539 " Either an (xmin, xmax) tuple indicating the x range for the plot (default is (0, 1)),\n",
540 " or the actual array of values to use.\n",
541 " yrange : 2-tuple\n",
542 " (ymin, ymax) tuple indicating the y range for the plot. If not given,\n",
543 " the full range of values will be automatically used. \n",
544 " npts : int\n",
545 " Number of points to sample the x range with. Default is 200.\n",
546 " \"\"\"\n",
547 " if not callable(func):\n",
548 " raise ValueError('func must be callable')\n",
549 " if isinstance(xrange, (list, tuple)):\n",
550 " x = np.linspace(float(xrange[0]), float(xrange[1]), npts)\n",
551 " else:\n",
552 " x = xrange\n",
553 " if x0 is None: x0 = x[0]\n",
554 " xs = sym.Symbol('x')\n",
555 " # Make a numpy-callable form of the original function for plotting\n",
556 " fx = func(xs)\n",
557 " f = sym.lambdify(xs, fx, modules=['numpy'])\n",
558 " # We could use latex(fx) instead of str(), but matploblib gets confused\n",
559 " # with some of the (valid) latex constructs sympy emits. So we play it safe.\n",
560 " plot(x, f(x), label=str(fx), lw=2)\n",
561 " # Build the Taylor approximations, plotting as we go\n",
562 " apps = {}\n",
563 " for order in orders:\n",
564 " app = fx.series(xs, x0, n=order).removeO()\n",
565 " apps[order] = app\n",
566 " # Must be careful here: if the approximation is a constant, we can't\n",
567 " # blindly use lambdify as it won't do the right thing. In that case, \n",
568 " # evaluate the number as a float and fill the y array with that value.\n",
569 " if isinstance(app, sym.numbers.Number):\n",
570 " y = np.zeros_like(x)\n",
571 " y.fill(app.evalf())\n",
572 " else:\n",
573 " fa = sym.lambdify(xs, app, modules=['numpy'])\n",
574 " y = fa(x)\n",
575 " tex = sym.latex(app).replace('$', '')\n",
576 " plot(x, y, label=r'$n=%s:\\, %s$' % (order, tex) )\n",
577 " \n",
578 " # Plot refinements\n",
579 " if yrange is not None:\n",
580 " plt.ylim(*yrange)\n",
581 " grid()\n",
557 582 " legend(loc='best').get_frame().set_alpha(0.8)"
558 583 ],
559 584 "language": "python",
585 "metadata": {},
560 586 "outputs": [],
561 587 "prompt_number": 21
562 588 },
563 589 {
564 590 "cell_type": "markdown",
591 "metadata": {},
565 592 "source": [
566 593 "With this function defined, we can now use it for any sympy function or expression"
567 594 ]
568 595 },
569 596 {
570 597 "cell_type": "code",
571 598 "collapsed": false,
572 599 "input": [
573 600 "plot_taylor_approximations(sin, 0, [2, 4, 6], (0, 2*pi), (-2,2))"
574 601 ],
575 602 "language": "python",
603 "metadata": {},
576 604 "outputs": [
577 605 {
578 606 "output_type": "display_data",
579 607 "png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD3CAYAAAAT+Z8iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXdYVMfXx79LUSwIIihEQaQoqCBF0CQWNBEVbIm996Bv\n7DEFTX62aNTYIrEkJvbegwXFwoJYQBFLFESRZgFBpffdef8YISJt+70X5vM8+8S7d3bmuzfLuXPP\nnDlHRAghYDAYDEaNRYtrAQwGg8FQL8zQMxgMRg2HGXoGg8Go4TBDz2AwGDUcZugZDAajhsMMPYPB\nYNRwlDL0SUlJ6NGjB9q1awcPDw/s37+/wna+vr6wsrKCq6sroqOjlRmSwWAwGHIiUiaOPjk5GcnJ\nyXByckJaWhrc3d1x9+5d6Ovrl7YJDw/HvHnz4O/vj/Pnz2Pfvn04ffq0SsQzGAwGo3qUmtGbmprC\nyckJAGBsbIx27drh1q1bZdqEhYVhyJAhMDIywsiRIxEVFaXMkAwGg8GQEx1VdfTkyRM8ePAA7u7u\nZd4PDw/H2LFjS49NTEwQGxsLa2vrMu1EIpGqpDAYDEatojrHjEoWY7OysjB8+HCsX78eDRo0KCfg\nQxGVGfWStkJ8jR8/nnMN8r5ORJ2A2RozDB45mHMtte3av/8aPnYsDK9cgUQq5VxLbbz+QtcvC0ob\n+qKiIgwePBhjx47FwIEDy53v1KkTHj58WHqcmpoKKysrZYdlKMmNZzcw9dRU+I/0R8M6DbmWU6tJ\nKSzEJ40aQYs91TLUhFKGnhCCyZMno3379pgzZ06FbTp16oRjx47h9evX2L9/P+zt7ZUZkrdYWlpy\nLUFmnrx5gi8OfYGdA3ei40cdBaW9IoSuP79pU3QxMOBahsII/foLXb8sKOWjv3r1Kvbu3QtHR0c4\nOzsDAFasWIHExEQAgI+PD9zd3dGlSxd07NgRRkZG2Lt3r/KqeYiHhwfXEmQiNScVfff1xRKPJfBu\n7Q1AONorQ+j637Zvj66GhlzLUBihX3+h65cFpQx9ly5dIJVKq223cuVKrFy5UpmhGCogtygX/Q70\nw/B2w/GV61dcy2EAyJZIEJ+Xh47vhSQzGKpGZVE3DH4jkUow6tgotGnSBst6LONaTo2hZ8+eyMzM\nVPjz+VIpmuTmosuePSpUpVny8/Ohp6fHtQyFEYr+Ro0a4fLlywp9VqkNU6pEJBLJvILMkA9CCGYG\nzER0WjTOjj6LOtp1uJZUY+jYsWO5vSPy8KKgAFIALerWVZ0oRo2kst+aLLaTzehrAWuurUFIQgiu\nTLzCjDzPyJJI0KwO+3/CUC8sqZmKEIvFXEuokAP3D8Av3A9nR5+FgV7FkR181S4rQtUvJQQ5EgmQ\nm8u1FKXIysriWoJSCF2/LLAZfQ0mOD4Ys8/NxqVxl9CiUQuu5TA+IE8qRV0tLWjLENDAYCgDm9Gr\nCL6FaD1MfYhhR4fhwOADcGjmUGVbvmmXF6Hqz5ZI0FBbu0wSQHXzyy+/YOrUqTK3j4uLg6OjY5Vt\nSvR7e3sjODhYKX1coMnrzxVsRl8DeZH1Al77vLCm1xp8ZvUZ13IYlZBZXIwmuroaHdPX11eu9qtX\nr8b06dNlavv1119j5cqV6N69uyLSGGqEzehVBF/8xFkFWfDe742vXL/C2A5jq/8A+KNdUYSoX0oI\nsiUS6Gtr89ZH/OrVKxw9ehTjxo2rsl2J/j59+iAmJgb37t3ThDyVwdfrr0qYoa9BFEmKMOTIELg3\nd4dvF/lmbgzNkiuRoK6WFnS11Pcn+Pfff+Pjjz+GgYEB7OzscPnyZSxevLg0m2x8fDy0tLRw/Phx\n2Nvbw9HRsczO9atXr8La2ro0UWFsbCyaNGmCyMhIAMCLFy9gYmKCq1evAgC0tLTg5uaGoKAgtX0n\nhmIwQ68iuPYTE0Lgc9oHulq62OS1Sa60z1xrVxYh6s98N5sH1OMjTktLw+LFi7F7925kZGQgMDAQ\nlpaWFf4uDh8+jMDAQKxZswZTpkxBfn4+ACA6Oho2Njal7aytrbFq1SqMGTMGeXl5mDhxIiZOnIg+\nffqUtrGxsSmTxFAI1AYfPTP0NYSlwUtx/9V9HBxyEDpabOmFD4hElb+a69WFRT29Ktu8/5J/bBHy\n8vIQExODoqIiWFhYwMrKqsKNNd999x3Mzc3h6ekJS0vL0gXVZ8+ewczMrEzbKVOmwMbGBu7u7khJ\nScHy5cvLnG/evDkSEhLkF8xQK8zQqwgu/cTbI7dj191dOD3ytEIph4Xo434foetXB02aNMGePXuw\nfv16mJmZYc6cOUhNTa2wbUmVOAAwMzPD8+fPAQAtW7bEixcvyrWfMmUKHjx4gJkzZ0JXV7eMj/vZ\ns2eCywbJfPQM3nP+yXksuLQAAaMD0KxhM67lMN6DkIpfb4uKEZ2TW3qcmZlVaduSlyL07dsXFy9e\nxMOHDxEXF4fVq1fL5dKzt7dHbGxsmfeys7MxZ84cTJkyBYsWLcLbt2/LnH/y5EmNTUUuZJihVxFc\n+IkjX0Zi7ImxODbsGNoYt1G4HyH6uN9HaPqziovR6J1/HlCPjzgmJgaXL19GQUEB6tSpg7p168o8\nTol7p3PnzoiLi0NOTk7pudmzZ8Pd3R1//vknvL29MW3atNJ+CSGIiIhAjx49VP591Anz0TN4S0J6\nAvof6I/N3pvxqcWnXMthyEGmRAJ9HfWuoxQUFMDX1xcmJibo2LEjDA0NS4sDvT+rr2iGX/KeiYkJ\nhg4dil27dgEA/vnnHwQGBmLLli0AgHXr1uH27ds4cOAAACAgIACtW7eudoMVgwMIT+CRFIUICgrS\n2Fhvct8Q+9/tyfrr61XSnya1qwMu9bu6usrVvlAiIbczM4lUKi19LzMzU9WyVEZ8fDxxcHCosk2J\nfi8vLxIcHKwJWSqFz9f/fSr7rcliO1l4hsAoKC7AF4e+QG+b3pjTueLyjQz+UjKbl8dXziUtW7aU\neQPUmTNn1KyGoSgsH72AkBIpRh8fjSJJEQ4PPQwtEfO8cY28+ejj8vLQQFsbTVlqYoacKJOPXilL\nMWnSJDRr1gwODhUnzRKLxTAwMICzszOcnZ3x888/KzNcrcf3ki8SMxKx54s9zMgLEEIIMiQSGKjZ\nP89gfIhS1mLixIk4d+5clW26d++OyMhIREZG4scff1RmOF6j7ljuTeGbcDL6JPxH+KOebj2V9i30\nOHSh6M+RSKArEqHuB2kPhB7HzfTzH6UMfdeuXdG4ceMq2zB3jPL8E/0Pll9ZjnOjz6FJ/SZcy2Eo\nSDqbzTM4Qq3P/yKRCNeuXYOTkxPmzZtXbvNFTUJdsdxhz8Iw5dQU+I/0R6vGrdQyhtDi0D9EKPoz\nioth+F78fAlCj+Nm+vmPWqcXLi4uSEpKgq6uLnbt2oXZs2fj9OnTlbafMGFC6fZpQ0NDODk5lf4R\nlzye16bj55nPMf/xfOwYuAPZMdkQx4h5pY8d/0fJ43+J0fjw+E1GBgoLCtCgfn2Z2rNjdvzhcUmy\nObFYjJ07dwKA7OkmlI3tjIuLI+3bt6+2nVQqJU2bNiX5+fkVnleBFE5RdSz3q+xXxGajDdl6c6tK\n+60IFkevOLLG0acUFJCnubkVnhNKHHdlMP2aQZk4erW6blJSUkp99KdOnYKjoyPq1q2rziFrBLlF\nueh/oD+GtRsGn44+XMthqID04mIYMv88gyOU+uWNHDkSwcHBSEtLg7m5OZYsWYKioiIAgI+PD44e\nPYotW7ZAR0cHjo6OWLt2rUpE8xFV+YklUglGHRsF2ya2+LmHZsJRheLjrgy+65e8qyZlXa/iaCmh\n+4iZfv7DNkzxCEIIZp2bhYepDxEwOgB1tNmmGr4jy4apt0VFSC0qQut3/nmhsnfvXjx+/BhPnz7F\nqFGj0LdvX64l1So42zDF+A9VxHKvvb4WwfHBOD7suEaNvFDi0CuD7/qrc9sIIY77yZMnePv2LZYs\nWYL169djzJgxePXqFQBh6K8KoeuXBWboecLBfw9iY9hGnB19FgZ6BlzLYagIKSFILy5GY4H75x88\neIDVq1cDAIyNjWFlZYWwsDCOVTFkRdi/Ph6hjJ84OD4YswJm4eK4i2jRqIXqRMkI333c1cFn/RnF\nxaivrV1lEXAufcRPnz7Ftm3bKj3fuXNnDBw4EF5eXggICABAXYwvX76Eubk5gP/0Ozg4YNeuXXBx\ncVG/cBVSG3z0zNBzzMPUhxh2dBgODD4Ax2Ysj3dN401xMYw4ms1HREQgKCgIxcXFaN++PaRSKU6e\nPInt27eXtrGyssIvv/xSbV+6urpo3749AJqlsmPHjmVKEALAsmXL0Lp160r78Pf3h7a2NkJCQtC6\ndWsEBQXhxx9/hJ2dnYLfkCErbDFWRYjFYrlnli+yXuCTvz/Bsh7LMLbDWPUIkwFFtPMJLvVXtRgr\nIQQ6S1XjHSWL5P/bOHfuHOrUqQM/Pz+cOHEChBDY2NgotUM9PT0dkydPxq5du9CwIa1PnJWVVe2s\nODExEYWFhbCxsYGzszOCgoIQGhqKnj17oj7Hi9Sy6OcDyizGshk9R2QVZMF7vzemukzl1Mgz1EdG\ncTEefZtTbbSNugxNnz594Ovri7Fj6e/r+vXrcHNzK9NGVtcNQF02K1euxF9//YWGDRsiISEBLVu2\nlEmLhYUFALq3xsDAAIaGhujXr58iX4uhAGxGzwFFkiL0P9AfFgYW+KPfH4IpQsEoT1Uz+id5eTDU\n1oYxh7nnO3fujPPnz8PAwADTpk3D0KFDUVRUhD59+sjd18aNG/Hpp5+iefPmiImJASEE3bt3Lz1/\n4sQJeHp6okGDBuU+Gx0djfz8fERGRiIuLg5Lly7F2bNn4eXlpdT3q02wGb2AIIRg2plp0NbSxmbv\nzczI11AkhCCzuBiWHO4Ez83NhaGhIQwMaBSXqakpUlJSYG9vL3dfoaGhmDt3bqlBEYlESExMLNNm\n6dKlsLa2rrBmbGBgIF6/fg0LCwvk5+fj1KlTpbN8hvphM3oVIaufeGnwUvg/8od4ghgN6zRUvzAZ\nYD56xalslvW6qAhviopgK4P/WSg+4spg+jUDm9ELhB2RO7Dzzk5cm3yNN0aeoR5eFxWhia4u1zIY\nDABsw5TKqG5GGRgbiB8u/YCzo8/CtKGpZkTJiJBn8wD/9BdIpciVSmXeJCWE2WRVMP38h83oNcCd\n5DsYc3wMjg8/DjtjFjNc00krKoKRjg602PoLgyewGb2KqCzfSmJGIvrt74dNXpvQxaKLZkXJCN9z\nxVQHn/QTQpBWVARjOdw2Qs+1wvTzH2bo1cjbvLfou68vvvn4GwxtN5RrOQwNkCGRoI5IhPoVlAxk\nMLiCRd2oiYLiAvTe2xtOpk7Y0GcD13IYauLDSIgneXkw0NaGCYex84yaCUtTzDOkRIqJ/0xEk/pN\nsNaz5hZbYZSlUCpFVnExjFi0DYNnMEOvIt73Ey+4tAAJGQnY+8VeaGvx/xGeTz5uReCL/tdFRWis\nqwttORdhhe4jZvr5D4u6UTGbwjfhRPQJXJ10FfV0Ky4dx6h5SAnBq6Ii2FZSLpDB4BKlZvSTJk1C\ns2bN4ODgUGkbX19fWFlZwdXVFdHR0coMx2s8PDzg/8gfy68sR8DoABjXN+ZakszwLQ5dXvig/21x\nMfS0tBRahBV6HDfTz3+UMvQTJ07EuXPnKj0fHh6OK1eu4NatW5g/fz7mz5+vzHC8JuxZGCb7T8Y/\nI/6BVWMrruUwNAghBMmFhTBlC7BKkZ6ejm3btmH58uUyfyYhIQFHjhzBkiVLEBERoUZ1wkYpQ9+1\na1c0bty40vNhYWEYMmQIjIyMMHLkSERFRSkzHG+JfRMLrxVe2DFwB9yau1X/ATnIzATi4oDISCAo\nCLh4ieBiEMHFYCnu3CF48QIoLFRuDL74uBWFa/2ZEgkAoJGCIZVC9xGrSr+hoSE8PT1RXFws82eu\nXr2KJk2aoF27doiJiVFoXKFff1lQq48+PDy8NBc2AJiYmCA2NhbW1tbqHFajpOakou++vpjQYQL6\ntVY8v3ZWFhARAVyJLEbQiyzEFuYipU4uCozzgCaFgEERfdWRAhIRUAzgNQGeawO5OtDNqgODgrow\n09JDe4N66G3bEP3bN4BRXbYMo25SCgvRrE6dWpOJNDw8HJcuXYKvry/XUjBq1CjExcUhMDAQS5cu\n5VoOb1GrFSCElIvvrOqPYcKECbC0tARA7+5OTk6l/teSWRufjvOL87EkYQmGtB0CT23PMlkUq/v8\n5ctiREcDCW8+xYmkt3iccQ5olQN0aw9oNQRC/wVS66IOPoMRqYM6GdfRSEsHJo17QCoR4fVrMbJy\nCHLxMV7nF6NI9xLSDIuQ1sYV91tm48CNM4BZPhrYdIaTlgEcMx6gZ3N9DOnVq5weDw8PXlxPRY+5\n1F9ICPKkUujm5SErP7/U31syS5TlWF9fX672XB43aNAA//vf/+Dq6lqa9VGV+kuQ5/OtWrWCp6cn\nFixYgDVr1lTZfvfu3fj6668Fef3z8/MB0N/ezp07AaDUXlaH0hum4uPj0b9/f9y/f7/cOT8/PxQX\nF2Pu3LkAAGtr60rLmAltw5REKsGQI0PQQLcB9nyxR6bZHCHA7dvA38cKceBlKtKdXgE22cB9A2hF\nGMGu0BBdmjeAu6sI9vaAlRXQrBlQXdcSCZCQADx6BERHA+HhwPXrQEISoTcPhwzAMR3a7m9hqqWH\noS2aYJylMZwaNqw1s1B1YdmhA66Hh8OMw7zzmuTQoUNISkpCTk4OFi1apPL+4+PjsWvXLpn7Xrhw\nIUaPHo2CggKsWbMG+/btq7L9kiVL1KJbE/A2TXGnTp0wb948jBs3DufPn1eo4AEfIYRg7vm5yMjP\nwKEhhyASiarMiZ6TA+zdT7A65DWetnsBfJIJXG8Cq0B9zBCn4rNm99HGJgV136YAGVmAWAu4og00\nbAi0aAGYmwO2toCTE1DBgp+2Nr0pWFkBffv+9/7z5yKcO9cQZ840xIV1zZGdS/C8bSZ+++Q1/vR6\nAJNGWvjKqhmsHz3CcE9PNV0t9cNVPvoHOTnIl0rRVMlFWC7zoctTSjA1NRXa2towMTFBTk5OaZsS\n/Q4ODti1axdcXFwU0pKVlYWDBw8iPDwc9+7dq7CAyYcMHDgQT548wfXr17FgwQKFx63pkTdKGfqR\nI0ciODgYaWlpMDc3x5IlS1BUVAQA8PHxgbu7O7p06YKOHTvCyMgIe/fuVYlorll3fR0ux11G6KRQ\n1NGu/I/81Stg5e/F2PzsBQo8n6POx0Dvc/FYtPskXFOCoUsKIerQAWjWBqhrCnToAOjrA1IpnaZn\nZQHPngF37tCp+uPH1Nh37w4MHUr/XcWMvHlzYPJk+srLA06fFmHPHgMEbDdA7p+tkNA+E2uGpiC/\nYQw2GzfFjBYfYZCxMXS12D46WVgcH49G2tpyb5DSFBEREQgKCkJxcTHat28PqVSKkydPYvv27aVt\nrKys8Msvv8jU3/Hjx/HVV19h9+7dFZ5ftmwZWrdurbBefX19/PDDD/jhhx/KnfP394e2tjZCQkLQ\nunVrBAUF4ccff4S7uzsAYMCAAQqPW90YdnbCzzjLct3IyaF/D2H+hfm4NukazA3MK2zz8iXwv7WF\n2JH9DNK+z2AXloqfz+xE3/hw1PHqBW2v3tRYm5tX75d5n6ws4OZNIDAQOHwY0NEBRo8Gpk8HmjaV\nuZuUFGDbNmDzZqoVOlIYD3yNxpOeIdcwH9Obf4SvzMxYvpYqiMjKQv/792E2axYiKqkZyzXnzp1D\nnTp14OfnhxMnToAQAhsbm0rdp1Vx48YN6OnpwcnJCTt37kRCQoLcLpDVq1cjLy+vwnPjx4+v1N+c\nmJiIwsJC2NjYwNnZGUFBQQgNDUXPnj1Rv5oKXlFRUWVuTKGhoejS5b8ssl27doWXl5dSY2gKZVw3\nzNDLQUhCCIYcHoKL4y7CsVn5x8rMTODndcVY/zwJ6BePz4LvYfXRrTDt8AmazhtDjbuqZsuE0DCd\nbduo0R82DJg/n7p4ZKSwEDhyBFi+HCiJfP2oazba+D5HpH4qhpqY4AcLC1ix3Z5lIISg5927GNm0\nKf4cMKDS4uAA5LuRVz2oQh/z9fWFm5sbvvzyS1y7dg0bN27EwYMHS8/L6rrx8/NDbm4uABrSmJeX\nh5kzZ6pkJl2CVgV/GyKRCJJ34aspKSkYPny4UuG01fnoVTGGulDG0IPwBB5JqZCHrx6Spr82JYFP\nAsudk0gImTf/Mmk4KonoHb1IvH1Xk6vWn5Kkn/4gJCdH/eJSUghZtIgQY2NCZs8m5M0buT5+6VIQ\nOXSIkLZtCaEWhRCXHoVkYshT0iQ0lIx9+JBEaeJ7KEhQUJBGx/NPTSVtw8JIkVRKXF1dle4vMzNT\nBaoqplOnTiQ9PZ0QQoiPjw+5ePEiCQgIUKrPRYsWkcWLF5cel+g/fvw4yc7OVqrvioiKiiKRkZFk\n+/bt5KeffiKEEHLmzBmF+npfdwmZmZkqHUNdVPZbk8V2MmesDLzMegmv/V5Y/flq9LLuVebc7duA\nw/B0bCWRsHMLwO6lv2O1UTt8EhOCFku/AjTx2Ne0KbB4MfDwIZCfD9jZ0Zm+jLNALS36QHD3LvDn\nnzTS53aQLnZ0a4V+BzrBAvXRLTISwx88wKN3s7raSr5UirmxsVhjbQ0dnvrmS8jNzYWhoSEMDAwA\nAKampkhJSUGzZs0U7vPw4cM4cuQIjh49iiNHjpQ5t3TpUoXcQu8TEBCA4OBgbNy4sfS9wMBAnDhx\nAlKpFPn5+Th16hSaN2+u1DgfookxOEXVdx1F4ZGUMmTmZxLnrc5kWfCyMu/n5REy44ci0mT+VWJ8\n+B+yutcEIp7/D5FKpBwpfY/ISEJcXQnx8iIkOVnuj2dmEuLrS4iuLp3dm5gQ8vf+YrIiPoEYh4aS\nqdHR5Fl+vhqE858lcXFk0P37pceqmNEzKGKxmFy9elWtY6xatUqt/asTNqNXE0WSIgw7OgyuH7li\nYdeFpe/fvAk4jUjEXudA9Cs+jV93voLPob/Q/dcBEGnxYJbn5EQD6Z2d6b9Pn5br4/r6wIoVNNin\na1cgNRWYPEobkd9a4LqNOxrr6MDx5k388PQp3r6LsqoNPM7Nxcbnz7HBxoZrKTWSc+fOITY2FseO\nHVObj/y7775TS798hxn6SiCEYPqZ6RBBhC3eWyASiVBYCPywRILhB84ja2Q4pm8Kx8y+32DCmSm4\nffcK15LLoqsL/PwzXW2dPp2uuFbiyqnsj6ptWyA4mHqBGjakXXVz1kWPx9a46+aG10VFaB0ejlWJ\nich7t2DGBZpYOJMSgsmPHuHHli3RUk9PpX0LPdeKqvRnZmbC3d0dgwcPxubNm1XSpywI/frLAjP0\nlfBzyM+ITI7E4aGHoaOlg9hY4JOhidhhcxrOurcw63RT/HRuMVw9m3AttWq6dAHCwoB//gHGjqU+\nfDkQiYApU6j/vksXGo7Zty+wfE5d/GbeBlecnRGWmQm78HDsSU6GlOeRU4ry+/PnkAKYWZP8tjzD\n0dERUqkUAKDNau6qFhW7kRSGR1LIjsgdxHKDJXmZ9ZIQQsjRY1JiNyaIGB87Sb7+fBW5cp6/ESiV\nkptLyPDhhHz8MSFv3yrURXExIatW/ee7d3AgJCaGnruSnk46RUQQ55s3yUU5o374zt2sLGIcGkpi\nKog8Yj561ZGdnU02bNhA9u/fT27cuMG1HN6hjI+exdF/QGBsIMaeGIvgCcGwamSHOQsKcNnwFOob\npcPjjDkW7e+Nd0EMwoMQYO5cIDSUbroyMlKom7t3aZROTAzQqBGwaxcwaBB1dx1NTcUPT5/Crn59\nrLa2RrsGDVT8JTRLjkQCt4gI/GBhgXGmpuXOVxbbzGCoGlYcXEXcTb6LMcfH4OjQo2iYb4fPhsbi\nH+czaPvqKaakeWHt6cqNPB83WJRDJALWrwc++wzo0YOuskJ+7R060AXpwYPpJrEvvgC+/x6QSEQY\n2rQpHrq7o5eREXrcuYOpjx7hZUGBGr7Mf6jr2hNCMDE6Gp0aNarQyKsKofuImX7+wwz9OxIzEuG9\n3xu/e/0OvVddMWimGA8nPkCPvSn4dtg3+L//faSyTY6cIhIBK1cCAwdSY//mjULdNGpEF2fXrKFJ\n1VavBnr3pt3V1dLCnBYt8MidRui0v3kTi+LikM3hgq0iLE9MREJ+PrYokb+FweADzHUDID0/HV22\nd8Ek50n4KGku1lw8hlQPCTx2NcHafZ/DWDjlX+Vj/ny6UBsYCCiR5iAkBBg+HEhOBlq3ptGc72di\niM/Px8KnTxGUno7FlpaYZGbG+81GO5OTsTg+HtecnfFRFSmImeuGoSmY60YJCooL8MWhL/BZq8/w\n5vx0rIzeB9I+HV+c64Btp2qwkQfoNNzCAhg1CpCjfNuHdOtGc+B36ED99p0707DMEiz19LCvbVv4\nOzjgwKtXcLx5E6dfv+bFmkxFHH+3zhDg4FClkWcwhEKtNvRSIsUk/0kwqNMYrw58h0MfnYRxbjrG\n5gzG+l12FaV+rxRB+Og/REsL2LED4qQkYOZMhRNnATQR55UrQL9+1H3TqxddpH2fjvr6uNyhA1ZZ\nWeHb2Fj0vHsXESrwj6ry2h959Qr/9/gxAhwcYK+hhWSh+4iZfv5Tqw39wssL8SQtDgWHlyDYOwz2\nIemY88k0zPFtXDP88bJQpw6wdCm10n/8oVRX+vrAyZPAnDlAUREwYQKwZEnZ+4dIJEJ/Y2Pcd3PD\niKZN0e/+fYyJikJcJelrNcnGZ88w58kTnHN0hHMNL0TBqGWoJMBTBWhayubwzcRqvS3x6HeZmBw7\nQfr3203u3NGoBH7x+DFNahMaqpLuNm8mREuLxtt//TXN8FkRmUVF5H9PnxKjK1fI6IcPyb2sLJWM\nLw+5xcVkSnQ0sQ8LI3F5eXJ9lsXRMzQFy3UjJ/6P/LE4aBmaB6/A/clZ6PSHCL9tHIsOHbhWxiE2\nNsCOHTRA/sULpbubPh04ehSoWxfYtIkuAxQWlm+nr6ODJa1aIbZzZ7Rv0ACe9+7B+949hKSna8SH\nH5GVhU6SvH9aAAAgAElEQVS3byNbIkGYiwssVZzegMHgA7XO0Ic/D8f445PR+s5iPBqjja5bG+Hv\nPQPRqpVy/QrSR/+OUu3e3tRCDxlCfS9K8sUXwLlz1KVz6BD132dnV9zWUEcHP1hYIK5zZww0NsaU\nR4/Q4dYt/P78OdKrWShW5Nq/LirCrMeP4XXvHr63sMB+e3vo66i1hHKlCN1HzPTzH6UNfUhICOzt\n7WFraws/P79y58ViMQwMDODs7AxnZ2f8/PPPyg6pMLFvYuG1ZyAcnixA/IDG8Nhpid1HPOSpwlfz\nWbCABsmr6P+ThwcgFgMmJsCFC3Sv1tu3lbfX09LCVx99hGh3d2ywscHVjAxY3riBL//9F/tTUpCp\nRHQQAMTl5eHb2FjYhoVBQgj+dXPD6GbNIKo1izL8ID09Hdu2bcPy5csV7iMhIQFubm7w8fHBy5cv\n1T5+QkICjhw5giVLliAiIkJeudyirN/IycmJBAcHk/j4eNKmTRuSmppa5nxQUBDp379/tf2oQEqV\npOakkharbEnXr1eQlnsPkjFDoklBgVqHFC4vXhDSrJnK/PWE0Jw4lpbUZ+/sTEhamuyffV1YSHa8\nfEn63btH9ENCSNfbt8mC2FgS8Po1ScrPJxJp5TUA8iUSEpaRQVYnJJCut28T49BQMvfxY5Igpy++\nMpiPXnHi4+MrrPgkz+efPHmisfH37dtHLl26RI4cOUL279+v8LiKooyPXqln1YyMDABAt27dAACe\nnp4ICwuDt7f3hzcTZYZRmryiPHTbOgCtUkbiuZslepxxw7YDVuDoSZ3/mJnRCJwxY2hSehUk97G1\npRurevYEIiPpptyLF2WraW6kq4sJpqaYYGqKbIkE1zMyEJKRgZWJiYjOzUVmcTGs6tWDgbY26mpp\nQVckwuviYjwvKMDroiLY16+PTw0M8J2FBXo1boy6qqrbW8vIzc3FgQMHUL9+fbx48QLz5s3j/Eno\nwoULuHXrFhwcHNC2bVu1jjVq1CjExcUhMDAQS5cuVetYKkeZO8yFCxfIiBEjSo+3bNlCfvzxxzJt\nxGIxMTIyIh06dCBz586t9A6spJRKKZYUk483DCJdf/Alrf/aS76akECKi1U/jqbrlqqSSrX7+BAy\nZoxKx3r+nJA2bejMvm1bQl6+VL7PMxcvkjtZWeRKejq5+OYNOZuWRsIyMsiz/HxSVMVsXxXwvWas\nKlm4cCGJj48nhBDStm3b0n8rql/ZGb1EIiFSqZRIpVIyfvx4hceXV//169eJr69vte1+//13uTVV\nBWczellwcXFBUlISdHV1sWvXLsyePRunK6l4NGHCBFhaWgIADA0N4eTkBA8PDwD/LbjJc0wIwfro\nE9B53RoJhYDLybrY8o8FtLQU66+q4zt37qi0P14cDxoEjxkzgFOnIH4XV66K/oODgc6dxXj4EOje\n3QOXLwOPHyveX31tbbx9tzX8s/fOPwbQXM3Xq4SSBT39d9epph1HRUUhPDy8dI3t+PHjMHov+6ki\n/b+/CKrI57du3QpPT080bdoUIpEIWVlZah1/6dKlmDhxIurWrYvY2Nhqx3v+/LlS3+/D4/x3tSTE\nYjF27twJAKX2sjqUynWTkZEBDw8PREZGAgBmzpyJPn36lHPdlEAIgampKRITE1H3g63l6sh147Nz\nLaKeJiGthQt63+uDdX5Na89GKFVx+TIwfjzw4AFdpFURqal09+zduzQ/TnAwoMYEkWpD6Llunj59\nim3btlV6vnPnzhg4cCCOHz+Ow4cPw8vLC69evYKxsTEmTJhQpq2DgwN27doFFxeXasfNysrCpk2b\ncOXKFfzyyy9wdHRUSHtUVBTu3buHUaNGoWXLljJ/VpHxw8PDkZycjOvXr2PMmDFo165dle2XLFmC\nRYsWyaypOpTJdaN0UjNnZ2f89ttvsLCwQJ8+fRAaGgrj9xLEpKSklN5x/f394efnhwsXLigkVh4W\nHzmMoPuXkdyyC3rd/Bx+W0yZkVeUyZNp0rPff1dpt2/eUJ/93btAu3Y0OkdouYX4bOgjIiIQFBSE\n4uJitG/fHlKpFCdPnsT27dvl7mvlypXYu3cv/v33XwBA165dsX37dti+l73u5MmT+Pzzz9GwYUOV\nfQcA8Pf3h7a2NkJCQtC6dWsEBQXhxx9/hJ2dnUrHUfV4VRl6RcZQxtAr7brZsGEDfHx8UFRUhFmz\nZsHY2Bh/vNtK7+Pjg6NHj2LLli3Q0dGBo6Mj1q5dq+yQ1bL59BUE3T2H5zaf4fMrHti4Tf1GXiwW\nlz7WC41qtf/6K9C+Pd319MknKhvXyIiGXHbvTh8YPD2BS5eAxo3l60fI1x5AGReAKklNTYWLiwv8\n/Pzwww8/gBCCuXPnKtRXgwYN4ODgUHpsYWGBwMBA2NraluofNGiQqqSXkpiYiLZt28LGxgY//vgj\nfH190axZM1hYWFT5udWrVyOvkrQa48ePL+PyeP/6JyQkKDQeQN1bu3fvLj0ODQ0tdbcA9Obo5eWl\n8HdSBqUNfffu3REVFVXmPR8fn9J/f/311/j666+VHUZmDl2OwqHr25Bk1xceF7pg887mYEEWSmJk\nBPz2GzB1Ko3C0dVVWdcmJtS4d+tGo3H69KHGX4VeIk4RqWgjHVHgRtanTx/4+vpi7NixAIDr16/D\nzc2tTBtZXTft2rXDlStXSt/X0tJC/fr1ZdaipcAfoUgkguRdDYOUlBQYGBjA0NAQ/fr1q/az3333\nnUJ6SsaUdzwAsLe3xy+//FJ6XNmMvsSgKzKGwqhkOVgFqELK+asvSdfvxxKLvQfIuJFxaomuqbVI\npYR4ehKybp1auk9M/C/OvksXQrKz1TKMyuF7HH2nTp1Ieno6IYQQHx8fcvHiRRIQECB3P/n5+aRb\nt26lx926dSMJCQll2hw/fpxkq/h/XFRUFImMjCTbt28nP/30EyGEkDNnzqh0DHWNV1lEkaJj8Drq\nRlPcupeNn499jzg3b3Q90RF/7bUEKySvQkQiYMMGOvUePVq2AHg5MDen677dutGStgMG0AImStRD\nqfXk5ubC0NAQBu/2QZiamiIlJQX29vZy91W3bl0sXboUy5YtQ4MGDTBv3rxyroalS5fC2tq6woXN\n9PR0HD58GKmpqVi4cCEeP36M+/fv4/79++jfvz9sbW3x999/o0GDBnBxcYGrqysAIDAwEK9fv4aF\nhQXy8/Nx6tQplbk4AgICUL9+fdy9exezZs1S+3glaGKMclR7K9AQykh5HFtEusyYSEwPHyFDv4ji\nZMdrjYyjr4g5cwiZOlVtWh49IsTUlM7svb0JKSys/jNcXvvaFEdfGbLqfz9uft26dSQsLIxkZmaS\nESNGkE2bNpGwsDBSVFRERo0apU65hBC6v+fq1auEEPVd/1WrVqm0v1qdvTI5mWDcL7MQ3bM/3HZZ\nYtc++QqGMORk0SLA3x+4fVst3bduTXfMGhkBZ84AU6YAUqlahmJwyNy5c+Hu7o6kpCS0atUKUVFR\nMDMzg46ODt4oWMdYHs6dO4fY2FgcO3aszNqDKqlunUCTCNrQp6cDQ75fgBhvT7j+1Qh79nXk7FFf\nyFEfcmk3NASWLQNmz1aqIlVVtGsHnD0LNGgA7N4NfPtt1UMJ+doDUEvEjSZRVD8hBCdOnMDChQtR\nr149aL/ztWoirUJmZibc3d0xePDg0s1HNRnBGvrcXGDg1+vwaJA7nP+WYPeOz1SRkoUhC5MmARkZ\nwKlTahuiUyfg+HEa4LNuHbBqldqGYmgI8sHd+tSpU5g5cyYSExPRrl07pKSkID8/v8w+HHXh6OgI\n6btHRe1asJgnSENfVAQM+mofYr60gOP+t/jr98GcpxquEfnoZUVbG1ixgqY0fhf+pg48PYE9e+g6\nsK8v8NdfFbcT8rUHhJ8PXRb9WVlZOHjwIMLDw3Hv3j2cOHECy5Ytw+DBg3Hs2DF8+eWXSE5Oxv79\n+zFv3jy1ax4zZgwCAwNx4MABfPXVV2ofj3NUulqgBLJKkUgI+XJiIDE/sI/0GPMbefhQzcJkpNYs\nxpYglRLy6aeE7Nqlcj0f8vvvdHFWS4uQY8fKn2eLsdzC9GsGZRZjlU6BoCpkTYEwbe49XHa6hRY3\nUrFq0vf4YP8HQ5OEhtJUxo8e0ZqBamTxYlpovE4dWrWqRw+1DiczfE6BwKhZKJMCQVCum+W/vkSY\nrRhm0Snw/fJbZuS5pksXmhrhXcoLdbJoEfD117Tu7MCBagv6YTBqJIIx9Lv35eKMdDvqZhVhst18\n9OrFL+lC9hMrpX3FCvrKyVGZnooQiYCNG4Hhw4GsLJoq4ckTek7I1x6oHT56PiN0/bLAL2tZCUFB\nBNsfrEBOIyMMKJ6KceNVl2uFoSSOjkDXrhqZ1Wtp0XDLXr1omuO+fel/GQxG1fDeR//vv8DMLQuQ\n2NkOvW94YNPvFizdMN+4cwfw8gJiYzWSsyAri2a8jIwE3N2BoCBAjvxaKoX56Bmaosb66JOSgBm/\nLkN0D2e4nG0Hv43MyPMSJyegY0fg7781Mpy+Pt0127IlEB4OjBgBFBdrZGgGQ5Dw1tCnpwPjvtmE\nB1+0R4e9DbB7uyuvk5QJ2U+sEu0//UR3NRUUKN+XDJiZAQEBNHf9qVNizJihto26akfoPmKmn//w\nMntlQQEwbOpR/DvKDA67MrB/+wSWxZDvuLnR3AW7d9O89RrA3p5uzu3Rgy4RWFjQPVyapFGjRujY\nsaNSfeTn50NPT09FijQP068ZGilRpIF3PnqpFBg64Qpu9H+B1iefY+eKeZCjFCSDS0JDgXHjgJgY\nQEdzc4jjx4EhQ+iMftcuKoHBqC0I0kc/Y95j3PvsCdpcjsGG75iRFxRdugDNmwPHjml02C+/pAWw\nAFreNjBQo8MzGLxHaUMfEhICe3t72Nraws/Pr8I2vr6+sLKygqurK6Kjoyvta+XqN7jW+hw+evQM\nCwYvRIcOyqrTHLXeR1/CN98Aa9dq1GEuFosxcyYwfz5dlB08mAYCCQUh/3YApl8IKG3oZ8+ejT/+\n+AMXL17Epk2bkJaWVuZ8eHg4rly5glu3bmH+/PmYP39+pX35S/9Avaw8TLb7Hp9/zruHDYYs9O8P\nvH1L3TgaZtUqGoGTnU1j7BMSNC6BweAlSvnoMzIy4OHhgcjISADArFmz0Lt3b3h7e5e28fPzg0Qi\nwZw5cwAA1tbWiI2NLS9EJILj5t8x7O0oLFzQWFFJDD6weTP1n5w8qfGhCwqokQ8KAuzsgKtXaRET\nBkNVFBcDr14BH33EtRKK2n30N2/ehJ2dXelx27ZtcePGjTJtwsPD0bZt29JjExOTCg09AHzyoA8W\n+DIjL3gmTACuXaOLshqmbl26ONu+PRAdTfPi5OdrXAajhkIIzbnk6ko37AkFtYdGEELK3W0qqyCT\nm7UMS5ZYAgAMDQ3h5ORUWj2oxI/G1+MNGzYISu/7x+/7KFXSf/36EPfpA3z7LTz++Ufj+g0NgZ9+\nEuPrr4HQUA+MGQP83/+JoaXFj+tdnX6u9TD9lbe/etUDf/4J1KkjxtWrgLMzN3pLqmJZWlpCJpTJ\nj5yenk6cnJxKj2fMmEFOnz5dps3GjRvJunXrSo+trKwq7EtJKZxT6/LRV0dyMiGGhoS8fq36vj+g\nMv337hFiYEBz2c+cSVPo8xEh/3YIqT36d+6kvyWRiJDjx9WrSR5ksZ1KW1cnJycSHBxM4uLiSJs2\nbUhqamqZ82FhYeTTTz8laWlpZN++fcTb21thsQyBMWYMIWvWcCohKIiQOnXoH+iqVZxKYQiY8+cJ\n0dGhvyM/P67VlEUjhl4sFhM7OztibW1NfvvtN0IIIVu3biVbt24tbfP9998TS0tL4uLiQh5WUhKK\nGfoayPXrhFhb07JgHHLoEP0DBQjZs4dTKQwBcvs2IQ0b0t/Pt99yraY8GjH0qkLohl7Ij69q0y6V\nEuLsTEhAgHr6f4cs+tevp3+oOjqEBAaqVY7cCPm3Q0jN1h8fT4ipKf3tjBzJ+ZylQmSxnSxYnaE+\nRCIaorBpE9dKMGcO3ctVXEx30gopYoLBDW/e0AI3yck0n9KOHbQmghDhXa4bRg0jN5dmG7t5E2jV\nilMpUikwejRw8CBgagpcvw7IGrTAqF3k59MCN6GhNFT3yhXA0JBrVRUjyFw3jBpG/fo0y5gGKlBV\nh5YWsHMnnZ0lJ9PZ2uvXXKti8A2pFBg7lhr55s1pOmy+GnlZYYZeRbwfiys01K79//4P2L5dbTuX\n5NFfty5w4gTg4AA8ekQzNuTmqkWWzAj5twPULP2EAPPmAUePAo0aUSPfogV32lQFM/QM9WNjQ2vL\nvts8xTUGBvQP2Nycum9GjmQVqhiUdetoJlRdXZrBw8GBa0WqgfnoGZrhwAG6msWjHMIPH9LMym/f\nAj4+wJYtYKUqazF79vxXy2DfPmDUKG71yArz0TP4wxdfALdvA/HxXCsppW1bwN+funP++ANYsYJr\nRQyuOHsWmDiR/nvdOuEYeVlhhl5FCNlPqRHtenrUR7Jjh8q7VkZ/ly7A/v10Jv/jj3SxVtMI+bcD\nCF//pk1iDBkCSCTADz8Ac+dyrUj1MEPP0BxTplBDL5FwraQMX34JbNxI/z1lCvXfM2oHDx5Q456X\nB0yaVHOf6piPnqFZOnYEli8HevfmWkk5fH2BlStpROiFC8Ann3CtiKFOEhKATz8Fnj8HBgygFTA1\nWOpYZTAfPYN/TJ4M/PUX1yoqZMUK6qfNzQW8vIC7d7lWxFAXqamApyc18l270k10QjTyssIMvYoQ\nsp9So9pHjqTT5Q9KTiqDqvSLRMCff9J144wM+tDx5IlKuq4SIf92AOHpz84GvL1pXRxHR+C778So\nV49rVeqFGXqGZjE0pLX+Dh/mWkmF6OjQxdnPPgNSUoDPP6ezPkbNoLCQrsmUZOQ4dw5o2JBrVeqH\n+egZmufMGeqnv3aNayWVkp1NjXxYGGBvD4SEAMbGXKtiKENxMTB8OC012bQprSdsY8O1KuVhPnoG\nP/H0BGJjNeMXUZCGDWlsdbt2QFQU9dlnZXGtiqEoEgkwfjw18gYGdCZfE4y8rDBDryKE5qd8H41r\n19WlU6t9+1TSnbr0GxnRjbytWtFH/QED1JMXR8i/HYD/+qVSYNo06pJr2JAaeWfn/87zXb8qYIae\nwQ1jx9I95zx31330EXDxImBmBojFwMCBNOaaIQwIobUI/voLqFcPOH0a6NyZa1Wah/noGdxACGBn\nB+zaJYi/vOhowMODLtD26UMzYOrpca2KURWE0L0Rq1YBdeoAp05Rr2FNg/noGfxFJPpvVi8A7OyA\nS5cAExP66D9kCI3gYPCXn3+mRl5HBzhypGYaeVlR2NBnZWVh4MCBsLCwwKBBg5CdnV1hO0tLSzg6\nOsLZ2Rnu7u4KC+U7QvbzcaZ99GgaZqmkxdSU/nbtqBvHyIgGDg0fDhQVKd+vkH87AD/1r1wJ/O9/\ntNjM3r10faUy+Khf1Shs6Lds2QILCws8fvwYLVq0wNatWytsJxKJIBaLERkZifDwcIWFMmogrVoB\ntrZ0qiwQHB2psTc0pPnKR45UjbFnqI5ly6jLRiSi9W6GD+daEQ9QtPL44MGDSWRkJCGEkIiICDJk\nyJAK21laWpK0tLRq+1NCCkPIbNhAyPjxXKuQm5s3CTEwIAQgZNgwQgoLuVbEkEoJWbSI/j/R0iJk\n926uFWkGWWynwtkdbt68CTs7OwCAnZ1dpbN1kUiEnj17olWrVpg0aRIGVPEMNWHCBFi+q9ZsaGgI\nJycneHh4APjv8Yod17DjIUOAJUsgvnAB0NXlXo+Mx9nZYvzyC/D99x44fBh49kyMRYsAT09+6Ktt\nx0FBYuzYAezZ4wEtLcDXVwxzcwDghz5VHovFYux8l0/bUtbq9lXdBT7//HPSvn37cq9//vmHmJub\nk7y8PEIIITk5OcTCwqLCPl68eEEIIeThw4fE2tqavHz5UuG7Ep8JCgriWoLCcK69a1dC/P0V/jiX\n+sPDCWncmM4ie/UiJCdH/j44v/5KwrV+qZSQ77+n/w+0tQk5eFC+z3OtX1lksZ1V+ugvXLiA+/fv\nl3sNGDAAbm5uiIqKAgBERUXBzc2twj7MzMwAAPb29hgwYABOnTol2x2IUXsYPhw4dIhrFQrh5kbj\n65s2pbna+vQBMjO5VlV7kEiA6dP/i645eJD55CtC4Tj61atXIykpCatXr8b8+fPRqlUrzJ8/v0yb\n3NxcSCQS6OvrIzU1FR4eHjh37hzM6TNVWSEsjr72kpxM4xdfvoRQ0whGR/+XAM3dnRYvMTLiWlXN\nprCQ1ng9dIiWgzxyBOjfn2tVmketcfTTp09HYmIi2rRpg+fPn2PatGkAgBcvXsDb2xsAkJycjK5d\nu8LJyQkjRozAN998U6GRZ9RyTE0BFxcaoC5Q7OyAK1cAS0sgPJyWKExM5FpVzSUnh4ZMHjoENGoE\nnD9fO428zKjZfSQzPJKiEEL28/FC+9athAwfrtBHeaH/HUlJhLRvT/3FH31EyL171X+GT/oVQdP6\n37wh5OOP6TU2MSEkIkK5/oR+/WWxnWxnLIMffPkl9XeoI2uYBmnRgs7su3UDXryg1YuCg7lWVXN4\n+hT4+GPg+nXAwgIIDaUPg4yqYbluGPzhs8+AGTNoiSeBk58PjBlD65DWqUN3Zw4dyrUqYXP9Ok0q\nl5oKODjQ3cnME8xy3TCExpdf0mxhNQA9Peo/njGDLhoOG0Z3bLK5jGIcOQL06EGNfO/edCbPjLzs\nMEOvIko2NAgR3mgfNIhO0+TMKcAb/R+grQ1s3Aj8+ivdjv+//wEjRpT3TvFVv6yoUz8hNG/NsGFA\nQQHw1Vc0C2WjRqobQ+jXXxaYoWfwh+bNadmfGuTUFomA+fOpcdLXpzncunYFnj3jWhn/yc6mMfG+\nvvR49Wpg61Zat4YhH8xHz+AXK1fSuMTNm7lWonIePqQhgbGxQLNmwNGjNAyTUZ6YGLpU8/AhvUHu\n2lUjlm7UAvPRM4THF1/QtJBSKddKVE7btrTYeI8etICJhwe9r9XAr6oU//xDdxw/fEj3J4SHMyOv\nLMzQqwgh+/l4pb1NG5oDWI6U1rzSXw1NmtDNPd9/T7fv+/oCH38sRmoq18oUR1XXv6AA+PZbulST\nmQkMHkx/Bu9yJ6oNIf1+FIUZegb/qEHRNxWhq0tn8mfOUMMfHg44OdWopQm5efAA6NQJWLOGLmKv\nWkUjbfT1uVZWM2A+egb/iIig4SkxMXQ1swbz7BktXhIaSr/q7NnA8uVA/fpcK9MMhACbNtGZfH4+\nYGVF9xx8/DHXyoQD89EzhImLC32Of/iQayVqp0ULICgI+OknWvZuwwZaxSokhGtl6ichAfDyAmbO\npEZ+0iTgzh1m5NUBM/QqQsh+Pt5pF4lohqrTp2Vqzjv9chIaKsbSpXSh1sGBRuV07w7MmkVDDPmO\nvNdfIqE3tHbtaB47IyO6g/jvv7lx1Qj99yMLzNAz+Em/fjIb+pqCqytw6xad3WtrA35+dCHywIGa\ns6P22jXqi587l2agHDYM+PdfuizDUB/MR8/gJ/n5tJpHXBxdsaxl3L4N+PhQww/QTVbr1gEdO3Kr\nS1ESE2mk0cGD9LhFC7pVgqUWVh7mo2cIFz09oGdPmtGyFuLiQl05f/0FmJjQjJhubsCQIcC7wm6C\nIDkZmDMHaN2aGnk9PfrEEhXFjLwmYYZeRQjZz8db7TK6b3irX0Yq06+lBUyeTIOPvvuOGsljx4D2\n7WmkTmSkZnVWRkX6nz2jqR+srIDffqNr6yNG0EpcS5cCDRtqXmdlCP33IwvM0DP4i7c33V0kZ5Kz\nmoahIY0rj40Fpk2jN4CDB+ms39OT5tEpLuZaJV1HCA8HRo8GWrUC1q4F8vLoBqi7d+laQ8uWXKus\nnTAfPYPfuLnRbFY9enCthDckJQHr1wN//kkXNAGaD27iRJoDv00bzep59YrGvu/YQRdWAbqYPHQo\nndW7umpWT21DrT76I0eOoF27dtDW1sbt27crbRcSEgJ7e3vY2trCz89P0eEYtZX+/emUlVGKuTld\nmE1KovdAW1talPznn2mUjoMDsGQJnV1LJKofnxDg8WOqoVs3wMwM+OYbauSbNKHG/elTOoNnRp4n\nKFqnMCoqijx69Ih4eHiQiCqKNjo5OZHg4GASHx9P2rRpQ1JTUytsp4QUXiDkupO81h4RQYitbZVN\neK1fBpTVL5USEhREyPjxhBga0lqqJS8DA0IGDCBk+XJCzpwh5Nkz2l4eXr0i5PJlQn77jZb1NTMr\nO4a2dhDp14+QY8cIKShQ6qtwgtB/P7LYTh1FbxB2MmQaysjIAAB069YNAODp6YmwsDB4e3srOiyj\ntuHsTP0TMTE0dINRDpGIZsL08KDVrC5fpqmCLl2ifn1/f/oqQU+P1ls1N6eblRo0oC+plC6a5ufT\nSk4vX9K6t2/elB/T2Bj4/HNa2k9fny6nMPiLwoZeFm7evFnmhtC2bVvcuHGjUkM/YcIEWFpaAgAM\nDQ3h5OQEDw8PAP+tjPP1uOQ9vuiR59jDw4NXesod9+kDsZ8fMHiwMPVXc6xq/X36AHp6YowcCbRq\n5YHgYODUKTGePAESEjzw9i0QEyNGTAwA0M8D4nf/LX+srw+Ym4thaQkMGOCBbt2A5GTxuxuMBwB2\n/TV5LBaLsXPnTgAotZfVUeVibK9evZCcnFzu/RUrVqD/uyDYHj16YO3atXCpoBT7xYsX8ffff+PA\ngQMAgK1bt+L58+dYtmxZeSFsMZZRGUeO0JW+s2e5VlIjyMyk/v2kJCAjgz4w5eTQaJ66denL2Jj6\n3s3M6L61Gp5bTtDIZDuV9Q95VOGjT09PJ05OTqXHM2bMIKdPn66wrQqkcIqQ/Xy81/7mDSH6+oTk\n5VV4mvf6q4Hp5xah65fFdqokjp5UcjcxMDAAQCNv4uPjceHCBXTq1EkVQzJqE40b01CSK1e4VsJg\nCFljJ2UAAAtSSURBVBKF4+hPnDiBWbNmIS0tDQYGBnB2dkZAQABevHiBqVOn4syZMwCA4OBgTJs2\nDUVFRZg1axZmzZpVsRDmumFUxbJlQHo63YXDYDBKkcV2sg1TDGFw8yYwYQItRcRgMEphSc00SMmq\nuBARhHZXV7oFMzGx3ClB6K8Cpp9bhK5fFpihZwgDLS2a2OX8ea6VMBiCg7luGMJhzx7g5EmawpHB\nYABgPnpGTSMlhWbsSk0FdHW5VsNg8ALmo9cgQvbzCUZ7s2Y0wXlYWJm3BaO/Eph+bhG6fllghp4h\nLHr1oklcGAyGzDDXDUNYXLhAc/CGhnKthMHgBcxHz6h55OXRIqovXgCNGnGthsHgHOaj1yBC9vMJ\nSnu9ekCnTkBISOlbgtJfAUw/twhdvywwQ88QHp9/Dly8yLUKBkMwMNcNQ3jcvEkLpJYUKGUwajHM\nR8+omUgk1E//4AFNmM5g1GKYj16DCNnPJzjt2tpAjx6lYZaC0/8BTD+3CF2/LDBDzxAmzE/PYMgM\nc90whMnjx3RWn5TE6twxajXMdcOoudjYUBfOo0dcK2EweA8z9CpCyH4+QWoXieiMXiwWpv73YPq5\nRej6ZYEZeoZw6dEDCAriWgWDwXsU9tEfOXIEixcvRnR0NG7evAkXF5cK21laWqJRo0bQ1taGrq4u\nwsPDKxbCfPQMeYmPp7tkk5OZn55Ra5HFduoo2rmDgwNOnDgBHx+fakWIxWIYGRkpOhSDUTGWlkD9\n+kB0NGBvz7UaBoO3KOy6sbOzQ+vWrWVqWxtm6kL28wlZO3r0gPiPP7hWoRSCvv5g+oWA2n30IpEI\nPXv2xKBBg+Dv76/u4Ri1DQ8P4M4drlUwGLymStdNr169kJycXO79FStWoH///jINcPXqVZiZmSEq\nKgr9+/eHu7s7TE1NK2w7YcIEWFpaAgAMDQ3h5OQEDw8PAP/ddfl6XPIeX/TIc+zh4cErPXLrnz8f\n4qAgQCTihR659Qv9+jP9Gj0Wi8XYuXMnAJTay+pQesNUjx49sHbt2koXY99n3rx5sLe3x9SpU8sL\nYYuxDEWxtgb8/YF27bhWwmBoHI1tmKpskNzcXGRlZQEAUlNTcf78efTp00cVQ/KOkjuuEBGydgAQ\nt2kDCPg7CP76M/28R2FDf+LECZibm+PGjRvw9vZG3759AQAvXryAt7c3ACA5ORldu3aFk5MTRowY\ngW+++Qbm5uaqUc5glODsLGhDz2CoG5brhiF8kpIAFxcgJQXQYnsAGbULluuGUTswNwcMDICHD7lW\nwmDwEmboVYSQ/XxC1g6809+tG3DlCtdSFKJGXH8BI3T9ssAMPaNm0LWrYA09g6FumI+eUTN48oRu\nnmL56Rm1DOajZ9QerK1pLdn4eK6VMBi8gxl6FSFkP5+QtQPv9ItEgnXf1IjrL2CErl8WmKFn1BwE\naugZDHXDfPSMmsOdO8CIETRtMYNRS5DFdjJDz6g5SCRAkyZATAzQtCnXahgMjcAWYzWIkP18QtYO\nvKdfWxv45BMgNJRTPfJSY66/QBG6fllghp5Rs2B+egajHMx1w6hZhIYCc+YAt25xrYTB0AjMR8+o\nfRQUUD/9y5eAvj7XahgMtcN89BpEyH4+IWsHPtBfty7NZHn9Omd65KVGXX8BInT9ssAMPaPm8emn\ngjL0DIa6Ya4bRs3j1Cng99+B8+e5VsJgqB3mo2fUTtLSABsb4PVrGnLJYNRgmI9egwjZzydk7UAF\n+o2NgWbNBFOIpMZdf4EhdP2yoLCh//bbb2Fvbw8XFxfMmTMHeXl5FbYLCQmBvb09bG1t4efnp7BQ\nvnPnzh2uJSiMkLUDlej/5BPg2jXNi1GAGnn9BYTQ9cuCwobe09MTDx48wK1bt5CTk4P9+/dX2G72\n7Nn4448/cPHiRWzatAlpaWkKi+Uz6enpXEtQGCFrByrRLyBDXyOvv4AQun5ZUNjQ9+rVC1paWtDS\n0kLv3r0RHBxcrk1GRgYAoFu3bmjZsiU8PT0RFhamuFoGQ1YEZOgZDHWjEh/9tm3b0L9//3Lv37x5\nE3Z2dqXHbdu2xY0bN1QxJO+IF3DBCyFrByrRb29PF2VfvdK4HnmpkddfQAhdvyxUGXXTq1cvJCcn\nl3t/xYoVpYZ96dKluHfvHo4ePVqu3cWLF/H333/jwIEDAICtW7fi+fPnWLZsWXkhrPwbg8FgKER1\nUTc6VZ28cOFClR/euXMnzp8/j0uXLlV43s3NDd9++23p8YMHD9CnTx+FhDIYDAZDMRR23Zw7dw6/\n/vor/P39oaenV2EbAwMDADTyJj4+HhcuXECnTp0UHZLBYDAYCqDwhilbW1sUFhbCyMgIAPDxxx9j\n8+bNePHiBaZOnYozZ84AAIKDgzFt2jQUFRVh1qxZmDVrlurUMxgMBqNaON8ZGxISAh8fHxQXF2PW\nrFmYOXMml3LkYtKkSThz5gyaNm2K+/fvcy1HbpKSkjBu3Di8evUKJiYm+OqrrzBq1CiuZclEfn4+\nunfvjoKCAujp6WH48OGYO3cu17LkRiKRoGPHjmjRogVOnTrFtRy5sLS0RKNGjaCtrQ1dXV2Eh4dz\nLUkucnJy8H//93+4fv06dHR0sH37dnTu3JlrWTLx6NEjjBgxovT46dOnWLZsWaUTac4NvbOzM377\n7Te0bNkSvXv3RmhoKIyNjbmUJDNXrlxBw4YNMW7cOEEa+uTkZCQnJ8PJyQlpaWlwd3fH3bt3oS+Q\n9L65ubmoX78+CgoK4OrqipMnT8LGxoZrWXKxbt06REREICsrC/7+/lzLkYtWrVohIiKi9KleaMyf\nPx/16tXDwoULoaOjg5ycnFJ3s5CQSqVo3rw5wsPDYW5uXmEbTlMgCD3OvmvXrmjcuDHXMhTG1NQU\nTk5OAABjY2O0a9cOtwRUsKN+/foAgOzsbBQXF6Nu3bocK5KPZ8+e4ezZs5gyZYpggxGEqhugUYEL\nFiyAnp4edHR0BGnkAfo9rK2tKzXyAMeGvjbF2fOdJ0+e4MGDB3B3d+daisxIpVJ06NABzZo1w4wZ\nM6r8ofORuXPn4tdff4WWljBTTolEIvTs2RODBg0S3NPIs2fPkJ+fj+nTp6NTp05YtWoV8vPzuZal\nEAcPHqzW5SrMXxhDpWRlZWH48OFYv349GjRowLUcmdHS0sLdu3fx5MkTbN68GZGRkVxLkpnTp0+j\nadOmcHZ2Fuys+OrVq7h79y5++eUXzJs3r8I9N3wlPz8fMTExGDx4MMRiMR48eIDDhw9zLUtuCgsL\ncerUKQwdOrTKdpwaejc3N0RHR5ceP3jwQDCLITWFoqIiDB48GGPHjsXAgQO5lqMQlpaW8PLyEpTb\n79q1a/D390erVq0wcuRIXL58GePGjeNallyYmZkBAOzt7TFgwABBLSbb2NigTZs26N+/P+rVq4eR\nI0ciICCAa1lyExAQAFdXV5iYmFTZjlNDz+LsuYUQgsmTJ6N9+/aYM2cO13LkIi0trTQZ1evXrxEY\nGCioG9WKFSuQlJSEuLg4HDx4ED179sTu3bu5liUzubm5yMrKAgCkpqbi/PnzlW6G5Cu2trYICwuD\nVCrFmTP/364d2koIRFEYXgwNoEhwa1DcQeEJweGhDiqhAEhQVPCCnYQOcBiKIOPPlrBvXvJyk8n5\n9BW/Ombm59U0jXaSt23bXsMwfD+EMmst8jzH+/3GNE3aOV76vkeapojjGFmWYVkW7SQvx3EgiiKI\nCIwxMMZg33ftrF85zxNlWaIoCrRti3VdtZP+zFqLruu0M7zc9w0RgYigrmvM86yd5O26LlRVBRHB\nOI5wzmkneXHOIUkSPM/z9Vb9eyUREf0vPsYSEQWOQ09EFDgOPRFR4Dj0RESB49ATEQWOQ09EFLgP\nfgk2a5wJG34AAAAASUVORK5CYII=\n"
580 608 }
581 609 ],
582 610 "prompt_number": 22
583 611 },
584 612 {
585 613 "cell_type": "code",
586 614 "collapsed": false,
587 615 "input": [
588 616 "plot_taylor_approximations(cos, 0, [2, 4, 6], (0, 2*pi), (-2,2))"
589 617 ],
590 618 "language": "python",
619 "metadata": {},
591 620 "outputs": [
592 621 {
593 622 "output_type": "display_data",
594 623 "png": "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\n"
595 624 }
596 625 ],
597 626 "prompt_number": 23
598 627 },
599 628 {
600 629 "cell_type": "markdown",
630 "metadata": {},
601 631 "source": [
602 "This shows easily how a Taylor series is useless beyond its convergence radius, illustrated by ",
632 "This shows easily how a Taylor series is useless beyond its convergence radius, illustrated by \n",
603 633 "a simple function that has singularities on the real axis:"
604 634 ]
605 635 },
606 636 {
607 637 "cell_type": "code",
608 638 "collapsed": false,
609 639 "input": [
610 "# For an expression made from elementary functions, we must first make it into",
611 "# a callable function, the simplest way is to use the Python lambda construct.",
640 "# For an expression made from elementary functions, we must first make it into\n",
641 "# a callable function, the simplest way is to use the Python lambda construct.\n",
612 642 "plot_taylor_approximations(lambda x: 1/cos(x), 0, [2,4,6], (0, 2*pi), (-5,5))"
613 643 ],
614 644 "language": "python",
645 "metadata": {},
615 646 "outputs": [
616 647 {
617 648 "output_type": "display_data",
618 649 "png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAADzCAYAAACfSk39AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXlcVFX/xz8DiIggqCioKIvigqjgnqUiueVGai5YLtli\nTztauZZZLlm5PWRPPuaSmfFzw9wVH5lMTQSXNDUVN1ARQQQGYYCZOb8/joOgA3PvzJ259+B5v17z\nulzm3nM+Xg/fOfM5y1dFCCHgcDgcDnM4yC2Aw+FwOJbBAziHw+EwCg/gHA6Hwyg8gHM4HA6j8ADO\n4XA4jOJk6wpUKpWtq+BwOJwqiblJgnbpgRNCmH2NHz/eqvsXLiQACKZMqfia+fPpNdOmCS/3QHY2\nOiQn21y/TV6XLoHUqwdy5Aib+kW8lKD/1Vdp+1q1quJrXnmFXrN2rbK0s/7srXkJgVsoNubuXXqs\nX1/acjdnZmJEvXrSFmoP8vOBYcOAOXOAbt3kVsN5iLF9Gtsrhw14ADeDv7+/VffbIoDrCcHWzEy8\nJCCAW6tfUggBXnsN6NgReOstQbcoSr8FsKLfVABnRXtFsK5fCDb3wFknPDzcqvttEcAP5eSgUfXq\naFqjhtlrrdUvKYsWAVeuAIcPAwLHRhSl3wJY0W8qgLOivSJY1y8EHsBtjC0COJP2ycGDwLffAseP\nAy4ucqvhPAa3UNiEWyg25s4devT2lqY8PSHYkpUlyD5RDKmpwMsvAxs2AE2ayK2GYwJj+0xPl1cH\nRxw8gJvBmq9hxcU0gDs4AA0aSKPnSG4ufJydEeTqKuh62b9GPngAREYCH30ERESIvl12/VbCin7j\n52pa2qPfsaK9IljXLwQewG3IrVt03K5RI8BJIrNqE0v2icEAjBsHtGsHTJ4stxpOJdSrB1SvDmRn\n089cDhvwAG4GtVpt8b2pqfQo1DUwN/VTRwg2ZWZipIgAbo1+q/n8c/oVZMUKwYOWjyOrfglQgn4h\nU4pVKqBxY/qzsReuBO3WwLp+IfAAbkOMAdz4h1ERQmPbgfv34e/iItg+kZXYWGDdOiAujnbtOLJj\nrp0ZOxrGdstRPnwWihms8dGMPRmpxu1+vnMHr4gcDZXFB0xKAt57DzhwwOrpN6z7mCzpf7wHzpJ2\nU7CuXwi8B25DhPbAhaDR6bArOxujlO5/37oFDB0KrFxJvW8OM/AeOHvwAG4Ge3rglbEtKwvdPTxQ\nz9lZ1H129QELC4EXXwTeeYceJYB1H5Ml/Y8HcJa0m4J1/ULgAdyGSGmh/JyRIdo+sSsGAzB+PNCi\nBTBtmtxqOBbwuIXCUT7cAzeDNT6aVBbK7aIiJGk02BYSIvpeu/mAU6fSGSfx8RbPODEF6z4mS/of\n74GzpN0UrOsXAg/gNiI3F8jLA1xdgTp1rCsr9u5dvOjlBVdHR2nESc333wM7dgBHj/IZJwxTtgdO\niKSfwxwbwS0UM1jqoxm/hjZubN0fAiEEP925g7EW2ic29wF37ADmzgV277b+k8oErPuYLOl3cwNq\n1wa0WiAriy3tpmBdvxCsDuB6vR5hYWEYPHiwFHqqDJYMYJpacJGk0UCj1yPc01MaYVKSnAxMnAhs\n2wYEBsqthlMBAnMDAOAzUVjD6gC+bNkyBAcHV9nUaZb6aNev06OQAF7Zo/sxPR2vN2gABwufr818\nwOvX6R4nK1cCnTvbpg6w72MqSb+QJuTnR4/XrilLuyWwrl8IVgXwmzdvYvfu3Xj99dcFpwB6Wrh4\nkR6bN7e8jHy9HpsyM/Gqj480oqTi/n1gwADgk08kmy7IUQZBQfR46ZK8OjjCsCqAR0dH45tvvoGD\nQ9W10i310Yx/AC1aWF537N276OnpiQZWDAxK7gMa53r37Qt88IG0ZZuAdR+TNf3G9nrpEnvaH4d1\n/UKweBbKzp07Ub9+fYSFhZl9UBMmTChNb+Tp6YnQ0NDSrzfGe5V6fvr0aYvuv3iRnufkqKFWV379\n1asA8OT7K2/fxtBbt6DOyrK7fpPnOh3UvXsDLi4IX7zY+vLsrV+GcyXop3vSC7u+oICeG9uv3M/v\naTpXq9VYu3YtABHp4IiFTJ8+nfj6+hJ/f3/i4+NDXF1dydixY5+4zooqmEWrJUSlIsTBgZCiIvPX\nf/UVIQAhn3zy6Hd/aTTE9+hRojMYbCdUDAYDIa++Ski/fsL+URzFMH48bV9r1pi/Nj2dXlunjq1V\nccwhJHZa7H3Mnz8faWlpuHbtGmJjYxEREYF169ZZWlyVIiWFjvwHBADO4la+l/Jjejom+vjAUSmD\nw1OnAufPA1u2WP6P4igeb2/A3Z3uC56VJbcajjkkM6+r6iwU41ccMVjrf2t0OvySkYHXJEjjY4n+\nJ/jmG2DnTmDXLqBmTevLE4Ek+mWENf0q1aOB99hYtaxarIW1Z28JkgTwnj17Yvv27VIUVSWwdgbK\nTxkZ6FW7NpooIfnv2rXA8uXA/v1A3bpyq+HYAWPHg++Jonz4UnozGAcbxGBND9xACGJu3sSP1kxf\nKYMl+kv57Tdg+nRArQZ8fSXRIxar9CsAFvUbOx4ODuFyyrAaFp+9WHgAtwHGHrjYGEwIsC87GzUd\nHfGch4f0wsSwbx/wxht0ibxEHyYceRC7RMP4321sxxzlUnUncEuEWB+NEODCBfqz0LhXdvhg2a1b\neN/XV7IxBYt8wIQEYOxYukS+Y0dJdFgK6z6mkvQLbVLGdpucrLaZFnugpGdvK3gAl5jUVLpQ0csL\nEDsGea9mAU7n52O0lWnIrOLIEWDkSGDjRqBbN/l0cGQjOBhwcqIeOM9Qr2x4ADeDWB/t1Cl6DAsT\nvwvhSf+beLNBA7g4SPffIkr/8eM0HdovvwAK8Q9Z9zFZ1F+9Og3iQDjOnJFbjeWw+OzFwgO4xDxc\neIewMJE3ehTjnwZ38a+GDSXXJIjTp4HBg4HVq+kyec5TjbH9GtszR5nwAG4GsT6asQceGiqyouG3\n0CK9vlX7nphCkP5z54AXXqCJGQYNkrR+a2Hdx2RVP22/6tL2zCKsPnsx8AAuMWUtFKFoHXTAkNvo\nfE2C9PViOXMG6NMHWLQIGD7c/vVzFImx/bIcwJ8GeAA3gxgf7d49OvDj6vpoW04hHPO+DSTVhmdB\nDfECzVCp/pMnqV2yZAkwZozkdUsB6z4mq/ppDzwcZ88COp3caiyD1WcvBh7AJcToF7ZtCwhNX1mo\n1+Ow901ggwSp68WQlPTINhk1yr51cxSPhwfdy6eoCPjnH7nVcCqCB3AziPHRkpLosX174eWvuXMH\nvg/cgWtuohdcCMGk/j//BAYOBH78ERg2TPpKJYR1H1MJ+i1tV40bqwHQyUksooRnb2t4AJeQw4fp\n8dlnhV1fZDDg67Q0RKTbsfd96BBNhbZuHZ11wnlqEDutNSSEHo8ckV4LRxp4ADeDUB/NYHjU0J97\nTljZK9PT0drVFX4PbLdsvpz+gwfpQOWGDUD//jarU0pY9zFZ1j9hQjiARx0T1mD52QuFB3CJOH8e\nyMkBGjcWlsj4gV6PeTduYG5AgO3FAUBcHDB6NLB5M9C7t33q5DBNaCgdkL90Cbh7V241HFPwAG4G\noT6asfct1D6JuXUL3T08EObubpkwgajVamDVKuCdd4C9e4GePW1an9Sw7mOyrP/IETW6dKE/Hz0q\nrxZLYPnZC4UHcIkwfs0UYp/k6HRYlJaGL2zd+yYE+PVXYO5cuiWsmNFVDgeP2jOrNkpVh28nawYh\nPhohdGwQEBbAF6WlYXDdumjp6mqdOHOiPv4Y4UeO0L++Ro1sV5cNYd3HZFl/eHg4iovpz8b2zRIs\nP3uh8AAuARcv0l0IvbwejdxXxM2iInx/6xZO2HKbVp0OeP11al4eOgTUqWO7ujhVmmefpSlQk5Np\njkwvL7kVccrCLRQzCPHR9u6lx379zC/gmXb1Kt5q2BD+tkqXlp9PdxTMyADi46FmeTs5sO9jsqxf\nrVajZk2gRw/6hS4+Xm5F4mD52QuFB3AJ2LOHHs3NzPszNxcJ9+9jup+fbYTcvk0HKevXp+nQ7JyA\nmFM1MbZrYzvnKAcewM1gzkcrKAB+/50ukujXr+LrDITgg5QUfBUYCLcKuulWrcQ8cwbo2hV46SW6\nwtLZGQD7PiDXbz2Wtiuj9hdeoOf79tH1DqyghGdva3gAtxK1mu4X0aEDUK9exdf9nJEBFYCXvb2f\neM/q7Gn79tG53V9/TZMQS5SOjVO1sLRZtGpF1zfcvct3J1QaPICbwZyPFhdHjwMHVnxNjk6HGVev\nYllQEBykDq4rVgDjxz9aqPMYrPuAXL98GLWrVI/a99at8ukRC8vPXig8gFtBScmjBj1iRMXXfXLl\nCiK9vNC1Vi3pKtfrgY8/BhYvptMEha4g4nAswNi+N2600urjSAqfRmiGyny0//0PyM6m+QNbtzZ9\nze85OdiTnY2/O3WSTlR2NhAVRYP40aNA3boVXsq6D8j1y0dZ7cax8ZQUaqOwsCaM5WcvFN4Dt4KN\nG+mxou20tQYD3rh4Ed8FBcHDSaLPyrNngc6dgTZt6PzFSoI3hyMVjo50fBx41O458sMDuBkq8tEK\nCszbJ19ev452bm6IlGr1w+bNQEQEMGcO8O23gIAPBdZ9QK5fPh7Xbuyo/Por/fKndFh+9kLhFoqF\nbN4M5ObSznCrVk++n5iXhx/T03FaihWXej3w2WfA+vV0xgkL3185VY7nnqNZeq5do4t6GNmRuErD\ne+BmqMhH++9/6fGNN558T6PT4eULF/B98+bWZ5nPyqKJF44coSl/RAZv1n1Arl8+Htfu4EB3aAAe\ntX8lw/KzFwoP4BZw/jyNp25uJmfu4cOUFPT08MDwyiaGm+CJ0f0//qABu00b2uWpX99y0ZynFiln\njbz6KvXDd+wA7tyRrlyOZfAAbgZTPlpMDD2OGUODeFm2ZGbiUG4ulolIS//E1HCDAZg/n5rrP/wA\nLFwIVKsmTvhDWPcBuX7pELsEwZT2Bg2AIUPofmn/+Y80umyFkp69reABXCQZGcCaNfTnDz8s/97V\nwkK8fekS1rdqVeFyebPcvUvXLu/eTbeAGzDAOsEcjsRER9Pjd98BDx7Iq+VphwdwMzzuo333HV06\nHxlZfvCyQK/HsHPnMMvPD10sXLDTNE1NLZMOHegafV9fi3UbYd0H5PrloyLtzz1Ht93JzgZWr7av\nJjGw/OyFwgO4CHJyaAAHgE8+efR7QgjevHQJbWrWxLsWJE5wLNHia3yMV3ZH0Y2o5s8XNEWQw5ED\nlepR+//mG0CrlVfP0wwP4GYo66MtXEiDeEQE0K3bo2u+u3ULfz94gBXNm0Ml1mg8fRovL+uEpriC\nb8eekXxuFus+INcvH5Vpj4wE2rYF0tKU64Wz/OyFYlUAT0tLQ69evdC6dWuEh4djw4YNUulSHLdv\nA8uW0Z+/+urR7/fcu4d5qanY2ro1XMX43jod7Wn36YPk8I8xHFvwwFXcrBUORy4cHGjzBYB584C8\nPHn1PLUQK0hPTyenTp0ihBCSmZlJAgICSF5eXrlrrKxCMYwbRwhAyLBhj353Ii+PeB0+TI7k5Igr\n7PJlQp55hpCICEJu3CDffkvLnjxZWs0cDiGEvPwybV8//yxtuQYDIc89R8v+6CNpy+YIi51W9cB9\nfHwQGhoKAPDy8kLr1q2RnJwswceKsjh0CFi3DqhenW65DQDXtVoMPnsWK5o3RzcPD2EF6XTUNOza\nla5Ljo8HmjSxnXAOx4aoVMCSJfS4dCnw999yK3r6kMwDT0lJwblz59C5c2epilQE8fFqvP02/Xn6\ndKBpU+BucTFeOHMGU5s0wTChi3WSkoBOnWjQTkwEPviAfg+1Maz7gFy/fAjR3rEj8NZbtG/y1lvK\n2iOF5WcvFEmmOmg0GowaNQpLlixBTRN5GCdMmAB/f38AgKenJ0JDQ0un+BgfslLPFyw4jXPngKCg\ncEydCmyLj8fkK1fwSr9+eN/X13x5u3cDq1cj/PBh4NtvoW7UCEhLQ3jTpqXXX7kCAOEgRHr9p0+f\nlvX5cf3y66crJm1X/gsvAHFx4ThyBHj3XTVGjVLO82fpXK1WY+3atQBQGi/NYq1PU1xcTPr06UOW\nLFlisY+jVNRqQlQqQhwcCPnzT0KyiotJ2+PHyYwrV4jBYDBfwPbthDRpQsiECYRkZVV42aJF1EeM\njpZQPIfzkDFjaPtav952dezcSetwdibk9Gnb1fM0ISR2WvUdnhCC1157DSEhIfjw8WWJjJOeTvc5\nIYRaJ4Hti9H7r7/wQt26mBsQUPl0wYsX6QrKjz6iyzbXrOH7dnOqNAMHAm++CRQX033Dc3LkVvR0\nYFUAP3LkCNavX4+DBw8iLCwMYWFh2Lt3r1TaZKOoiG5DcucOEBqqxtiphXj21CkMqVsXCyoL3rm5\nwJQpNL3Z88/T5AsREfYV/xjGr2iswvXLh1jtS5YA7drRrD3jxsnvh7P87IVilQf+3HPPwWAwSKVF\nERgMwIQJdLfBRo2Al6cWoNfZU/jM3x9vNWxo+iadjq4pnj2b9rzPnQNMZJ/ncKoyrq7Ali10YHPH\nDtqXWbpUblVVG74SswyEAJMnA7GxgLs78FFcFhY29sB3QUGmgzchtMW2bk1v2rEDWLVKUcHbOFjC\nKly/fFiivWlTYNs2wNmZLnz74gv5kiCz/OyFwjfceAghdH+HZcsAJ2eCIXHXsVh3B7vbtEEnU5tT\nqdXA1KnU9Pv3v4G+fcXv18nhVEF69gR++gl4+WX6pbSoCJg7l/952ALeAweNwePH0zSTjrVLELbz\nb6TWyUFShw54cPJk+YvVaqBXL+C11+hc7hMngH79FNs6WfcBuX75sEb76NHAhg00+cP8+cDHH9u/\nJ87ysxfKUx/Ac3Opbf3zz0D1btnw3JyM7gE1cKBdO3g7O9OLCAEOHqRdizfeoCb5P//QjA4OT/0j\n5HBMMmoUzWBfrRqwaBHtkfP9w6XlqbZQ/v6bNrLzV/Rw/ega3AZl4pe2LdG7dm16gV6P8Hv36NaD\n2dnArFlAVJTNtnq1RQ+FdR+Q67ceS9uVFNqHDQPi4ujf2a+/0vH9rVupV25rlPDsbc1T2X0kBFi+\nnI6Wn3e/h2rrk9B7RDHOd+tIg/eDB3Tj7+bNadfh449pIsyxY20SvBXqvnCqGHK1s4EDgePHgaAg\n4MwZ+ne3caN8g5tViacugF+7BgwaBLz7pRZF086h1swUbO7WHL91Dkbda9foNBQ/PyAhAfj5Z6jn\nz6fdCEtTpMkM6z4g1y8fUmoPDqbbAQ0eTBf5jBpF/6xu35asiidg+dkL5akJ4IWFwOefAy07l2C3\nXwpUK5MxonNN3OnTDkP+TAB69wa6d6fzn44fp9MDy2Zt4HA4VuHhQacY/vADnaa7bRudgbt0KZ2p\nwhFPlQ/gRUU0Y0izDiWYk3oNxT8eR1CIHmedXbAxfhlq+PnRFjRxIpCaSrM1BAaW3s+6j8b1ywvL\n+m2h3cEBmDSJeuEDBtDeeHQ00LIl8Msv0q7eZPnZC6XKBvDcXDqn2++ZQrx9LgW3v0pE44AsHPwj\nCZe+H47Wb40AatUCDh8G/viDziipXl1u2RzOU0HjxsDOnXTtW+vWwPXrwCuv0ED+/fdAQYHcCtmg\nSgVwQoCTJ4E33jKg/tAsfFh0BlmfHcfzzsdwbvYs3IgZiF6aC7RLfuUKMGcOHVmpBNZ9NK5fXljW\nb2vtKhUdj/rrL7rfW0AA3UflnXdogI+OpoOelsLysxcK89MICQEuXAD+byPB2uN5uN38Fhz6ZaBR\n62y8v+83jF16GHVeGgzV0jnAc88xOxjJ4VRVHB3p0opXXqFTDr/9lg5DLV1KX+3bAyNHAkOH0olh\nnEeoHu47a7sKVCpIXUVWFt1savtBHfbcvgND0xTkdy6GV24uxiXsRfjZbIT06oL6Y/vR7dEUvthm\nyRI6+eXDD+nPHI6UjBlD52D/8gv9WekQAiQnA2vX0tWcZbembdWK7loRHg706AHUqSOXStsjJHYq\nvgeen08XPZ4+DRxILsTFzH+grX8L2uBi3O3riu5nz6Jd0i20+tMdoc93QsjSJXCqY2LvEg6HwwQq\nFc0+2KkTXYaxezedsbJjB/22feECHd9SqYC2benuzWFhtK8WEgLUqCH3v8B+yB7AS0pojzot7dHr\nemoB0m6n4J7uJrS1c6D11yOjqRuKX3BE2wvX0eBcARrsdkNzn2B0mPA2wj6uaTNnRK1W22002xbf\nheyp3xZw/dZjabtSgnYXFzpffNgwGiuOHKHbEanVwJ9/Uv/8r78eXe/gALRoQYe2nJ3V6N49HAEB\nNHd4vXqAlxedKVxVsEsAHzMqCXpDCQxEBz0pQQkpRLFjIXTViqCroYPBQ4/C+irk1nNBZtNaKGpV\nDX43M+F9XYM6qSrUSnJDj9O10apDO3TqPQTtptD9FaoKfCUmxx6w3s6qVaPWifEzpbCQ5gc/fpwG\n8dOnaTIsYy8dADZvfrIcDw8ayN3caG/d+HJxoR8AYWHAjBn2+ldZh1088BZr/gtHXQkcDXo46kvg\nXFQA5yINHIs1gO4BiC4XRbq70CATWQ53kemcB+uSvXE4HI7lkNnyr/NXjAe+sPYbcHamn6DVqtHp\n17Vr05e7u+LHGG3O0qV0ytQHH/AMJhzpiYqi+UY2bKA/P80YDHRQNCuLbnlUWEhfBQV00R8hisrH\nYha7BPDISHvUYhuU4ANaA9cvLyzrZ1k7YFq/gwOduVJVZq885X1fDofDYRcewM3Acg8E4PrlhmX9\nLGsH2NcvBB7AORwOh1F4ADcD6/spcP3ywrJ+lrUD7OsXAg/gCoJnKOHYAt6uqi48gJvBHj6aLRdY\nsO4Dcv3SIbadKUm7JbCuXwg8gHM4HA6j8ABuBtZ9NK5fXljWz7J2gH39QuABnMPhcBiFB3AzsO6j\ncf3ywrJ+lrUD7OsXAg/gHA6Hwyg8gJuBdR+N65cXlvWzrB1gX78QeADncDgcRuEB3Ays+2hcv7yw\nrJ9l7QD7+oXAA7iC4CvmOLaAt6uqi9UB/NChQ2jVqhWCgoIQExMjhSZFYQ8fzZYrMVn3Abl+6RDb\nzpSk3RJY1y8EqwP4Bx98gBUrVuDAgQNYvnw5srKypNDF4XA4HDNYFcBzc3MBAD169ICfnx/69u2L\nxMRESYQpBdZ9NK5fXljWz7J2gH39QrAqgCclJaFly5al58HBwTh27JjVojgcDodjHrvkxJwwYQL8\n/f0BAJ6enggNDS39dDT6VEo9X7p0qc31Xr4MAOzqt+U512/9+d27gCXtq6yHrJTnWZX1q9VqrF27\nFgBK46VZiBXk5OSQ0NDQ0vN3332X7Ny5s9w1VlYhOwkJCTavY9kyQgBC3ntP+rLtod+WcP3WM3Ik\nbV+xseLuU4J2a2Bdv5DYaZWF4uHhAYDORLl+/Tri4+PRpUsXa4pUHMZPSlbh+uWFZf0sawfY1y8E\nqy2UpUuXYtKkSSgpKcH7778PLy8vKXRxOBwOxwxWTyPs2bMnLly4gJSUFLz//vtSaFIUZX00W2OL\nBRf21G8LuH7rsbRdKUG7NbCuXwh8JaYCsOVCHg7HCG9nVQ8ewM3Auo/G9csLy/pZ1g6wr18IPIBz\nOBwOo9hlHrgpIiIikJeXJ1f1gtFqtXBxcbFpHRoN4OUF7NoF/PmntGXbQ78tsVR/rVq1cPDgQRso\nEodarWa2J8iydoB9/UKQLYDn5eUhOTlZruoFo9Fo4O7ubtM6MjKAtDSgfn2gSRNpy7aHfltiqf6O\nHTvaQA2Hoyy4hWIGloMfwPXLDcs9QJa1A+zrFwIP4BwOh8MoPICbQaPRyC3BKrh+eWF5LjLL2gH2\n9QuBB3CF8fzzzwvaknfjxo149dVX7aCIw+EoFR7AH+O7775Dx44d4eLigldfffUJD3bBggWYOXOm\nTeo+eTIRGo1G0H4yw4YNg1qtxs2bNyu9jnUPmXX9SvBhLV2JqQTt1sC6fiHwAP4YjRo1wqeffoqJ\nEyeafH/37t0YOHCgpHUaV8j98MNCvPPOO4LucXJywvjx47FkyRJJtXCqLnwlZtWDB/DHGDp0KCIj\nI1G3bl0A5T3Y+/fv49KlS3jmmWcAACdOnMC//vUv1K9fH82aNcO+ffsAANnZ2Vi4cCGCgoLw0ksv\n4ffffy8t4/z58xg2bBjq168PHx8fTJkypfS9P/9MQNeuXUvPBw4ciI8++qj0fPTo0XjttddKz7t2\n7Wp2rjPrHjLr+ln2YVnWDrCvXwiyzQM3h1S9BUu/PhITN+7btw+9e/eGSqVCZmYmwsPDsWjRIixa\ntAg5OTmlwSY6OhparRYJCQk4fvw4hg0bhpMnT8LPzw+zZ89Gr1698H//938oKSnB2bNnAQBZWenI\nz89DQEBAaX2rV69G27ZtMXDgQNy+fRvJycn466+/St9v2rQpLl68aNk/kMPhMI9iA7jcqB5+gpT1\nYHft2oUBAwYAADZv3oznn38eb775JgDA1dUVAKDX67Fr1y4cPXoUvr6+8PX1xdatW7F161ZER0fD\nYDAgNTUV2dnZ8Pb2RpcuXXD3LpCRkQZPzzpwdnYurc/b2xv/+c9/MG7cOGi1Wvz222+oWbNm6fu+\nvr7QarXIyMiAt7e3yX8H6x4y6/pZ9mFZ1g6wr18IirVQaA4R61+W11/+ZoPBgAMHDqB///4A6Nez\nZ5999on7Lly4gKKiIjRv3rz0dx06dMAff/wBAFiyZAkKCgoQEhKC/v37l9orPj5+yMnJRnFxcbny\nBg0aBL1ej5YtW6Jbt27l3rt58yZcXFwqDN4cDqdqo9gALjfGHrjRFklKSoKfn1+pN96rVy8cPnz4\niftatmyJ6tWrl7M2kpOT0aNHDwBAkyZNsHz5cty5cwcjR45EVFQUDAYD6tb1Rq1anrh27Vq58mbO\nnIng4GCkp6cjNja23HspKSnlPihMwbqHnJengV4PlJQAxcWAVgsUFtKXVktfRUX0Pb3eNnuqWwPL\nPizL2gH29QuBWyiPodfrUVJSAp1OB71ej6KiItSoUQO7d+/GoEGDSq976aWXMHXqVKxatQqjR49G\nTk4O8vOzOxBtAAAfRklEQVTz0aJFCwwcOBCzZ8/GokWLkJSUhL1792LevHkAgPXr16Nfv36oXbs2\natasCTc3t9Iyu3WLwLFjx9CiRQsANFXd2rVrcebMGVy5cgVDhw5Fjx490LBhQwBAYmIinn/+eTs+\nHWnR6WgALi6mL2Mg1ukevfR6cWWqVICjI3DrFtCtG9CoEdCwIT02aQI0bw60aAGUcaI4HGZREVOj\ndVJWoFKZHBDs2LGjIjez+vzzz/HFF1+U+93s2bOxc+dOrFixAu3bty/9fXJyMlasWIG4uDjUqVMH\ny5cvR58+fXDv3j3897//xapVq9C2bVu8++67iIiIAACMHTsW+/fvh06nQ7du3TBlyhQEB4cjNRVI\nT0/G3LnvIDExEXl5eWjXrh0WLlyIkSNHAgCmTZuGU6dOYd++fdDpdGjevDn++OMPNGrUyH4PyAII\nocH5wQOgoOBRD7qkRNj9Dg70pVI9OhrLNTYtg6F8D/yFFzoiK6vi9tW4MdCyJRAaCnTpQl++vlb8\nIxXMiBHA5s3Axo30Zw4bVBQ7y13DA7h57t69i7CwMNy6dctG5QOpqUC9esDrr/fB3LlzzS7m2bRp\nE/bs2YPVq1fbRJM1EEJ71hoNfeXnmw7WDg6Aiwvg7AxUr06Pzs5AtWq0F+3kRF9iZiQZA3mnTh0R\nE5OMW7dQ+rp+Hbh4Ebh82bSeRo2Arl2B3r2Bfv2AMhOCmOall4AtW3gAZw0hAZxbKGbQaDTIzc3F\n4sWL7VJffHy8oOtGjBiBEQL+Gu21nSwhNFDfvw/k5FArpCxOToCbG+DqCtSoQV/Vq5sPzmL1G3vr\nTk5A9+6mr9HpgGvXgPPngRMngGPHgOPHaZDfsoW+ACAoCBg6lAbAjh0tm9qqpD2pxepXknZLYF2/\nEHgAF0BQUBCCgoLklqFICguBe/eA7OzyQdvJCahVC3B3p4HbxUU5KwGdnGhwDgoCIiPp7wwG2jv/\n4w8gPh44cID21L/+mr78/YEJE4CJE6n9wuEoAW6hKICyFoqfn9xqzEMIkJtLdZdNquTsDNSpA3h6\n0kFCOQO2te1LpwOOHqXe8ebNQHo6/b2DA9C/PzB5MhARoZwPpcowWiibNtGfOWwgxELh0wg5giGE\n9rTPnQNSUmjwdnCg6eBatADatKEDgW5ubAS2ynByAnr0AP79b+DmTdojHzWK/n73buqTd+0KbNum\nvKmLnKcHHsDNwPo8aqn05+RQz/jqVTpA6exMg3XbttRecHe3TdBWwvN3cACefx6IjaU++dy59EPr\n+HHqkT/zTMW5TFmei8yydoB9/ULgAZxTKUVFtLedkkL97mrVqM0TEgL4+NAe6dOElxcwcyZw4waw\nbBl9BomJdM55VNQjq4XDsQc8gJuB9b04LNVPCE22fO4c7X07ONDBuzZtqFfvYKeWo9Tn7+oKvP8+\ncOkSMGMGnVETGwu0bk2PRlieBcGydoB9/ULgAZzzBDod7XGnpdHZGbVr0x63t7f9AjcruLsD8+bR\nGSz9+9NplFFR1C+/f19udZyqDv9zNIMSPFhrEKs/P5963bm5dDFN06b0VWaTRLvCyvP386ODmytW\n0Bk4GzfSQc6ff1bLLc1iWPeQWdcvBB7AOaVkZ9OeZHExDULBwbT3zRGGSgW8+SZw5gwd3L10CXj7\nbTqDRU74LJmqCw/gZpDCg12/fj1mz56NsWPHYs+ePRaVcfjwYXz44Yei7xOqPzOTzjAhhHrcLVpQ\nX1dulOqBV0ZgIHDkCF0klJ8fjv79gZ9+kluV+FlCrHvIrOsXwlM2h8D+pKSk4P79+5gzZw6ysrLQ\nokULXLhwAfXr1xdcxuLFi5GYmFiaNEJq7tyhc50BunNfgwbsz+OWGzc3YOtWOmPlq6/oKs6iItpD\n53CkgvfAzWCtB3vu3Dl8/fXXAAAvLy8EBgYiMTFRVBmTJ08uzQQkFnP6MzIeBe8mTWgAV1LwZsUD\nN4WDA9CvnxrffEPPJ00CfvlFXk1iYN1DZl2/EHgP3EKuXr2KlStXVvh+165dERkZiQEDBpTaJoQQ\npKeno/Fjm2n07NkGM2f+hHr12psqqvReqbl3j840AehiHC8vyavgAPjoI2pNffIJ7Yl7edHdDjkc\na1F0AFfNsb4rSGaLD3wnTpxAQkICdDodQkJCYDAYsG3btnJbtwYGBmLBggVmy6pWrRpCQkIA0Jya\nHTt2RGhoaLlrpk37Ek2aVJ5ZR2Vht7giDzk/n26vCtAVlUoN3ix64GUx+rAffwxkZdGNsUaOpIt/\nWraUV5s5WPeQWdcvBEUHcEuCrxRkZmaiffv2iImJwbRp00AIQXR0tFVl5uTkYM2aNVi/fv0T773w\nwotITa38fil74CUlwJUrjwYsfXwkK5pTCQsW0Oe+ZQswZAiQnEx3bORwLMXiAP7xxx9j586dqFGj\nBnr06IEFCxagRo0aUmqTjf79+2P69OkYO3YsNBoNzp49i06dOpW7RqiFAtDg+9VXX+HHH3+Em5sb\nbty4AT+R2w5a2gN/fD9tQuhe2CUldKBN6Vuj2ms/c1tRdk9qBwc6G+XyZTrV8O23gZ9/VtaYQ1lY\n30+bdf1CsDiA9+3bFwsXLgQATJo0CRs2bMBrr70mmTC5SUhIwLRp0wAA69atwxtvvIG9e/eWZqUX\naqEAQExMDEaMGIGioiIcOnQIhJByAXz37jg0bdoXQMWJGqXqgWdk0F0EnZzodDe+stK+GBf5dOhA\nBzT79QPGjpVbFYdVLP7z7dOnDxwcHODg4IB+/frh999/l1KXrBQUFMDT0xMeHh5wd3eHj48PMjIy\n4O3tLbqsw4cPIzo6Gp06dULDhg3Rq1cvNGvWrNw1ixZ9gZs3r1RYxtKlS/HDDz8gPj4eM2fORF7Z\nTbjNULb3qtXS3fQAOmgp1+pKMbDc+wZM+7AtWgAxMfTnDz6g0zhtiaWf/az3XlnXLwRJEjr069cP\nr7/+uskUXzyhg3nskdCBELrKMj8fqFu36uR7rAilty9CgAEDgL17aZKFTZtsV9ewYUBcHPXehw2z\nXT0cabE6J2afPn1wx0T3YP78+Rg8eDAA4IsvvoC7u3ul+RknTJgAf39/AICnp2e5WRjGeb7GnpbS\nzjMyMuDq6mrT+rRaALCt/uJid+TnA46OmofL45XxfG31/I0Y5wIbe2P2Pl+6dClCQ0NNvv/DD0DL\nlmps3gzEx4ejTx/b6MnMBADx95edRy3X87PmnDX9arUaa9euBYDSeGkWYgVr1qwh3bp1I4WFhRVe\nU1EVHTp0sKZqu5GXl2fzOjIyCElKIuT6denLzsvLIzodIadP0zoyM6Wvw5ZY+vyV0r4SEhIqfX/B\nAkIAQkJCCCkpsY2GoUNpHVu2iLvPnHalw7p+IeHZYg987969+Oabb7B9+3a4uLhYWoziYd2DdXd3\nR0YGnXXi6krtE5Zg/fmb82E//JCOR/z9N1BmmYEiYN1DZl2/ECwO4O+99x7y8/PRu3dvhIWF4e23\n35ZSF0cidDo68wSgC3aUOmXtacXFBXg4mQtz59L9UjgcoVgcwC9fvowbN27g1KlTOHXqFL7//nsp\ndSkGlvfiAIC0NA30epp4gMVFI6w/fyH7cbz0Ek2YkZYGPLRAFQHre4mwrl8IfBZwFUavf5QVpmFD\nebVwKsbBAfj0U/rz/PnU7uJwhMADuBlY9mDv3QMMBne4udEeOIuw/PwB4T7sSy/RvVFSU+mUPyXA\nuofMun4h8ABeRSGEzi8HABFbj3NkwsEBeO89+rNxkQ+HYw4ewM3Aqgebl0dXXjo5aZhOi8bq8zci\nxocdN46OUxw+DJw8KZ0GS5fqse4hs65fCDyAK5ycnBysXLkS8+bNE3T95cuXERcXh88+m4N//jkJ\nT08+84QV3NyAiRPpz//5j/Tl83ZQ9eAB3Axye7Cenp7o27cvdDqdoOt37twJb+9GGD58Mtav/xaN\nGrHtIcv9/K1FrA/7xhv0uGkTUFgovR4xsO4hs65fCDyA25Hjx48L3sHQUqKjo9GsWWfcuZOGgIAA\nVKtmfZmWJlTmiCc4GOjYEcjNBXbskFsNR+nwAG4GqTxYg8GAzz77DCV2mCOWlQWo1XGYOXOmIP3L\nly+v8L3FixcjJiYGubm5UkoUzNPkgRsZN44e162TVotYWPeQWdcvBB7A7cSmTZvQu3dvi/b1FnOP\nVgvs3bsdUVHvIS/PTJqfh2RlZVX4njUJlTmWMXo03a997176YczhVISiU6opgYo8WDEZeTIzM+Ho\n6Ih69erhwYMHT1xbWVJjjUaD2NhYHD9+HGfOnEHbtm0r1fvLL1uxatUCbN0ag/79e2LWrFmVXi8E\nSz50pOJp88ABuq1wRASwfz+wcydNhCwHrHvIrOsXAg/gJpAyqTEAbN26FW+++SbWVfCduLKkxu7u\n7pg2bVppdqCybN++HY6Ojjh06BCaN2+OhIQEjBnzKX76KQlNm0Ky6YOWpnPjWM6LL9IA/ttv8gVw\njvLhAdwEZZMav/POO3Bzc7M4qfGxY8fQpUuXSjdnF5LU+HFSU1MRHByMZs2aYdasWZg+fTrq1vVG\nrVqNoVI92vfEVE7JCxculPswOXz4MLR0U3IAQPfu3cvZJnL2wKtSTkwxDBlCc2bu309no8iRbpb1\nnJKs6xeCsgO4FD0/C4JP2aTGAPDnn39anNQ4KSkJBQUF2LdvH44cOYLCwkJs374dQ4YMESTVwUTS\nSpVKBb1eD4AmPPDw8ICnpyeefXYQbtygwdvRseJ/X6tWrcp9e5gzZw5mz55d4fW8B25/GjWis1GS\nk4EDB4CH+VMsQsbPX46NUXYAl7HlGZMau7u7W5XU+D3j+mgAn3/+OVQq1RPBu7KkxgaDwWS5//zz\nD7RaLU6dOoUePXoAAH77bTdCQwfA0/PRdVL0XrkHbjnW9AAjI2kA37HDugBuROznMOu9V9b1C4HP\nQjFB2aTGAKxKamxk48aN2LRpEzZv3oxNjyVArCyp8eXLl7F161bMmTMHJ8usr96/fz/i4uJgMBig\n1WqxffsOuLs3AiDttrHWJFTmWMfDvgIOHpRXB0fB2DQnEOEp1YRw9y5Nd3bt2pPvLV68mCQmJpK8\nvDwSFRVVYRn5+bSMM2fK/16I/oULF4pUbD+qekq1ytDpCPHwoOnQrEm3FxlJy4iLE3cf6ynJWNcv\nJDzzHrjCiY6ORufOnZGWRldWVoSxY2yJ4/DJJ59YqI5jSxwdAaMLkJAgqxSOQuEB3AxK8WDj4ujK\nyoowLlh83D5Rin5LYV2/tT5sr170KIeNwrqHzLp+IfAAzgDbt2/He++9h9QK5hoaDEB+Pv2Z8XjH\neYyICHr83//4bBLOk/AAbga59+KIi4vDl19+ieHDh2Pz5s0mrykooEHcxQVPbF4lt35rYV2/tftx\ntG5NV2bevg1cMT3ObTNY30uEdf1CUPY0Qg6GDh2KoUOHVnqNcXW+m5sdBHHsioMD0LUrnUqYlAQ0\naya3Io6S4D1wM7DgwRoDeM0np5Ezob8yWNcvhQ/buTM9JiZaXZQoWPeQWdcvBB7AqwCVBXAO+xgD\n+PHjlt3PvfOqCw/gZlC6B6vTAUVF9Ku2qf0ylK7fHKzrl8KH7diRHk+eBKzZTl7sSkzWPWTW9QuB\nB3DGMfa+XV15zsOqSp06QFAQ/aA+e1ZuNRwlwQO4GZTuwZqzT5Su3xys65fKh+3ShR4ttVEsgXUP\nmXX9QuABnHG4//10YNwMMylJXh0cZcEDuBmU7sEaM5dXtF+00vWbg3X9Uvmw7drR499/S1KcIFj3\nkFnXLwQewBlGrweKi6n3Xb263Go4tqR1a3o8f54u2uJwAB7AzaJkD9aYRMfFhc5CMYWS9QuBdf1S\n+bBeXoC3N90yQWz2Jkth3UNmXb8QeABnhBs3bqBTp06YNGkS0tPTAZi3Tx5nypQpVmnIycnBypUr\nMW/ePMH3XL58GXFxcU/sZ84Rj7EXfu6cvDo4yoEHcDMoyYONjY3FihUr0KBBAwDCArhR/5UrV3D6\n9Gmr6vf09ETfvn2h0+kE37Nz5040atQIkydPxrfffiu6TiU9f0uQ0ocNCaFHsQHc0oU8rHvIrOsX\nAt8LxQ4UFBTg119/haurK27fvo3JkydblGcyPj4eycnJaNOmDYKDg0sDuIuL+Xtv3LiBJk2aiK7T\nWozJoM+fP1/pfuZCOXz4MDZv3oylS5daXRZrGHvglg5k8nUCVQ/eAzeDFB7s/Pnz0bt3b0RFRWH1\n6tUVbgtbGY0bN8akSZMwcuRIfP311wCE9cDd3d1x7NgxdDauxxbA8uXLReszh7n9zCuqu+zzX7x4\nMWJiYpCbmyu5PlshpQ9raQ/cUlj3kFnXLwSrA/iiRYvg4OCA7OxsKfRUOdLS0nDy5En4+fkBoLks\njT+LYfny5Thz5gzu3LkDZ2dn6HR0WbWQGSjXr1/H//73P6SmpiJBQGqXrKysCt8jFnwfN7efudC6\nJ0+ejAEDBoiuv6oQHEyP58/TGUgcjlUWSlpaGuLj4y0KSKyg0WhM9sKvXr2KlStXVnhf165dERkZ\niaSkJNSqVQvr1q3D3bt34eXlhQkTJpS7tmfPNpgx4yc891z7CssbOHAgLly4gN27d2PmzJnlZqBU\n9tVYo9Fg9OjRuHr1KgoLC6E13mgBGo0GsbGxOH78OM6cOYO2bduavScuLg7z589HTEwMevbsiVmz\nZomus+zzt+QDRE7UarVkPUFPT6BRI+DWLeDGDSAwUJJiK0RK7XLAun4hWBXAJ0+ejK+//hqRkZFS\n6VEEJ06cQEJCAnQ6HZo2bYrq1atj27ZtWL16dek1gYGBWLBggdmyLl26hL///huxsbEAgO7du+PZ\nZ59FUFBQ6TVTp36JJk2aV1pOYGAgAgMDMXDgQADAvXv092X97+3bt8PR0RGHDh1C8+bNkZCQgOjo\naHTo0AGBgYE4evSo0EdgEnd3d0ybNg3Tpk174j1Tdc+aNUvQfuZisGTsoCrRrBkN4Fev2j6Ac5SP\nxQH8t99+g6+vr6BeGGtkZmaiffv2iImJwbRp00AIKR2ME0vNmjXRpk2b0vMmTZpg//795QL4gAEv\n4sYNceUWFdGj0T5JTU1FcHAwmjVrhlmzZmH69Onw9vZGq1atzJZ14cIFrFu3rvT88OHD5Xrq3bt3\nr9S6qKhuIYOmYutmrQcudQ8wMBD4/XcawG0N671X1vULodIA3qdPH9y5c+eJ38+bNw8LFizA/v37\nS39X2R/WhAkT4O/vD4BORQsNDS19zzhNzPg1uey5SoJpQHkdOlRYfkXnzz77LObPn4+xY8dCo9Eg\nMTERnR5uRmG8PjMzEytXrkRxcTEAwNnZGQBKz3v06IHIyEgEBASU8531ej0cyqy60Wg0D+0Q03oc\nKlqhUwaVSgX9Q1P0ypUrcHNzg6enJwYNGgSNRlPOhjD17/X19S39NqHRaLBgwQLMnz+/3PUVaVGp\nVMjJyYG7uzsyMjLg5uYGR0dHDBo0SNDz9vX1xYwZM0rPZ8yYgenTp5e7vqz+oqIilJTZU7Wi8o0Y\np5IZ/5hZP1ep6PnVq8Lvp8MKytDPzys+V6vVWLt2LQCUxkuzEAs4e/YsqV+/PvH39yf+/v7EycmJ\n+Pn5kYyMjCeuraiKDh06WFK13ejSpQvJyckheXl5ZNKkSeTAgQNkz549osvRarWkR48epec9evQg\nN27cKHfNmjVbyaFD+eTaNeHlXrhASFISIbm5xvML5NSpU2T16tXk008/JYQQsmvXLpKXlyda8+ef\nfy7q+orqtoTH635c/5o1a8iECRPMlqOU9pWQkCBpeb/8QghAyIgRwu8ZPJje89tv4uqSWru9YV2/\nkPBskYUSEhKCjIyM0vOAgACcOHECderUsaQ4xVFQUABPT094eHhAo9HAx8cHGRkZguyIx6levTq+\n+OILfPnll6hZsyYmT578hLWwaNEXmDGjKRo3ftKOunz5Ms6ePYuzZ89i8ODBaN+eDnTOmzcZH3yw\nuNRC2b9/P+7du4cmTZpAq9Vix44dks/7rkiLPeoGgKVLlyI2NhY3b97EzJkzMXXqVNSqVUvyepSM\n0fe2h4XCYQApPikCAgLIvXv3RH2KKKWHpATu3qW9aVM98MWLF5PExESSl5dHoqKiCCGEXLqUQjp1\niiBJSYTo9dLrWbhwocnfm9Jir7rFUlXb1507tDddu7bwewYNsqwHzpEXIeFZkpWYV3l3wGaYWsl4\n5coNeHs3gbNzxZtYWcMnn3wiWIu96uZQ6ten2Zfu36ev2rWF3/uUT+CpkvCVmGZQwl4chBDExcVh\nxowZOHbsGNq0oasqhWwhawv9QldVSoESnr81SL0fh0r1yEa5dk3Sop+A9b1EWNcvBB7AGWDHjh2l\nKxmNqyozMlJx8qT5VZVSI2ZVJcc2cB+cY4QHcDPIvR91XFwcvvzySwwfPhxbtmzB6NGjERjYBlpt\nIQwG86sqpdRfVsvmzZslK7cy5H7+1mKLucj2CuCsz6NmXb8Q+G6ECsfUSkYfn0CsXn3U7ivxpF5V\nybEM3gPnGOE9cDMo0YN9uFYID9cOVYoS9YuBdf228GGNMzRv3pS86HKw7iGzrl8IPIAziHEhYrVq\n8urgyMPDfB54mJiJ8xTDA7gZlObBEiIugCtNv1hY128LH7ZhQ3q8fVvyosvBuofMun4h8ADOGMZs\nZk5OtpkDzlE+3t50OmFGxqP2UBmM7f/FEQEPAWZQmgcr1j5Rmn6xsK7fFj5stWpAvXo0MN+9K/w+\nsQt5WPeQWdcvBB7AGcM4gMn976cbe9koHGXDA7gZlObBiu2BK02/WFjXbysf1hjAbTmQybqHzLp+\nIcg2D7xWrVro2LGjXNUrivx8mmHHzQ2oW7fya3NzgZwcwMODptjimKaq71JonInCe+BPOUrYUUvJ\n2GNP4R9/pLvFTZxo/tq33qLXxsQIK5v1PZG5ftN8+iltB599Zv7agQPptTt2iKuDP3t5ERI7uYVi\nhtOnT8stoRzGHpfxK7Q5lKZfLFy/aexhofBnr3x4ADdDTk6O3BLKYQzgxq/Q5lCafrFw/aaxh4XC\nn73y4QGcMYw9LqE9cE7VxB49cI7y4QHcDNevX7dbXeYWXOj1gDHHtI+PsDLtqd8WcP2mscc0Qv7s\nlY/qoVluuwp4GhAOh8OxCHPh2ebTCG38+cDhcDhPLdxC4XA4HEbhAZzD4XAYxWYB/NChQ2jVqhWC\ngoIQExNjq2pswsSJE+Ht7Y02bdrILcUi0tLS0KtXL7Ru3Rrh4eHYsGGD3JJEodVq0aVLF4SGhqJr\n165YsmSJ3JJEo9frERYWhsGDB8stRTT+/v5o27YtwsLC0LlzZ7nliObBgwcYP348mjdvjuDgYBw7\ndkxuSYK5ePEiwsLCSl8eHh7497//XfENtlpFFBoaSn7//Xdy/fp10qJFC5KZmWmrqiTn0KFD5OTJ\nkyQkJERuKRaRnp5OTp06RQghJDMzkwQEBJC8vDyZVYnjwYMHhBBCtFotad26Nbl8+bLMisSxaNEi\nMmbMGDJ48GC5pYjG39+f3Lt3T24ZFjNlyhQya9YsUlhYSEpKSkhOTo7ckixCr9cTHx8fkpqaWuE1\nNumB5+bmAgB69OgBPz8/9O3bF4mJibaoyiZ0794dtWvXlluGxfj4+CA0NBQA4OXlhdatWyM5OVlm\nVeJwdXUFAOTn50On06F69eoyKxLOzZs3sXv3brz++uvMDuKzqhsADhw4gBkzZsDFxQVOTk7w8PCQ\nW5JFHDhwAE2bNkXjxo0rvMYmATwpKQktW7YsPWfta0xVIiUlBefOnWPuq7DBYEC7du3g7e2Nd999\nt9JGrDSio6PxzTffwIHRjBsqlQoRERF48cUXsX37drnliOLmzZvQarX417/+hS5dumDhwoXQarVy\ny7KI2NhYjBkzptJr2GxhHEFoNBqMGjUKS5YsQc2aNeWWIwoHBwf89ddfSElJwffff49Tp07JLUkQ\nO3fuRP369REWFsZsL/bIkSP466+/sGDBAkyePBl3jKvHGECr1eLSpUsYPnw41Go1zp07h40bN8ot\nSzTFxcXYsWMHRowYUel1NgngnTp1wj///FN6fu7cOXTt2tUWVXEqoKSkBMOHD8fYsWMRGRkptxyL\n8ff3x4ABA5ix4I4ePYrt27cjICAAUVFROHjwIMaNGye3LFE0eLjRSqtWrTBkyBDs2LFDZkXCadas\nGVq0aIHBgwejRo0aiIqKwp49e+SWJZo9e/agQ4cOqFevXqXX2SSAGz2nQ4cO4fr164iPj0eXLl1s\nURXHBIQQvPbaawgJCcGHH34otxzRZGVllW5EdO/ePezfv5+ZD6H58+cjLS0N165dQ2xsLCIiIrBu\n3Tq5ZQmmoKCgNI1dZmYm9u3bh/79+8usShxBQUFITEyEwWDArl270Lt3b7kliebXX39FVFSU+Qtt\nNYKqVqtJy5YtSdOmTcmyZctsVY1NGD16NGnQoAFxdnYmvr6+ZPXq1XJLEsUff/xBVCoVadeuHQkN\nDSWhoaFkz549cssSzJkzZ0hYWBhp27Yt6du3L/npp5/klmQRarWauVkoV69eJe3atSPt2rUjERER\nZNWqVXJLEs3FixdJly5dSLt27ciUKVNIfn6+3JJEkZ+fT+rWrSto5pjN90LhcDgcjm3gg5gcDofD\nKDyAczgcDqPwAM7hcDiMwgM4h8PhMAoP4BwOh8MoPIBzOBwOo/w/BtqQ95lWglQAAAAASUVORK5C\nYII=\n"
619 650 }
620 651 ],
621 652 "prompt_number": 24
622 653 }
623 ]
654 ],
655 "metadata": {}
624 656 }
625 657 ]
626 658 } No newline at end of file
@@ -1,410 +1,443 b''
1 1 {
2 2 "metadata": {
3 3 "name": "sympy_quantum_computing"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
10 11 "cell_type": "markdown",
12 "metadata": {},
11 13 "source": [
12 "# Basic Symbolic Quantum Mechanics with [SymPy](http://sympy.org)",
13 "",
14 "We first load the IPython extensions that enable LaTeX-based mathematical printing ",
14 "# Basic Symbolic Quantum Mechanics with [SymPy](http://sympy.org)\n",
15 "\n",
16 "We first load the IPython extensions that enable LaTeX-based mathematical printing \n",
15 17 "of SymPy objects, and then import the quantum computing libraries from SymPy."
16 18 ]
17 19 },
18 20 {
19 21 "cell_type": "code",
20 22 "collapsed": true,
21 23 "input": [
22 24 "%load_ext sympyprinting"
23 25 ],
24 26 "language": "python",
27 "metadata": {},
25 28 "outputs": [],
26 29 "prompt_number": 1
27 30 },
28 31 {
29 32 "cell_type": "code",
30 33 "collapsed": true,
31 34 "input": [
32 "from sympy import sqrt, symbols, Rational",
33 "from sympy import expand, Eq, Symbol, simplify, exp, sin",
34 "from sympy.physics.quantum import *",
35 "from sympy.physics.quantum.qubit import *",
36 "from sympy.physics.quantum.gate import *",
37 "from sympy.physics.quantum.grover import *",
38 "from sympy.physics.quantum.qft import QFT, IQFT, Fourier",
35 "from sympy import sqrt, symbols, Rational\n",
36 "from sympy import expand, Eq, Symbol, simplify, exp, sin\n",
37 "from sympy.physics.quantum import *\n",
38 "from sympy.physics.quantum.qubit import *\n",
39 "from sympy.physics.quantum.gate import *\n",
40 "from sympy.physics.quantum.grover import *\n",
41 "from sympy.physics.quantum.qft import QFT, IQFT, Fourier\n",
39 42 "from sympy.physics.quantum.circuitplot import circuit_plot"
40 43 ],
41 44 "language": "python",
45 "metadata": {},
42 46 "outputs": [],
43 47 "prompt_number": 2
44 48 },
45 49 {
46 50 "cell_type": "markdown",
51 "metadata": {},
47 52 "source": [
48 53 "<h2>Bras and Kets</h2>"
49 54 ]
50 55 },
51 56 {
52 57 "cell_type": "markdown",
58 "metadata": {},
53 59 "source": [
54 60 "Create symbolic states"
55 61 ]
56 62 },
57 63 {
58 64 "cell_type": "code",
59 65 "collapsed": true,
60 66 "input": [
61 "phi, psi = Ket('phi'), Ket('psi')",
67 "phi, psi = Ket('phi'), Ket('psi')\n",
62 68 "alpha, beta = symbols('alpha beta', complex=True)"
63 69 ],
64 70 "language": "python",
71 "metadata": {},
65 72 "outputs": [],
66 73 "prompt_number": 3
67 74 },
68 75 {
69 76 "cell_type": "markdown",
77 "metadata": {},
70 78 "source": [
71 79 "Create a superposition"
72 80 ]
73 81 },
74 82 {
75 83 "cell_type": "code",
76 84 "collapsed": false,
77 85 "input": [
78 86 "state = alpha*psi + beta*phi; state"
79 87 ],
80 88 "language": "python",
89 "metadata": {},
81 90 "outputs": [
82 91 {
83 92 "latex": [
84 93 "$$\\alpha {\\left|\\psi\\right\\rangle } + \\beta {\\left|\\phi\\right\\rangle }$$"
85 94 ],
86 95 "output_type": "pyout",
87 96 "png": "iVBORw0KGgoAAAANSUhEUgAAAF8AAAAXCAYAAABtR5P0AAAABHNCSVQICAgIfAhkiAAABFdJREFU\naIHt2XuIVXUQB/CPq4FZblEpYmZPLMsMUTQhDawo6LVgD4rsj6zQSCORHlD9YfTUrCxTotKUWv8p\nKAusv7YHpURlQg+ioJJ8REVtD3u6/THnsucef+fu3r27W8F+4XLOnfnNnJn5zW9m7rkM4H+L5/5t\nA/oBfeZjU4Pyh9a5flmCtgJDGrSjUYzAcmHfaqxDc8arx8eHErRS/xoNfj04BD8l6G2Y3Y92FDEd\n12EJFmOeCNbyOvWciM8S9DYl/vVn8E/PDCniBVzYoO6JenZ6RqNFBP6HHL0dk+vUNVOd/vVn8Kfh\n7QT9b7yDqQ3oXoQxPZC7BbeiI0cbhFnYXKeu8fgwQS/1rz+Dvx/+KOE9ibn9aAucgI+wt0C/Gvvj\n9jr1dajexDyS/qWO6jG4DEdgJHbjZnEUicwoe8hIUT8nYyU2ZfTD8E12PxhvYgMezmjtoh8cjq9L\ndPc2Zuus6ytwgLB7NCbh227ouBxTxGYdjfUiy1eKjK8g6V8x8yeKuvW+aDwXiWA/m1ub6ugV3IQH\n8QZuy9Hz9b5JNN+zC7KrML+G7t7GUOzJ7r8TCbVZ2DavC9kxeEVMQouxTSTolaK8PJqQqenfcdiJ\nOwr0czPDpoqdy/PbcvcniayHjaLRVHCXyPgKWrAmYcNTGFZmYA2sxVF1rG8WfSKFjdiV+95W4A/D\ne7g+R3tMJCkx9XSIeBZR5V8+85dk1wcKAtuy6zRRt54oMfp7EdBROAetOV6T6mO4SxzPItZhTon+\n3sQMvF7C+0Jk9OAS/r0Zr5LdlaBXSvHu7DohIVvlX6XmN+EsvIxfCgLbs+upmWE7SozamV2vwl94\nMfs+QnUmEaekVRqDSujwNE5J0MeKk5lq6HPxboE2CXeXPON4bFWdLHm06OxVRJDzU86U7Lq1RH4f\n/04WO7e4RKBDnIChBXpbYm0rXst9v1h1wFL1voI1+qfsrC+hjxIbWFZam0UszsvRFooxs4JVOqtF\nEVX+VcrOV5nS3QmBA8U4tgm/lSjNY6/OyYjIjIoxQ3AtXk3IHStOz6/deEYjOEhMOqmavAif474S\n2XZ8ICaiCsbj4+z+NFyKSxKy+/hXCf6P4gVSMSPPxFJsEWNkkzh2tdCKM0SGV9AhJoTHs+ekRtX5\nImv6GjPENLMAw3P0ObhAbMzvNeSX4BqxiU06fyecj/szHZ8k5PbxLz/nXyFeLG0Qdb4Jb2VCE/EI\n7sEzXTj3ktj51SLjp4sauQM3SL/fac4+2xO83sY0EcAvRdPcI2b8HaJe/9yF/POiLy4TjfdInf7N\nkq4OfeJfWxf8BdJdv4gbRVB6irW6X/OX1qm7rQZvIcZ1Q0fSv75+vVCcBFJoEhm3pYHntOtePzpY\n+uT1FOPwaRdrSv1r9D36nzV4xfm3DC06x9KeYmE3180UpbQedMfHWugN/5IYXoM3Qecv3lrozz9T\n7hT1vR6U+ThWlJOu8F/4s2gAAxjAAOAf1RffIDO+Bi8AAAAASUVORK5CYII=\n",
88 97 "prompt_number": 4,
89 98 "text": [
90 99 "\u03b1\u22c5\u2758\u03c8\u27e9 + \u03b2\u22c5\u2758\u03c6\u27e9"
91 100 ]
92 101 }
93 102 ],
94 103 "prompt_number": 4
95 104 },
96 105 {
97 106 "cell_type": "markdown",
107 "metadata": {},
98 108 "source": [
99 109 "Dagger the superposition and multiply the original"
100 110 ]
101 111 },
102 112 {
103 113 "cell_type": "code",
104 114 "collapsed": false,
105 115 "input": [
106 116 "ip = Dagger(state)*state; ip"
107 117 ],
108 118 "language": "python",
119 "metadata": {},
109 120 "outputs": [
110 121 {
111 122 "latex": [
112 123 "$$\\left(\\overline{\\alpha} {\\left\\langle \\psi\\right|} + \\overline{\\beta} {\\left\\langle \\phi\\right|}\\right) \\left(\\alpha {\\left|\\psi\\right\\rangle } + \\beta {\\left|\\phi\\right\\rangle }\\right)$$"
113 124 ],
114 125 "output_type": "pyout",
115 126 "png": "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\nRK5CYII=\n",
116 127 "prompt_number": 5,
117 128 "text": [
118 "",
119 "\u239b_ _ \u239e ",
129 "\n",
130 "\u239b_ _ \u239e \n",
120 131 "\u239d\u03b1\u22c5\u27e8\u03c8\u2758 + \u03b2\u22c5\u27e8\u03c6\u2758\u23a0\u22c5(\u03b1\u22c5\u2758\u03c8\u27e9 + \u03b2\u22c5\u2758\u03c6\u27e9)"
121 132 ]
122 133 }
123 134 ],
124 135 "prompt_number": 5
125 136 },
126 137 {
127 138 "cell_type": "markdown",
139 "metadata": {},
128 140 "source": [
129 141 "Distribute"
130 142 ]
131 143 },
132 144 {
133 145 "cell_type": "code",
134 146 "collapsed": false,
135 147 "input": [
136 148 "qapply(expand(ip))"
137 149 ],
138 150 "language": "python",
151 "metadata": {},
139 152 "outputs": [
140 153 {
141 154 "latex": [
142 155 "$$\\alpha \\overline{\\alpha} \\left\\langle \\psi \\right. {\\left|\\psi\\right\\rangle } + \\alpha \\overline{\\beta} \\left\\langle \\phi \\right. {\\left|\\psi\\right\\rangle } + \\beta \\overline{\\alpha} \\left\\langle \\psi \\right. {\\left|\\phi\\right\\rangle } + \\beta \\overline{\\beta} \\left\\langle \\phi \\right. {\\left|\\phi\\right\\rangle }$$"
143 156 ],
144 157 "output_type": "pyout",
145 158 "png": "iVBORw0KGgoAAAANSUhEUgAAAU8AAAAaCAYAAAA3+d4CAAAABHNCSVQICAgIfAhkiAAAB1tJREFU\neJztnHuIFVUcxz+uBpa1G5ZipvbQLB8ZommC5SL2gAxMe1Bkf6SERlmJ9IASEnqRlWamf2huWmpE\nUVmg/TU9KCNKk16EQSVtGhW1PYxKtz9+M9zZ2Tn3nnNm5sxsni8s994zv/M7M5/zvXNmzpy9vfDq\nKboNmKHYtgNY5XBfvLxM5f3r5eXl5eXl5eXldcTqxbJ34AiQZ1y8PONiVBjXpqISa2qlQexyRfkJ\nhm2m5XkC6GOYp2wNAB5DjmctsBFoVsTqcl6hKP8/MDbhZSrXPk7rp7L5ghlj3ViX3jXimgds24ng\nVuATzTb6A7+Z7ZZRngCYAzyfQxsuNAW4CFgG/BKWbUbMOD8R24oe59HA3hz2rYqMdXj1FB+r+img\nXA+beFI3thV33q0q11StA47WjL0cmKbYFhi0qcrTG+m8LBqHm5F/MPAw0CtRvhbYlRKvy3kBMFax\nLdDdOYpjbMvXlJepXPtY1U9letiEsUmsS+8acy3rtn040A4c1IyfDLyXQ7uqPIeAD4BJGXIvBoZk\nqK+ru4C7gc5YWS9gOrAzEWvCeRTwaQ77VxRjW74mvExVho9V/VSmh00Y68a69q4x17JOnguBNQbx\nRwF/59BuvTzrgXk5tFGkzgI+Aw4nyucjI/S9iXITzp10NbStqsTYlJepyvBxvX4qw8MmjE1iXXvX\nmGvaJfrpwDXAUGAgcAC4E+gIt/dKNGIa3wL0A75PtDsQuAmYAKwGtoflJwI/hO97A+8AW1FPJNvm\n6UDmo04GvlPkzlum7OYg80IgE9n9kOMcDIwHfozFqjjHdS0wETHuacAmZJRdjYy4KvUUxia8qubj\nuHT7qQwPmzDWjS3SuzY5UrkmrzzHIXMEu5A5gCsQ02yOxa7IEA8yyqxPOZA7gMeBt4F7YuXTqM1b\nNCGT7hen1M8jzxpkxHMhG3Z9qd3G/IR8mXcix7IgEaviDHJrtgN5ErkE2IOcKK5Hbk+ebLDvPYWx\nLq8q+hjs+sklXzDzpG5skd61zVGX6wjkTL80UX4pcpCTkDPvUst4kBH32ZS2xyCjNcA24JXYtvvD\nepFmARtin4Oc8kR6GjgmpbyR2oBTNWNt2DUjc1Jp2gbsj31WcQY5to+Am2NlT1GbwB8d7sOI2PYg\n9r4sxm3o8wV9XlX0Mdj1UyQXHgYzT+rGFuld2xyRunCNX3kuC18fTVTYE75ORu7711nGgxjm5ZSd\n+hkx0iDgEmBLbFsTXS+h9yOX1mnKI89GYK4if16yYXc+8JYi39fIKBp9OVWcAR4K46LRNTJNdEt6\nIHxVPb3sKYx1eVXRx5Ctn1zwBTNP6sYW6d2sObpwjeY8m4ALgdeBPxIV9oWv5yEH2W4RH6mJ9EnZ\naG7jBuBf4NXw8wC6jl4go/sW0pVXnuQyirieAc5JKR+GXKWkPRCYB3wYvrdlNx54QLFPZwK7qX05\nVZxBzBmfZxtL16eME8PX3Yr6RTPOyjeSDq9OquljyN5PRXo4kokndWOL9G4eObpxPRvZ4SWKCp3I\nSNzXMj5Sb+A5RR0QM70Z+3wlXTs5bZ4oyClPpA0Ue8tjy26TIn4QYvbkbWUa5+Yw/8xY2SJkmUak\nNdSuuiIFKblcM27D7JZSh1dVfWzbT5GK9nAkE0/qxhbp3Vy5Rrft34ZJD6RUOBZZWrAd+MsyPtIh\nZFJ+gmLnDlN7ugkyKkQH0ge4EXhDUTePPMORq4c/NdqwlQ27FuRJZdo8zGLgK2ThcSQV5w7gY+Tp\nZqRRwOfh+6nA1cBVGsdRZca6vKrq4yz95IIvmHnSJLZI7xbG9QW6T9TOQM7E7yKjUhNy2WsTH6kF\n9fqtmeHO9Q8/3xe+DkEma89IqRPklAfk/2yHKrY1Uhv6o7Ypu5nIk8CVwHGxOnOBL5BJ7qRUnGcj\nc20tYRurw/LLwranptQJUspcM25Dn68Jr6r62KafwJ2HTRib+rdI7+bGNb7O87owYCsy39MUJluI\nLOVYBTxI7ZLaND7Sr4ixTqL7Oq7XkLP+WmSknoIAbwduRf//gm3yNId/+1K25S1TdpORBxvfIBPd\nB5F1cO3IHM3vKW2oOL+EzO8tR26RTqHGZjrdr7JUqjJjE15V9bFNP7n0sAljU/8W6d2qc22oEdSe\ncqp0C/WfmkUKcspzO9LJtmrDbL7IRI9Y1mvEeREwUiNP0GC7C8Zt6PO15WUqVz7W7SeXHjZhbNMf\nLrybiWtZ/565F1k7l5yIjyv5FMxWOnmakBHw/QztdKB/1Wai47H/JZ5GnEcCX1rmjssFY12+WXiZ\nypWPdfrJpYdNGNv2hwvvZuJa5u95bkK9Fi259qqe/qmzTTfPLGrLSmy1iO7LUfLQBchtpK10ODdS\nFRjr8s3Ky1QufVxPLj1swjhLf7jybj0puZZ58gxQ386MQZ6K6Wh2nW26eVqp7i95n0u2X+IJSOc8\nDP3fQOxJjLPyMlVAsT7W7adW3HnYhHGW/ggozrtV5Orl5eXl5eXl5eXl5eXl5eXl5eXlVZr+A0vn\ncOsl0kmXAAAAAElFTkSuQmCC\n",
146 159 "prompt_number": 6,
147 160 "text": [
148 "",
149 " _ _ _ _ ",
161 "\n",
162 " _ _ _ _ \n",
150 163 "\u03b1\u22c5\u03b1\u22c5\u27e8\u03c8\u2758\u03c8\u27e9 + \u03b1\u22c5\u03b2\u22c5\u27e8\u03c6\u2758\u03c8\u27e9 + \u03b2\u22c5\u03b1\u22c5\u27e8\u03c8\u2758\u03c6\u27e9 + \u03b2\u22c5\u03b2\u22c5\u27e8\u03c6\u2758\u03c6\u27e9"
151 164 ]
152 165 }
153 166 ],
154 167 "prompt_number": 6
155 168 },
156 169 {
157 170 "cell_type": "markdown",
171 "metadata": {},
158 172 "source": [
159 173 "<h2>Operators</h2>"
160 174 ]
161 175 },
162 176 {
163 177 "cell_type": "markdown",
178 "metadata": {},
164 179 "source": [
165 180 "Create symbolic operators"
166 181 ]
167 182 },
168 183 {
169 184 "cell_type": "code",
170 185 "collapsed": true,
171 186 "input": [
172 "A = Operator('A')",
173 "B = Operator('B')",
187 "A = Operator('A')\n",
188 "B = Operator('B')\n",
174 189 "C = Operator('C')"
175 190 ],
176 191 "language": "python",
192 "metadata": {},
177 193 "outputs": [],
178 194 "prompt_number": 7
179 195 },
180 196 {
181 197 "cell_type": "markdown",
198 "metadata": {},
182 199 "source": [
183 200 "Test commutativity"
184 201 ]
185 202 },
186 203 {
187 204 "cell_type": "code",
188 205 "collapsed": false,
189 206 "input": [
190 207 "A*B == B*A"
191 208 ],
192 209 "language": "python",
210 "metadata": {},
193 211 "outputs": [
194 212 {
195 213 "output_type": "pyout",
196 214 "prompt_number": 8,
197 215 "text": [
198 216 "False"
199 217 ]
200 218 }
201 219 ],
202 220 "prompt_number": 8
203 221 },
204 222 {
205 223 "cell_type": "markdown",
224 "metadata": {},
206 225 "source": [
207 226 "Distribute A+B squared"
208 227 ]
209 228 },
210 229 {
211 230 "cell_type": "code",
212 231 "collapsed": false,
213 232 "input": [
214 233 "expand((A+B)**2)"
215 234 ],
216 235 "language": "python",
236 "metadata": {},
217 237 "outputs": [
218 238 {
219 239 "latex": [
220 240 "$$A B + \\left(A\\right)^{2} + B A + \\left(B\\right)^{2}$$"
221 241 ],
222 242 "output_type": "pyout",
223 243 "png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAAAZCAYAAABn7SHgAAAABHNCSVQICAgIfAhkiAAABHpJREFU\neJztml2IVVUUx39OTlQ20xiJpZZDE4gUBn0YJE3Q10MZfZEvUS9ST+lDhgWFPRgRFaRGT9mwI8ge\nKoqoCCqikl6ysg/SfOlBjKxetLCymh7Wvnjnsvc5e62zj1dv+wfDPffsfc5e//Wf/XH2uVAo/I+Z\n1e8AjlMuA64HTgSWAhuAr/oaUSFG8SozpwLPdn1fBRwETutPOIUKilctsAz4F5jw30eBaWBl3yIq\nxChetcAsZFrtLB/PR5K6tG8RFWLUeqV9BngamUI2VNTZClyK9L4/gE+Bv3zZGcBc4GXgUeCQsn0N\nw8BC4IfE+iFt85EYD1Rc9yKwH1inD7ExbeQ6xePcxLzS6BulZa8uAf4BphLqjiM97YlA2Q2+7A1L\nEInMBh4BTkmsH9M2DDzl7xdiNaKxn5sJ4+TLtcbjXNR5NU6avla9GgLe9429nVD/Tl/3mkj5HiTR\nI4ntLyMuLMQ6f00KddpWEE7+SiSpACcjRlnR6usmV661HsfI7ZVGn9qrocQg7wFeAQ4DZybUn0Sm\nqu2BshFgETIV/ZbY/n3+mhRGgMtJ3+qq07YdGGPmzsGVyPLoLX/NLcBZie2F0OjrJVeutR7HyO2V\nRl8rXs1DRoYhYC+wL+Ga3cDHkbL1SI++WxGDI32EvRW4P7FuqrZ7gbX++FxkjTzd8zea2GYIh30G\nyZFri8cxHHm90urL7tUUMrUA7AD+pnrmmO8b2dhzfsyf2w/cpQkAXVK3IL0+hVRt1wEvJd7TgsPW\nAXLlWutxFY58Xln0qbyqW6utAE7gyPTzk/8+zx+HmPSfE8Dj/ngEWYd97++5JzVAA4uAXxLqabTt\nptkavy1y5NricS7qvLLoy+bVbOATZq6XppAeeWHFdc8AfwInBcoeQ6aka5WxONJFvUv9nrxW2xxg\nV2L7Fhw205rm2upxFY58Xln0qbyqmubWAK8DP3ad64wIVQ9Jk8BnyL5tLxsRMc+nBmjgZ+C8mjpa\nbRP+vscaTXNt9TgXdV5Z9Km8ii2BFiAPJ98xc/tpsf+MJWcMuAB4MlJ+GOnRC5Gp7GBP+QuER55z\ngOUceQnSzWpk3dphF7AEeDMSg0XbEl+/KTn0dWiaa6vHHdr2yqovi1fbgKsC529DpscHItfdSPVv\nLa7w5e8p43GkT6sXA89VlFu0PQzclNi+BYd+CdQ011aP63Dk8cqqT+VVaAl0NfAr8EGgbK//jI0O\nkz6o0J7tMPCQP96aGqCBHcDphH/xZ9E2jIxo7+QKMBNNct3E45xUeWXR19iri5A14NxI+YQPaluk\n/Avg68D5xcCrwO/AHYa4HLoRcjmwqeecVduDwO2Kti049DOANddNPa7D0dwrsOkze7UA+Ab56eg0\n8C2yB9vNa8gLkmnkoeQjZM91FBlJvvRlh5CdhQ/9307gc2Azsqaz4ND/g9yMmN1E29nIi5W2caTp\na5LrJnnQ4LB71UTf0fKqLziOzX34XDgGR5/jONJifdt3tDlAeCtsUBgkfYOkpVAoFAqFQqFQKAwY\n/wF5Fp03jGX3sQAAAABJRU5ErkJggg==\n",
224 244 "prompt_number": 9,
225 245 "text": [
226 "",
227 " 2 2",
246 "\n",
247 " 2 2\n",
228 248 "A\u22c5B + A + B\u22c5A + B "
229 249 ]
230 250 }
231 251 ],
232 252 "prompt_number": 9
233 253 },
234 254 {
235 255 "cell_type": "markdown",
256 "metadata": {},
236 257 "source": [
237 258 "Create a commutator"
238 259 ]
239 260 },
240 261 {
241 262 "cell_type": "code",
242 263 "collapsed": false,
243 264 "input": [
244 265 "comm = Commutator(A,B); comm"
245 266 ],
246 267 "language": "python",
268 "metadata": {},
247 269 "outputs": [
248 270 {
249 271 "latex": [
250 272 "$$\\left[A,B\\right]$$"
251 273 ],
252 274 "output_type": "pyout",
253 275 "png": "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAWCAYAAAC/kK73AAAABHNCSVQICAgIfAhkiAAAAj5JREFU\nSInt102ITlEYB/CfMUppNFMmDDU0W1EiaZp34SvFQlmKHTtSZKOURjIkSXZjtiwQiykRvTFi4TMk\nHwsLkSmrocEMY3HO5HXn3nHf+84syL/ezrn/55zn+d/7POe59+UvxZTE9RV8wTWczrH/BAZwoEDs\nbizH4hjzDr5F2yw04RwOYRC7sArTsT7prFxF4GX4jp4CokexACM4mmLbEG2XE3wZ6goGrENXHOcU\n9AEdcbyaYuvFa2xEQ5qAItiB8xhSm/CSUB63U2wNmI9+fPqTo3KOYM24Ltz0W7zLqzIFL3Arw7ZP\nKJXtCb6ctjiVTKAH7XF+H8OKZW52FNaZ4Bsj149tWRrrqwzWjql+pfZDvG6O82pQimMbjsR5g1DT\nL2OsV3mdlcex1aMPcyu4HuGpLckboAKn8FVob0kcFtrs2iyN1aR4Jy7hfQU3+pSLHNAS7gk9PIlO\n4YbOZG3OWyot2IvnWFPBt8axWuGNWIRjGfYhIRvzhPIZSC7IK/w4tuJGgt8stMVqhXcI2e7LsK/E\nDKF7jRFNvlJZjY/Giia0Q9KFt4zjsyScjbT+PQ3747w7hz6MPZxLhTpuyljfFgWcTfAr8EP2985D\nPEnhW3EBn7Elp8bfyBY8jcFH8Ezou5W4KLx8RoQDdhProm0h3gh9fhQzhaw9insGhVIpx99jPMBJ\nof6zMK7wicLBCfZHjR9ZeTFp/idT+CbcnSznSeHDwp+J3TX6rRe+13tr9FOJPYK24Qn0+R//Pn4C\niuR3f19QpToAAAAASUVORK5CYII=\n",
254 276 "prompt_number": 10,
255 277 "text": [
256 278 "[A,B]"
257 279 ]
258 280 }
259 281 ],
260 282 "prompt_number": 10
261 283 },
262 284 {
263 285 "cell_type": "markdown",
286 "metadata": {},
264 287 "source": [
265 288 "Carry out the commutator"
266 289 ]
267 290 },
268 291 {
269 292 "cell_type": "code",
270 293 "collapsed": false,
271 294 "input": [
272 295 "comm.doit()"
273 296 ],
274 297 "language": "python",
298 "metadata": {},
275 299 "outputs": [
276 300 {
277 301 "latex": [
278 302 "$$A B - B A$$"
279 303 ],
280 304 "output_type": "pyout",
281 305 "png": "iVBORw0KGgoAAAANSUhEUgAAAE4AAAASCAYAAAD15uiRAAAABHNCSVQICAgIfAhkiAAAAi9JREFU\nWIXt1z1oFEEcBfCfMYIWkQQMahQipPUDRKtgCj8LY2Up2im2gmgh2CgqWojYSUgbCxVsrFTED6zU\nBBXRdBIEA1ZRokaNxQwak9272d1LQLgHx87N+8+89252dvZoohQWFay/jAmcrlEzgK3YiK94iu+R\nW4EOXMdZTBbUr4X50E3JWxdb8BODCbXrMI2LGdzeyN2uYmYBdIvkzUUL7kXhOwn1B2Ptzhx+NJpq\nq2JqHnXr5m1JNHQENzCFVQn1fcI2eZLBtWEtxvE5UT8VjdItmjcTncKv34IxfEgY8xaPcrgTwkoe\nLmtonnXL5M3EIHpj+xl+qH2nrowGz8zqb4994zhU1swC6Cblba0zSS8W+3vrf4zfO2M7C33x2oML\nsd2GfryLc47WtV8cjdAtk3cOWvEYq2f0DQqruqnGuKv4hqUZ3DnheN+VaqIAquqWzTsHx3B8Vt/5\nONGeGuNGZD+cYZnwwH1fxEgiquoWypu3VbviJG/8e7R3x2veSdOO9biUw08Jd8UaYRtNYAOuSX8Z\nH8bRBujORNm8czCE7Rn9+4UVOJkzbl/k+3P4bZG/m2okEVV1C+fNOh134BPuZ3Bj8Zq3An1RKGvL\nLMGp2B7IGV8WVXSr5P2DzcLp0ZHD90SDQzn8C7zM6O/GTXzBgXomSqCsbtW8uvAKv2Lha+G9aCZu\nCS+D08Kf6IfYjeXCag1HblI4nR7Ezwie44rwHGoUquhWydtEE038P/gNdbvExvNu4QsAAAAASUVO\nRK5CYII=\n",
282 306 "prompt_number": 11,
283 307 "text": [
284 308 "A\u22c5B - B\u22c5A"
285 309 ]
286 310 }
287 311 ],
288 312 "prompt_number": 11
289 313 },
290 314 {
291 315 "cell_type": "markdown",
316 "metadata": {},
292 317 "source": [
293 318 "Create a more fancy commutator"
294 319 ]
295 320 },
296 321 {
297 322 "cell_type": "code",
298 323 "collapsed": false,
299 324 "input": [
300 325 "comm = Commutator(A*B,B+C); comm"
301 326 ],
302 327 "language": "python",
328 "metadata": {},
303 329 "outputs": [
304 330 {
305 331 "latex": [
306 332 "$$\\left[A B,B + C\\right]$$"
307 333 ],
308 334 "output_type": "pyout",
309 335 "png": "iVBORw0KGgoAAAANSUhEUgAAAGAAAAAWCAYAAAA/45nkAAAABHNCSVQICAgIfAhkiAAAA5VJREFU\naIHt2UmIXUUUBuDP2IJZtHSLjdpiRwhGEYkYp0gwggOGGMHgQnACEXEARVEcEISgRNFFBHUhSvtc\nxSwUXaghDlxMRF2oiIpDL4wSlATNwqBG0w6LU49+eX3rvXt7uNn0v7mn6pz6z3lV95yquo8FHFIc\n1tXeiv14G89WGL8J+/BwD5sXcA6WJ+4P8XfSHYNhvIxH8WfVwOeRdzZYhnU4H6P4Hb/gIezEXnyc\nbNeUERQ1nJ2NfzBewfYk/IcnSnSXJ93rNXzPN29dHI4H8BNux8kduhPFvL6Ib1JfkSPKKrqwCO+K\nH/hmBfvrk+0lGf2EWMzBiv7ni3c5BmrGMCaybydOzdisEHE+k9pFjiyr6MKtuE2k/KcV7J/HX1hc\nohsUJeJn00ti07wtkVVVMSBKyvc4vo/tbqxPcpEzyio6MCLe/kXYJdKuH77F9ozuPvF23FyBZ755\nW+otwMbk47oKtjswlOQiZ5RVdGAcq5L8CSbFYuRwrAjyka7+odS3BzdU8NsEb0v1BThTlLev9P79\nbVzdIRdtoW69WyU2nA9Se3dqjyS5DKvTcykeT/KgOC18lzgnasYxn7xVsVZM/FP4t4L9liqkRQ/d\ngEijzlo3Lt7CM3qMe1rU6SNLdBvFMfbSKsE1wNtSPQPeEr/9rJo+mGEJuhv3dvU9loK4rMe4z01l\nTDcW4wB+7DG+Sd6W6guwV5SgsgNAN5Z1tYu2ULUEjYrJ/9rBR74l6XlcZtwQTseTGf0B8RafIMrH\nvorxzJb3JeVZO4ZzTV3oOnGT2PPa+CHZ97vkjeBGPNjHDvkM2IyLSvqvEhlwf2bcFUm/LqO/IOnf\nqRJcA7wt1TNgU/Ix1sdugzgwdKJoC1V274vxK94r0e1Kz1wGrBZBlpWKI8QVnfis0I3RHjHNhneu\nsEVk2TU9bG4Rx/TcAWUaiq72ijR4OGO/VEzE5oz+M3xR0r8Er4hvJdeW6M8TJ4vc96iZ8vZDS717\nwBr8gTscvBecIk5mazPjiraQ2wNGsQ2niVvkDlGCOlfyVaxM8nq8Lz58fYTXcLSos/vT+MlkOyw2\nr+1ior8s8b9HbKArO/qOmgPeucZWXCjO+NtM3bwn8Jy4IddCMYfBzQU2NOyvpV4GzBRFW6iyBxxK\nNB3fbyKzGkPdm3CTuFKUsyZxZ8P+pr1hk6Ku3dV0IF0YEP83vHGI45hr3CPmd7Kf4QIWsIAFNID/\nASen61ooc9yoAAAAAElFTkSuQmCC\n",
310 336 "prompt_number": 12,
311 337 "text": [
312 338 "[A\u22c5B,B + C]"
313 339 ]
314 340 }
315 341 ],
316 342 "prompt_number": 12
317 343 },
318 344 {
319 345 "cell_type": "markdown",
346 "metadata": {},
320 347 "source": [
321 348 "Expand the commutator"
322 349 ]
323 350 },
324 351 {
325 352 "cell_type": "code",
326 353 "collapsed": false,
327 354 "input": [
328 355 "comm.expand(commutator=True)"
329 356 ],
330 357 "language": "python",
358 "metadata": {},
331 359 "outputs": [
332 360 {
333 361 "latex": [
334 362 "$$\\left[A,B\\right] B + \\left[A,C\\right] B + A \\left[B,C\\right]$$"
335 363 ],
336 364 "output_type": "pyout",
337 365 "png": "iVBORw0KGgoAAAANSUhEUgAAAN8AAAAWCAYAAABAHklQAAAABHNCSVQICAgIfAhkiAAABNdJREFU\neJztm0mIHUUYx3+OI+hhZEYc1FEnA8EoIhFjXEJwBBcIMYLiIeAGIioIBtHggiCESBA9RFAPgo7P\nUwwu6EENowmFiWjA5eBuDkYJBoN6MC7RjMvhq8d02l6+6vrqvRfp/+W9qa/631/9XndVdVUPtGrV\nqi86Ivf3FuAA8CbwpOL4jcB+4MEG534aOA9Y7M/5LvCnjx0PjAHPAw8BvwNrgEuAo4EVRp4pFMoQ\n4jh2tQhYBSwDJoBfgR+AB4DdwE/ATl93kPlpVMWrin/K9kXzdwEnWwr8BcwEJpnVFPAP8EhB7Aof\nezVX7hJ4WsoF1o/leCRwH/AdcDtwWiZ2qs/nWeALZX5T9Jdfnep4uZrjp7Btnxn/0kBOQ8BWn+jr\nAYnmdYP3uKwkvgsBPZIpcwk8q7QYGFbWhbCbL5bjJNJ77wbOKKmzxPs/oczPmh+EMyyThper8bBs\nXxT/IcUJinQr8CJwEDixoQfANDLsv1MQGwFOAfYBv/TR8y5/TArFcBwGXvDHLWO+Z83rQ6S9W5W+\nKX4TK4YW151V+8z5u7oKwLg3GgL2IMNtU30JbC+J3YP0GLfkyl0Czyp1kKmKVk5ZL5bjBqQt1yvq\n7gBGlflZ84NwhkXS8nI1PlbtM+dfGshoBljuv38AzNFsBD0BSX59rnzUl+0DbgzMsalnlTqkufli\nOJ6DTI0+VR6zWplfCn5gc/NpebkKD6v2mfAPnYcvRx4wu0P29/7vcf89RNP+cyHwsP8+gqwYfeXP\ntWsAPFMoluNK5Ed/DPhbUX+zMq9B5Wd13Vm1Lwl/VxEbRobPkzJlM0hPcrbGPKfHgT+QrYO8NiBL\nyZcH5tjUs0odbEc+C45v+PrnBuTVlauIpeAHcSNfKC9X4WXVPhP+IdPFO4BXgL2Zsm6v0+Thdxp4\nH9lvyWs9AuiZAfC0lgXHC5Ae9zNF3UX61AaSn+V1Z9U+E/7aaecEsBb4nEOXaBf4z1AIo8BZwKMl\n8YNID3UyMi3Y3wPP5yjuSSeB85nfjM3qZuT5Qysrjt/4vOo2gseBm4D7FZ4Wv4k1Q8vrzvKaS8G/\ndMjehLxdktc1yPB7r8Y8oyv9catK4hf5+FsFMZfAs0od7KadVhw3+vqTNfXWIYsMmvxS8YPm084m\nvFyJl2X7TPhrpp2XAj8C2wpie/xnUQ80UeE5jSRftNdyFPJKDsjrQFql8LSUJcfNSC99bcX5bkOW\n47ULEoPGrymvMjVtX6/4/6fXWOIPHiupvxBp0KZceXdOXPZu40fAxwXlC4CXkPfirlPmaOFZpQ7x\nI18KjiuA35BnomMy5acjK3krA/KDdPwgnGFTXmDbvqT8y575JoBZ4Ezk5esdyPCfvYtfBi70368G\n3kZeSJ1F9ku+zcQBjkUenI9DngsOeN85Hx9D9k62I43+pCS3rFJ4WioFx662ABcje0izyPPHXmSp\n/Cnga0V+g8Yvlldese1Lzf8QudADarTO2A/sc6xThzSb7CGy5OgMvbTqEL/JrpVL4JmEf9N3O7VK\n7d8L/Uzx0nQvdbhzHASGMUrC3+JN8zJdBbyX0L9XWtPn8/8fOPabYYyS8c/f0XPIXPbOSN9h5P+u\nXov0yepuJLe5uop9lhVDsOV4uPCLVcu/VatWrVq1atWqVat5/QsIXxOgwN127AAAAABJRU5ErkJg\ngg==\n",
338 366 "prompt_number": 13,
339 367 "text": [
340 368 "[A,B]\u22c5B + [A,C]\u22c5B + A\u22c5[B,C]"
341 369 ]
342 370 }
343 371 ],
344 372 "prompt_number": 13
345 373 },
346 374 {
347 375 "cell_type": "markdown",
376 "metadata": {},
348 377 "source": [
349 378 "Carry out and expand the commutators"
350 379 ]
351 380 },
352 381 {
353 382 "cell_type": "code",
354 383 "collapsed": false,
355 384 "input": [
356 385 "_.doit().expand()"
357 386 ],
358 387 "language": "python",
388 "metadata": {},
359 389 "outputs": [
360 390 {
361 391 "latex": [
362 392 "$$A B C + A \\left(B\\right)^{2} - B A B - C A B$$"
363 393 ],
364 394 "output_type": "pyout",
365 395 "png": "iVBORw0KGgoAAAANSUhEUgAAAO8AAAAZCAYAAADZu3m9AAAABHNCSVQICAgIfAhkiAAABUBJREFU\neJztm1uIVVUYgD9tJrKaaYyGbMzx1JAmXSRNIySD7kxKNyqwC4REFywII43EiMKiAru+VEwnitSH\ngggSpUKyiB4s7YKWD1lIpVQPillZTQ//Osye3Vp7r8u+nIn1weGcvW77/9f+11r/+vc6EIlExiTj\n6hYg4sQ5wCBwODADWAl8XqtEkUgkl6OB5xPX1wH7gWPqEScSidhyJvAPMKCuu4FhYEFtEkUiESvG\nIW5za6tzGjJ4Z9QmUaRWXPe8qxFXbWVGmZeAOchK8TvwMfCnyjsOmAisBR4BDhramIasKOcCfcAB\n4GfgAWAX0ASWAT85yh9Knv6dwGRExjQu/dKN9M2+DFleBfYCS10U8KCI55mmKjsKpSg7rF3fs4G/\ngSGLsg1kVXhck3e5yntLk3cYsBz4AbgTOCWRNwXYBLwM7LCUuUjy9O8AHgSOzGijgV2/dAJPqjZ1\nLFZtVBVwbOD3PHVUYUehFGmHtes7HnhPVX7HovxNquxFhvydiEJdibR+ZLbZBZxqqDdLtfuchQwg\ns5hpALhgo/9Sdb8sXPplHvqHuAAZvAATkAdeNj7PU0cVdhRKkXbYFvreDtyBLOOfWpR/EfgDMa40\nXciy/yMjK0cH8AnwLXBCTtt7gKssZABxaxqWZbPI078LeMOiHdd+eYHR0eTzkYE7SX0WIS5d2bjK\nbaJsOwqlaDusXd9eZPYYD+xGXIk8vgY2G/LuQ2aXWxNpq1TajRZtfwj0WJSDYgavjf5XA/datOXa\nL0uAu9Xvk5F903Dq021x31Bc5dZRhR2FUqQdtoW+Q4gLB7AF+EsJZOJ4dZOHU+k9Km0vcHMi/SzE\nFfgqp90W11uUadEkfPDa6P8Msipm4dovAJcArzvKWzQ+cuso245CKdoOS9c3bz84D9m8f6Su96jr\nXvVbx3z1PQA8pn53IXu1b1SbOxPlBxGlnkLeY+axzqJMUdjqfyIShczCtV9AZuKGh9xF4iN3mirs\nKJQi7bB2fTsQ1yDp+w8hs8PMjHrPIn77EZq8VYjrd3Eibb1qc7atYA408Td+F/03kP++1bVfAI6i\nnsh6Eh+5k1RlR6EUZYdtoe89/Hcf96gS4tKMetsYmXHSTAAOAd8n0n5F3BXdJj3NNIsySZr4D14X\n/V8DFua059ovINFr0x6oKnzkTlKVHYVSlB1Wpq/Jbe5TAmxndNh6qvqeZKjXA5wOPGHIP4TMLpMR\nl2A/8B0Sns978dwL3ALcr8l7Bf2s1g/MZeRld5LFyF5Eh6v+O4DpwNuG9nz6BdXmdkOdLM5AItW2\nUcmtSGQ0ja/cLaq0o1Cdi7DDKvU1sga4QJN+DTKDLDPUW0j2edvzVP67ibTVKq0/SyDgIWRT70IT\nv5XXVf/ZSJjfhE+/AKwArsgTtkR85W5RpR2FUoQdVqqvLvp1IfAL8L4mb7f6Ns0g89VNdMt/J3Ks\nDOQoWIt1yKyyyNAmwG1IqN202S8SH/23AMdi/oePT790Il7D+nyRS8NH7hZV21EooXZYu76zlGAT\nDfkD6iZrDPmfAV9o0qcihxgOADdo8i8DfgPuYvSeYzoSeRvMEjqDJm4rb4j+c5FIpQ6fflkOXJsj\nb9n4Ps+67CgUXzusVd8+4EskRD6MvOtKuwZvIrPOMHJw+gPkPWQ3MttsVXkHkWjbJvXZhpwueRrx\n603MQc7zbgY2IvvYFcBJGXXyaGI3eEP0T3Il8iAhrF+mIAc06iBE7nawo1Bc7PD/oG/b0qT+96SR\nSCnYnCQZy+xDZrtIJBKJRCKRSCQSiUQikcgY4V+hOFAJDK9DFAAAAABJRU5ErkJggg==\n",
366 396 "prompt_number": 14,
367 397 "text": [
368 "",
369 " 2 ",
398 "\n",
399 " 2 \n",
370 400 "A\u22c5B\u22c5C + A\u22c5B - B\u22c5A\u22c5B - C\u22c5A\u22c5B"
371 401 ]
372 402 }
373 403 ],
374 404 "prompt_number": 14
375 405 },
376 406 {
377 407 "cell_type": "markdown",
408 "metadata": {},
378 409 "source": [
379 410 "Take the dagger"
380 411 ]
381 412 },
382 413 {
383 414 "cell_type": "code",
384 415 "collapsed": false,
385 416 "input": [
386 417 "Dagger(_)"
387 418 ],
388 419 "language": "python",
420 "metadata": {},
389 421 "outputs": [
390 422 {
391 423 "latex": [
392 424 "$$- B^{\\dagger} A^{\\dagger} B^{\\dagger} - B^{\\dagger} A^{\\dagger} C^{\\dagger} + \\left(B^{\\dagger}\\right)^{2} A^{\\dagger} + C^{\\dagger} B^{\\dagger} A^{\\dagger}$$"
393 425 ],
394 426 "output_type": "pyout",
395 427 "png": "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\n",
396 428 "prompt_number": 15,
397 429 "text": [
398 "",
399 " 2 ",
400 " \u2020 \u2020 \u2020 \u2020 \u2020 \u2020 \u239b \u2020\u239e \u2020 \u2020 \u2020 \u2020",
430 "\n",
431 " 2 \n",
432 " \u2020 \u2020 \u2020 \u2020 \u2020 \u2020 \u239b \u2020\u239e \u2020 \u2020 \u2020 \u2020\n",
401 433 "- B \u22c5A \u22c5B - B \u22c5A \u22c5C + \u239dB \u23a0 \u22c5A + C \u22c5B \u22c5A "
402 434 ]
403 435 }
404 436 ],
405 437 "prompt_number": 15
406 438 }
407 ]
439 ],
440 "metadata": {}
408 441 }
409 442 ]
410 443 } No newline at end of file
@@ -1,118 +1,150 b''
1 1 {
2 2 "metadata": {
3 3 "name": "trapezoid_rule"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
10 11 "cell_type": "markdown",
12 "metadata": {},
11 13 "source": [
12 "Basic numerical integration: the trapezoid rule",
13 "===============================================",
14 "",
15 "A simple illustration of the trapezoid rule for definite integration:",
16 "",
17 "$$",
18 "\\int_{a}^{b} f(x)\\, dx \\approx \\frac{1}{2} \\sum_{k=1}^{N} \\left( x_{k} - x_{k-1} \\right) \\left( f(x_{k}) + f(x_{k-1}) \\right).",
19 "$$",
20 "<br>",
14 "Basic numerical integration: the trapezoid rule\n",
15 "===============================================\n",
16 "\n",
17 "A simple illustration of the trapezoid rule for definite integration:\n",
18 "\n",
19 "$$\n",
20 "\\int_{a}^{b} f(x)\\, dx \\approx \\frac{1}{2} \\sum_{k=1}^{N} \\left( x_{k} - x_{k-1} \\right) \\left( f(x_{k}) + f(x_{k-1}) \\right).\n",
21 "$$\n",
22 "<br>\n",
21 23 "First, we define a simple function and sample it between 0 and 10 at 200 points"
22 24 ]
23 25 },
24 26 {
25 27 "cell_type": "code",
28 "collapsed": false,
29 "input": [
30 "%pylab inline"
31 ],
32 "language": "python",
33 "metadata": {},
34 "outputs": [
35 {
36 "output_type": "stream",
37 "stream": "stdout",
38 "text": [
39 "\n",
40 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
41 "For more information, type 'help(pylab)'.\n"
42 ]
43 }
44 ],
45 "prompt_number": 1
46 },
47 {
48 "cell_type": "code",
26 49 "collapsed": true,
27 50 "input": [
28 "def f(x):",
29 " return (x-3)*(x-5)*(x-7)+85",
30 "",
31 "x = linspace(0, 10, 200)",
51 "def f(x):\n",
52 " return (x-3)*(x-5)*(x-7)+85\n",
53 "\n",
54 "x = linspace(0, 10, 200)\n",
32 55 "y = f(x)"
33 56 ],
34 57 "language": "python",
58 "metadata": {},
35 59 "outputs": [],
36 "prompt_number": 1
60 "prompt_number": 2
37 61 },
38 62 {
39 63 "cell_type": "markdown",
64 "metadata": {},
40 65 "source": [
41 66 "Choose a region to integrate over and take only a few points in that region"
42 67 ]
43 68 },
44 69 {
45 70 "cell_type": "code",
46 71 "collapsed": true,
47 72 "input": [
48 "a, b = 1, 9",
49 "xint = x[logical_and(x>=a, x<=b)][::30]",
73 "a, b = 1, 9\n",
74 "xint = x[logical_and(x>=a, x<=b)][::30]\n",
50 75 "yint = y[logical_and(x>=a, x<=b)][::30]"
51 76 ],
52 77 "language": "python",
78 "metadata": {},
53 79 "outputs": [],
54 "prompt_number": 2
80 "prompt_number": 3
55 81 },
56 82 {
57 83 "cell_type": "markdown",
84 "metadata": {},
58 85 "source": [
59 86 "Plot both the function and the area below it in the trapezoid approximation"
60 87 ]
61 88 },
62 89 {
63 90 "cell_type": "code",
64 91 "collapsed": false,
65 92 "input": [
66 "plot(x, y, lw=2)",
67 "axis([0, 10, 0, 140])",
68 "fill_between(xint, 0, yint, facecolor='gray', alpha=0.4)",
93 "plot(x, y, lw=2)\n",
94 "axis([0, 10, 0, 140])\n",
95 "fill_between(xint, 0, yint, facecolor='gray', alpha=0.4)\n",
69 96 "text(0.5 * (a + b), 30,r\"$\\int_a^b f(x)dx$\", horizontalalignment='center', fontsize=20);"
70 97 ],
71 98 "language": "python",
99 "metadata": {},
72 100 "outputs": [
73 101 {
74 102 "output_type": "display_data",
75 "png": "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\nAElFTkSuQmCC\n"
103 "png": "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\n"
76 104 }
77 105 ],
78 "prompt_number": 3
106 "prompt_number": 4
79 107 },
80 108 {
81 109 "cell_type": "markdown",
110 "metadata": {},
82 111 "source": [
83 112 "Compute the integral both at high accuracy and with the trapezoid approximation"
84 113 ]
85 114 },
86 115 {
87 116 "cell_type": "code",
88 117 "collapsed": false,
89 118 "input": [
90 "from scipy.integrate import quad, trapz",
91 "integral, error = quad(f, 1, 9)",
92 "print \"The integral is:\", integral, \"+/-\", error",
119 "from scipy.integrate import quad, trapz\n",
120 "integral, error = quad(f, 1, 9)\n",
121 "print \"The integral is:\", integral, \"+/-\", error\n",
93 122 "print \"The trapezoid approximation with\", len(xint), \"points is:\", trapz(yint, xint)"
94 123 ],
95 124 "language": "python",
125 "metadata": {},
96 126 "outputs": [
97 127 {
98 128 "output_type": "stream",
99 129 "stream": "stdout",
100 130 "text": [
101 "The integral is: 680.0 +/- 7.54951656745e-12",
102 "The trapezoid approximation with 6 points is: 621.286411141"
131 "The integral is: 680.0 +/- 7.54951656745e-12\n",
132 "The trapezoid approximation with 6 points is: 621.286411141\n"
103 133 ]
104 134 }
105 135 ],
106 "prompt_number": 4
136 "prompt_number": 5
107 137 },
108 138 {
109 139 "cell_type": "code",
110 140 "collapsed": true,
111 141 "input": [],
112 142 "language": "python",
143 "metadata": {},
113 144 "outputs": []
114 145 }
115 ]
146 ],
147 "metadata": {}
116 148 }
117 149 ]
118 150 } No newline at end of file
@@ -1,384 +1,452 b''
1 1 {
2 2 "metadata": {
3 3 "name": "Parallel Magics"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
10 11 "cell_type": "heading",
11 12 "level": 1,
13 "metadata": {},
12 14 "source": [
13 15 "Using Parallel Magics"
14 16 ]
15 17 },
16 18 {
17 19 "cell_type": "markdown",
20 "metadata": {},
18 21 "source": [
19 22 "IPython has a few magics for working with your engines.\n",
20 23 "\n",
21 24 "This assumes you have started an IPython cluster, either with the notebook interface,\n",
22 25 "or the `ipcluster/controller/engine` commands."
23 26 ]
24 27 },
25 28 {
26 29 "cell_type": "code",
30 "collapsed": false,
27 31 "input": [
28 32 "from IPython import parallel\n",
29 33 "rc = parallel.Client()\n",
30 34 "dv = rc[:]\n",
31 35 "rc.ids"
32 36 ],
33 37 "language": "python",
38 "metadata": {},
34 39 "outputs": []
35 40 },
36 41 {
37 42 "cell_type": "markdown",
43 "metadata": {},
38 44 "source": [
39 45 "Creating a Client registers the parallel magics `%px`, `%%px`, `%pxresult`, `pxconfig`, and `%autopx`. \n",
40 46 "These magics are initially associated with a DirectView always associated with all currently registered engines."
41 47 ]
42 48 },
43 49 {
44 50 "cell_type": "markdown",
51 "metadata": {},
45 52 "source": [
46 53 "Now we can execute code remotely with `%px`:"
47 54 ]
48 55 },
49 56 {
50 57 "cell_type": "code",
58 "collapsed": false,
51 59 "input": [
52 60 "%px a=5"
53 61 ],
54 62 "language": "python",
63 "metadata": {},
55 64 "outputs": []
56 65 },
57 66 {
58 67 "cell_type": "code",
68 "collapsed": false,
59 69 "input": [
60 70 "%px print a"
61 71 ],
62 72 "language": "python",
73 "metadata": {},
63 74 "outputs": []
64 75 },
65 76 {
66 77 "cell_type": "code",
78 "collapsed": false,
67 79 "input": [
68 80 "%px a"
69 81 ],
70 82 "language": "python",
83 "metadata": {},
71 84 "outputs": []
72 85 },
73 86 {
74 87 "cell_type": "code",
88 "collapsed": false,
75 89 "input": [
76 90 "with dv.sync_imports():\n",
77 91 " import sys"
78 92 ],
79 93 "language": "python",
94 "metadata": {},
80 95 "outputs": []
81 96 },
82 97 {
83 98 "cell_type": "code",
99 "collapsed": false,
84 100 "input": [
85 101 "%px print >> sys.stderr, \"ERROR\""
86 102 ],
87 103 "language": "python",
104 "metadata": {},
88 105 "outputs": []
89 106 },
90 107 {
91 108 "cell_type": "markdown",
109 "metadata": {},
92 110 "source": [
93 111 "You don't have to wait for results. The `%pxconfig` magic lets you change the default blocking/targets for the `%px` magics:"
94 112 ]
95 113 },
96 114 {
97 115 "cell_type": "code",
116 "collapsed": false,
98 117 "input": [
99 118 "%pxconfig --noblock"
100 119 ],
101 120 "language": "python",
121 "metadata": {},
102 122 "outputs": []
103 123 },
104 124 {
105 125 "cell_type": "code",
126 "collapsed": false,
106 127 "input": [
107 128 "%px import time\n",
108 129 "%px time.sleep(5)\n",
109 130 "%px time.time()"
110 131 ],
111 132 "language": "python",
133 "metadata": {},
112 134 "outputs": []
113 135 },
114 136 {
115 137 "cell_type": "markdown",
138 "metadata": {},
116 139 "source": [
117 140 "But you will notice that this didn't output the result of the last command.\n",
118 141 "For this, we have `%pxresult`, which displays the output of the latest request:"
119 142 ]
120 143 },
121 144 {
122 145 "cell_type": "code",
146 "collapsed": false,
123 147 "input": [
124 148 "%pxresult"
125 149 ],
126 150 "language": "python",
151 "metadata": {},
127 152 "outputs": []
128 153 },
129 154 {
130 155 "cell_type": "markdown",
156 "metadata": {},
131 157 "source": [
132 158 "Remember, an IPython engine is IPython, so you can do magics remotely as well!"
133 159 ]
134 160 },
135 161 {
136 162 "cell_type": "code",
163 "collapsed": false,
137 164 "input": [
138 165 "%pxconfig --block\n",
139 166 "%px %pylab inline"
140 167 ],
141 168 "language": "python",
169 "metadata": {},
142 170 "outputs": []
143 171 },
144 172 {
145 173 "cell_type": "markdown",
174 "metadata": {},
146 175 "source": [
147 176 "`%%px` can also be used as a cell magic, for submitting whole blocks.\n",
148 177 "This one acceps `--block` and `--noblock` flags to specify\n",
149 178 "the blocking behavior, though the default is unchanged.\n"
150 179 ]
151 180 },
152 181 {
153 182 "cell_type": "code",
183 "collapsed": false,
154 184 "input": [
155 185 "dv.scatter('id', dv.targets, flatten=True)\n",
156 186 "dv['stride'] = len(dv)"
157 187 ],
158 188 "language": "python",
189 "metadata": {},
159 190 "outputs": []
160 191 },
161 192 {
162 193 "cell_type": "code",
194 "collapsed": false,
163 195 "input": [
164 196 "%%px --noblock\n",
165 197 "x = linspace(0,pi,1000)\n",
166 198 "for n in range(id,12, stride):\n",
167 199 " print n\n",
168 200 " plt.plot(x,sin(n*x))\n",
169 201 "plt.title(\"Plot %i\" % id)"
170 202 ],
171 203 "language": "python",
204 "metadata": {},
172 205 "outputs": []
173 206 },
174 207 {
175 208 "cell_type": "code",
209 "collapsed": false,
176 210 "input": [
177 211 "%pxresult"
178 212 ],
179 213 "language": "python",
214 "metadata": {},
180 215 "outputs": []
181 216 },
182 217 {
183 218 "cell_type": "markdown",
219 "metadata": {},
184 220 "source": [
185 221 "It also lets you choose some amount of the grouping of the outputs with `--group-outputs`:\n",
186 222 "\n",
187 223 "The choices are:\n",
188 224 "\n",
189 225 "* `engine` - all of an engine's output is collected together\n",
190 226 "* `type` - where stdout of each engine is grouped, etc. (the default)\n",
191 227 "* `order` - same as `type`, but individual displaypub outputs are interleaved.\n",
192 228 " That is, it will output the first plot from each engine, then the second from each,\n",
193 229 " etc."
194 230 ]
195 231 },
196 232 {
197 233 "cell_type": "code",
234 "collapsed": false,
198 235 "input": [
199 236 "%%px --group-outputs=engine\n",
200 237 "x = linspace(0,pi,1000)\n",
201 238 "for n in range(id+1,12, stride):\n",
202 239 " print n\n",
203 240 " plt.figure()\n",
204 241 " plt.plot(x,sin(n*x))\n",
205 242 " plt.title(\"Plot %i\" % n)"
206 243 ],
207 244 "language": "python",
245 "metadata": {},
208 246 "outputs": []
209 247 },
210 248 {
211 249 "cell_type": "markdown",
250 "metadata": {},
212 251 "source": [
213 252 "When you specify 'order', then individual display outputs (e.g. plots) will be interleaved.\n",
214 253 "\n",
215 254 "`%pxresult` takes the same output-ordering arguments as `%%px`, \n",
216 255 "so you can view the previous result in a variety of different ways with a few sequential calls to `%pxresult`:"
217 256 ]
218 257 },
219 258 {
220 259 "cell_type": "code",
260 "collapsed": false,
221 261 "input": [
222 262 "%pxresult --group-outputs=order"
223 263 ],
224 264 "language": "python",
265 "metadata": {},
225 266 "outputs": []
226 267 },
227 268 {
228 269 "cell_type": "heading",
229 270 "level": 2,
271 "metadata": {},
230 272 "source": [
231 273 "Single-engine views"
232 274 ]
233 275 },
234 276 {
235 277 "cell_type": "markdown",
278 "metadata": {},
236 279 "source": [
237 280 "When a DirectView has a single target, the output is a bit simpler (no prefixes on stdout/err, etc.):"
238 281 ]
239 282 },
240 283 {
241 284 "cell_type": "code",
285 "collapsed": false,
242 286 "input": [
243 287 "def generate_output():\n",
244 288 " \"\"\"function for testing output\n",
245 289 " \n",
246 290 " publishes two outputs of each type, and returns something\n",
247 291 " \"\"\"\n",
248 292 " \n",
249 293 " import sys,os\n",
250 294 " from IPython.core.display import display, HTML, Math\n",
251 295 " \n",
252 296 " print \"stdout\"\n",
253 297 " print >> sys.stderr, \"stderr\"\n",
254 298 " \n",
255 299 " display(HTML(\"<b>HTML</b>\"))\n",
256 300 " \n",
257 301 " print \"stdout2\"\n",
258 302 " print >> sys.stderr, \"stderr2\"\n",
259 303 " \n",
260 304 " display(Math(r\"\\alpha=\\beta\"))\n",
261 305 " \n",
262 306 " return os.getpid()\n",
263 307 "\n",
264 308 "dv['generate_output'] = generate_output"
265 309 ],
266 310 "language": "python",
311 "metadata": {},
267 312 "outputs": []
268 313 },
269 314 {
270 315 "cell_type": "markdown",
316 "metadata": {},
271 317 "source": [
272 318 "You can also have more than one set of parallel magics registered at a time.\n",
273 319 "\n",
274 320 "The `View.activate()` method takes a suffix argument, which is added to `'px'`."
275 321 ]
276 322 },
277 323 {
278 324 "cell_type": "code",
325 "collapsed": false,
279 326 "input": [
280 327 "e0 = rc[-1]\n",
281 328 "e0.block = True\n",
282 329 "e0.activate('0')"
283 330 ],
284 331 "language": "python",
332 "metadata": {},
285 333 "outputs": []
286 334 },
287 335 {
288 336 "cell_type": "code",
337 "collapsed": false,
289 338 "input": [
290 339 "%px0 generate_output()"
291 340 ],
292 341 "language": "python",
342 "metadata": {},
293 343 "outputs": []
294 344 },
295 345 {
296 346 "cell_type": "code",
347 "collapsed": false,
297 348 "input": [
298 349 "%px generate_output()"
299 350 ],
300 351 "language": "python",
352 "metadata": {},
301 353 "outputs": []
302 354 },
303 355 {
304 356 "cell_type": "markdown",
357 "metadata": {},
305 358 "source": [
306 359 "As mentioned above, we can redisplay those same results with various grouping:"
307 360 ]
308 361 },
309 362 {
310 363 "cell_type": "code",
364 "collapsed": false,
311 365 "input": [
312 366 "%pxresult --group-outputs order"
313 367 ],
314 368 "language": "python",
369 "metadata": {},
315 370 "outputs": []
316 371 },
317 372 {
318 373 "cell_type": "code",
374 "collapsed": false,
319 375 "input": [
320 376 "%pxresult --group-outputs engine"
321 377 ],
322 378 "language": "python",
379 "metadata": {},
323 380 "outputs": []
324 381 },
325 382 {
326 383 "cell_type": "heading",
327 384 "level": 2,
385 "metadata": {},
328 386 "source": [
329 387 "Parallel Exceptions"
330 388 ]
331 389 },
332 390 {
333 391 "cell_type": "markdown",
392 "metadata": {},
334 393 "source": [
335 394 "When you raise exceptions with the parallel exception,\n",
336 395 "the CompositeError raised locally will display your remote traceback."
337 396 ]
338 397 },
339 398 {
340 399 "cell_type": "code",
400 "collapsed": false,
341 401 "input": [
342 402 "%%px\n",
343 403 "from numpy.random import random\n",
344 404 "A = random((100,100,'invalid shape'))"
345 405 ],
346 406 "language": "python",
407 "metadata": {},
347 408 "outputs": []
348 409 },
349 410 {
350 411 "cell_type": "heading",
351 412 "level": 2,
413 "metadata": {},
352 414 "source": [
353 415 "Remote Cell Magics"
354 416 ]
355 417 },
356 418 {
357 419 "cell_type": "markdown",
420 "metadata": {},
358 421 "source": [
359 422 "Remember, Engines are IPython too, so the cell that is run remotely by %%px can in turn use a cell magic."
360 423 ]
361 424 },
362 425 {
363 426 "cell_type": "code",
427 "collapsed": false,
364 428 "input": [
365 429 "%%px\n",
366 430 "%%timeit\n",
367 431 "from numpy.random import random\n",
368 432 "from numpy.linalg import norm\n",
369 433 "A = random((100,100))\n",
370 434 "norm(A, 2) "
371 435 ],
372 436 "language": "python",
437 "metadata": {},
373 438 "outputs": []
374 439 },
375 440 {
376 441 "cell_type": "code",
442 "collapsed": false,
377 443 "input": [],
378 444 "language": "python",
445 "metadata": {},
379 446 "outputs": []
380 447 }
381 ]
448 ],
449 "metadata": {}
382 450 }
383 451 ]
384 452 } No newline at end of file
@@ -1,92 +1,101 b''
1 1 {
2 2 "metadata": {
3 3 "name": "helloworld"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
10 11 "cell_type": "markdown",
12 "metadata": {},
11 13 "source": [
12 "# Distributed hello world",
13 "",
14 "# Distributed hello world\n",
15 "\n",
14 16 "Originally by Ken Kinder (ken at kenkinder dom com)"
15 17 ]
16 18 },
17 19 {
18 20 "cell_type": "code",
19 21 "collapsed": true,
20 22 "input": [
21 23 "from IPython.parallel import Client"
22 24 ],
23 25 "language": "python",
26 "metadata": {},
24 27 "outputs": [],
25 28 "prompt_number": 1
26 29 },
27 30 {
28 31 "cell_type": "code",
29 32 "collapsed": true,
30 33 "input": [
31 "rc = Client()",
34 "rc = Client()\n",
32 35 "view = rc.load_balanced_view()"
33 36 ],
34 37 "language": "python",
38 "metadata": {},
35 39 "outputs": [],
36 40 "prompt_number": 2
37 41 },
38 42 {
39 43 "cell_type": "code",
40 44 "collapsed": true,
41 45 "input": [
42 "def sleep_and_echo(t, msg):",
43 " import time",
44 " time.sleep(t)",
46 "def sleep_and_echo(t, msg):\n",
47 " import time\n",
48 " time.sleep(t)\n",
45 49 " return msg"
46 50 ],
47 51 "language": "python",
52 "metadata": {},
48 53 "outputs": [],
49 54 "prompt_number": 3
50 55 },
51 56 {
52 57 "cell_type": "code",
53 58 "collapsed": true,
54 59 "input": [
55 "world = view.apply_async(sleep_and_echo, 3, 'World!')",
60 "world = view.apply_async(sleep_and_echo, 3, 'World!')\n",
56 61 "hello = view.apply_async(sleep_and_echo, 2, 'Hello')"
57 62 ],
58 63 "language": "python",
64 "metadata": {},
59 65 "outputs": [],
60 66 "prompt_number": 4
61 67 },
62 68 {
63 69 "cell_type": "code",
64 70 "collapsed": false,
65 71 "input": [
66 "print \"Submitted tasks:\", hello.msg_ids, world.msg_ids",
72 "print \"Submitted tasks:\", hello.msg_ids + world.msg_ids\n",
67 73 "print hello.get(), world.get()"
68 74 ],
69 75 "language": "python",
76 "metadata": {},
70 77 "outputs": [
71 78 {
72 79 "output_type": "stream",
73 80 "stream": "stdout",
74 81 "text": [
75 "Submitted tasks: ['dd1052e0-aa75-4b25-9d35-ecbdaf6e3ed7'] ['1b46aa21-20d1-459c-bc36-2d8d03336f74']",
76 "Hello"
77 ]
78 },
79 {
80 "output_type": "stream",
81 "stream": "stdout",
82 "text": [
83 " World!"
82 "Submitted tasks: ['04670c2d-b2fd-4b6b-a5ac-dee15e533683', 'fc802284-507b-4c29-a526-67396e17718c']\n",
83 "Hello World!\n"
84 84 ]
85 85 }
86 86 ],
87 "prompt_number": 5
87 "prompt_number": 6
88 },
89 {
90 "cell_type": "code",
91 "collapsed": false,
92 "input": [],
93 "language": "python",
94 "metadata": {},
95 "outputs": []
88 96 }
89 ]
97 ],
98 "metadata": {}
90 99 }
91 100 ]
92 101 } No newline at end of file
@@ -1,224 +1,187 b''
1 1 {
2 2 "metadata": {
3 3 "name": "parallel_mpi"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
11 "cell_type": "heading",
12 "level": 1,
13 "metadata": {},
14 "source": [
15 "Simple usage of a set of MPI engines"
16 ]
17 },
18 {
10 19 "cell_type": "markdown",
20 "metadata": {},
11 21 "source": [
12 "# Simple usage of a set of MPI engines",
13 "",
14 "This example assumes you've started a cluster of N engines (4 in this example) as part",
15 "of an MPI world. ",
16 "",
17 "Our documentation describes [how to create an MPI profile](http://ipython.org/ipython-doc/dev/parallel/parallel_process.html#using-ipcluster-in-mpiexec-mpirun-mode)",
18 "and explains [basic MPI usage of the IPython cluster](http://ipython.org/ipython-doc/dev/parallel/parallel_mpi.html).",
19 "",
20 "",
21 "For the simplest possible way to start 4 engines that belong to the same MPI world, ",
22 "you can run this in a terminal or antoher notebook:",
23 "",
24 "<pre>",
25 "ipcluster start --engines=MPI -n 4",
26 "</pre>",
27 "",
28 "Note: to run the above in a notebook, use a *new* notebook and prepend the command with `!`, but do not run",
29 "it in *this* notebook, as this command will block until you shut down the cluster. To stop the cluster, use ",
30 "the 'Interrupt' button on the left, which is the equivalent of sending `Ctrl-C` to the kernel.",
31 "",
22 "This example assumes you've started a cluster of N engines (4 in this example) as part\n",
23 "of an MPI world. \n",
24 "\n",
25 "Our documentation describes [how to create an MPI profile](http://ipython.org/ipython-doc/dev/parallel/parallel_process.html#using-ipcluster-in-mpiexec-mpirun-mode)\n",
26 "and explains [basic MPI usage of the IPython cluster](http://ipython.org/ipython-doc/dev/parallel/parallel_mpi.html).\n",
27 "\n",
28 "\n",
29 "For the simplest possible way to start 4 engines that belong to the same MPI world, \n",
30 "you can run this in a terminal:\n",
31 "\n",
32 "<pre>\n",
33 "ipcluster start --engines=MPI -n 4\n",
34 "</pre>\n",
35 "\n",
36 "or start an MPI cluster from the cluster tab if you have one configured.\n",
37 "\n",
32 38 "Once the cluster is running, we can connect to it and open a view into it:"
33 39 ]
34 40 },
35 41 {
36 42 "cell_type": "code",
37 43 "collapsed": true,
38 44 "input": [
39 "from IPython.parallel import Client",
40 "c = Client()",
45 "from IPython.parallel import Client\n",
46 "c = Client()\n",
41 47 "view = c[:]"
42 48 ],
43 49 "language": "python",
50 "metadata": {},
44 51 "outputs": [],
45 "prompt_number": 21
52 "prompt_number": 1
46 53 },
47 54 {
48 55 "cell_type": "markdown",
56 "metadata": {},
49 57 "source": [
50 58 "Let's define a simple function that gets the MPI rank from each engine."
51 59 ]
52 60 },
53 61 {
54 62 "cell_type": "code",
55 63 "collapsed": true,
56 64 "input": [
57 "@view.remote(block=True)",
58 "def mpi_rank():",
59 " from mpi4py import MPI",
60 " comm = MPI.COMM_WORLD",
65 "@view.remote(block=True)\n",
66 "def mpi_rank():\n",
67 " from mpi4py import MPI\n",
68 " comm = MPI.COMM_WORLD\n",
61 69 " return comm.Get_rank()"
62 70 ],
63 71 "language": "python",
72 "metadata": {},
64 73 "outputs": [],
65 "prompt_number": 22
74 "prompt_number": 2
66 75 },
67 76 {
68 77 "cell_type": "code",
69 78 "collapsed": false,
70 79 "input": [
71 80 "mpi_rank()"
72 81 ],
73 82 "language": "python",
83 "metadata": {},
74 84 "outputs": [
75 85 {
76 86 "output_type": "pyout",
77 "prompt_number": 23,
87 "prompt_number": 3,
78 88 "text": [
79 "[3, 0, 2, 1]"
89 "[2, 3, 1, 0]"
80 90 ]
81 91 }
82 92 ],
83 "prompt_number": 23
84 },
85 {
86 "cell_type": "markdown",
87 "source": [
88 "For interactive convenience, we load the parallel magic extensions and make this view",
89 "the active one for the automatic parallelism magics.",
90 "",
91 "This is not necessary and in production codes likely won't be used, as the engines will ",
92 "load their own MPI codes separately. But it makes it easy to illustrate everything from",
93 "within a single notebook here."
94 ]
95 },
96 {
97 "cell_type": "code",
98 "collapsed": true,
99 "input": [
100 "%load_ext parallelmagic",
101 "view.activate()"
102 ],
103 "language": "python",
104 "outputs": [],
105 "prompt_number": 4
93 "prompt_number": 3
106 94 },
107 95 {
108 96 "cell_type": "markdown",
97 "metadata": {},
109 98 "source": [
110 "Use the autopx magic to make the rest of this cell execute on the engines instead",
111 "of locally"
99 "To get a mapping of IPython IDs and MPI rank (these do not always match),\n",
100 "you can use the get_dict method on AsyncResults."
112 101 ]
113 102 },
114 103 {
115 104 "cell_type": "code",
116 "collapsed": true,
117 "input": [
118 "view.block = True"
119 ],
120 "language": "python",
121 "outputs": [],
122 "prompt_number": 24
123 },
124 {
125 "cell_type": "code",
126 105 "collapsed": false,
127 106 "input": [
128 "%autopx"
107 "mpi_rank.block = False\n",
108 "ar = mpi_rank()\n",
109 "ar.get_dict()"
129 110 ],
130 111 "language": "python",
112 "metadata": {},
131 113 "outputs": [
132 114 {
133 "output_type": "stream",
134 "stream": "stdout",
115 "output_type": "pyout",
116 "prompt_number": 4,
135 117 "text": [
136 "%autopx enabled"
118 "{0: 2, 1: 3, 2: 1, 3: 0}"
137 119 ]
138 120 }
139 121 ],
140 "prompt_number": 32
122 "prompt_number": 4
141 123 },
142 124 {
143 125 "cell_type": "markdown",
126 "metadata": {},
144 127 "source": [
145 "With autopx enabled, the next cell will actually execute *entirely on each engine*:"
128 "With %%px cell magic, the next cell will actually execute *entirely on each engine*:"
146 129 ]
147 130 },
148 131 {
149 132 "cell_type": "code",
150 133 "collapsed": true,
151 134 "input": [
152 "from mpi4py import MPI",
153 "",
154 "comm = MPI.COMM_WORLD",
155 "size = comm.Get_size()",
156 "rank = comm.Get_rank()",
157 "",
158 "if rank == 0:",
159 " data = [(i+1)**2 for i in range(size)]",
160 "else:",
161 " data = None",
162 "data = comm.scatter(data, root=0)",
163 "",
135 "%%px\n",
136 "from mpi4py import MPI\n",
137 "\n",
138 "comm = MPI.COMM_WORLD\n",
139 "size = comm.Get_size()\n",
140 "rank = comm.Get_rank()\n",
141 "\n",
142 "if rank == 0:\n",
143 " data = [(i+1)**2 for i in range(size)]\n",
144 "else:\n",
145 " data = None\n",
146 "data = comm.scatter(data, root=0)\n",
147 "\n",
164 148 "assert data == (rank+1)**2, 'data=%s, rank=%s' % (data, rank)"
165 149 ],
166 150 "language": "python",
151 "metadata": {},
167 152 "outputs": [],
168 "prompt_number": 29
169 },
170 {
171 "cell_type": "markdown",
172 "source": [
173 "Though the assertion at the end of the previous block validated the code, we can now ",
174 "pull the 'data' variable from all the nodes for local inspection.",
175 "First, don't forget to toggle off `autopx` mode so code runs again in the notebook:"
176 ]
177 },
178 {
179 "cell_type": "code",
180 "collapsed": false,
181 "input": [
182 "%autopx"
183 ],
184 "language": "python",
185 "outputs": [
186 {
187 "output_type": "stream",
188 "stream": "stdout",
189 "text": [
190 "%autopx disabled"
191 ]
192 }
193 ],
194 "prompt_number": 33
153 "prompt_number": 5
195 154 },
196 155 {
197 156 "cell_type": "code",
198 157 "collapsed": false,
199 158 "input": [
200 159 "view['data']"
201 160 ],
202 161 "language": "python",
162 "metadata": {},
203 163 "outputs": [
204 164 {
205 165 "output_type": "pyout",
206 "prompt_number": 34,
166 "prompt_number": 6,
207 167 "text": [
208 "[16, 1, 9, 4]"
168 "[9, 16, 4, 1]"
209 169 ]
210 170 }
211 171 ],
212 "prompt_number": 34
172 "prompt_number": 6
213 173 },
214 174 {
215 175 "cell_type": "code",
216 176 "collapsed": true,
217 177 "input": [],
218 178 "language": "python",
219 "outputs": []
179 "metadata": {},
180 "outputs": [],
181 "prompt_number": 6
220 182 }
221 ]
183 ],
184 "metadata": {}
222 185 }
223 186 ]
224 187 } No newline at end of file
@@ -1,118 +1,140 b''
1 1 {
2 2 "metadata": {
3 3 "name": "task1"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
10 11 "cell_type": "markdown",
12 "metadata": {},
11 13 "source": [
12 14 "# Simple task farming example"
13 15 ]
14 16 },
15 17 {
16 18 "cell_type": "code",
17 19 "collapsed": true,
18 20 "input": [
19 21 "from IPython.parallel import Client"
20 22 ],
21 23 "language": "python",
24 "metadata": {},
22 25 "outputs": [],
23 "prompt_number": 3
26 "prompt_number": 1
24 27 },
25 28 {
26 29 "cell_type": "markdown",
30 "metadata": {},
27 31 "source": [
28 32 "A `Client.load_balanced_view` is used to get the object used for working with load balanced tasks."
29 33 ]
30 34 },
31 35 {
32 36 "cell_type": "code",
33 37 "collapsed": true,
34 38 "input": [
35 "rc = Client()",
39 "rc = Client()\n",
36 40 "v = rc.load_balanced_view()"
37 41 ],
38 42 "language": "python",
43 "metadata": {},
39 44 "outputs": [],
40 "prompt_number": 4
45 "prompt_number": 2
41 46 },
42 47 {
43 48 "cell_type": "markdown",
49 "metadata": {},
44 50 "source": [
45 51 "Set the variable `d` on all engines:"
46 52 ]
47 53 },
48 54 {
49 55 "cell_type": "code",
50 56 "collapsed": true,
51 57 "input": [
52 58 "rc[:]['d'] = 30"
53 59 ],
54 60 "language": "python",
61 "metadata": {},
55 62 "outputs": [],
56 "prompt_number": 5
63 "prompt_number": 3
57 64 },
58 65 {
59 66 "cell_type": "markdown",
67 "metadata": {},
60 68 "source": [
61 69 "Define a function that will be our task:"
62 70 ]
63 71 },
64 72 {
65 73 "cell_type": "code",
66 74 "collapsed": true,
67 75 "input": [
68 "def task(a):",
76 "def task(a):\n",
69 77 " return a, 10*d, a*10*d"
70 78 ],
71 79 "language": "python",
80 "metadata": {},
72 81 "outputs": [],
73 "prompt_number": 6
82 "prompt_number": 4
74 83 },
75 84 {
76 85 "cell_type": "markdown",
86 "metadata": {},
77 87 "source": [
78 88 "Run the task once:"
79 89 ]
80 90 },
81 91 {
82 92 "cell_type": "code",
83 93 "collapsed": true,
84 94 "input": [
85 95 "ar = v.apply(task, 5)"
86 96 ],
87 97 "language": "python",
98 "metadata": {},
88 99 "outputs": [],
89 "prompt_number": 7
100 "prompt_number": 5
90 101 },
91 102 {
92 103 "cell_type": "markdown",
104 "metadata": {},
93 105 "source": [
94 106 "Print the results:"
95 107 ]
96 108 },
97 109 {
98 110 "cell_type": "code",
99 111 "collapsed": false,
100 112 "input": [
101 113 "print \"a, b, c: \", ar.get()"
102 114 ],
103 115 "language": "python",
116 "metadata": {},
104 117 "outputs": [
105 118 {
106 119 "output_type": "stream",
107 120 "stream": "stdout",
108 121 "text": [
109 "a, b, c: [5, 300, 1500]"
122 "a, b, c: [5, 300, 1500]\n"
110 123 ]
111 124 }
112 125 ],
113 "prompt_number": 8
126 "prompt_number": 6
127 },
128 {
129 "cell_type": "code",
130 "collapsed": false,
131 "input": [],
132 "language": "python",
133 "metadata": {},
134 "outputs": []
114 135 }
115 ]
136 ],
137 "metadata": {}
116 138 }
117 139 ]
118 140 } No newline at end of file
@@ -1,109 +1,125 b''
1 1 {
2 2 "metadata": {
3 3 "name": "taskmap"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
10 11 "cell_type": "markdown",
12 "metadata": {},
11 13 "source": [
12 14 "# Load balanced map and parallel function decorator"
13 15 ]
14 16 },
15 17 {
16 18 "cell_type": "code",
17 19 "collapsed": true,
18 20 "input": [
19 21 "from IPython.parallel import Client"
20 22 ],
21 23 "language": "python",
24 "metadata": {},
22 25 "outputs": [],
23 26 "prompt_number": 1
24 27 },
25 28 {
26 29 "cell_type": "code",
27 30 "collapsed": false,
28 31 "input": [
29 "rc = Client()",
32 "rc = Client()\n",
30 33 "v = rc.load_balanced_view()"
31 34 ],
32 35 "language": "python",
36 "metadata": {},
33 37 "outputs": [],
34 "prompt_number": 3
38 "prompt_number": 2
35 39 },
36 40 {
37 41 "cell_type": "code",
38 42 "collapsed": false,
39 43 "input": [
40 "result = v.map(lambda x: 2*x, range(10))",
44 "result = v.map(lambda x: 2*x, range(10))\n",
41 45 "print \"Simple, default map: \", list(result)"
42 46 ],
43 47 "language": "python",
48 "metadata": {},
44 49 "outputs": [
45 50 {
46 51 "output_type": "stream",
47 52 "stream": "stdout",
48 53 "text": [
49 54 "Simple, default map: "
50 55 ]
51 56 },
52 57 {
53 58 "output_type": "stream",
54 59 "stream": "stdout",
55 60 "text": [
56 "[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]"
61 "[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]\n"
57 62 ]
58 63 }
59 64 ],
60 "prompt_number": 4
65 "prompt_number": 3
61 66 },
62 67 {
63 68 "cell_type": "code",
64 69 "collapsed": false,
65 70 "input": [
66 "ar = v.map_async(lambda x: 2*x, range(10))",
67 "print \"Submitted tasks, got ids: \", ar.msg_ids",
68 "result = ar.get()",
71 "ar = v.map_async(lambda x: 2*x, range(10))\n",
72 "print \"Submitted tasks, got ids: \", ar.msg_ids\n",
73 "result = ar.get()\n",
69 74 "print \"Using a mapper: \", result"
70 75 ],
71 76 "language": "python",
77 "metadata": {},
72 78 "outputs": [
73 79 {
74 80 "output_type": "stream",
75 81 "stream": "stdout",
76 82 "text": [
77 "Submitted tasks, got ids: ['5100a4c7-73a4-4832-aa91-e774f6f3ede8', 'd0cae1cf-2b32-4092-9eb7-f17b43fb3849', 'e08d3ee2-f221-47fe-9556-ed938e692030', '065585e4-cdf9-4240-a5fe-e44b2ae5d023', 'd2162f23-68e5-4318-ba1e-e34fd03a72ac', '5b3b835f-2099-4a70-9896-d1aa810c77e6', 'e2c2a823-bd44-4f91-8db3-c154d0d86e56', '991e0c25-f98a-44b5-9d9e-889d4180b9a5', '4ad41221-28bd-482f-a300-97c404648161', '5b730eb3-e0bb-4cdd-b228-c3b8d158828a']",
78 "Using a mapper: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]"
83 "Submitted tasks, got ids: ['d482fcb3-f8e9-41ff-ba16-9fd4118324f1', 'e4fe38dd-8a4d-4f3a-a111-e4c9fdbea7c3', '580431f4-ac66-4517-b03e-a58aa690a87b', '19a012cf-5d9d-4cf3-9656-d56263958c0e', '012ebbb5-5def-47ad-a247-20f88d2c8980', '0dea6cdb-5b22-4bac-a1bb-7544c0ef44e6', '909d073f-7eee-42a7-8f3b-8f7aa32e7639', 'be6c7466-d541-47a0-b12d-bc408d40ad77', 'b97b5967-a5a3-45c5-95cc-44e0823fd646', '69b06902-9526-42d9-bda6-c943be19cc5a']\n",
84 "Using a mapper: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]\n"
79 85 ]
80 86 }
81 87 ],
82 "prompt_number": 5
88 "prompt_number": 4
83 89 },
84 90 {
85 91 "cell_type": "code",
86 92 "collapsed": false,
87 93 "input": [
88 "@v.parallel(block=True)",
89 "def f(x): return 2*x",
90 "",
91 "result = f.map(range(10))",
94 "@v.parallel(block=True)\n",
95 "def f(x): return 2*x\n",
96 "\n",
97 "result = f.map(range(10))\n",
92 98 "print \"Using a parallel function: \", result"
93 99 ],
94 100 "language": "python",
101 "metadata": {},
95 102 "outputs": [
96 103 {
97 104 "output_type": "stream",
98 105 "stream": "stdout",
99 106 "text": [
100 "Using a parallel function: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]"
107 "Using a parallel function: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]\n"
101 108 ]
102 109 }
103 110 ],
104 "prompt_number": 6
111 "prompt_number": 5
112 },
113 {
114 "cell_type": "code",
115 "collapsed": false,
116 "input": [],
117 "language": "python",
118 "metadata": {},
119 "outputs": []
105 120 }
106 ]
121 ],
122 "metadata": {}
107 123 }
108 124 ]
109 125 } No newline at end of file
@@ -1,38 +1,46 b''
1 1 {
2 2 "metadata": {
3 3 "name": "directview"
4 4 },
5 5 "nbformat": 3,
6 "nbformat_minor": 0,
6 7 "worksheets": [
7 8 {
8 9 "cells": [
9 10 {
10 11 "cell_type": "code",
12 "collapsed": false,
11 13 "input": [
12 "from directview import interact",
14 "from directview import interact\n",
13 15 "from IPython.parallel import Client"
14 16 ],
15 17 "language": "python",
18 "metadata": {},
16 19 "outputs": []
17 20 },
18 21 {
19 22 "cell_type": "code",
23 "collapsed": false,
20 24 "input": [
21 "c = Client()",
25 "c = Client()\n",
22 26 "dv = c[:]"
23 27 ],
24 28 "language": "python",
29 "metadata": {},
25 30 "outputs": []
26 31 },
27 32 {
28 33 "cell_type": "code",
34 "collapsed": false,
29 35 "input": [
30 36 "interact(dv)"
31 37 ],
32 38 "language": "python",
39 "metadata": {},
33 40 "outputs": []
34 41 }
35 ]
42 ],
43 "metadata": {}
36 44 }
37 45 ]
38 46 } No newline at end of file
@@ -1,255 +0,0 b''
1 {
2 "metadata": {
3 "name": "direct_view_widget"
4 },
5 "nbformat": 3,
6 "worksheets": [
7 {
8 "cells": [
9 {
10 "cell_type": "heading",
11 "level": 1,
12 "source": [
13 "Direct View Widget"
14 ]
15 },
16 {
17 "cell_type": "markdown",
18 "source": [
19 "IPython has a JavaScript widget for interacting with an IPython parallel engine interactively in the Notebook. This Notebook shows how this widget can be used."
20 ]
21 },
22 {
23 "cell_type": "code",
24 "input": [
25 "from IPython.frontend.html.notebook.widgets import directview",
26 "from IPython.parallel import Client"
27 ],
28 "language": "python",
29 "outputs": [],
30 "prompt_number": 4
31 },
32 {
33 "cell_type": "markdown",
34 "source": [
35 "Let's create a `Client` and build a `DirectView` containing all of the engines:"
36 ]
37 },
38 {
39 "cell_type": "code",
40 "input": [
41 "c = Client()",
42 "dv = c[:]"
43 ],
44 "language": "python",
45 "outputs": [],
46 "prompt_number": 5
47 },
48 {
49 "cell_type": "markdown",
50 "source": [
51 "To interact with the engines we simply pass the `DirectView` instance to the `interact` function. The resulting widget has an embedded notebook cell, but any code entered into the embedded cell is run on the engines you choose. The engines are now full blown IPython kernels so you can enter arbitrary Python/IPython code and even make plots on the engines."
52 ]
53 },
54 {
55 "cell_type": "code",
56 "input": [
57 "directview.interact(dv)"
58 ],
59 "language": "python",
60 "outputs": [
61 {
62 "javascript": [
63 "//----------------------------------------------------------------------------",
64 "// Copyright (C) 2008-2012 The IPython Development Team",
65 "//",
66 "// Distributed under the terms of the BSD License. The full license is in",
67 "// the file COPYING, distributed as part of this software.",
68 "//----------------------------------------------------------------------------",
69 "",
70 "//============================================================================",
71 "// EngineInteract",
72 "//============================================================================",
73 "",
74 "var key = IPython.utils.keycodes;",
75 "",
76 "",
77 "var DirectViewWidget = function (selector, kernel, targets) {",
78 " // The kernel doesn't have to be set at creation time, in that case",
79 " // it will be null and set_kernel has to be called later.",
80 " this.selector = selector;",
81 " this.element = $(selector);",
82 " this.kernel = kernel || null;",
83 " this.code_mirror = null;",
84 " this.targets = targets;",
85 " this.create_element();",
86 "};",
87 "",
88 "",
89 "DirectViewWidget.prototype.create_element = function () {",
90 " this.element.addClass('cell border-box-sizing code_cell vbox');",
91 " this.element.attr('tabindex','2');",
92 " this.element.css('padding-right',0);",
93 "",
94 " var control = $('<div/>').addClass('dv_control').height('30px');",
95 " var control_label = $('<span/>').html('Select engine(s) to run code on interactively: ');",
96 " control_label.css('line-height','30px');",
97 " var select = $('<select/>').addClass('dv_select ui-widget ui-widget-content');",
98 " select.css('font-size','85%').css('margin-bottom','5px');",
99 " var n = this.targets.length;",
100 " select.append($('<option/>').html('all').attr('value','all'));",
101 " for (var i=0; i<n; i++) {",
102 " select.append($('<option/>').html(this.targets[i]).attr('value',this.targets[i]))",
103 " }",
104 " control.append(control_label).append(select);",
105 "",
106 " var input = $('<div></div>').addClass('input hbox');",
107 " var input_area = $('<div/>').addClass('input_area box-flex1');",
108 " this.code_mirror = CodeMirror(input_area.get(0), {",
109 " indentUnit : 4,",
110 " mode: 'python',",
111 " theme: 'ipython',",
112 " onKeyEvent: $.proxy(this.handle_codemirror_keyevent,this)",
113 " });",
114 " input.append(input_area);",
115 " var output = $('<div></div>');",
116 "",
117 "",
118 " this.element.append(control).append(input).append(output);",
119 "\tthis.output_area = new IPython.OutputArea(output, false);",
120 "",
121 "};",
122 "",
123 "",
124 "DirectViewWidget.prototype.handle_codemirror_keyevent = function (editor, event) {",
125 " // This method gets called in CodeMirror's onKeyDown/onKeyPress",
126 " // handlers and is used to provide custom key handling. Its return",
127 " // value is used to determine if CodeMirror should ignore the event:",
128 " // true = ignore, false = don't ignore.",
129 " ",
130 " var that = this;",
131 " var cur = editor.getCursor();",
132 "",
133 " if (event.keyCode === key.ENTER && event.shiftKey && event.type === 'keydown') {",
134 " // Always ignore shift-enter in CodeMirror as we handle it.",
135 " event.stop();",
136 " that.execute();",
137 " return true;",
138 " } else if (event.keyCode === key.UP && event.type === 'keydown') {",
139 " event.stop();",
140 " return false;",
141 " } else if (event.keyCode === key.DOWN && event.type === 'keydown') {",
142 " event.stop();",
143 " return false;",
144 " } else if (event.keyCode === key.BACKSPACE && event.type == 'keydown') {",
145 " // If backspace and the line ends with 4 spaces, remove them.",
146 " var line = editor.getLine(cur.line);",
147 " var ending = line.slice(-4);",
148 " if (ending === ' ') {",
149 " editor.replaceRange('',",
150 " {line: cur.line, ch: cur.ch-4},",
151 " {line: cur.line, ch: cur.ch}",
152 " );",
153 " event.stop();",
154 " return true;",
155 " } else {",
156 " return false;",
157 " };",
158 " };",
159 "",
160 " return false;",
161 "};",
162 "",
163 "",
164 "// Kernel related calls.",
165 "",
166 "",
167 "DirectViewWidget.prototype.set_kernel = function (kernel) {",
168 " this.kernel = kernel;",
169 "}",
170 "",
171 "",
172 "DirectViewWidget.prototype.execute = function () {",
173 " this.output_area.clear_output(true, true, true);",
174 " this.element.addClass(\"running\");",
175 " var callbacks = {",
176 " 'execute_reply': $.proxy(this._handle_execute_reply, this),",
177 " 'output': $.proxy(this.output_area.handle_output, this.output_area),",
178 " 'clear_output': $.proxy(this.output_area.handle_clear_output, this.output_area),",
179 " };",
180 " var target = this.element.find('.dv_select option:selected').attr('value');",
181 " if (target === 'all') {",
182 " target = '\"all\"';",
183 " }",
184 " var code = '__widget_b32c0bd12a804f69b0e6445ef57c08d9.execute(\"\"\"'+this.get_text()+'\"\"\",targets='+target+')';",
185 " var msg_id = this.kernel.execute(code, callbacks, {silent: false});",
186 " this.clear_input();",
187 " this.code_mirror.focus();",
188 "};",
189 "",
190 "",
191 "DirectViewWidget.prototype._handle_execute_reply = function (content) {",
192 " this.element.removeClass(\"running\");",
193 " // this.dirty = true;",
194 "}",
195 "",
196 "// Basic cell manipulation.",
197 "",
198 "",
199 "DirectViewWidget.prototype.select_all = function () {",
200 " var start = {line: 0, ch: 0};",
201 " var nlines = this.code_mirror.lineCount();",
202 " var last_line = this.code_mirror.getLine(nlines-1);",
203 " var end = {line: nlines-1, ch: last_line.length};",
204 " this.code_mirror.setSelection(start, end);",
205 "};",
206 "",
207 "",
208 "DirectViewWidget.prototype.clear_input = function () {",
209 " this.code_mirror.setValue('');",
210 "};",
211 "",
212 "",
213 "DirectViewWidget.prototype.get_text = function () {",
214 " return this.code_mirror.getValue();",
215 "};",
216 "",
217 "",
218 "DirectViewWidget.prototype.set_text = function (code) {",
219 " return this.code_mirror.setValue(code);",
220 "};",
221 "",
222 "container.show();",
223 "var widget = $('<div/>')",
224 "// When templating over a JSON string, we must use single quotes.",
225 "var targets = '[0,1,2,3]';",
226 "targets = $.parseJSON(targets);",
227 "var eiw = new DirectViewWidget(widget, IPython.notebook.kernel, targets);",
228 "element.append(widget);",
229 "element.css('padding',0);",
230 "setTimeout(function () {",
231 " eiw.code_mirror.refresh();",
232 " eiw.code_mirror.focus();",
233 "}, 1);",
234 "",
235 ""
236 ],
237 "output_type": "display_data",
238 "text": [
239 "<IPython.core.display.Javascript at 0x107d35fd0>"
240 ]
241 },
242 {
243 "output_type": "pyout",
244 "prompt_number": 6,
245 "text": [
246 "<IPython.frontend.html.notebook.widgets.directview.DirectViewWidget at 0x107eb9890>"
247 ]
248 }
249 ],
250 "prompt_number": 6
251 }
252 ]
253 }
254 ]
255 } No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now