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'/ |
|
|
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 |
|
|
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": |
|
|
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": |
|
|
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": |
|
|
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[ |
|
|
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[ |
|
|
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": |
|
|
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": |
|
|
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": |
|
|
342 | "collapsed": false, | |
|
296 | 343 | "input": [ |
|
297 |
" |
|
|
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 |
" |
|
|
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 |
" |
|
|
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 |
" |
|
|
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": |
|
|
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": "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\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 0x10 |
|
|
596 | "<IPython.core.display.Image at 0x105baf950>" | |
|
536 | 597 | ] |
|
537 | 598 | } |
|
538 | 599 | ], |
|
539 |
"prompt_number": |
|
|
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": |
|
|
624 | "prompt_number": 6, | |
|
562 | 625 | "text": [ |
|
563 |
"<IPython.core.display.Image at 0x10 |
|
|
626 | "<IPython.core.display.Image at 0x105baf490>" | |
|
564 | 627 | ] |
|
565 | 628 | } |
|
566 | 629 | ], |
|
567 |
"prompt_number": |
|
|
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": |
|
|
683 | "prompt_number": 7, | |
|
617 | 684 | "text": [ |
|
618 |
" |
|
|
685 | "<IPython.lib.display.YouTubeVideo at 0x105baf9d0>" | |
|
619 | 686 | ] |
|
620 | 687 | } |
|
621 | 688 | ], |
|
622 |
"prompt_number": |
|
|
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": |
|
|
931 | "prompt_number": 8, | |
|
863 | 932 | "text": [ |
|
864 |
" |
|
|
933 | "<IPython.core.display.HTML at 0x105baff50>" | |
|
865 | 934 | ] |
|
866 | 935 | } |
|
867 | 936 | ], |
|
868 |
"prompt_number": |
|
|
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": |
|
|
1003 | "prompt_number": 9, | |
|
932 | 1004 | "text": [ |
|
933 |
" |
|
|
1005 | "<IPython.core.display.HTML at 0x105baff10>" | |
|
934 | 1006 | ] |
|
935 | 1007 | } |
|
936 | 1008 | ], |
|
937 |
"prompt_number": |
|
|
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 |
|
|
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}} \\\\ |
|
|
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": |
|
|
1081 | "prompt_number": 11, | |
|
1005 | 1082 | "text": [ |
|
1006 |
"<IPython.core.display.Latex |
|
|
1083 | "<IPython.core.display.Latex at 0x105bafc10>" | |
|
1007 | 1084 | ] |
|
1008 | 1085 | } |
|
1009 | 1086 | ], |
|
1010 |
"prompt_number": |
|
|
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": |
|
|
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": |
|
|
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": |
|
|
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": |
|
|
56 | "prompt_number": 2, | |
|
46 | 57 | "text": [ |
|
47 | 58 | "'This is the new IPython notebook'" |
|
48 | 59 | ] |
|
49 | 60 | } |
|
50 | 61 | ], |
|
51 |
"prompt_number": |
|
|
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 |
|
|
78 |
"01_notebook_introduction.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": |
|
|
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": |
|
|
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 |
|
|
239 | "", | |
|
240 | "* firt `tab` press, you get a classical tooltip", | |
|
241 |
"* second t |
|
|
242 |
"* third tab |
|
|
243 |
"* forth t |
|
|
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\": 5 |
|
|
343 | " \"ip\": \"127.0.0.1\", ", | |
|
344 |
" \"hb_port\": 5 |
|
|
345 |
" \"key\": \" |
|
|
346 |
" \"shell_port\": 5 |
|
|
347 |
" \"iopub_port\": 5 |
|
|
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- |
|
|
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": |
|
|
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": |
|
|
547 | "prompt_number": 8, | |
|
431 | 548 | "text": [ |
|
432 |
"[<matplotlib.lines.Line2D at 0x11 |
|
|
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": "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\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": |
|
|
557 | "prompt_number": 8 | |
|
441 | 558 | }, |
|
442 | 559 | { |
|
443 |
"cell_type": " |
|
|
560 | "cell_type": "heading", | |
|
561 | "level": 2, | |
|
562 | "metadata": {}, | |
|
444 | 563 | "source": [ |
|
445 |
" |
|
|
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": " |
|
|
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 |
" |
|
|
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 |
" |
|
|
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 |
" |
|
|
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": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEICAYAAABRSj9aAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd4FNXXx79JSIA0QiqptEBCD70oUpQqoBQpCgICAoKK\nvqggImChVxEFAQtIL9KLUiJpJJQQSiAFQnpPNm2TbfN9/xjMjxJI25LAfJ5nnt3Nztx7drJ77r3n\nnmJEkpCQkJCQeG4xNrQAEhISEhK6RVL0EhISEs85kqKXkJCQeM6RFL2EhITEc46k6CUkJCSecyRF\nLyEhIfGcIyl6iReK+/fvw9jYGIIglPh+REQEfHx8YG1tjR9//FFvcsXFxcHKygqSt7OELpAUvYTO\nadCgAczNzWFlZQVbW1sMGjQICQkJhharRJYvX45XX30Vubm5mDlzps76adCgAc6dO1f82sPDA3l5\neTAyMtJZnxIvLpKil9A5RkZGOHbsGPLy8pCcnAwnJyd8+OGHhharRGJjY9G8eXOd92NkZCTN3iX0\nhqToJfRKzZo1MXz4cISHhxf/TaFQYPbs2ahfvz7q1auH6dOno6ioCACQkZGBQYMGoW7durCzs8Mr\nr7xSfN2yZcvg5uYGa2treHt7F8+QSWLp0qXw9PSEvb09Ro0ahezs7FJl6927N3x9fTFz5kxYW1sj\nKioKPXv2xNatW4vP+f3339G9e/fi18bGxti0aROaNm2KunXrPrEK2Lx5M5o3bw5ra2u0aNECoaGh\nGDduHOLi4jB48GBYWVlh5cqVT5iUkpKSMGTIENjZ2aFJkybYsmVLcZsLFy7EyJEjMX78eFhbW6Nl\ny5a4cuVKqfdF4gWGEhI6pkGDBjxz5gxJsqCggO+++y7Hjx9f/P6sWbP4xhtvMDs7m3l5eRw8eDDn\nzp1LkpwzZw6nTZtGtVpNtVpNf39/kuSdO3fo7u7O5ORkkmRsbCzv3r1Lkly7di27du3KxMREKpVK\nTp06lWPGjCFJxsTE0MjIiBqNpkRZe/bsya1btz719W+//caXX365+LWRkREHDx7MnJwcxsXF0cHB\ngadOnSJJ7t27l66urrx8+TJJMjo6mrGxscX35OzZs8XtPC5X9+7dOWPGDCoUCl67do0ODg48d+4c\nSXLBggWsVasWT548SUEQOHfuXHbp0qXU+yLx4iLN6CV0Dkm8+eabqFu3LmxsbHD27FnMnj27+L3N\nmzdj9erVsLGxgaWlJebOnYvdu3cDAMzMzJCcnIz79+/DxMQEL730EgDAxMQECoUCt27dgkqlgoeH\nBxo1agQA2LRpE7777ju4uLjA1NQUCxYswP79+5+6AVuSvOVhzpw5sLa2hru7O3r16oWwsDAAwJYt\nW/DFF1+gffv2AIDGjRvDw8Oj1Pbi4+MRGBiIZcuWwczMDG3atMHkyZOxbdu24nO6d++O/v37w8jI\nCGPHji3u81n3ReLFRVL0EjrHyMgIhw8fRnZ2NhQKBdavX48ePXogLS0N6enpkMvlaN++PerWrYu6\ndetiwIAByMjIAAB89tln8PT0RN++fdG4cWMsW7YMAODp6Ym1a9di4cKFcHJywpgxY5CcnAxA9KwZ\nOnRocXvNmzdHjRo1kJqaWmZ5y0O9evWKn5ubmyM/Px8AkJCQgMaNG5erLUA029ja2sLCwqL4bx4e\nHkhMTCx+7eTk9EifRUVFEAThmfdF4sVFUvQSesXIyAhDhw6FiYkJ/P39YW9vj9q1ayM8PBzZ2dnI\nzs6GTCZDbm4uAMDS0hIrV67E3bt3ceTIEaxevbrY5jxmzBj4+fkhNjYWRkZG+OKLLwCISvHUqVPF\n7WVnZ0Mul8PZ2bnc8lpYWKCgoKD4dUpKSpmvdXd3R3R09FPvw9NwcXFBVlZW8YABiO6Xbm5uZer3\nafdF4sVFUvQSeuE/cwjJ4tl9s2bNYGxsjClTpmDWrFlIT08HACQmJuLvv/8GABw/fhzR0dEgCWtr\na5iYmMDExASRkZE4d+4cFAoFatasiVq1asHExAQAMG3aNHz55ZeIi4sDAKSnp+PIkSPllhUAfHx8\ncPDgQRQWFiI6OvqRjdmnXfvf9ZMnT8bKlStx9epVkER0dHSxTE5OTrh7926Jbbi7u6Nbt26YO3cu\nFAoFrl+/jl9//RVjx44tVfZn3ReJFxdJ0Uvohf88TOrUqYP58+dj27ZtaNasGQDRS8TT0xNdunRB\nnTp10KdPH0RGRgIAoqKi0KdPH1hZWaFbt26YMWMGevToAYVCgblz58LBwQHOzs7IyMjAkiVLAAAf\nf/wxhgwZgr59+8La2hpdu3ZFSEhIsSylmWYefv+TTz6BmZkZnJycMHHiRIwdO/aR9x9vy8jIqPhv\nI0aMwLx58/D222/D2toaw4YNK/b+mTt3Lr777jvUrVsXq1evfqKtXbt24f79+3BxccGwYcPwzTff\noHfv3k/08bgcz7ovEi8uRizvzpOEhISERLWi0jP6U6dOwdvbG02aNCneKHuYjIwM9O/fHz4+PmjZ\nsiV+//33ynYpISEhIVEOKjWj12g08PLywpkzZ+Dq6oqOHTti165dxUtyQAzuUCgUWLJkCTIyMuDl\n5YXU1FTUqFFDKx9AQkJCQuLZVGpGHxISAk9PTzRo0ACmpqYYPXo0Dh8+/Mg5zs7OxR4Uubm5sLOz\nk5S8hISEhB6plMZNTEyEu7t78Ws3NzcEBwc/cs6UKVPQu3dvuLi4IC8vD3v37q1MlxISEhIS5aRS\nir4sgSWLFy+Gj48PfH19cffuXfTp0wdhYWGwsrIqd1sSEhISEk9SmgW+UqYbV1dXxMfHF7+Oj49/\nIqgjMDAQb731FgAxBLxhw4aIiIh4qrDSQSxYsMDgMlSVQ7oX0r2Q7sWzj7JQKUXfoUMHREVF4f79\n+1AqldizZw+GDBnyyDne3t44c+YMACA1NRURERFS7g0JCQkJPVIp002NGjXw448/ol+/ftBoNJg0\naRKaNWuGTZs2AQCmTp2KL7/8EhMnTkSbNm0gCAKWL18OW1tbrQgvISEhIVE6VSZg6uFCDGo1EBsL\nREQAMTFAixZA165AzZoGFlJP+Pr6omfPnoYWo0og3Yv/Id2L/yHdi/9RliI2VUrRv/EGERkpKncn\nJ6BpU8DDA7h+HbhzB3jpJaBPH+C114BWrQBp/1ZCQuJFp9op+v37iaZNAU9PoHbtR9/PygLOnwf+\n+Qc4cwbIywP69wcWLAAkk7+EhMSLSrVT9OURJSYG2LkTWLMG+Ogj4PPPgVq1dCighISERBWkLLqz\n2mavbNgQmDcPuHoVuHZNNOWcOmVoqSQkJCSqHtV2Rv84J04AH34ItG0rzvIfCtiVkJCQeG55rmf0\njzNwIHDzpuih07YtsHYtUDWGMAkJCQnD8tzM6B8mOhoYNQrw8QE2bgRMTbXSrISEhESV47nejC2N\n/Hxg9GhApQL27QOsrbXWtISEhESV4YUy3TyOpSVw6JDoetm9O5CYaGiJJCQkJAzDc6voAaBGDeCn\nn4B33hEja2/cMLREEhISEvrnuTXdPM6ePaJXzo4dYnSthISExPPAC226eZxRo4ADB4Bx44Dt2w0t\njYSEhIT+eKFq+nXvDvj6Aq++KqZYGDHC0BJJSEhI6J4XStEDgLe3GFzVty9gZQX062doiSQkJCR0\nywtjunmYNm2Av/4SzTgBAYaWRkJCQkK3vJCKHgC6dRNt9cOGiblyJCQkJJ5XXlhFD4hmmw0bxPQJ\nkZGGlkZCQkJCN7xwNvrHGTECyM0VbfZ+flIyNAkJieePF17RA8B77wEymehff+EC4OhoaIkkJCQk\ntMcLEzBVFubNA86dEytZSUVMJCQkqgMvdFKziiAIYiK0WrWAP/6QatJKSEhUfaTI2HJibAz8/jtw\n6xawYoWhpZGQkJDQDpKN/jHMzYHDh4HOncXgqiFDDC2RhISEROWQTDdPITgYGDRItNm3amVoaSQk\nJCRKRjLdVILOncVyhEOGAOnphpZGQkJCouJIM/pS+PJLwN8fOHMGMDMztDQSEhISjyJ53WgBQRDT\nJNjZAVu2SJ44EhISVQvJdKMFjI2BP/8ELl8GfvzR0NJISEhIlJ9KK/pTp07B29sbTZo0wbJly0o8\nx9fXF23btkXLli3Rs2fPynapdywtgYMHgW+/BQIDDS2NhISERPmolOlGo9HAy8sLZ86cgaurKzp2\n7Ihdu3ahWbNmxefIZDK89NJLOH36NNzc3JCRkQF7e/snBamippuHOXYMmD5dnN07ORlaGgkJCQk9\nmG5CQkLg6emJBg0awNTUFKNHj8bhw4cfOWfnzp0YPnw43NzcAKBEJV9dGDQIGD8eGDMGUKsNLY2E\nhIRE2aiUok9MTIT7Q+ke3dzckJiY+Mg5UVFRyMrKQq9evdChQwdsr+YFWxctAmrUAL76ytCSSEhI\nSJSNSkXGGpXBBUWlUuHq1as4e/Ys5HI5unbtii5duqBJkyZPnLtw4cLi5z179qyS9nwTE2DnTqB9\ne6BLF+DNNw0tkYSExIuEr68vfH19y3VNpRS9q6sr4uPji1/Hx8cXm2j+w93dHfb29qhduzZq166N\nV155BWFhYaUq+qqMvT2wdy8weDDQogVQwkeRkJCQ0AmPT4IXLVpU6jWVMt106NABUVFRuH//PpRK\nJfbs2YMhjyWHeeONN+Dv7w+NRgO5XI7g4GA0b968Mt1WCTp3Fs04w4YBBQWGlkZCQkLi6VRqRl+j\nRg38+OOP6NevHzQaDSZNmoRmzZph06ZNAICpU6fC29sb/fv3R+vWrWFsbIwpU6Y8F4oeAKZNA4KC\nxMdt254MplKoFbiUdAlJeUlIK0hDakEq0grSio98ZT7qWdaDi5ULXK1c4WLlUvzc09YTdWvXNcwH\nk5CQeK6QImMriVwOdO0qul1OmwakF6TjRNQJHI08ijP3zqCJXRM0sGkARwtHOJo7wsnSSXxu4Qhz\nU3Ok5qciKS8JiXmJSMpLKn4elRkFL3sv9GnUB681eg0vub+EmjVqGvrjSkhIVDGkFAh64tTlCAz/\n6iA8Bx5FrDwcrzV6DYObDsaAJgPgaFGxuoRKjRJB8UE4E3MG/9z9B+Hp4ejm3g2vNXoNQ72HorFt\nYy1/CgkJieqIpOh1zN2su5h/fj7OxZyDj+lbuL5/MK4d6gFHO+3PvGVFMpyPOY+/7/2NA+EH4FPP\nB9M7TMdgr8GoYSyVFZCQeFGRFL2OSMlPwXcXvsPum7sxq8sszOoyC5Zmlpg+HcjIED1ydJn8rEhd\nhAPhB7DxykbEZMdgcrvJmNxuMtys3Uq/WEJC4rlCUvRaJleRixWBK/DTpZ8wvs14fNn9S9ib/y/S\nt6gI6NYNeO89YOZM/ch0I/UGNl3ZhJ03dqJHgx74rNtn6ObeTT+dS0hIGBxJ0WsJkth8dTPmn5+P\nAZ4DsKjnItS3qV/iudHRorI/fhzo2FF/MuYr8/Hn9T+xxH8JWju1xne9vkObem30J4CEhIRBkBS9\nFpCr5Hj/6Pu4lX4L297chlZOpdcVPHAA+Owz4MoVoK6ePSQVagU2XdmExX6L0athLyzquQhN7Zrq\nVwgJCQm9IeWjryT3su+h29ZuMDYyRsB7AWVS8gAwfLiYAG3iREDfY1fNGjXxUeePEP1RNFo5tkK3\nrd0w5egUxOfEl36xhITEc4mk6J/CyaiT6Lq1Kya3m4w/3vwD5qbm5bp+xQogKUmsO2sILM0s8WX3\nLxH5YSTsze3hs8kHC30XokhdZBiBJCQkDIZkunkMgQK+v/A9Nl7ZiL0j9uIlj5cq3FZMjJgq4cgR\nMQGaIYnPices07NwPfU6fhr4E/o07mNYgSQkJLSCZKMvJzlFORj31zhkFWZh31v74GzlXOk2Dx0C\nPv4YCA0FbG21IGQlORZ5DB+e/BBd3Lpgdd/VWvmMEhIShkOy0ZeDnKIc9N7WG27Wbjg3/pzWFOCb\nbwIjRogFSwRBK01WikFNB+HWB7fQwKYBWm9sjQ0hG6ARNIYWS0JCQodIM3oABcoC9PuzH9o6t8UP\n/X8oU5798qBSAa+8AgwdCnz+uVabrhS30m5h+vHpKFQX4vc3fkcLxxaGFklCQqKcSKabMlCkLsKQ\nXUPgau2KrUO2wthIN4ucuDjRr/7AAeDll3XSRYX4L0Zg3rl5mPvyXMzqMktn90BCQkL7SIq+FFQa\nFd7a9xZMTUyxa/guneeMOX5czHB59Srg4KDTrsrNvex7GH9oPEyMTPD7m7+jgU2D8jdCAtnZ4qiW\nnw8YG5d8ODgAzs7icwkJiUohKfpnoBE0ePfQu5AVyfDXqL9gZmKml37nzAGuXQNOnKh6ek4jaLA6\naDWWBy7H0leX4r2275VsxsrPB/z9xRErLg6IjRUf4+LEWoseHoC1tbgp8fih0QBpaUBWFuDmBjRo\nANSvLx4NGwLt2gHNm1e9myMhUUWRFP1TIIlpx6chIiMCJ985idqmtfXSLwCo1UCvXsCAAcCXX+qt\n23JxI/UGxv01Du513LF58GbUM6kjVlg5fx44dw4ICwM6dBB9Rxs0EBX7f0edOmXrpKjof4NEbCxw\n/z5w7x5w+bI4EHTqJPqkdu0qPuo7xFhCopogKfoSIInP/vkMfnF+ODPuDKxqWum8z8dJTBT15O7d\nQI8eeu++TChzs3Hsm7FwPPQPuiSboEZrH6B3b3GU6tYNMC9fAFm5SE8HLl4UB5egIFH5e3gAr78u\nujF17iyuHCQkJCRFXxLrLq7D1tCt8J3gC9vahnNsP30amDRJ1GH16hlMjCe5cQPYtAnYuRPo3h03\nX++EtzJ/wqAOb+P73t/rzcT1CGq1aCY6elQMTEhLA4YMAd54A3j1VaC2/lZkEhJVDUnRP0ZwQjAG\n7xqM4MnBaFi3oU77KgsLFwK+vsCZM0ANQ9YOKSwE9u8HNm4UTShTpoijkLs7ACBDnoEJhyYgXZ6O\n3cN3G/7e3bsHHD4sHqGhQN++wIQJQL9+Br6REhL6R1L0D5FVmIV2m9phbf+1eNP7TZ31Ux40GtEa\n0aYNsGyZAQRQqYCffwa++07cBJ02TczGVoKyJIk1F9dgqf9S/PT6TxjRfIQBBC6BjAzg4EHg11+B\n+HgxMu299wBPT0NLJiGhFyRF/wCSeGP3G/C09cTqfqt10kdFycgA2rcH1q0Tzc96gRTNIJ99BjRq\nJGZga9myTJdeSryE0QdGo2/jvljdd7VeN7JL5dYtUeH/+Sfg7S0q/BEjAAsLQ0smIaEzJEX/gJWB\nK7E/fD8uTLxgGBtzKYSEiBPpwEA9TERDQ4H/+z/Rzr1yJdC/f7mbyCnKwdRjU3E74zYOjDwAT9sq\nNntWKoFjx4CtW4HgYNEUNXMm4OpqaMkkJLSOlOsGQGB8IFYErsCeEXuqpJIHRE/ChQvFPPZyuY46\nSUoSZ7gDBwKjRonO/BVQ8gBQp1Yd7Bq+C1PbT0W3rd1w6M4hLQtbSczMgGHDxAi14GDxprZqBYwb\nJ27qSki8YDzXM/oMeQbabWqHDQM3YLDXYK22rW1IUQ/VqAH89puWi4vv3Cmm0Jw0SXTet7bWWtMh\niSEYuW8kRrYYicWvLtZ5dHGFyc4GtmwBfvhBXDZ9+qm4QVKGwKwslQp35HLckcsRWViIDJUKMrUa\nOQ8fGg3yNRqYGhmhlrExahkbo+aDx1rGxrA0MYGrmRnca9WCW82acKtZE+4PHm1r1NB6fiWJF4cX\n2nQjUMCgnYPQwrEFVvRZobV2dUlBgegi/vHHorWh0uTniyaLoCDRab9tWy00+iQZ8gyMPTgWhepC\n7B6+u2qnPlapgH37gFWrxKCtr74CRo4ETExAEnfkcpyXyRCWn4/bD5R7kSDA29wczczN0dTcHA6m\nprCpUQN1Hhw2NWqgjokJLE1MoCZRJAgoEgQoHnqep1YjQaFAgkKB+AfHf88BoLWFBdpYWoqHhQVa\nWligthQrIFEGXmhFv8x/GY5EHoHveF+YmphqrV1dExEBdO8OnDwpbtJWmKtXgdGjxcbWrQMsLbUm\nY0loBA2+u/Adfrn6C3YO24keDapoJNh/kMDp04hbuxZnXVxwdsQInLOxgZmxMXrb2KCDlRW8zc3h\nbW4OZzMznc6405VKXC8owLX8fIQ9OCILC9GgVi10srJCTxsb9LCxQcNataSZv8QTvLCK/lLiJQze\nNRiXplyCex13rbSpT/bvB2bPBi5dqkDyM0EQ6xcuXSqaKUaP1omMT+N09GmMPzQe/9f1/zC72+wq\nqZiu5efjj5QUHMvMRI5ajd4KBV49cgS9L11Co2nTYDRmjMH98ZWCgNtyOYJyc/GvTAZfmQymRkbo\nYWODng+ORpLil8ALqujVghodN3fE7K6z8U7rd7QgmWGYO1fcRzx9GjAt64IkLU30I5fJRLt8Q8ME\nNsXlxGH43uFoaNMQW4dsNUiaicdJUSqxIzUV21JSkKPR4F0nJ4xwcEBLCwsYGxmJM/zz54FFi8SN\n6wULgLffrjLJ1UgiqrAQvjIZ/pXJcF4mg7mJCYbY2WGwnR1erlMHplVEVgn9UibdyUpy8uRJenl5\n0dPTk0uXLn3qeSEhITQxMeGBAwdKfF8LopAkVwWu4mvbXqMgCFppz1Co1WT//uTHH5fxgps3SQ8P\ncu5cUqnUqWxloVBVyEmHJ7H5hua8k37HIDIoNBruTU3lwLAw2vj5ccLt2zyfnU1Nad+Nc+fILl3I\n1q3JY8fIKvhdEgSBoXl5XBQTw/aXL7Ounx/H3LrFXampzFapDC2ehB4pi+6s1Ixeo9HAy8sLZ86c\ngaurKzp27Ihdu3ahWbNmT5zXp08fmJubY+LEiRg+fHjFRqVSiMuJQ7tN7RA0KQhN7JpUqq2qQHa2\n6Hr51VfiRP2p+PmJgUGrVgFjx+pNvrKw+YpY1OSXwb/oLSK5UKPB1pQULI+LQ+PatTGxXj0Mc3CA\nZXk2N0mxqvuXXwJ2dqIprFs33QldSRIVChzLzMSRjAz45eTgFRsbvO3oiCH29uX73I+hzlFDEa+A\nKkMFjVwDQS5AU/jgUa6BUCjWxzSuZfzoUVt8NLUzhVk9M5g5mcG4prTi0AU6N90EBQVh0aJFOHXq\nFABg6dKlAIA5c+Y8ct7atWthZmaGS5cuYdCgQTpR9HwQ/drJtRO+euWrCrdT1bh1C+jZU8xf37Fj\nCSccPCimLtixA+jTR9/ilYmQxBCM2DsC77Z5F4t6LoKJsW68SfI1GmxKSsKq+Hh0srbGPA8PdKys\nK6lGA2zfLppyfHyA778vcxSxochTq3E4MxM7U1MRkJODgXZ2eNvREf1sbWH2mHmHJIpiipAfmo+C\nWwVQxCmgSFCgKL4IingFQKCme02YOpjCxMIEJuYmohI3N4ZJbfE5jAChSHjyKBSgylBBmaKEMlUJ\nEysTUenXM0NN55qo7Vkbtb1qw9zLHOZNzWFiKXkZVYSy6M5K7TglJibC3f1/m51ubm4IDg5+4pzD\nhw/j3LlzuHTpks42jw7dOYTorGjse2ufTto3FC1aAL/8IgZTXboEODk99OaGDcDixaIhX0euk9qg\nk2snXH7/MkbvH43Xd76OHcN2wM7cTmvt56jV2JCYiHUJCehpY4OTrVujjba8jExMxIRpo0eLeYFe\nfRUYPBj49luxSlYVxKpGDYx1csJYJyekK5XYn56O5fHxmHjnDibm2uDNREs43VYjPzQf+dfyYWJh\nAst2lrBoZQGrjlawH2aPmu41Ucu9FkzqmGjlN0uBUGepoUxRQpGsgDJJicLoQmQczIA8Qo7C6EKY\n2pqitldtWDSzgGU7S1h1sIJFcwsY1ZA2nCtLpRR9Wb4As2bNwtKlS4tHnWeNPAsXLix+3rNnT/Ts\n2bNMcuQqcvHRqY+wY9gO1KxRs0zXVCeGDhUzF4wYAZw9C5iZEpg3TyxA6+9vsE3X8uBo4Yi/x/2N\nOWfmoOPmjjg46iB86vlUqk01ifUJCVgcF4cBtrbw9fFBM13ltalVC/jkE2DiRHFwbdkSmDVLTCeh\ny9z8lcQm1wjDLtRAr9O1kf63HAUmMgR6ZSPJ2xgtJzvg9Z5NUM9V97mAjIyNYGpvClN7U1i0fLI/\nCoQiTgF5hBwFtwogOydD/PJ4KBIUsGhjAasOVrDqYAXrTtao3bT2C+1t5OvrC19f33JdUynTzcWL\nF7Fw4cJi082SJUtgbGyML774ovicRo0aFSv3jIwMmJubY/PmzRgyZMijglTCdPPxqY+Rr8zH1iFb\nK/hJqj6CIKZfb+CqwvrCyaLD/bFjgL29oUUrN3tu7sHMkzOxpt8ajG1dsT0F/5wcfBAZCSczM6xv\n0gTe+la2MTFiXcjAQNGcM3ZslfDQoUDkXsxF1oksZJ3OgjxSDpseNrDtZwvbfrao7VkbJPFvTg62\nJifjaGYm+tvaYrKzM3rb2IgeSFUIdY648si9lIu8y3nIDcoFlYRNTxvY9LRBnR51YO5t/kIrfp3b\n6NVqNby8vHD27Fm4uLigU6dOJW7G/sfEiRMxePBgDBs2rELClsTlpMsYtHMQbn1wS6vmgKpIToYK\nIQ1HomlDFeoH7anWWRlvpt3E0D1DMbDJQKzss7LMQW1pSiU+v3cPZ7KzsbpxY7zl4GDYH3lgoJhO\nQaUSN8PLuArVNvIoOVK3pyJ1eyqMzY1hP8Qetv1sYd3NGsZmTx+AslUq7ExLw5bkZOSo1Zju4oL3\nnJ1hV2afXv1TdL8IMl9Z8aEp1MCmpw3q9q4L2wG2qOVRq9xtkoRGkwOlMgVKZSqUylSoVGnQaAog\nCAoIQtGDQ3xOKmFkZApj45owNq4JI6Oaxc+Njc1hamoPMzMHmJraw9RUfDQx0c3vVS9+9CdPnsSs\nWbOg0WgwadIkzJ07F5s2bQIATJ069ZFzta3o1YIanbd0xqzOszCuzbiKf4jqgCAA48ejIC4TXrcP\n4Y9dZnj1VUMLVTlkRTKMPTgWuYpc7H1rL+pZPr3UlobEpqQkLLx/H+/Wq4cF9evDqqoUGSGBPXvE\nGX6HDmLaZz2Y01SZKqTtSUPq9lQUxRTBcYwjnN51gqWPZYUGv5DcXGxITMSRzEwMs7fHDFdXtLMy\nfAxEaRS4jbueAAAgAElEQVTdL4LsXxmy/8lG1uksmNUzg+0AW9gNtIP1S9YwNhUHOlKNwsJ7kMvv\nPHIoFAlQqdJgZGQGMzMnmJnVg5mZE0xNHWFiYglj41oPjprFz42MTEGqHih+BUhF8UCg0cihUmU8\ndqQDAMzM6qFWrQaoVashatVqgNq1Gxa/NjNzhpFR+VeFz33A1NqLa3E08ijOjDvzfC/dSGDGDNEF\n5+RJ+IaYY+RI4N9/gacsnqoNAgV88+832Bq6FXtH7EVX965PnHO7oADj7tyBhbExNjRtipZVdSVT\nWCjO6tesAaZPFxW/DlJP5AbnIn5VPLJOZ8FugB2c3nWCbV9brW1apiuV2JKcjI1JSXCtWRMzXV0x\nwsHhCY+dqgg1RN7lPGScTEFGWDCKzK+gRo9IoEE0VDXjULOmC8zNvR86vFCzpgfMzJxgYqJb859G\nI4dSmYSiovsoLIxBUdF9FBXFFB8aTQHMzZvBwqLlg6MFLCxawszM5Zn67blW9Cn5KWj5U0sETgpE\nU7umOpSsCjBnjrgLe/ZscebJ334TC0MFB1dLM/0THIs8hvcOv4dFPRdhWodpxd+HLcnJ+DImBosb\nNsRkZ+fqMaAnJABffCGOxEuXAu+8U+l0pBSIzOOZiF8RD0WcAm6fuKHehHqoUUd3qxo1iWOZmfgx\nMRHhBQWY4eqKqS4usK+CZh21WgaZzA+5uYHIyQlEfv4V1KrVEJamXWAc3RKFf7sh9686qOPjAPth\n9rB/0x41nauW44ZaLUNBQTgKCm4+OG6hoOAmSCUsLdvC2roTrKw6wsqqE2rWdCv+LTzXin7GiRmo\naVKzylWM0jpLlog+8v/+KwbuPMTcuWKs1NmzQM2q9Z2tEFGZURi+dzjaOrfF4n7r8fG9eEQXFmJ3\n8+b632zVBgEBYipSMzMxsVyJgRDPRlAISP0zFfEr42FsbgyPzzzgMMJB7y6HNwsKsCY+HgczMjDa\n0RGz3NzgZcD/CUkUFkYiM/MYMjOPIy/vMqytO6NOnZdgbd0N1tadUaNGnUeu0RRokHU6CxkHM5B5\nPBPmzc3hMMwBDm85VMiury+UyjTk5V1BXt4l5OVdQm5uCIyMjGBl1QnW1p3QoMH851PRR2dFo8uW\nLrgz8w7szZ+D6ezT2LBBNAP4+ZXosy0IYobd2rWBbdu0nMPeQBQoC/Dmqa/xb+2X8I5zffzcvC1q\nVQOTwVMRBOCPP0R32AEDRNfMR4IhnnJZkYDEDYmIXxUPyzaWcP/MHTa9bAy+oklVKvFTYiI2JiWh\nk7U1PnFzQy8b/chFqiGT/ftAuR+DRiOHnd0g2NkNQt26vcu12SkoBcjOyZB+IB0Zf2XA3NscjmMc\n4fCWA8wcq2aBov8gCYUiHnl5IcjNvQRPz+XPp6Ifc2AMWji0eK4iYJ9g2zZROVy48MyNPblcdPQY\nPBiYP19/4ukCNYnvYmOxKSkJbxhF4q+AL/DbG79hYJOBhhat8uTkiEFW/yn9GTNKzFZHgUjbnYaY\neTGwaG2Bht82hGVr3aaYrgiFGg3+TE3FmoQE1DI2xuceHhjh4IAaOlD4+fk3kJr6B1JTd6BmTTfY\n278BO7tBsLBoo5UBRlAKyP47G6m7UpF1PAvWXazhOMYR9kPtUcO6imz4PwO9JDXTFmUV5UrSFTqv\ndGa+Il/HEhmQY8fIevXI8PAynZ6cTNavT+7cqVuxdEmaQsFXrl7la9euMamoiCQZEBdA11WuXHB+\nATWCxsASaonbt8m+fcnmzckzZx55K+tcFi+3v8zLHS8z2zfbQAKWD40g8GhGBl++epUNg4L4Y0IC\nC9TqSrerUKQxPn4tL11qy8BAN969O5cFBbpPjqfOVzN1dyqvD7nOC9YXeHPkTWYcy6CgqjqJ7XJz\nc3n8+HHOnj2b7du3131SM21S1hl9vz/74U2vNzG943Q9SGUAwsPFKfqRI0CXLmW+7MYNMTr/4EHg\n5Zd1J54uuFVQgME3buBtJyd806DBI0E7KfkpGLV/FCxMLbB96PbnI1biv4Rpn3wCtG2LgqlLcO8H\nBQrCC9BocSM4jHSAkXH1s8MF5uRgRXw8AnNyMMPVFTNcXcvlj08SMtk5JCauh0zmCzu7IahX713Y\n2PSCkZH+8+CoslRI35uOlD9SUHS/CI5vO6Le+Hp6X2HJ5XL4+/vj/PnzOH/+PG7evImOHTuiV69e\n6NWrF1555ZXna0Z/5u4Zev7gSaXa8Gl4dUJmJtm4MfnHHxW6/PRp0tGRvHFDy3LpkJOZmXTw9+f2\nlJSnnqNUK/l/p/+P9dfU58X4i3qUTreo0vIZ2eVP+hsdYlzfzdRkPx+r1NsFBZx05w7r+vnxo8hI\nxhUWPvN8jaaIycm/MySkNYODmzMx8ReqVLl6krZsFNwp4L159xjoEchLPpcYtzqOijSFzvpLT0/n\nr7/+ysGDB9PKyoovv/wy58+fz3PnzrHwsftZFt1ZbRS9IAjs8EsH7r6xW08S6RmVinztNfLTTyvV\nzM6dpJsbef++luTSIesTElgvIID+MlmZzj8YfpAOyx24Pnh9ta83kHEig4Eegbw94TaV1+6Rb71F\nNmhAHjhQJfPfV4TEoiLOjo5mXT8/Trx9m3cKCh55X6nM4P373zEgwJnXrvVhZuapKv9/FTQCs85m\nMXxcOP3q+PHm8JvMOJFBQV15uWNjY7lu3Tr27NmT1tbWHDZsGLdv386srKxnXvdcKfq9N/ey3aZ2\nz4+t9nFmzRJtt1ooGrFuHdm0KZmWpgW5dIBKEDgjMpLNg4N5Vy4v17XRmdH02ejDkftGMreoas36\nyoIiTcHwd8IZ1DCImX9nPvrm2bNkixbigF/G/ZnqQKZSyUUxMXTw9+eImzd5KeM2IyI+oJ+fDW/f\nnsi8vOuGFrFCqGQqJv6cyMsdLjPQLZD3vrpH+d3yfZ9lMhk3bdrELl260M7OjhMmTODhw4cpL8fv\n4rlR9Eq1kk1+aMK/o//Wo0R65NdfySZNyFJG7vIwbx7ZoQOZW8V0oUylYt9r19gvLIyyCg5qcqWc\nU45Modd6L95IrR52KkEQmPJnCgOcAhj1aRTV+U/ZsFQqybVrSXt7cXVXxtVOdSBLnsw9Vyfz6Hkr\nLgkcz/Npd6r8DL6s5IXlMfKjSPrb+zO0dyhTd6dSU1TypFSj0fDs2bMcO3Ys69Spw2HDhvHo0aNU\nVrAy3HOj6Dde2shX/3hVj9LokcBA0sFB6zM4QSCnTBEnhwrdmRLLRYpCwVYhIZwRGUmVFn7gf1z7\ng/bL7fl76O9akE53FCUUMWxAGENahzAnJKdsF6Wmku+9J3pf/forqam+K1mVSsZ79+bTz8+WkZEz\nmCtP4OakJHpevMiXrl7liYyM50bha4o0TN2VytDeofR38Gf07GgWRIgmq/j4eC5YsIANGjRg69at\nuXbtWqanp1e6z+dC0RcoC+iyyoWXEi/pWSI9EB9PuriQx4/rpHmVinzzTXLUKMPrifiiInoFB3NR\nTIxWf9Q3Um/Q+0dvjv9rPPMUeVprV1tkHMtggFMAYxbGUKOswD8hOJjs3Jns1Im8WL02otXqfMbG\nLqW/vz1v357AwsKYR95XCQJ3pqSwZUgI2166xH1paaXX861GFEQWMPqzaG6pu4X9HfvTxsKGH0z7\ngFeuXNHqb+C5UPSLLyzmW3vf0rM0ekAuJ9u3J59RUF0bFBaSPXqQM2cabo/vnlzORkFBXB4bq5P2\n8xX5nHBoAr3We/Fa8jWd9FFeNAoNoz6NYqBHILMvVNInXqMRPbGcncnx48XAiSqMIAhMTd3FwEA3\n3rw5gvn5z16tagSBh9PT2enyZXoHB/OP5GQqDT0zqSRqtZoHDx7kyy+/TA8PDy4ct5B+PfzEWf5n\n0ZRHlc+W/yyqnaL/6KOPuGPHDkZHR1MQBOYU5dBumR0jMiIMLZ72+eADcuRIvWhfmYz08SHnzNG/\nso8oKKB7YCB/TEjQeV/bw7bTfrk9N4RsMKgpQB4l5+X2l3njjRtUZmrRFTgnh/zsM9LOjly+vOrY\n5B4iP/8mQ0N7MSSkNWUyv3JdKwgC/8nKYs/QUDYICuLPiYksrGYKPz8/n+vWrWOjRo3YuXNn7tmz\nh6qH9qIKIgsYPTua/vb+vNbnGtMOpFVspfcQ1U7RL1++nMOHD6erqyvt7e3p3c2brUa3YlRUlKHF\n0y5//SW60ulxoy09nWzVStyk1ZcOvJGfT5eAAG5NStJPhyQjMiLYdmNbDtszjFly7W1ul5WUnSn0\nt/dnwvoE3Q02ERHkwIHiBv6RI1XCHVOlymFU1Kf097dnQsJ6CkLlvMcCZDIODAujS0AAV8XFMV8L\n0ba6RC6Xc/Xq1axXrx6HDRvGwMDAZ56vKdQw5c8UXn35KgOcA3hv/j0Wxj073uBpVDtF/zDR96Np\nM96G70x5hw4ODuzTpw//+uuvR0bHakl8vBjVVMoXQRekpZEtW5Jff637vq7k5tIpIIA7nxEIpSuK\nVEX88MSHrL+mPgPj9HOf1XI1b793mxebXmReqJ72Ck6eJL29yT59yJs39dPnYwiCwJSUPxkQ4MLb\ntydSoUjVavtXc3M54uZNOvj789v795ldxX7/hYWF/OGHH+ji4sKhQ4cyLCys3G3k38hn5MxI+tX1\n4/Uh15l5MpOCpuyDd1kUfZVNgbDx8kYcjTyK428fR1FREfbv34+ffvoJ8fHxeP/99zF58mQ4l5DR\nsTIUFACxsUB2NpCVJT7+d8hkgJUV4OYGuLv/79HGphxZIzUaMU9Bnz5iYisDkJYG9OoFjBoFfP21\nbvoIzs3FkBs3sLFpUwx1cNBNJ2Xg0J1DmHpsKqZ3mI6vXvkKNYx1k6BKkajAzaE3UbtxbXht9oKJ\npR7D9VUq4OefxeIEI0cCixY9kc5aVxQVxSIiYhJUqiw0abIBdeo8WTRGW9wuKMCy+HgczcjA+y4u\nmOXmBiczw2WZVCgU2Lp1K5YsWYK2bdti4cKFaNeuXaXa1ORrkLorFUk/J0Gdo4bLNBc4T3SGqf2z\n00hU26RmKo2KDdc2pH+s/xPnhYaG8v3336eNjQ1HjhxZKbNObq44KZozh+zShbSwIL28xOcDB5Lv\nvCNuYs6fT65aRS5cSE6aRPbrJ8a1WFuT5ubipGryZHL/fjL7Wftu335L9uxJGngZmpJCNmsmiqNt\nwvLy6Ojvz+MZGdpvvAIk5iayz7Y+7LKlC6Mzo7Xefk5wDgNdA3n/+/uGdRHMyCBnzBBdddetE/3x\ndYQgCExM/IX+/vaMjV1WaTNNeYgpLOQHERGs6+fHmZGRvF9KegVtIwgCd+zYQQ8PDw4YMIDBwcE6\n6SPnYg5vj79NPxs/ho8NpyxA9tTvV1nUeJVU9Duu72D3X7s/83yZTMbFixfTzs6O8+bNY35+2fKE\nXL4s7md17Cgq9h49RFPG2bPkYxHaZSInhwwLE39b/fuTlpbkyy+T330n9lW8lxQQIJps9LApWRaS\nk8VBbfFi7bUZWVBAl4AA7k3V7vK9smgEDdcEraH9cnv+Fvqb1hRyyo4U+jv4M/1Q5X2htcaNG6Ip\nx8uLPHxY6/b7wsI4XrvWl5cvt2d+vmHMRSSZrFDw8+ho2vr5cUIJ6RV0wcWLF9mlSxe2b9+eFy5c\n0Hl/JKnMVDJuVRwvNrnIkNYhTPw5karcRwfWsij6Kme6IYk2G9tg2WvLMKDJgFKvS0xMxGeffYaA\ngACsXLkSI0aMeCJHtVIJ7N8PrF8PJCcD48cDvXsDnTsDtbRcWKawUEwhf+qUeMhkwPvvFuGDXd3h\ntP4r4I03tNpfVmEWbqXdQnh6OG5n3EaOIgcCBWgEDTTUFD8HAFdrV3jW9YSnrSea2DWBqbw++vQ2\nxaRJYuW7ypCgUKB7aCjm1a+PyVo2qWmLG6k38PbBt+Ft742Nr2+scCZMCkTMvBik7UlDy8MtYdmq\niuWLJ8Uv3+zZgKOjWMe2kmYFkkhJ+R337n0ON7dZcHf/HMbGhi8pmK1S4cfERKxPTEQPGxvM8fBA\ney0XNE9ISMDcuXNx7tw5LF68GOPGjYOxnovhUCCyz2Yj6eckyHxlcBztCJfpLrBsZVk9SwkeizyG\n+efn4+r7V8tVVODff//FzJkz4ejoiPXr16N58+ZITgY2bQJ++UUsov3hh2KBDhM9mlBvhxPrBp/B\nnsSX8OYYc3zyCdC6dcXayinKwfGo4whKCCpW7oXqQjR3aI7mDs3RzL4ZbGvbwsTIBMZGxjAxNil+\nDgDxufGIzoouPhLzEuFi4Y70297o5vwqfpg5EF72TctdzCFDpcIroaF4z9kZs93dK/bh9ESRughz\nz87F/vD9+HXIr+jTuE+5rlfnqnF77G2oc9Rosb8FzByqcDUitRrYuhVYuBDo1w/4/nvA1bXczSgU\nyYiImAylMgne3n/A0rKCX2Adkq/RYEtyMlbFx6OZuTnmeHhUuvKVXC7HihUr8MMPP2D69OmYM2cO\nLHVQ7L28KBIVSN6SjOTNyajVoBbaBbSrXjZ6QRDYbWu3CmeoVKlUXLduHevW7chmza7QxkbgtGkG\nc0gQ2bqVbNmSGfFyfv+9GAj76qtibZGyuAin5adx85XNHPDnAFottuKgnYO4OnA1T0efZnxOfKXM\nEEWqIt5Jv8OtgftpP+F9Wsx3Y8O1DTnj+AwejzzOAmXpy+EclYrtL1/ml3fvVlgOQ/B39N/0WOPB\n94++X+bkaEXxRQxpGcKIqRHUKKqRf3dODjl3LmlrK244lSMBUmbmKQYE1OO9e/Op0VT99OAKjYa/\nJSfTOziYHS9f5oEKRtseOXKEHh4eHDVqFO9X0VSwgkpg+uH06mej//f+v/T8wZNqTcU2K/PzyS+/\nJG1tNWzW7A+2bduL9+7d07Kk5SA6WgxueWikUSjI7dvJtm3FIkOnTz95WVp+GtddXMcev/VgnSV1\nOHLfSO6+sVun2RpzcsgePQX2e/c6v/ddyh6/9aDlYksO2jmIxyOPl5g1VK5Ws0doKD+IiKiWuUpk\nhTJOOjyJ9dfU55m7Z555bn54PgM9Ahm7LLZaflaSZGwsOW4c6eRErl//zIArQVDx7t05DAx0ZXb2\nef3JqCU0gsCDaWnsePkyvYKDuSUpiUVlmFklJSVxxIgR9PT05NmzZ/UgaeWpdoq+3/Z+3Hxlc7mv\nFQQxjbeHBzlmDJmYKO5cr1q1ig4ODjx06JAOJC4FjUb0sFm5ssS3BUHcK2vUSMxHc+8eGSuL5Ycn\nPmTdpXU57uA4HrlzhIUq/XkVFBaKsvTtKw6a2YXZ/PXqr2y3qR0br2vM1YGrmV0ouhUpNRoOun6d\nb9+6Ve3zk5yIPEG31W6cfmx6iflyci7mMMApgMm/Ve3UA2Xm2jXRc6BxY3L37ieWloWFcbx69SWG\nhfXXul+8vhEEgWezstg/LIzOAQFcEhtboi++RqPhxo0baW9vz3nz5pUrTbChqXaK3nWVK4tUReW6\nLiLifyU4z59/8v3AwEB6eHjw008/rXAa0Arx889iIqpSXCkLC8mPvg2n2cjxrL3AlrOOf8bE3EQ9\nCfkkKhU5caLoYpr5IF26IAgMjAvkmP1jaLPUhlOPTuXQi0f4+vXr1T4nyX9kF2Zz4qGJbLi2Ic/d\nO1f894wTGfS392fG0arhLqpVzp4Vc1m3b19cvzY9/Qj9/R0ZG7uUwnNW++FaXh7HhofT1s+Pn0ZF\nFVe+unXrFl966SV27dqVN6pTebYHVDtFvypwVZnPVyhEM42dnejj/iwdnpGRwYEDB7Jr166Mi4vT\ngrSlcP++mE/81q1nnhacEMyhu4fScYUjZx/5lkPHZNHDg9y3z7BR7YIguqC2aPGkN2hSbhJfO/QJ\nayyx52vb+jI0OdQwQuqI45HH6brKlVOPTuXdX+/S39GfsoDnJyf8EwgCuWcPNU0bMWppfQb61qNM\nFmBoqXRKbGEhP4mKos3582w9Ywbr2tnxp59+oqaaTlqqnaIva5rZ+/fFyfKQIaKZpixoNBouXbqU\njo6OPHnyZCUkLQVBEJcY33//1FOScpM4ev9ouq1247qL65iv+F8MgK+vmJOmXz9SjyliSmTZMtEc\ndu2hhJD70tLoFhjIewW53BCygU4rnPjuX+8yVqabzJSGILswm6snreY+m308cPhA9bXJlxGFIpVX\nr7zM60daUdnUWbTfVcOZbXkIDw+nT7t29OrVi06HDvG1a9d4IiOjWpohq52iLwvHjolxR6tWVWzW\ne+HCBTo5OXHLli3lv7gs/PqruNNawhJDrVFzffB62i+355wzc57q1aJSkQsWiDUnjh7VjZhlZdcu\ncXFy6BAZnJNDe39/XnnIayOnKIfzzs6j7TJbfv7P58U2/OqKIAi8O+cug5sF0/+iP1tsaMHXd7zO\n+9lV0/OisuTmXmFgoAfv3ZsvmmrkcvHH5eREvv02GRlpaBG1ikaj4dq1a2lvb89NmzZREAQqNBpu\nS06mz6VLbBYczF8SEymv4knUHkYviv7kyZP08vKip6cnl5aQW/3PP/9k69at2apVK3br1u2pSX9K\nE1alElMVuLuT/k9mRigXERERbNiwIb/55hvtztYSEkStGPqkOeNS4iW239Ser/z2Cm+mls3f08+P\nrF9fTMOg50jvRwgOJp1aF9L6dAD/Sis5CjQhJ4GTDk+i4wpHrg1aS4W66qXQLQ1BEBj1aRQvtb1E\nZYY4UCvUCn7373e0W2bHVYGrqNJUraRalSElZSf9/e2ZlrbvyTdzc8Xwbnt7Me+HjmoJ6JPY2Fj2\n7t2b3bp1KzF1iiAIPJeVxUHXr9PR359f37vH5CqYCvpxdK7o1Wo1GzduzJiYGCqVSrZp04bhj5XE\nCwwMpOxBOt6TJ0+yc+fO5RY2KYl85RXRIqKtgtfJycls27Ytp06dSrU2Rm9BIAcNEv2UH0JWKOPM\nEzPptMKJv4f+Xu6BJTtbTFvfsqXhVtM5KhW9A0LoOiuO77777EHnesp19v+zP1tsaMHgBO3nAdEV\ngiAw6uMoXm5/mcqsJ1djkRmR7PV7L7bb1I4X46tXpafHEQQ17979gkFBDZmXV0qhlqys/3yWyfff\nJ2Ni9CKjNhEEgdu2baODgwMXL15cpt/77YICTouIoI2fH8eGhzMkp4wlIA2AzhV9YGAg+/XrV/x6\nyZIlXLJkyVPPz8rKoqura8mCPEXYs2fFwjqLFmk/F1hOTg5fe+01vvHGG5V3p9qxQ9TGD80Azt47\nS9dVrpxyZAozCirutSEIokXI3p7csEG/G7UqQeCAsDBOjYhgfr7AESPIrl3FxGhPl1fgrhu76LjC\nkZ//87leXUQrgiAIjPwwkpc7XqYq++kzdkEQuO3aNjqvdOaEQxOYkqf/FMyVRaXKZljYAIaG9qJS\nWY4cPRkZYjEDW1txhl9NAuRycnI4atQotmjRgqElrLRLI0up5Iq4ONYPCmKXK1e4MyWFiiq2aatz\nRb9v3z5Onjy5+PX27ds5c+bMp56/YsUKTpkypWRBShD2jz9Ee/w//1RGymejUCj4zjvvsFu3bsz8\nz5+wvKSkiIKGhJAUbfELzy+k80pn/nNXe8JHRIiecCNGiH7u+mBmZCT7XLtW7Eap0YhJ4OrXf3ST\ntiRS8lI4Yu8Ieq330lte+PIiaARGfBDBK52vUCUrm1kmpyiHs/+eTfvl9lwduJpKddWPGCVJuTyK\nFy82ZWTkhxWPcs3MFFetdnbkhAlV2oZ/+fJlNm7cmNOmTav0RE4tCPwrPZ29QkPpEhDAb2JiqoxZ\nR+eKfv/+/WVW9OfOnWOzZs2YlVVy1R8AXLBgQfExbdp5eniQ4c8uN6kVNBoNP//8c3p7ezO2IrbI\nt94iP/+cJJmcl8zef/Rmz997MilX+24zRUXku++K+73x8Vpv/hE2JSayWXBwiQEm/23Sbt5c+gpj\n3619rLeyHj89/WmZ0iroC0EjMGJqBK90vUJVTvlt77fTb7Pv9r5s9mMzrQ7oukAmC2RAgBMTEzdq\np8HsbDFvt52duGlbgYIbukIQBK5fv5729vbcs2eP1tu/npfHKXfu0MbPj6Nu3aJvdrZePbPOnz//\niK7UuaIPCgp6xHSzePHiEjdkw8LC2Lhx42fmjv9PWI2G/L//EwOg9OHy/jBr1qxhw4YNy5fb4sQJ\nMcJQLueZu2fovNKZX5//usJpHMqCIIglQ11cyIs6MhcH5eTQwd+fEc9I/xoeLlqr3n679PQp6QXp\nHLN/DD1/8KwSNm5BI/DO5Du8+tLVJ9K+lqsdQeBft/9ig7UNOHT3UEZmVL0Zblrafvr72zMj47j2\nG5fJRD9cZ2exiMOFCwYNAsnOzuawYcPYrl07nZcglalU/CE+nt7BwWweHMwfExKYY4AKWDpX9CqV\nio0aNWJMTAwVCkWJm7GxsbFs3Lgxg4KCShVWqRRTcXTr9r+oTH2zbt06NmzYsGwze7mcbNSI6uNH\n+fX5r7VuqimNI0fEOhM7dmi33RSFgm6BgTycXroNt6BALLrStGnpphySPBB+gA7LHbg2aK3B/NMF\nQeCdKXd4tXvllPzDyJVyfn/he9ots+PMEzOZlq8lr4FKEh+/hgEBLszNvaLbjgoLyU2bxElPt27i\nl1PPtuyQkBA2bNiQM2fOZFFR+SLsK4MgCDyfnc23bt6kjZ8fp0ZE8HI5EsdVlLQ08r339OReeeLE\nCTZt2pSNGzfm4gdVLDZu3MiNG8Ul4qRJk2hra0sfHx/6+PiwY8eOJQsCcMAA8vXXK1YARJusWbOG\njRs3ZnxptpEFC5j11iC++ser7PV7L52Yakrj+nWxzviXX2rnd6XUaPjK1aucX85kcDt2iKacn38u\nfUJ3N+su229qz2F7hund714QBEZ9EsUrXa5Qnaf9VVdafho/PPEh7ZbZ8fsL3xvMVCUIakZGfsTg\n4OYsLNRjDIBaTe7ZI9oWW7QQvQh07Bv8n6nGwcGB+/aV4CqqR5KKivjt/ftsEBTEtpcu8aeEBMp0\nME1CI08AACAASURBVMs/cUJcRM2eXQ0DpiZM0GkFtHKxatUqenp6MuFpFaGionivoQ2913jy45Mf\n69RUUxppaWT37mJAY14l61LPioriwLCwCkUIRkSQbdqI7qCleaMVqYo44/gMNlrXiFeSdDzbfIiY\nhTEMaR1SogulNonKjOJbe9+i6ypXbrmyRa/fD7W6gDduvMnQ0F5UqQwUwCYIYmrW/v3F4KuFC5/t\nqlVB5HI5x48fz1atWjE6WvulIiuKRhB4OjOTIx7M8ifcvs0A2dPLAZaVggLygw/EeKJzD1IyVTtF\nX9Wij1esWMEmTZo8qewFgcHDu9B5kTXXXVxnGOEeQ6EQnSA6dxY94SrCjpQUNr54kVmVGG3lcnLa\nNNEr5++/Sz9/z809tF9uz58v/axzU07cqjhebHqRihT9eUtcjL/I7r92Z/MNzbnn5p4S0z1rE6Uy\ng1eudGF4+FhqNFXDK4S3bpFTppA2NmLGvOvXtdJsbGws27dvz1GjRpW5lKghSFUouDw2lk0vXmSz\n4GAui41lYgVMS5cuiRUi33770drU1U7RV0WWLl3Kpk2bMumhxDOHfv2c9nNMeOjmfgNK9iSCIDr/\nNG9e/tK01/LyaO/vz7DKLgkecOqUmCdnypTSZ/cRGRFs/XNrjt4/usz5jspL4i+JDKofxMI4/fv0\nC4LAE5En2PGXjmz5U0vuu7VPJwq/qCiRISEtGB09u2rm50lPF6NtnZ3F6juHDokh7xXg/PnzrFev\nHlesWFE1P2sJCIJAP5mMkx547AwIC+Oe1FQWlmJzVanE2+bgIHq7PY6k6LXE4sWL6eXlxeTkZK77\ndzmdPzNmyBEtuanpgGXLRLt9RETZzs9UKtkoKIg7tby0zskRgyk9PETF/yzkSjknHJpAn40+jJNp\n190qdVcqA1wCWBBp2M0fQRB4NOIo229qz9Y/t+bB8INaU1JyeRSDghoyNvZJr7cqx3/Vd7p2FW0Q\n334rVqsvA4IgcM2aNXRycuI/ugyw0TH5ajW3p6Tw1WvXaOvnx+kREQzKyXni+xAXR778Mtm799O9\nECVFr0W+Xvg17cfa02u+LWMmDjW0OKWyZYs4cbp69dnnaR5Evn6iQ1e0v/8WTTmTJoneeE9DEASu\nCFhBl1UuWnPBTD+STn9Hf+Zd181KoSIIgsDDdw6z7ca29Nnow4PhBys1w8/LC2NAgAsTEzdpUUo9\ncfXq/8w6o0aR//771N18uVzOd955hz4+PoatHKdl7hcW8puYGDa9eJGNgoL41b17vF1QwCNHxDjM\nJUue7WghKXotoVArOHzPcLp+7shuVjVYWEVrSD7OgQPics/X9+nnfH//PrtfvUqVjpe/ubmi7d7N\njTx48NmeOUfuHKH9cnvuulHCOrUcZJ/Ppr+DP3OCq2aekv988Dv80oFe6724+crmchfekckC6O/v\nyNTUitVZrjJkZ5M//EB6e4u2x9WrRVPPA5KSktipUyeOHj2aBYZ2y9MRgiDwcm4uP7oVRYtRiTSr\nV8QPD6aUas+vdoo+La1q2bxJslBVyNd3vM43d73Jglde4sh27Ths2DDtJELTA2fPisr+8OEn37uQ\nnU2ngADG69Hn+Nw50evutdeeXZclLCWM9dfU59fnv67QbDcvLI/+Dv7MOltyJHZVQhAEno85z/5/\n9qfzSmcu9VtKWWHpxU4yM0/R39+BmZk6rK+gbwRBLBU3bhxZpw45YgRDf/yRHh4e2s82WwWJjhaL\nfg0eIvDA3WxOuH2bNn5+7Bkayp8SEphSQtqFaqfo/5+98w5vqnzf+N1CGaWs7gWUFlp2mQKCAl9A\nBRQEEVEZiohb1J8KKMPNXoqCgLJEFAeykT26KS2ddNE90pE2ndnn/v1xGFY60jRpUuznut7rpMnJ\ne56kyZ13PMPPz4Hl5TouLDcA5apyjt87njN+m0HVnh/JQYOoKC/n2LFjuWDBgkbzobt6Vcxt//PP\nd+/LV6nYKSCAx/V10akHKhW5ebPod//OO5U9CP6JpFTC4TuHc8ZvM+rkjy5PkzPAPYC5BxpfvdMI\nSQRn/TmLtqtt+cHpD5hRXHUsR17eb/Tzc6RMVs+c3eaMTMbDr75K++bN+autLbl0aaNJpqYPv/4q\nDso2bao845VrtfwrP5/PxcSw/ZUrHPMv0W90Qp+VtZUhIX2o0ZjeVapUWcpRu0Zx9p+zqZYVigve\nt/INlJSUcNCgQVz2r5TE5kxUlCj2+/eL6/KTIiP5gYn9jvPyxOVZZ2dxT6GqdUi5Ws5Zf87i4O2D\ndcoWqZKqGNwzmOkbGjh/hoFJLUrlwpML2XFVR04/OJ0XUy7eGVhIJPvo7+9Se4rhRowgCFyzZg1d\nXV0ZHBws5tJZuFAcHYwYIUbmmWCQYgwUCtE33stLHJTVRIVGw0P5+Xz2luj/Lzy88Qm9IAiMjZ3N\n2NjZJh0ty+QyDt85nPOPzBcDXZYsETOJ/YPc3Fx2796d33zzjYmsrDvR0eLv1bObCjjs2jWzKewd\nGio6YPyjRnUlBEHgJxc+oddmLyZKq9801lRoGDYijEn/Zz6BM/WlWFHMLcFb2GNLD/b5rg9/DphL\nP39XlpXVXI+4MaNUKjlv3jz6+vreW+NZpRLLrj3zDNmunVhP9OBBMYCjEZKeLpZFnTq1ZkeFqrgt\n+o1O6Ekxqi8kpI/hsuzVEWmFlIO3D+Ybx98Q14aTk8UMfVU4picnJ9PNzc0oGfKMxc/BpbS0U3LD\nD2YSTHMLQRCXlrp1I0ePFqtr/Zvtodvpss6FV7PuHfYIGoFRT0Yx5tkYCtrGsaRWFwRB4LmId3nk\nbGv22dyeC08uZGxeA6R2bWCkUilHjRrFyZMns7S2mI7iYnL3bnHDp2NHcu5csdaomaQPro0zZ8TZ\n7OrV9csD1yiFniTLy+Pp52fPkpJa5jEGJq8sj75bffne3+/dnVE89ZTo51sNERERdHR05Pnb8chm\nTKFKxS6BgfzGv5CuruJ3xNxQq8X0KF26iAXSb6X4v8PhuMN0WOPAU4l3HfMFQcwpH/6/cGoV5jFL\nMTSZmVsYENCZFRWJTC1K5eKzi+m8zpnDdw7njms7WKwwT8+iupCSksIePXrwvffeq7uzQ1aWuLg9\nYoQo+nPmiCP/BnQ00BWtlvzyS3F2bQjZaLRCT4qbTYGBXahSNcw6nLRCyn5b+3HJ2SV3Rf7iRVFx\napkWnjt3jo6Ojrxx44bxDdUTQRA4JSqKC2/5y9+4IaY53rXLtHZVh1JJfvcd6eYmzs7/mRnTP92f\nTmuduPf6XpJk6pepvOp7Va+c8o2B9PQNDAzsyoqKyr7jaq2aR+OPcuovU9l+ZXvOPTSXl1IvNRon\ngX9y7do1urq6cvNmA6QUycwUd/tHjhRFf/Zs8tChhqvWUwNFReQTT4hLlXWNXq+ORi30JJmY+B4j\nIh4Tq9MbkRJFCR/Y8UDlkbxGQ/bvT/6im3/yrl276Onpydxc8/T02JyRwcGhoZXKoN24IQrpDz+Y\n0LBaqKggN24Up7iPPSYGXwkCGZsXy84bO3PZN8sY0CWAiizzG7kZgrS01QwK8qJcXnPa7NyyXK4P\nWM9e3/Zit6+7cfmF5byRb74Dj39y8uRJOjg48I8//jB851lZon/+2LFk27ZiXeft28VC1A1MRIS4\n4frWW4ZdXWr0Qq/VqhgWNoKpqV8Z7brlqnI+vOthvnL0lcojoR07xBFBHUZHS5cu5bBhw+pff9bA\nhN/KY5NUhV1xcaLY791rAsPqgFwu/iD17k327SvORCKOxdDzLU++sf8NoycLMwWpqV8yKMibCoXu\nQz9BEBiSGcJ3Tr1Dl3Uu7L+tP1ddWcXUIvMM8tu5cyednJzo7+9v/IsVFoobQTNnipG4DzwgJpEJ\nDzd6sZSDB0WHoZ9+MnzfjV7oSVIuTzOav7BCreBjPz3GWX/OqiwUxcXiEDI0tE79CYLA5557jk89\n9RS1ZuLRUq7RsGdwMPfVkMcmJkZ8uSZO5a0TgiDmzXlmRDkPWfpz9bxkDv1+BF/46wWqtffP0k1a\n2qpbIq//yFOj1fBCygUuOLqAdqvt+OAPD3Jz0GaD5xLSB0EQuHz5cnp6ejJe16RMhkSpFF283nqL\n7N5dTKU8Z474Q6BDwR1d0WjEWhFdupDXjJSNWxeht7h1osmxsLBAdaYUFBxBYuJbGDw4HFZWtga5\nnkbQYMZvMwAAB58+iOaWze8++OGHQH4+sGtXnftVKpUYN24cHnzwQaxevdogttaHNxISUKTRYH/P\nnrCwsKj2vOvXgUcfBX78EZg0qQEN1AO1VI2wYWGwfL4Ttqa74o8j5bCeNxXeXdrj7wX70cqqhalN\nrBcZGeuRnb0N/ftfRMuWbgbpU61V40zyGfwa8yuOJxyHRwcPTPGZgid7PIk+jn1q/GwYGrVajQUL\nFiAmJgbHjh2Do6Njg127Wm7eBP7+Gzh1Crh0CfDxEb8Q48YBw4YBLVvWucviYuD554HSUuC33wBj\nvcyatPMOxvmNqTu1mZKYuJBRUU8aZKNJK2g5689ZfHTfo/fmFklMJG1t67WGV1BQwO7du/P7702b\nZOpoQQG7BAZWWdy7KoKCxMg8c04KqFVoGfZQGJM+uOsrX1BArt+kYLuXp7L1y49x+eflBtvoamgy\nMjYxMNCTcrnxRt1qrZoXUi5w4cmF9Njkwa6buvLdU+/yQsoFqjTGLchSXl7OSZMmceLEieabQ16p\nFN1hFi0ihwwhbWzENf4vvyQDA3VKrRwXJ+aOf+MN4xdT0kXGG43Qa7UKXr06kBkZX9frOoIg8JWj\nr/DhXQ9XHVb/5JPkV/XfE0hMTKSTkxNPnjRNHpIcpZLO/v68XF1+gWq4dElcS6zKj93UCILA2Fmx\njH4qukpfeZVGzYk7ZtN5yUPs4CTjxIni2mhjyYGVmbmFgYEeDVr6TxAEXs+5zk8vfsrB2wez/cr2\nnHJgCr8L+Y43Cw2bbkAqlXL48OGcM2cOVeZSSk4XiorEGrjvvCOWUGvXjpwwQdSJy5fvKZV49Kg4\nYNqxo2HMu6+EnhRzbov+9fovdi06s4gP7HiAJYoqiveeOycmcjdQjUs/Pz86ODgwKirKIP3pilYQ\n+GhEBJfqmcr177/FD+q/fdhNTcqnKQx9IJSa8up9rLWClq8ff50Dtg7iNz/kc9w48Xv5zDPk77+b\nr+hnZW275Sdv2vS7eWV53B+5n3MOzaHTWid2/7o73zzxJg/HHWZhhf4J4jIyMtirVy++//77ZrN/\npTf5+WJq2HffFUf8bdqQw4dTeP8DrpoTQ1dnDQMCGs6c+07oSVIi+ZlBQd2pVte9yvrGwI3ssaUH\nC8qr8M3XakV3SgNHuf7000/s2rUr8/LyDNpvTWzOyODQeqY4uJ0LOyLCgIbVA8l+CQO7BFKZU7tf\nmiAIXHJ2CXt924tZJVnMyyO//16cfbdvL4r+H3+Yj+hnZ+9kQIA7KyqMVxNAH7SCluE54Vx5ZSXH\n7hlLm69sOGDbAL5z6h3+deMvSiukOvUTGxvLzp07c82aNUa22ESUlVF+6iJn+0ZwYNsEZtj0ID09\nRe+eDRtIf3+jpmi4L4WeJOPiXmJs7PN1Wq//OfJnum9wZ5qsGn/kPXvIYcOM4mb18ccfc8SIEVQ0\nQJReZA2ulHXl11/F6D1TOEX8E5m/jH4OfiyLqtua7sorK+m12auSa2FuLrltm1ixx8ZGjL7dvJlM\nSDC01bqRk7OHAQFuZpW1tTqUGiX90/355eUvOX7veNp8ZUPfrb5888Sb3B+5nzcLb97znQwKCqKT\nkxN3m2MYtoGQSETpmD791uBBqyVjY8XQ89dfF5M4tW5NDhggZvHbulXcEDPQSOO+FXqNppzBwb2Y\nnf2jTuefTjpNx7WOjMqtZgmlokIsaeZnnJSvWq2W06ZN45w5c4watVih0bBPSAh36ViWTRd27hRd\nw6orY2Zs5Kly+rv4s+CEfhHSm4M2s8vGLkyS3pvoTCYTl3PmzRN/0G4Hs5w40TBBlLm5B+nv78yy\nssaZs+a28K/1X8tpv06jyzoXOq515OQDk7nyykqu3r2advZ2PHr0qKlNNRrh4WKpzOXLa64CRblc\n3Mj95hvxAzdggCj+vXqRzz9PrlsnekFIJHUebN63Qk+SZWXR9POzq/VLEpoVSvs19rycern6k1au\nFNPHGZGysjIOGDCAq1evNto13k5I4NPR0Qb/MVm/XvQgaOigX02phiH9Quqdcnjb1W103+DOuPy4\nas8RBDHNwldfkQ89JC67DhsmOl4cP173zIK1kZ9/hH5+jvdVqmFBEJgmS+Ov0b9ywpIJbN62OVsu\naEmfb3z47O/Pcq3/Wp5LPlevtX5z4s8/RccFHYPn70WpFEsp/vAD+eab5MMPiykb7O3FzH5vvimu\nOfr7i8Fe1aCLdjYKP/rqyM7ejuzs7zBwYBAsLVvd83iiNBGjdo/Cd5O+w5M9nqy6k/x8oGdPICAA\n8PbWx3SdyczMxLBhw/Dtt99iypQpBu37TGEh5sXHI2LwYNhaWRm0bwBYtgw4fhy4cAFo397g3d8D\nBSLmqRg0t20On50+9fbz3n19Nz4+/zH+nvU3+jj2qfV8uRwICgIuXxbdqq9eFT8eo0YBQ4cCQ4YA\nXbsC+phVVHQWsbHPoW/fY2jX7gE9Xo15s337dnz66ac4efIkevbuibiCOITlhCFMEoawnDBcl1yH\ng7UD+jn1Qx/HPneat503WjQz/xgIEli1CvjuO+DQIWDwYAN3LpEA0dFAVNTdY1wcYG0N9OhxT7Pw\n9KxVOxu10JNEbOzTaNHCFd27f13pMUmZBCN+HIHFIxbj5UEvV9/J228DggBs2aKP2XXm6tWrmDhx\nIs6cOYP+/fsbpM8itRq+oaH4wccH420NE1D2b0jxrYqIEGNKrK2Ncpk7JH+UjGK/Yvie9YVlC0uD\n9Hkg6gDeO/0eTjx3AgNcBtTpuSoVEBoqCn9IiNgUCvFLPmTI3ebsXLP4Fxf7ITp6Knr3/hMdOjxU\nz1dkfqxevRrbtm3DmTNn0K1btyrPESggqTAJUblRiM6LRlSeeEwrToNXRy/0cewDH3sf+NiJzdvO\nG21btm3gV1I1SiXw8stAbCxw+DDgZph4ttohgexsUfDj48XjrWaRkXF/Cz0AqNVFCA3tj+7dt8De\n/gkAQImyBKN2j8K0HtOwbNSy6p+cmAgMHw7cuAE4OOhrep05ePAgPvjgAwQHB8PZ2bne/T0fGwtb\nKyt80727AayrHkEA5s4FCgvFkUwLIw2+cn/KRcryFAwMHogWDoa9yJ83/sRrx1/DsWePYYjbkHr1\nlZMjjvRvt9BQUeT79q3cevcGbGyAkpKriIqahJ4998PWdryBXpF5QBJLlizB0aNHcfr0abjpoYAK\njQJxBXGIzotGvDQe8QXxiJfGI1GaiI6tO8Lbzhvedt7w6ugFz46ed1qHVh2M8IrupaAAmDpVjHDd\nuxdo06ZBLlsrumhnoxd6ACgu9kdMzFMYNOgaLJs7YtLPk+Bl64XvJn5X85R/+nRg4EDgo4/0tFp/\nbk9tL168iFat7l120pVf8/KwIjUVYYMGwbpZMwNaWDVqtfi2WVsDP/0EGPqSJUEliHoiCv0v9Eeb\nPsb5Jh1LOIZ5h+fh0DOHMKLzCIP1e3vWHRVVud24AQwaFInFi8cjImIH2radjO7dxaWgLl0M/x42\nNFqtFm+88QbCwsJw8uRJ2NnZGbR/gQIySzIRXxCPBGkCUmQpSC5KRnJRMm4W3YSVpRU8O3qia8eu\n6NSuEzq373yndWrXCY5tHOu99BcXJ6YGefpp4KuvAEvDTDINwn9G6AEgNfVzFBWdx+a0ziiUF+HP\nZ/6snL/m3wQEAM88I06DjL0OUQUkMXPmTFhZWWHfvn16fRCzlEoMDA3Fsb59MaRdOyNYWTUKBTBx\noihUW7fqt05dZb/pCoQNC4PPdh/YPW5Ysfg3p2+exqw/Z+G3p3/DKI9RRr1WaWk8wsPHoKJiI+Li\nnkFCApCQIE4oc3MBDw9R8D087r3t7GxeovJvVCoV5syZg7y8PBw+fBht2zbsEgtJSOVSJBclI6Uo\nBRklGUgvTq/UylRlcGvnBte2rnebjXh0aesCZxtnOLZxhG1rW1ha3Ptmnz0LPPccsHo18OKLDfry\ndKJBhP7UqVN45513oNVqMX/+fCxatOiec95++22cPHkS1tbW2L17NwYMuHd9tL5CT2rx6i+eCC4U\n4P9yHNq0qGE0SAIjRgALFgAvvKD3NetLRUUFRo0ahWnTpmHJkiV1ei5JTIiKwvB27bDCw8M4BtZA\naSkwdqyY8+mrr+rfn7Zci/CR4XB8zhGdP+hc/w514HzKecz8fSYOPHUAYz3HGuUaCkUawsMfgofH\np3BxuVclKiqAlBQgLQ1ITb17vN2KigAnJ3Et2NW18tHZWVxGcHQE7O2Nt5RWHXK5HNOnT4eVlRV+\n+eWXes1MjUm5qhzZpdl3Wk5Zzp3bWaVZyCvPQ25ZLkpVpbC3todTGyc4tnGEYxtH5Fx6AsH7JmHB\nyrMYPlINO2s72Fvbw661HTq27ojWzVs3aEK4qjC60Gu1Wvj4+ODs2bNwc3PDkCFDcODAAfTs2fPO\nOSdOnMCWLVtw4sQJBAcHY+HChQgKCtLL2JrYGbYTX135Al/3K8dDAw+jffsHqz/5jz+Azz4DwsJM\nPm/OysrC0KFDsWXLFjz5ZDWeQVXwXVYWdksk8B8wAFYmGvIVFAAPPyyOcj74QP9+SCL2mVhYtrZE\nj909GvSLcyXtCp46+BT2Tt2Lx7o9ZtC+VSoJwsMfgpvbW3B3f1uvPpRKcS8gOxvIyhKPt2/n5gJ5\neWIrKADathVF38EBsLMTm63tva19+8pNj8SMKCkpweTJk+Hu7o5du3bBygieXg2NSqtCfnk+8srz\nkFOSh2++cse1C6546otdoG0CCioKIJVLxWOFFEWKIggU0LFVR3Rs3REdWnW4c7tdy3Zo37J95WMr\n8WjTwgY2LWzQtkVb2LSwQZsWbWpefagFXbRT/94BhISEoFu3bvC4NaKcOXMmDh8+XEnojxw5grlz\n5wIAhg4dCplMhtzcXDg5OdXn0pU4mXgSS88vxeUXL8OWN3DjxvMYPDgczZtXsUmjUgGLFwPffmty\nkQcANzc3HDp0CBMnTkTXrl3h6+tb63MSKiqwPDXVpCIPiKPI06eBhx4COnYE5s/Xr5/0L9OhTFei\n/8X+DT46eqjLQ/hr5l948pcn8eOUH/G49+MG6VetLkRExHg4Oc3RW+QBUYRvL+PUhCCIo//8fPEH\noLBQbFKpeExJuXu7uLhya9YM6NABaNdO/LGwsbn3aGMjrnBaWwOkFN98MwHduw/CrFnfIjjYEq1a\noVJr3Vo8tmwJNK+XyjQcLZq1gFs7N3Ro5oZPXwPkMiDuOmBr+161z1FoFCiSF0GmkKFIUYQieRGK\nFEUoUZagRFmCYmUxskqzUKwovnNfmaoMpapSlKnK7rQWzVrApoUNrK2s0caqDdq0aFPpduvmrWFt\nZY3WVq3RuvmtZiXepwv1+hdkZWWhU6dOd/52d3dHcHBwredkZmYaTOivZV/DnL/m4PDMw/C28wbg\njaKiM4iPX4BevX69Vzi2bwc8PYFHHjHI9Q3BkCFDsGXLFkyZMgXBwcE1vjcaErNv3MCnHh7wMcHe\nwr9xdxfFftQoUSymT6/b8wsOFyD7+2wMDB4Iy1am+dF6sNODOPbcMTxx4Alsm7QNU3tOrVd/Gk0p\nIiMnwNb2UXTpstRAVtaMpeXdUXyPHro/jxRjBm6LflmZ2EpLKx/LysTHk5JycOjQI3B2noiWLVdh\n/XoLKBRiHwoFKt2Wy8UZCSAKfosW4vF2a9FCbFZW9x6trMQfiNvHf99u1uze282a1dwsLcVW3W1L\nS/HHctUqcZ9k4UIxlsLCQmyWlpWPYmsFS0sXWFi4wMIC6GABdLz9WHPAwgqwaPvP8yu3W/8FKIUK\nyLXlkGvLxduacii05ZBrK6DQlkOhrYBSK4dSIUeFVo4irRxKrQwKrVyn/3O9hF7X0de/pxXVPe+T\nTz65c3v06NEYPXp0jf2mylIx+ZfJ+P7x7/Fgp7tLNV5e63Dt2lDk5OyEq+s/fOhLS4EvvhALDJgZ\nzzzzDGJjYzFt2jScP38eLauZT69MS0OH5s3xuqtrA1tYPd27AydOiHUa2rcHxuvoOVgeXY74+fHo\ne6IvWrrqsX5gQB5wewAnnz+JifsnQi2oMaP3DL360WrliI6eDBsbX3h6rjX5+m1tWFjcHam7uNR8\nblpaGsaNG4f3338RS5Ys0fm1aTSi4KtU4vF2U6lELy61+u7tf96n0VR91GrF27ePt2+rVOKxqiYI\nYvv3ba1W/LG7PSMKCBBF3toa2Lnz7mNk5dv/vK+qv3VpwO3bFiDbAGhT6f67j1e+r7z8IuTyiyDb\nAtBx81vncN0qCAwM5KOPPnrn76+++oqrVq2qdM4rr7zCAwcO3Pnbx8eHkirK2tXVFGmFlD229ODm\noKqrxpeVxdLPz55lZdF371yxgpw1q07XaUi0Wi2nT59ebU6cayUldPTzY2YDJEfThytXxPTGuqRo\nVRWoGOgZSMm+6kscmoLrOdfpvM6ZP0XUvbinVqtiZOTjjImZSUGoPpVyYyQuLo6dOnXi11/Xrx6E\nuXLypPjZ/YdUNRp00c56Cb1araanpydTUlKoVCrp6+vL2NjKuWeOHz/OCRMmkBR/GIYOHaq3sbeR\nq+V86MeH+N7f79V4Xnb2DwwJ6U2NpkJMFmRrS6ak6HwdU1BdThy5VsveISH8qYbar+bAiRNieuPI\nyOrP0aq0DB8TXqlKlDkRnRtN1/Wu/CHsB52fIwgaxsTMZGTk49RqG1FRDR24fv06XVxcuGvXLlOb\nYhS++06smdwQ9cmNgdGFniRPnDhBb29venl58atblZm2bdvGbdu23TnnjTfeoJeXF/v168drggAd\nbAAAIABJREFU1VTI1VXotYKWz/z2DKcfnF65oHcVCILAmJhnGR//iljT6513dHxVpiUjI4Nubm48\ndOjQnfveT0riU0ZIWGYMDhwgXV3FqoxVkfBmAiMmRFDQmO9riS+IZ6cNnfhdyHe1nisIAuPiXmZ4\n+GhxUHEfERAQQEdHRx48eNDUphgcjUasHdKjB5lknmMOnWgQoTcUugr9B6c/4IgfRlCu1q0KlFpd\nzKDLnZn7uI1Bq7sbm6tXr9Le3p5hYWG8XFREF39/5ilrL7phLmzfLhbr+nd64+wd2Qz2CaZaplsd\nW1Nys/AmPTZ5cEPAhmrPEQSBSUnvMzT0Ab2K4Zgz586do4ODA0+cOGFqUwxOaSk5eTI5ZkyNiSEb\nBfed0G8J3kKfb3yqrhBVAyVvjKPf6TaUy1P0tM40/Pbbb3Rzd2fnI0d4uBH9SN1m3TrS2/tuemPZ\nFbGASHm8mZR20oE0WRq9Nntx5ZWVVT6emvoFQ0L6UKXSrdpSY+HIkSN0cHDgxYsXTW2KwcnKEtPB\nz5snZgpu7NxXQv/Xjb/oss6FyYV1rKkZEkK6ujI9aSWvXRvW6NZPh7z7Lu1692a5udS9qyPLlokV\nGnMixQIi0lONTxCzSrLYY0sPrriwotLSWUbG1wwK6kaFItuE1hmeAwcO0MnJiSHmVjTYAFy/LtYY\n+uoroxSTMwn3jdAHZQTRYY0Dr2ZdrVungiDOzb7/noKgZUTEBN68ubieljYcJwoK2DkggDNnzeL0\n6dMbZVFlQSDffkPLvm1KeePLDFOboze5Zbns+11fLjqziIIgMCdnNwMCOjW6WWJt7Nixg66uroys\naTe9kXLsmOhZY+Cy0CbnvhD6JGkSndc582i8HuXITp0S1w7U4nqwUpnLgAA3SqV/18fUBkGqUtEt\nIIDnCwupUCg4YsQIfvzxx6Y2q84IgsDIp6M51auI48YJlOu2tWKWFJQXcOD3A/nSHxN4xc+J5eU3\nTG2SQdmwYQO7dOnCBFMV0DUiX38tetYEBpraEsPT6IU+ryyP3b/uzq1Xt9a9Q62W9PUl//ij0t2F\nhefp7+9ChSJLX1MbhGdjYvj2P75weXl57Nq1K/fu3WtCq+pO6hepDH0glKoyLZ9+mpwyhVQ1rtWz\nSqRkH2K/TVZ89uDjVGvNf0NZFwRB4IoVK+jt7c10UxUHNhJqtVgHuGdPMrmOq76NAa2gbdxCX6os\n5ZDtQ7j0/FL9Oty3Tyz6WcVCXErKZwwLe5iCYJ5f1IO5ufQOCmK5pnLQTXR0NB0cHHjlyhUTWVY3\n8g/nM8AtgIosMcBLqSQnTCBnzhRd2xobMpkf/fwcmJ1/ho/se4TTfp1Ghdo8g9d0RavVcuHChfT1\n9a0ykLExU1wsft7GjyeLikxtjeGJlETSd6tv4xV6lUbFCT9N4LzD8/TzG1coRN++S5eqfFgQtLx+\n/RGzXK/PVijo6OfH4OLiKh//+++/6eTkxPj4+Aa2rG6URZfRz96PxUGVX0dFBTl2LDl3rjjpaiyU\nlITSz8+BUulpkqRCreC0X6fx0X2PslzVODfK1Wo1X3jhBY4YMYJF95kSpqSQvXuTr77auGeQ1bH3\n+l7ar7Hnnut7GqfQC4LAuYfmctL+SfpPjTduJCdNqvEUpTKPAQHuLCg4pt81jIAgCJwYEcFltcwx\nd+7cSU9PT+be9ls0M1QFKgZ5BTFnT06Vj5eXiwXvX365cYh9WVk0/f2dmZ//V6X71Vo15x6ay5E/\njqRMLjORdfqhUCg4depUPvLIIywrKzO1OQYlIIB0cSE3b75/PGtuo1Ar+OqxV9n96+6MlIgb5o1S\n6JecXcKhO4ayTKnnh08mE2Pwo6J0OPUK/fwcKZen6nctA7M9K4sDr16lUgf1W7ZsGR944AGzc7vU\nqrS8PvY6E9+rJiz2FiUl5PDhYsCyOX8ZKyqSGBDgRolkf5WPawUt3zzxJgd+P5D55Y0j1qG0tJTj\nx4/nU089RYWZ5k3Sl59/Ju3tRQ+b+42UohQO3j6Y036dxmLF3ZlyoxP6r4O+pvc33vX7wnz0Efni\nizqfnpa2hteuDaVWa9rIiZsVFbT382O0jqMrQRA4e/ZsPvnkk9SY0YJ3/OvxOqc3kMnIIUPI994z\nT7GXy9MZGOjBrKztNZ4nCAI/OvcRe27pyXSZeW9mFhYWctiwYZw3bx7VavPco9IHQSA/+YTs0oWM\niDC1NYbneMJxOq515PqA9fcsZzc6oXdb78aUohT9O8nMFBOX1cFzQBAERkY+wcRE0+XB0QgCR4aF\ncX0dPR6USiXHjBnDt99+20iW1Y3MbzMZ3LNu6Q0KC8WAqiVLzEvslUoJg4K8mZ5effqDf7M+YD07\nbejE6Nzo2k82AdnZ2ezXrx/ffffdRpEzSVfKy8lnniGHDiVzql4tbLRotBouPb+UbuvdeCWtaieM\nRif013Ou16+Tl18mP/ywzk9TqQoZGOjBvLw/aj/ZCKxJS+Oo8HBq9fjyFRUVsXfv3ty4caMRLNOd\nwnOF9HP0Y0Vi3ZN65eeTffqIIzJzQKWSMiSkL1NSPq3zc3+K+ImOax3pl+ZnBMv0JykpiZ6envz8\n88/vK5HPyCAHDSKff17c6L+fyC7J5ujdozl2z1hKSqv3iGp0Ql8vYmPFxTk9MxQVF4fQz8+BFRU1\nry0bmqiyMtr7+TGlHpFEaWlpdHNz4++//25Ay3SnIrGCfo5+LDyvf3YoiUT0df7kE9OO7NVqGUND\nhzAp6X29BfFU4inar7Hn4bjDBrZOP8LDw+ni4lIpo+z9QFCQmCV11Srzmg0agjM3z9BlnQs/ufAJ\nNdqal2b/W0L/5JPkmjX16iIzcwtDQvpSo2kYLwSlVsv+V6/yh+z650oJCwujg4MD/fwadiSplqkZ\n3COYWVvrH4AmkYgj+48+Ms0XV60u4bVrDzIh4c16j3pDMkPovM6ZO67tMJB1+nHx4kU6ODjwt99+\nM6kdhmbfPnFcd+SIqS0xLBqthssvLKfLOheevXlWp+f8d4Tez0/MVFTP+HpBEHjjxlxGR89okOnt\nx8nJfCIy0mDX+vvvv+no6MiIBtqNEtQCIx6LYMIbhguZz88X1+z/7/8aVuw1mjKGhT3MuLgFFGqp\nc6Ar8QXx7LqpKz+/ZJrlkkOHDtHBwYHnzp1r8GsbC42GXLSI7NpVJ8e6RkVOaQ7H7B7DMbvHMKdU\n982G/4bQCwI5YgRpoOo3Wq2coaFDmJa2qvaT60GATEYnf3/mGDhP6i+//EJXV1cmNUAlhcR3E3l9\n3HUKasOKmFRKDh4shq43hD5qNBUMD/8fb9x4wWAif5vskmz6bvXla8dea9CUCTt37qSzszNDQ0Mb\n7JrGpriYfPxxctSoRlVaQifO3jxLl3UuXH5hea1LNf/mvyH0hw+L830DuhgqFBn093ehVHrKYH3+\nkxK1mp6BgTxkpE/rtm3b6Onpyaws4+Xzyd6RzaDuQVQVGifsUCYTM1i88opxg6q0WjkjIh5lTMxz\nRqvzKpPLOH7veE74aUIl/2djIAgCV65cSQ8PD7OPnq4LN26QPj5ipOv9kEP+NiqNiovOLKLrelee\nuXlGrz7uf6FXq8UdPCNERxQVXaafnyMrKgw/Mn7xxg3Oj4szeL//5Msvv2SfPn1YaITyOYVnRA8b\nYxcQKSkhR44UwyKMESqg1SoZGfk4o6OfNnreI5VGxVeOvsI+3/VhapFxAvQ0Gg1ff/119u3bl5mZ\nmUa5hik4dEhML/yD7iV8GwVJ0iQO2T6Ek/ZPYl5Znt793P9Cv3OnGEtvpPm9uDnbhxpNqcH6/D0v\nj92Cglhq5CAnQRD47rvvcvjw4QYNcS+LKaOfgx+LLjZMbpSyMrGkwKxZd7JNGwStVsWoqKmMiprS\nYMVoBEHghoANdFnnwqCMIIP2XV5ezilTpnDs2LGUyRpXOobq0GjIpUvF7bfgYFNbY1hu56r5Oujr\neu/f3N9CX15OurmJPlZGQtycncfo6OkG2UzLvJWwLKiahGWGRqvVcu7cuXz00UepNMB8VylRMtAj\nsNocNsaivFzMQvj44+Lt+qLVqhgd/TQjIiZSq234FABH4o7Qfo09f402TAWMvLw8Dh06lLNnzzbI\n/9kcKCwU/+ejRt0tRXk/UKwo5vN/PM+eW3oyQmIYpwldtNMSjZWNG4Hhw4GhQ412CQsLC3h7fwuF\nIh0ZGavr1ZdA4oW4OLzp5oah7doZyMKasbS0xM6dO9GqVSvMmTMHWq1W7760ci2ip0TDabYTnOc4\nG9DK2rG2Bg4fBjp2BMaPBwoL9e9LEFSIjX0GglCBPn3+gKVlS8MZqiNP+DyBM7PP4P3T7+PLy19C\n/K7qR2JiIoYPH45x48Zhz549aNGihQEtNQ3R0cCQIYC3N3DmDODoaGqLDENgRiAGfD8ANi1sELog\nFP2c+jXcxQ3yk2IA6mSKRCKmOmgAzxKSVCgy6e/vyoICPapc3WJjRgYfvHaNahO42cnlcv7vf//j\nnDlz9MqLI2gFRj8dzZhnY0waVanVku+/T/bqJUZE1v35CkZGTmZk5GSTjOT/TXZJNgdvH8zn/3he\nr1THgYGBdHZ25vfff28E60zDbf/4fftMbYnhUGqUXHJ2CZ3WOvHP2D8N3r8u2tk4hf7VV8l33zWe\nMVVQXBxEPz8HlpTU3V0tsrSU9n5+vGnCGO2ysjKOGTNGL7G/ueQmw0aEUSs3j5zCa9eSnTuLwdC6\notXKGRk5iVFRU02ewO6flKvKOevPWey3tR+TpLoPXG77yB8/ftyI1jUcFRXk/Pli5c/7KSlZhCSC\nvlt9OeXAlBrTGNSH+1PoY2LEn3yp1LgGVUFe3p/093etU1pjuVbLviEh3GUG2Zb0EfvsH7IZ5BVE\nZZ75iCNJ7t1LOjnpVgNUdKF8jNHRTzfYxmtdEASBW4K30HGtY621kQVB4KpVq+jm5sarV682kIXG\nJT6e7NdPrDxWUmJqawyDRqvhqiuraL/GnrvCdxl1Jnx/Cv3jj5Pr1xvXmBrIyNjI4OBeVKt18zp5\nNzGR06OjzSaRVHl5OceMGcPZs2fXKvbS01LRjfKGeeW8v82JE6LbXU2DWo2mnNevj2dMzEyzLR15\nm4D0ALpvcOey88uqDJpRKBScM2cOBw4cyAx91q7MkF9+Ecdt27bdP/lqEqWJfPCHBzlm9xijudL+\nk/tP6M+dE2OfTVgsQRAEJiS8xfDw/9W6BHBSKqV7QAALzKyWmS5iXxJaQj97PxZdNu8Sc0FBpLMz\nuWnTvUKh0ZQxPPx/jI2dZfYifxtJqYSjdo3iYz89RmnF3Vlrbm4uH3zwQU6fPv2+qAgll5OvvUZ6\neZFhYaa2xjBotBpuCtxE+zX23By0mVoDR1lXx/0l9FotOWAA+athXNLqgyBoGBU1hbGxc6odqWcp\nFHT29+clM63FWZPYVyRV0N/Fn3l/6h/E0ZCkpopT/5deuhs1qVIV8tq1B2+lNTCfwiy6oNaq+f7p\n9+mxyYNXs64yIiKCXbp04bJly6htDLUXayE2VvwqT58uRkDfD0RKIvnAjgc4atcoxhc0bETy/SX0\ne/aIlQXMZH6n0ZQzNHQIU1JW3PuYIHB0eDg/S0lpcLvqwm2xnzVr1p1qQ0qJkkFeQczaZrz0Ccag\ntFRMYDpyJJmeLmFISF8mJr5j8Nw1DclvMb+x/Rft2ebRNtz/c9WlDBsTgkBu2XJ/LdXI1XJ+fO5j\nOqxx4I5rOxpsFP9PdBH6xuFHX1EBfPwxsH49YGFhamsAAM2aWaNv36OQSPZCItld6bEv0tJgCeCj\nLl1MYpuuWFtb49ixY8jPz8fUqVNRkluCyImRcJrlBNdXXE1tXp2wsQH++AMYObIIQ4eqIJW+CS+v\nDbCwaBwf8X8jCAISDyei1d5W6DGpB7YqtiJVlmpqs/RGIgEmTQL27AH8/YFXXjGbr7LeXEq9BN9t\nvogriEPEqxGYP3A+LM3186bvr4hUKuW4cePYvXt3jh8/nkVVLFGkp6dz9OjR7NWrF3v37s3NmzfX\n+KuU/1c1Sb6+/JJ86il9TTUqZWWx9PNzZEGBmG/nYlERnf39md2Iii6rVCrOen4W+7Xvx8A5gWaz\ncVxXSksjGRDgxm+/PU0HB/JPw7ssNwhFRUWcPHkyhw8fzoyMDGoFLdf6r6X9Gnvuvb630f1/Dh0S\nPaSWLSPNbLtKLwrKC7jg6AK6rXfjoRuHTG2OcZduPvjgA65evZokuWrVKi5atOiec3JychgeHk5S\nrDzv7e3N2GqcnwHQz6GKRFm3g6MSG7byU1247WOfnHuc7gEBPGkC18/6IGgFRs2M4rxu8+jj48PU\nVON7Chgamcyffn6OlEh+JklevUq6u4sVq8yodnqthIeH08vLi2+//fY96QzCc8LZ69tenPHbDBZW\nGD5ZnaEpLRX3TTw9SX9/U1tTf9RaNb8N+ZYOaxz4xvE3KJObxwaDUYXex8eHEokYAJCTk0MfH59a\nnzNlyhSePVt11RQAzNqWxZDeIdSU/uOb+dpr5MKF+prZYBQWXeaxix25MrpxraUKgsDE9xIZNjKM\nmgoNN27cSDc3twYrXmIIpNJT9POzZ0HBiUr3Z2eLCdFGjxbrxps7u3btor29PQ8cOFDtORWqCr51\n4i122tCJxxPMN1jq9GnRQe7FF+8P3/iLKRfZb2s/jt492mA5agyFUYW+Q4cOd24LglDp76pISUlh\n586dWVpadSZIAGISsRdvMHrGLb/zyEjRUbqgQF8zG4y16el8Lngbr/jZUyZrPMOXlE9SGNInpFJe\n+QMHDtDBwYEXLlwwnWE6kpOzh35+jpTJqi6hqNGQX3whLh0c1T+DhVGRy+V8+eWX2aNHD8bExOj0\nnNNJp+m12YvTD05nZrH5/IoVFJBz55JduohxDo2dNFkaZ/w2g503duZvMb+Z5bJZvYV+3Lhx7NOn\nzz3t8OHD9wh7x44dq+2ntLSUgwYN4qFD1a9nAeCKFSu4/OPlXOCygL++9os4FNuypdYXYWqCiovp\n4OfHVLn81ujSgcXFIaY2q1bSVqYxuEcwlZJ74wHOnTtHBwcHHjx40ASW1Y4gaJmc/DEDA7uyrKx2\ncfTzE9MmvP22ScMw7uHmzZscNGgQn376aZbUcehboarg0vNLabfajpsCNzVoBat/Iwhi8JOzs/ge\nVzOeazSUKEr4yYVPaLfajisurNArF5GxuHDhAlesWHGnGX3pJudWWH92dna1SzcqlYqPPPIIN27c\nWLMh/zBWniqnf4dzLOo61bBJyI1AgUpFj8BA/pF31+c8P/8I/fwcWVoabkLLaiZ9QzqDugVRkVW9\n6oWHh7NTp0786KOP9EqGZiw0mgpGR8/gtWvDqVTqnsO2sJCcNk2sSWvkui+1IggCf/zxR9rb23PT\npk31GineyL/B0btHc+D3AxmS2fADjPR0MWC9d2/dUlKYM3K1nBsCNtBxrSOf/f3ZBolsrS9G34xd\ntUqsq7py5coqN2MFQeDs2bP5zjvv1G7IP40tL6fUYQL9bS9QkWFGw69/oRYEjrt+nR9UkUUzL+93\n+vs7s6zM/CoYZ27JZKBHIOVptRdTz83N5ZgxY/jII4+wwAyW0JRKCa9dG8qYmJnUauteDF4QyK1b\n7/pymyL+KD8/n1OnTmXfvn0ZGRlpkD4FQeDe63vptNaJrx9/nfnlxi+qqlKJEcn29uRnnzXuEn8q\njYrbrm6j+wZ3TjkwhZESw/xfGgKjCr1UKuXYsWPvca/MysrixIkTSZJXrlyhhYUFfX192b9/f/bv\n358nT56s3dgVK8gZM5i2Mo3Xhl4zm6yJ/+bDpCSOu3692tTDEsnP9Pd3YUmJ+cR4Z+/IZkCnAFYk\n655JU61W8/3336eHhwevXbtmROtqpqwsioGBHkxOXl7vtdKoKLEm7YgRYp68huLkyZN0dXXl+++/\nT4UR1pCkFVK+fvx12q625ScXPmGJwvA7oYIgVu/08SEfeaRuWUTNDY1Ww30R++i12Yvj9o4zeOWv\nhsCoQm9o7hibkiK6U6alURAERs+IZvT0aAoa89oE+TU3lx6BgbXmscnL+4N+fg6USk83kGXVk7Mn\nhwFuASxP0G+98eDBg7S3t+ePP/5oYMtq5/beh0RiuETlGg357bfiiHTpUjH/irEoLy/nG2+8wU6d\nOvH8+fPGu9AtkqRJnPXnLDqudeT6gPWsUBkmRXZUFDl+PNmjh5hMzgz3JnVCrpZze+h29tjSg8N3\nDuf5ZOP/T4xF4xT6p54S54G30Cq0DB8TzoQ3Esxmx/t2fvlwHXecbhcaN6RI1ZXcX3Lp7+zPspj6\nJcSKiYmht7c3X3nlFaOMSP+NIGiZmvoV/f2dKJNdMco1srLEvCvdupHVeP/WC39/f/bo0YPPPvus\nUYq110RUbhSf/OVJum9w5/bQ7VRp9ItYyssTy0A4OJBff914A5/yyvL4yYVP6LTWiRP3T+S55HNm\noyv60viE/uxZ0sNDrELwD9QyNa/6XmXq56bfGJGqVPQKCuJ+Sd2KCJSVRTMgoDPT0lY3+Acr+4ds\n+jv7szTCMK4QxcXFnDp1KgcOHGhUf3uVqoARERN57dqDlMvTjXad2xw9KnrmzJlDGqJ8QEFBAefP\nn09XV1f+auJkfEEZQRy3dxy9Nntxc9BmFit0q1ssk5Gffy7OehYuNEkZCIMQlx/HBUcXsMOqDpx/\nZD5j8hpwvc7IND6h79272rh1RbaCgZ6BzN6R3cCW3UUjCHwsIoLv6hmlq1BkMCSkDxMS3mqwjIrp\n69IZ0DmA5XGGdQ8TBIE7d+6kvb09P/30U6oMPMQrLg5iYGAXJiX9X4MWCyktJT/4QFw9/PBD/UI4\nBEHg7t276eTkxLfeeosyM0rR6Jfmx2d+e4YdV3Xk68dfZ2xe1QvsUqmYssDOjpw92/ReSvpQrirn\nz5E/89F9j9JhjQOXX1hutCpPpqTxCf24cTUu+pUnlNPfxb/6nDhG5qObNzk6PLxedV/V6iKGh49m\ndPR0vbxGdEUQBN5ccpPBPYIpTzfedTIyMjhhwgT6+voyzACJxQVBYEbGJvr5OTA//y8DWKgfGRni\nUoWtLbl8ue7pdGNiYvjwww9z8ODBDA2te9nJhiKzOJPLzi+j01onjts7jn/d+IsarYa5ueSiReLr\nnj+/wcoyGwxBEHg59TJfOvwSO67qyEf3Pcr9kfsNtkdhjjQ+odfB/aHkagn9HPwou9Kwo6Tf8/LY\nOSCAuQbwIdNqFYyOnsGwsBFUKAwf1ShoBMa/Es/QQaENUgLw9gjWwcGBS5cu1XvtXq2WMTr6KYaG\nDmJFxU0DW6kfycnkCy+Ia9MrV5LV1fyQyWRcvHgx7e3tuWXLFrOKO6gJhVrBfRH72H/LUNosd2fL\nKQv55MJLTE5pHPaT4ucvOjeaKy6sYNdNXdnr215c7bfarCKGjUnjE3oduV3iriyqYSrtBBYX097P\nj6EGTNohbjJ+Tn9/JxYUGC5niVapZfSMaIaPCae6uGGDzbKysvjEE0+wd+/e9POrOiVBdRQVXWBg\noCfj41836kxHX+LixJqmTk7kxx+LzmGkWId31apVdHBw4Ny5c5mdbbqlxbqiVJIHD4oTaXt7cu4H\n0fzg6Gf03epLx7WOXHB0AU8lnqJSY34O8sWKYv4Z+ydfPvIyO23oxC4bu/CtE2/xatbVRr+5Wld0\n0U6LWyeaHAsLC9TFlNwDuUj+MBn9TvdDm55tjGZXYkUFHr5+HTt9fDDJzs7g/ctkl3HjxvNwdJyJ\nrl2/gqWlld59acu1iHkqBpatLNHrl16wbNXwubFJ4sCBA1i8eDF8fX3x5Zdfol+/ftWer9GUIDn5\nQ0ilx9G9+3ewt3+iAa2tOzduANu3A/v2EQ4O6ZBIPsXYsXJ8/vly9OzZ09Tm6URCArBjB7B3L9C7\nN/Dyy8DUqUCrVnfPuVl4E4fiDuGPG38gviAe4zzHYbj7cAxzH4YBLgPQqnmr6i9gBEqUJbguuY7A\njECcTDqJaznX8GCnB/GY12OY0H0CfOx8YNHYE9zriS7a2WiFHgAkeyVIXpSMPof7oN0D7QxuU65K\nhQfDwrC4c2e87Gq8QhxqdQHi4l6AWl2AXr1+QatWHnXuQ5mlRPTUaLTp1QY+O31g0dy0H3qFQoFt\n27Zh5cqVGDduHD777DN4eXlVOkcqPYGEhFdha/sYvLzWonnz9iayVnfUajX27NmDTz5ZDQeHV2Bh\n8SokEhu8+CLw0kuAp6epLayamzeB48fF4ixxccALLwDz5wPdu9f+3KySLJxLOYfgrGAEZQYhriAO\nvR16Y6j7UAxzG4bejr3RqV0n2La2rbfYChQgKZMgQhKBcEm42HLCISmToK9TXwxxHYJHvR7FaI/R\naNPCeAO8xsR9L/QAUHC0APEvxaPn/p6wHW9rMHvKtFqMuX4dE2xt8VnXrgbrtzpIAZmZm5Cevgre\n3tvg4DBN5+cW+xUjZkYM3N5yQ+fFnc1qZFNaWoqNGzfi66+/xowZM7Bs2TLY27dAUtI7KC72h4/P\nTnTs+D9Tm1krBQUF2L17N7Zu3QoPDw988cUXGD58OABxlL9jB7BvH+DkBDz2GPDoo8BDD1UeJTck\nGg0QEAAcOya2wkKxwtMTTwATJwItWujfd4W6AmE5YQjODEZQVhASpAnIKM6AQqOAezv3O61T+05o\nY9UGlhaWsLSwhAUs7twGAKlcCkmZBJIyCXLKciApkyC/PB8dWnVAX6e+GOgyEAOcB2CA8wB423mj\nmWUzA7079xf/CaEHANkVGWKeikH3Ld3hOMOx3rZoSEyJioJTixb4wadhp4QlJSGIjZ2Jjh3HwdPz\nK1hZ2Vd7LknkfJ+DlOUp6LGnB+wmGH5pyVAUFBRg1aqV+PHH7Xj4YQFz5kzG5Mk70Ly5jalNqxaS\nCAwMxNatW3H06FFMnjwZr7322h2B/zdaLRAaCvz9N3DqFBAdDYwcKQr///4HeHvXT2A4aLijAAAN\n9ElEQVRrIj8fuH4dCA8XbTh7FujaFXj8cbENGgRYGnklr1xVjsySTGSUZIjH4gzINXIIFO40guKR\nhF1rOzjbOMOlrQucbZzhbOMMxzaOaNHMSG/Sfcp/RugBoCyiDJETI9FlaRe4veamdz8k8XJCArKU\nShzp0wdWxv52VIFGI0NKynLk5f2CLl2WwtX1tXvW7gWlgMS3ElHsX4w+f/WBdXfrBrdTV0iiqOgM\nkpOXQCrVwN9/OPbvP4M2bdpg/vz5mDVrFmxtDTcbqy+lpaXYv38/tm7dioqKCrz66qt44YUXYFfH\nPZrCQuDcOVH0L18GMjIADw+gZ0+x9eghHrt0AaytgdatgWbVDFoVCqCg4G7LzxdnEuHhYisrA/r3\nBwYMENvYsYCb/l+DJhoR/ymhBwB5shyRj0TCaY4TuizrotdI/NPUVBwpKMClAQNgU923roEoL49B\nUtI7UCqz0a3bJtjajgcAKLOViJkegxbOLdBjTw80b9vcpHbWRElJMJKTl0ClykbXrl/C3n4aLCws\nIAgCLl26hJ07d+L48eOYMGECXnrpJYwaNQpWVvpvSOvLzZs3cfz4cRw/fhwBAQEYP348XnvtNYwd\nOxaWBvqxVyiApCRRoG/cENfKb9wAMjMBuRyoqBBH/NbWd5tKJQq7Wg3Y299tdnbiDOG2sHft2viL\nbTehH/85oQcAlUSFyMci0e7Bdui2qRssW+j+Jf0+Oxur09MRMHAgnI01x64jJCGVHkFS0nto06YP\nHItWIPk5JVxfdUXnjzrDwtI8v93l5TFISVmK0tJQeHh8AmfnubCwqPoHqaioCPv378eePXsQHx+P\nYcOGYfTo0Rg1ahSGDBmCFkb4XygUCvj7+98R9+LiYkycOBGTJk3C+PHj0a6d4Tf3a4MElEpR8Csq\ngPJywMoKcHAAbGyahLyJqvlPCj0AaGQa3Jh7A8pMJXr93AvWPrUva2zJysKa9HSc8/VFd2vzWwZR\nl1Ygau8KlHTeAdtW0+D1oCj85gQpQCa7gOzs7yGTXUTnzovg6vo6mjVrrXMfRUVFuHLlCi5evIhL\nly4hISEBQ4cOxciRI9G1a1e4ubnB3d0dbm5uaNu2ba39VVRUID4+HrGxsYiJiUFsbCxiY2ORnp4O\nX19fTJo0CZMmTcKAAQMMNnJvoomG5D8r9IA4Es7elo3U5anwXOkJ55ecq13KWZ+RgW+zsnDO1xdd\nW+suSg1F0YUixM+PR/sR7dF5jQ3yFT8gO3sHWrf2gpvb67C3nwZLS9PNQFQqCXJydiEnZyeaNbOB\nq+vLcHKabRB3SZlMBj8/PwQGBiI9PR2ZmZnIyspCVlYWmjVrBnd3d9jZ2UGlUkGhUNzTVCoVunXr\nhl69eqFXr17o3bs3evXqhW7duhllptBEEw3Nf1rob1MeU47Y52Jh3d0a3tu9YWVbef33y7Q07JZI\ncN7XF51M5QtXDZpSDZI/TIb0mBTeW71h9/jdzUBBUEMqPYKsrO9QUREDZ+d5cHV9Ba1adWkQ20gN\nCgvPICdnB2SyC3BwmA4Xl5fRtu2QBvFSIgmZTIasrCxIpVK0bNkSrVq1uqfZ2NigeXPz3cNooon6\n0iT0txAUApIXJyP/z3z03NcTHUZ1AEksT03FH/n5OOfrC5eWLY1ybX0p/LsQ8QviYTveFl7rvNC8\nQ/ViVVERh+zsbZBI9qF1ay906PAw2rd/GO3bj4SVlWG8WQRBjbKya5DJLkEmu4ji4gBYW/vAxWU+\nHB2fRfPmtS+jNNFEE4anSej/hfSkFPEvxcNxpiN2PSvgGIpxxtcXjmY0hS+7XobUz1JRFlYG7+3e\nsH1Ed6EWBAVKSkJQXHwZMtlllJQEoVUrj1vCPxItW3aBlZUtrKzs0Lx5R1hYVPYqIgmNRga1Ohcq\nVS5UKgnk8psoLr6M4uIAtGrVFR06jEaHDqPQocPDNfr4N9FEEw1Dk9BXgVKixP73IuF0ohwer7nD\n+4Mu9yznmILSa6VI/SwVpVdL0fnDznBZ4IJm1vVz7xRH4eF3hFqlyoFaLYVaLYVWW4xmzdrCysoO\nzZq1vXV/HiwsWqJFCye0aOGMFi2c0LJlZ3To8BDat38IVlbmG5DVRBP/VZqE/l+UajSYHx+PdKUS\nh9t5o2h1FvL/zIfbm27o9G6nGpdHjEXJ1RKkfZaG0rBSdF7UGS4vu6BZa+P775NaaDTFt0S/BFZW\ndrCycqqTh0wTTTRhepqE/h/EVVRgWnQ0HmzfHlu6d0erW6508ptypH2RBukxKdwXusP1DVdYdTTu\nCF9bpkXhqULk/JiD8qhydF7cGS4vuZgk22QTTTTRuGkS+lv8np+P1xISsNLTE/NdXKo8pyKhAmlf\npKHgrwLYDLCB3eN2sHvcDtY9rA3iRaLKV0F6VIqCQwWQXZKh3fB2cJzhCKdZTrBs2STwTTTRhH78\n54VeQ2JxcjL+yM/H7717Y5AOATbaCi1kF2SQHpdCekwKi+YWouhPskObPm1g5WBVa7StpkQDRZoC\nyjQlKuIqUHC0AGXXy2D7iC3sp9rDbqKdSZaJmmiiifuP/7TQ56pUeCY2Fq0sLbG/Z0/Y6ZE/hSTK\no8shPSZF4YlCyG/Koc5Xo1mbZrBytIKVgxVaOLZAc9vmUBeooUxTQpGmgKAS0KpLK7Tq0gqtvVrD\n9jFbdBzXsWlppokmmjA4/0mhJ4lDBQVYmJSEF52dscLDA80MGMBDEhqZBuo8NdT5aqjyVFBL1bCy\ns7oj7s3tmptVTvgmmmji/uU/J/ShpaV4LykJRRoNNnfrhv917Ggg65poookmzBNdtPO+WCjOVCrx\ncXIyThcV4TMPD8xzcTHoKL6JJppoojHTqIW+XKvFmvR0bMnKwquurkh44AG0bcpr0kQTTTRRCb13\nBwsLCzF+/Hh4e3vjkUcegUwmq/ZcrVaLAQMG4IknntD3cnf7InFZJsPCxER0Cw5GklyOsMGD8aWn\n530j8hcvXjS1CWZD03txl6b34i5N70Xd0FvoV61ahfHjxyMhIQFjx47FqlWrqj138+bN6NWrl94b\nlCpBwN+FhXglPh6uAQF4OykJ9lZWOO/ri/29eqGLmWWdrC9NH+K7NL0Xd2l6L+7S9F7UDb2HwEeO\nHMGlS5cAAHPnzsXo0aOrFPvMzEycOHECH3/8MTZs2FBjnwfz8iDTaCq1PLUa54uK4GNtjWn29ggY\nOBBeZpgzvokmmmjCXNFb6HNzc+Hk5AQAcHJyQm5ubpXnvfvuu1i7di1KSkpq7fO3/Hx0aN78TnNr\n2RIjmzfHpm7d4G5maYSbaKKJJhoNrIFx48axT58+97TDhw+zQ4cOlc7t2LHjPc8/evQoX3/9dZLk\nhQsX+Pjjj1d7LQBNrak1tabW1PRotVHjiP7MmTPVPubk5ASJRAJnZ2fk5OTA0dHxnnMCAgJw5MgR\nnDhxAgqFAiUlJZgzZw727t17z7lm4s7fRBNNNHHfoXfA1Icffgg7OzssWrQIq1atgkwmq3FD9tKl\nS1i3bh2OHj2qt7FNNNFEE03UHb29bhYvXowzZ87A29sb58+fx+LFiwEA2dnZmDRpUpXPaUoL0EQT\nTTTR8Jg8BcKpU6fwzjvvQKvVYv78+Vi0aJEpzTEZ8+bNw/Hjx+Ho6IioqChTm2NSMjIyMGfOHOTl\n5cHCwgILFizA22+/bWqzTIJCocCoUaOgVCqhUqkwZcoUrFy50tRmmRStVovBgwfD3d39P71C4OHh\ngXbt2qFZs2awsrJCSEhIteeaVOi1Wi18fHxw9uxZuLm5YciQIThw4AB69uxpKpNMxpUrV2BjY4M5\nc+b854VeIpFAIpGgf//+KCsrw6BBg/DXX3/9Jz8XAFBRUQFra2toNBqMHDkS69atw8iRI01tlsnY\nsGEDrl27htLSUhw5csTU5piMrl274tq1a7C1rb2utEnz5oaEhKBbt27w8PCAlZUVZs6cicOHD5vS\nJJPx0EMPoWNTEjYAgLOzM/r37w8AsLGxQc+ePZGdnW1iq0yHtbU1AEClUkGr1er0xb5fuR2XM3/+\n/CYHDujuxGJSoc/KykKnTp3u/O3u7o6srCwTWtSEuZGamorw8HAMHTrU1KaYDEEQ0L9/fzg5OWHM\nmDHo1auXqU0yGbfjciwtm2o7WFhYYNy4cRg8eDB27NhR47kmfbeaNmebqImysjJMnz4dmzdvho2N\njanNMRmWlpa4fv06MjMzcfny5f9s+P+xY8fg6OiIAQMGNI3mAfj7+yM8PBwnT57Et99+iytXrlR7\nrkmF3s3NDRkZGXf+zsjI+P/27lZVsSgM4/g/2E2GAQ3WDYILBEGwbEGDHygG2SAWb8Cr8ArsFoPe\ngShosnkFGhQMIthEBQ1OmXPSnGnDK9vnl1d4wuIJ65N4PG6YSN7F8/mk2WzSbrep1+vWcd5CNBql\nXC6zXq+to5j4upeTTCYJgoDFYkGn07GOZebXn/+vY7EYjUbjn5uxpkWfyWTYbrfs93sejweTyYRa\nrWYZSd7A6/Wi2+3ieR69Xs86jqnz+fz9Muz9fmc+n+OcM05lo9/vczgc2O12jMdjfN//6+XLT3C7\n3bhcLgBcr1dmsxmpVOrH8aZFH4lEGAwGlEolPM+j1Wp97MmKIAjI5XJsNhsSiQTD4dA6kpnVasVo\nNGK5XOKcwznHdDq1jmXieDzi+z7pdJpsNku1WqVQKFjHegufvPR7Op3I5/Pf86JSqVAsFn8cb36O\nXkRE/i9tXYuIhJyKXkQk5FT0IiIhp6IXEQk5Fb2ISMip6EVEQu43rW28lpzf12cAAAAASUVORK5C\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%%\"> </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%%\"> </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 |
" |
|
|
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. |
|
|
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 |
" |
|
|
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 |
" |
|
|
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 |
" |
|
|
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 0x10 |
|
|
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": |
|
|
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": |
|
|
83 | "prompt_number": 3, | |
|
72 | 84 | "text": [ |
|
73 | 85 | "30" |
|
74 | 86 | ] |
|
75 | 87 | } |
|
76 | 88 | ], |
|
77 |
"prompt_number": |
|
|
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": |
|
|
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": |
|
|
130 | "prompt_number": 5, | |
|
113 | 131 | "text": [ |
|
114 | 132 | "40.0" |
|
115 | 133 | ] |
|
116 | 134 | } |
|
117 | 135 | ], |
|
118 |
"prompt_number": |
|
|
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: |
|
|
225 | "1000000 loops, best of 3: 821 ns per loop\n" | |
|
200 | 226 | ] |
|
201 | 227 | } |
|
202 | 228 | ], |
|
203 |
"prompt_number": |
|
|
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": |
|
|
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. |
|
|
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 |
" |
|
|
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 |
" |
|
|
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 |
" |
|
|
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 |
" |
|
|
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 |
" |
|
|
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 |
" |
|
|
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 |
" |
|
|
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 |
" |
|
|
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": |
|
|
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 |
" |
|
|
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 |
" |
|
|
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. |
|
|
306 |
" |
|
|
336 | "from IPython.display import Latex\n", | |
|
337 | "Latex(poly2latex(p))" | |
|
307 | 338 | ], |
|
308 | 339 | "language": "python", |
|
309 |
" |
|
|
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": |
|
|
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 |
" |
|
|
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 |
" |
|
|
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 |
" |
|
|
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": " |
|
|
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": " |
|
|
117 | "collapsed": true, | |
|
118 |
" |
|
|
119 | "language": "python", | |
|
120 | "outputs": [], | |
|
121 | "prompt_number": " " | |
|
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": "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\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": "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\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": "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\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": |
|
|
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": |
|
|
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": |
|
|
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": |
|
|
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 |
|
|
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": |
|
|
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": |
|
|
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": 2 |
|
|
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": |
|
|
87 | "prompt_number": 3, | |
|
78 | 88 | "text": [ |
|
79 |
"[ |
|
|
89 | "[2, 3, 1, 0]" | |
|
80 | 90 | ] |
|
81 | 91 | } |
|
82 | 92 | ], |
|
83 |
"prompt_number": |
|
|
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": " |
|
|
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": |
|
|
122 | "prompt_number": 4 | |
|
141 | 123 | }, |
|
142 | 124 | { |
|
143 | 125 | "cell_type": "markdown", |
|
126 | "metadata": {}, | |
|
144 | 127 | "source": [ |
|
145 |
"With |
|
|
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 |
" |
|
|
157 | "", | |
|
158 |
" |
|
|
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": |
|
|
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": |
|
|
166 | "prompt_number": 6, | |
|
207 | 167 | "text": [ |
|
208 |
"[ |
|
|
168 | "[9, 16, 4, 1]" | |
|
209 | 169 | ] |
|
210 | 170 | } |
|
211 | 171 | ], |
|
212 |
"prompt_number": |
|
|
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": |
|
|
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": |
|
|
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": |
|
|
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": |
|
|
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": |
|
|
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": |
|
|
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": |
|
|
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": |
|
|
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": |
|
|
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": |
|
|
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