##// END OF EJS Templates
More changes to example notebooks for Python 3 compatibility
Thomas Kluyver -
Show More
@@ -1,439 +1,439
1 1 {
2 2 "metadata": {
3 3 "name": "Part 1 - Running Code"
4 4 },
5 5 "nbformat": 3,
6 6 "nbformat_minor": 0,
7 7 "worksheets": [
8 8 {
9 9 "cells": [
10 10 {
11 11 "cell_type": "heading",
12 12 "level": 1,
13 13 "metadata": {},
14 14 "source": [
15 15 "Running Code in the IPython Notebook"
16 16 ]
17 17 },
18 18 {
19 19 "cell_type": "markdown",
20 20 "metadata": {},
21 21 "source": [
22 22 "First and foremost, the IPython Notebook is an interactive environment for writing and running Python code."
23 23 ]
24 24 },
25 25 {
26 26 "cell_type": "heading",
27 27 "level": 2,
28 28 "metadata": {},
29 29 "source": [
30 30 "Code cells allow you to enter and run Python code"
31 31 ]
32 32 },
33 33 {
34 34 "cell_type": "markdown",
35 35 "metadata": {},
36 36 "source": [
37 37 "Run a code cell using `Shift-Enter` or pressing the \"Play\" button in the toolbar above:"
38 38 ]
39 39 },
40 40 {
41 41 "cell_type": "code",
42 42 "collapsed": false,
43 43 "input": [
44 44 "a = 10"
45 45 ],
46 46 "language": "python",
47 47 "metadata": {},
48 48 "outputs": [],
49 49 "prompt_number": 10
50 50 },
51 51 {
52 52 "cell_type": "code",
53 53 "collapsed": false,
54 54 "input": [
55 "print a"
55 "print(a)"
56 56 ],
57 57 "language": "python",
58 58 "metadata": {},
59 59 "outputs": [
60 60 {
61 61 "output_type": "stream",
62 62 "stream": "stdout",
63 63 "text": [
64 64 "10\n"
65 65 ]
66 66 }
67 67 ],
68 68 "prompt_number": 11
69 69 },
70 70 {
71 71 "cell_type": "heading",
72 72 "level": 2,
73 73 "metadata": {},
74 74 "source": [
75 75 "Managing the IPython Kernel"
76 76 ]
77 77 },
78 78 {
79 79 "cell_type": "markdown",
80 80 "metadata": {},
81 81 "source": [
82 82 "Code is run in a separate process called the IPython Kernel. The Kernel can be interrupted or restarted. Try running the following cell and then hit the \"Stop\" button in the toolbar above."
83 83 ]
84 84 },
85 85 {
86 86 "cell_type": "code",
87 87 "collapsed": false,
88 88 "input": [
89 89 "import time\n",
90 90 "time.sleep(10)"
91 91 ],
92 92 "language": "python",
93 93 "metadata": {},
94 94 "outputs": [
95 95 {
96 96 "ename": "KeyboardInterrupt",
97 97 "evalue": "",
98 98 "output_type": "pyerr",
99 99 "traceback": [
100 100 "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
101 101 "\u001b[0;32m<ipython-input-16-d7b436e260d5>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msleep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
102 102 "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
103 103 ]
104 104 }
105 105 ],
106 106 "prompt_number": 16
107 107 },
108 108 {
109 109 "cell_type": "markdown",
110 110 "metadata": {},
111 111 "source": [
112 112 "If the Kernel dies you will be prompted to restart it. Here we call the low-level system libc.time routine with the wrong argument via\n",
113 113 "ctypes to segfault the Python interpreter:"
114 114 ]
115 115 },
116 116 {
117 117 "cell_type": "code",
118 118 "collapsed": false,
119 119 "input": [
120 120 "import sys\n",
121 121 "from ctypes import CDLL\n",
122 122 "# This will crash a Linux or Mac system; equivalent calls can be made on Windows\n",
123 "dll = 'dylib' if sys.platform == 'darwin' else '.so.6'\n",
123 "dll = 'dylib' if sys.platform == 'darwin' else 'so.6'\n",
124 124 "libc = CDLL(\"libc.%s\" % dll) \n",
125 125 "libc.time(-1) # BOOM!!"
126 126 ],
127 127 "language": "python",
128 128 "metadata": {},
129 129 "outputs": [],
130 130 "prompt_number": "*"
131 131 },
132 132 {
133 133 "cell_type": "heading",
134 134 "level": 2,
135 135 "metadata": {},
136 136 "source": [
137 137 "All of the goodness of IPython works"
138 138 ]
139 139 },
140 140 {
141 141 "cell_type": "markdown",
142 142 "metadata": {},
143 143 "source": [
144 144 "Here are two system aliases:"
145 145 ]
146 146 },
147 147 {
148 148 "cell_type": "code",
149 149 "collapsed": false,
150 150 "input": [
151 151 "pwd"
152 152 ],
153 153 "language": "python",
154 154 "metadata": {},
155 155 "outputs": [
156 156 {
157 157 "output_type": "pyout",
158 158 "prompt_number": 4,
159 159 "text": [
160 160 "u'/Users/bgranger/Documents/Computation/IPython/code/ipython/examples/notebooks'"
161 161 ]
162 162 }
163 163 ],
164 164 "prompt_number": 4
165 165 },
166 166 {
167 167 "cell_type": "code",
168 168 "collapsed": false,
169 169 "input": [
170 170 "ls"
171 171 ],
172 172 "language": "python",
173 173 "metadata": {},
174 174 "outputs": [
175 175 {
176 176 "output_type": "stream",
177 177 "stream": "stdout",
178 178 "text": [
179 179 "01_notebook_introduction.ipynb Octave Magic.ipynb\r\n",
180 180 "Animations Using clear_output.ipynb PyLab and Matplotlib.ipynb\r\n",
181 181 "Basic Output.ipynb R Magics.ipynb\r\n",
182 182 "Custom Display Logic.ipynb Running Code.ipynb\r\n",
183 183 "Cython Magics.ipynb Script Magics.ipynb\r\n",
184 184 "Data Publication API.ipynb SymPy Examples.ipynb\r\n",
185 185 "Display System.ipynb Trapezoid Rule.ipynb\r\n",
186 186 "JS Progress Bar.ipynb Typesetting Math Using MathJax.ipynb\r\n",
187 187 "Local Files.ipynb animation.m4v\r\n",
188 188 "Markdown Cells.ipynb python-logo.svg\r\n",
189 189 "Notebook Tour.ipynb\r\n"
190 190 ]
191 191 }
192 192 ],
193 193 "prompt_number": 2
194 194 },
195 195 {
196 196 "cell_type": "markdown",
197 197 "metadata": {},
198 198 "source": [
199 199 "Any command line program can be run using `!` with string interpolation from Python variables:"
200 200 ]
201 201 },
202 202 {
203 203 "cell_type": "code",
204 204 "collapsed": false,
205 205 "input": [
206 206 "message = 'The IPython notebook is great!'\n",
207 207 "# note: the echo command does not run on Windows, it's a unix command.\n",
208 208 "!echo $message"
209 209 ],
210 210 "language": "python",
211 211 "metadata": {},
212 212 "outputs": []
213 213 },
214 214 {
215 215 "cell_type": "markdown",
216 216 "metadata": {},
217 217 "source": [
218 218 "Tab completion works:"
219 219 ]
220 220 },
221 221 {
222 222 "cell_type": "code",
223 223 "collapsed": false,
224 224 "input": [
225 225 "import numpy\n",
226 226 "numpy.random."
227 227 ],
228 228 "language": "python",
229 229 "metadata": {},
230 230 "outputs": [],
231 231 "prompt_number": 9
232 232 },
233 233 {
234 234 "cell_type": "markdown",
235 235 "metadata": {},
236 236 "source": [
237 237 "Tab completion after `(` brings up a tooltip with the docstring:"
238 238 ]
239 239 },
240 240 {
241 241 "cell_type": "code",
242 242 "collapsed": false,
243 243 "input": [
244 244 "numpy.random.rand("
245 245 ],
246 246 "language": "python",
247 247 "metadata": {},
248 248 "outputs": []
249 249 },
250 250 {
251 251 "cell_type": "markdown",
252 252 "metadata": {},
253 253 "source": [
254 254 "Adding `?` opens the docstring in the pager below:"
255 255 ]
256 256 },
257 257 {
258 258 "cell_type": "code",
259 259 "collapsed": false,
260 260 "input": [
261 261 "magic?"
262 262 ],
263 263 "language": "python",
264 264 "metadata": {},
265 265 "outputs": [],
266 266 "prompt_number": 8
267 267 },
268 268 {
269 269 "cell_type": "markdown",
270 270 "metadata": {},
271 271 "source": [
272 272 "Exceptions are formatted nicely:"
273 273 ]
274 274 },
275 275 {
276 276 "cell_type": "code",
277 277 "collapsed": false,
278 278 "input": [
279 279 "x = 1\n",
280 280 "y = 4\n",
281 281 "z = y/(1-x)"
282 282 ],
283 283 "language": "python",
284 284 "metadata": {},
285 285 "outputs": [
286 286 {
287 287 "ename": "ZeroDivisionError",
288 288 "evalue": "integer division or modulo by zero",
289 289 "output_type": "pyerr",
290 290 "traceback": [
291 291 "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mZeroDivisionError\u001b[0m Traceback (most recent call last)",
292 292 "\u001b[0;32m<ipython-input-15-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",
293 293 "\u001b[0;31mZeroDivisionError\u001b[0m: integer division or modulo by zero"
294 294 ]
295 295 }
296 296 ],
297 297 "prompt_number": 15
298 298 },
299 299 {
300 300 "cell_type": "heading",
301 301 "level": 2,
302 302 "metadata": {},
303 303 "source": [
304 304 "Working with external code"
305 305 ]
306 306 },
307 307 {
308 308 "cell_type": "markdown",
309 309 "metadata": {},
310 310 "source": [
311 311 "There are a number of ways of getting external code into code cells."
312 312 ]
313 313 },
314 314 {
315 315 "cell_type": "markdown",
316 316 "metadata": {},
317 317 "source": [
318 318 "Pasting code with `>>>` prompts works as expected:"
319 319 ]
320 320 },
321 321 {
322 322 "cell_type": "code",
323 323 "collapsed": false,
324 324 "input": [
325 325 ">>> the_world_is_flat = 1\n",
326 326 ">>> if the_world_is_flat:\n",
327 "... print \"Be careful not to fall off!\""
327 "... print(\"Be careful not to fall off!\")"
328 328 ],
329 329 "language": "python",
330 330 "metadata": {},
331 331 "outputs": [
332 332 {
333 333 "output_type": "stream",
334 334 "stream": "stdout",
335 335 "text": [
336 336 "Be careful not to fall off!\n"
337 337 ]
338 338 }
339 339 ],
340 340 "prompt_number": 1
341 341 },
342 342 {
343 343 "cell_type": "markdown",
344 344 "metadata": {},
345 345 "source": [
346 346 "The `%load` magic lets you load code from URLs or local files:"
347 347 ]
348 348 },
349 349 {
350 350 "cell_type": "code",
351 351 "collapsed": false,
352 352 "input": [
353 353 "%load?"
354 354 ],
355 355 "language": "python",
356 356 "metadata": {},
357 357 "outputs": [],
358 358 "prompt_number": 14
359 359 },
360 360 {
361 361 "cell_type": "code",
362 362 "collapsed": false,
363 363 "input": [
364 364 "%pylab inline"
365 365 ],
366 366 "language": "python",
367 367 "metadata": {},
368 368 "outputs": [
369 369 {
370 370 "output_type": "stream",
371 371 "stream": "stdout",
372 372 "text": [
373 373 "\n",
374 374 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
375 375 "For more information, type 'help(pylab)'.\n"
376 376 ]
377 377 }
378 378 ],
379 379 "prompt_number": 2
380 380 },
381 381 {
382 382 "cell_type": "code",
383 383 "collapsed": false,
384 384 "input": [
385 385 "%load http://matplotlib.sourceforge.net/mpl_examples/pylab_examples/integral_demo.py"
386 386 ],
387 387 "language": "python",
388 388 "metadata": {},
389 389 "outputs": [],
390 390 "prompt_number": 3
391 391 },
392 392 {
393 393 "cell_type": "code",
394 394 "collapsed": false,
395 395 "input": [
396 396 "#!/usr/bin/env python\n",
397 397 "\n",
398 398 "# implement the example graphs/integral from pyx\n",
399 399 "from pylab import *\n",
400 400 "from matplotlib.patches import Polygon\n",
401 401 "\n",
402 402 "def func(x):\n",
403 403 " return (x-3)*(x-5)*(x-7)+85\n",
404 404 "\n",
405 405 "ax = subplot(111)\n",
406 406 "\n",
407 407 "a, b = 2, 9 # integral area\n",
408 408 "x = arange(0, 10, 0.01)\n",
409 409 "y = func(x)\n",
410 410 "plot(x, y, linewidth=1)\n",
411 411 "\n",
412 412 "# make the shaded region\n",
413 413 "ix = arange(a, b, 0.01)\n",
414 414 "iy = func(ix)\n",
415 415 "verts = [(a,0)] + zip(ix,iy) + [(b,0)]\n",
416 416 "poly = Polygon(verts, facecolor='0.8', edgecolor='k')\n",
417 417 "ax.add_patch(poly)\n",
418 418 "\n",
419 419 "text(0.5 * (a + b), 30,\n",
420 420 " r\"$\\int_a^b f(x)\\mathrm{d}x$\", horizontalalignment='center',\n",
421 421 " fontsize=20)\n",
422 422 "\n",
423 423 "axis([0,10, 0, 180])\n",
424 424 "figtext(0.9, 0.05, 'x')\n",
425 425 "figtext(0.1, 0.9, 'y')\n",
426 426 "ax.set_xticks((a,b))\n",
427 427 "ax.set_xticklabels(('a','b'))\n",
428 428 "ax.set_yticks([])\n",
429 429 "show()\n"
430 430 ],
431 431 "language": "python",
432 432 "metadata": {},
433 433 "outputs": []
434 434 }
435 435 ],
436 436 "metadata": {}
437 437 }
438 438 ]
439 439 } No newline at end of file
@@ -1,1156 +1,1159
1 1 {
2 2 "metadata": {
3 3 "name": "Part 2 - Basic Output"
4 4 },
5 5 "nbformat": 3,
6 6 "nbformat_minor": 0,
7 7 "worksheets": [
8 8 {
9 9 "cells": [
10 10 {
11 11 "cell_type": "heading",
12 12 "level": 1,
13 13 "metadata": {},
14 14 "source": [
15 15 "Basic Output"
16 16 ]
17 17 },
18 18 {
19 19 "cell_type": "markdown",
20 20 "metadata": {},
21 21 "source": [
22 22 "When a cell is run, it can generate *output*. In IPython, the definition of output is quite general; it can be text, images, LaTeX, HTML or JSON. All output is displayed below the code that generated it, in the *output area*.\n",
23 23 "\n",
24 24 "This Notebook describes the basics of output and shows how the `stdout/stderr` streams are handled."
25 25 ]
26 26 },
27 27 {
28 28 "cell_type": "heading",
29 29 "level": 2,
30 30 "metadata": {},
31 31 "source": [
32 32 "Displayhook"
33 33 ]
34 34 },
35 35 {
36 36 "cell_type": "markdown",
37 37 "metadata": {},
38 38 "source": [
39 39 "When a Python object is returned by an expression, Python's `displayhook` mechanism is triggered. In IPython, this results in an output prompt, such as `Out[2]`. These objects are then available under the variables:\n",
40 40 "\n",
41 41 "* `_` (last output)\n",
42 42 "* `__` (second to last output)\n",
43 43 "* `_N` (`Out[N]`)"
44 44 ]
45 45 },
46 46 {
47 47 "cell_type": "code",
48 48 "collapsed": false,
49 49 "input": [
50 "import numpy as np"
50 "import numpy as np\n",
51 "import sys"
51 52 ],
52 53 "language": "python",
53 54 "metadata": {},
54 55 "outputs": [],
55 56 "prompt_number": 24
56 57 },
57 58 {
58 59 "cell_type": "code",
59 60 "collapsed": false,
60 61 "input": [
61 "numpy.random.rand(10)"
62 "np.random.rand(10)"
62 63 ],
63 64 "language": "python",
64 65 "metadata": {},
65 66 "outputs": [
66 67 {
67 68 "output_type": "pyout",
68 69 "prompt_number": 27,
69 70 "text": [
70 71 "array([ 0.94311014, 0.03500265, 0.59873731, 0.63411734, 0.03642486,\n",
71 72 " 0.22090049, 0.33132549, 0.24439398, 0.80084185, 0.25114916])"
72 73 ]
73 74 }
74 75 ],
75 76 "prompt_number": 27
76 77 },
77 78 {
78 79 "cell_type": "code",
79 80 "collapsed": false,
80 81 "input": [
81 82 "np.sin(_)"
82 83 ],
83 84 "language": "python",
84 85 "metadata": {},
85 86 "outputs": [
86 87 {
87 88 "output_type": "pyout",
88 89 "prompt_number": 28,
89 90 "text": [
90 91 "array([ 0.80938852, 0.0349955 , 0.56359988, 0.59246668, 0.0364168 ,\n",
91 92 " 0.21910832, 0.32529671, 0.24196836, 0.71794236, 0.24851724])"
92 93 ]
93 94 }
94 95 ],
95 96 "prompt_number": 28
96 97 },
97 98 {
98 99 "cell_type": "heading",
99 100 "level": 2,
100 101 "metadata": {},
101 102 "source": [
102 103 "sys.stdout and sys.stderr"
103 104 ]
104 105 },
105 106 {
106 107 "cell_type": "markdown",
107 108 "metadata": {},
108 109 "source": [
109 110 "The stdout and stderr streams are displayed as text in the output area."
110 111 ]
111 112 },
112 113 {
113 114 "cell_type": "code",
114 115 "collapsed": false,
115 116 "input": [
116 "print \"hi, stdout\""
117 "print(\"hi, stdout\")"
117 118 ],
118 119 "language": "python",
119 120 "metadata": {},
120 121 "outputs": [
121 122 {
122 123 "output_type": "stream",
123 124 "stream": "stdout",
124 125 "text": [
125 126 "hi, stdout\n"
126 127 ]
127 128 }
128 129 ],
129 130 "prompt_number": 29
130 131 },
131 132 {
132 133 "cell_type": "code",
133 134 "collapsed": false,
134 135 "input": [
135 "print >> sys.stderr, 'hi, stderr'"
136 "from __future__ import print_function\n",
137 "print('hi, stderr', file=sys.stderr)"
136 138 ],
137 139 "language": "python",
138 140 "metadata": {},
139 141 "outputs": [
140 142 {
141 143 "output_type": "stream",
142 144 "stream": "stderr",
143 145 "text": [
144 146 "hi, stderr\n"
145 147 ]
146 148 }
147 149 ],
148 150 "prompt_number": 8
149 151 },
150 152 {
151 153 "cell_type": "heading",
152 154 "level": 2,
153 155 "metadata": {},
154 156 "source": [
155 157 "Output is asynchronous"
156 158 ]
157 159 },
158 160 {
159 161 "cell_type": "markdown",
160 162 "metadata": {},
161 163 "source": [
162 164 "All output is displayed asynchronously as it is generated in the Kernel. If you execute the next cell, you will see the output one piece at a time, not all at the end."
163 165 ]
164 166 },
165 167 {
166 168 "cell_type": "code",
167 169 "collapsed": false,
168 170 "input": [
169 171 "import time, sys\n",
170 172 "for i in range(8):\n",
171 " print i,\n",
173 " print(i)\n",
172 174 " time.sleep(0.5)"
173 175 ],
174 176 "language": "python",
175 177 "metadata": {},
176 178 "outputs": [
177 179 {
178 180 "output_type": "stream",
179 181 "stream": "stdout",
180 182 "text": [
181 183 "0 "
182 184 ]
183 185 },
184 186 {
185 187 "output_type": "stream",
186 188 "stream": "stdout",
187 189 "text": [
188 190 "1 "
189 191 ]
190 192 },
191 193 {
192 194 "output_type": "stream",
193 195 "stream": "stdout",
194 196 "text": [
195 197 "2 "
196 198 ]
197 199 },
198 200 {
199 201 "output_type": "stream",
200 202 "stream": "stdout",
201 203 "text": [
202 204 "3 "
203 205 ]
204 206 },
205 207 {
206 208 "output_type": "stream",
207 209 "stream": "stdout",
208 210 "text": [
209 211 "4 "
210 212 ]
211 213 },
212 214 {
213 215 "output_type": "stream",
214 216 "stream": "stdout",
215 217 "text": [
216 218 "5 "
217 219 ]
218 220 },
219 221 {
220 222 "output_type": "stream",
221 223 "stream": "stdout",
222 224 "text": [
223 225 "6 "
224 226 ]
225 227 },
226 228 {
227 229 "output_type": "stream",
228 230 "stream": "stdout",
229 231 "text": [
230 232 "7\n"
231 233 ]
232 234 }
233 235 ],
234 236 "prompt_number": 30
235 237 },
236 238 {
237 239 "cell_type": "heading",
238 240 "level": 2,
239 241 "metadata": {},
240 242 "source": [
241 243 "Large outputs"
242 244 ]
243 245 },
244 246 {
245 247 "cell_type": "markdown",
246 248 "metadata": {},
247 249 "source": [
248 250 "To better handle large outputs, the output area can be collapsed. Run the following cell and then single- or double- click on the active area to the left of the output:"
249 251 ]
250 252 },
251 253 {
252 254 "cell_type": "code",
253 255 "collapsed": false,
254 256 "input": [
255 257 "for i in range(50):\n",
256 " print i"
258 " print(i)"
257 259 ],
258 260 "language": "python",
259 261 "metadata": {},
260 262 "outputs": [
261 263 {
262 264 "output_type": "stream",
263 265 "stream": "stdout",
264 266 "text": [
265 267 "0\n",
266 268 "1\n",
267 269 "2\n",
268 270 "3\n",
269 271 "4\n",
270 272 "5\n",
271 273 "6\n",
272 274 "7\n",
273 275 "8\n",
274 276 "9\n",
275 277 "10\n",
276 278 "11\n",
277 279 "12\n",
278 280 "13\n",
279 281 "14\n",
280 282 "15\n",
281 283 "16\n",
282 284 "17\n",
283 285 "18\n",
284 286 "19\n",
285 287 "20\n",
286 288 "21\n",
287 289 "22\n",
288 290 "23\n",
289 291 "24\n",
290 292 "25\n",
291 293 "26\n",
292 294 "27\n",
293 295 "28\n",
294 296 "29\n",
295 297 "30\n",
296 298 "31\n",
297 299 "32\n",
298 300 "33\n",
299 301 "34\n",
300 302 "35\n",
301 303 "36\n",
302 304 "37\n",
303 305 "38\n",
304 306 "39\n",
305 307 "40\n",
306 308 "41\n",
307 309 "42\n",
308 310 "43\n",
309 311 "44\n",
310 312 "45\n",
311 313 "46\n",
312 314 "47\n",
313 315 "48\n",
314 316 "49\n"
315 317 ]
316 318 }
317 319 ],
318 320 "prompt_number": 4
319 321 },
320 322 {
321 323 "cell_type": "markdown",
322 324 "metadata": {},
323 325 "source": [
324 326 "Beyond a certain point, output will scroll automatically:"
325 327 ]
326 328 },
327 329 {
328 330 "cell_type": "code",
329 331 "collapsed": false,
330 332 "input": [
331 333 "for i in range(500):\n",
332 " print 2**i - 1"
334 " print(2**i - 1)"
333 335 ],
334 336 "language": "python",
335 337 "metadata": {},
336 338 "outputs": [
337 339 {
338 340 "output_type": "stream",
339 341 "stream": "stdout",
340 342 "text": [
341 343 "0\n",
342 344 "1\n",
343 345 "3\n",
344 346 "7\n",
345 347 "15\n",
346 348 "31\n",
347 349 "63\n",
348 350 "127\n",
349 351 "255\n",
350 352 "511\n",
351 353 "1023\n",
352 354 "2047\n",
353 355 "4095\n",
354 356 "8191\n",
355 357 "16383\n",
356 358 "32767\n",
357 359 "65535\n",
358 360 "131071\n",
359 361 "262143\n",
360 362 "524287\n",
361 363 "1048575\n",
362 364 "2097151\n",
363 365 "4194303\n",
364 366 "8388607\n",
365 367 "16777215\n",
366 368 "33554431\n",
367 369 "67108863\n",
368 370 "134217727\n",
369 371 "268435455\n",
370 372 "536870911\n",
371 373 "1073741823\n",
372 374 "2147483647\n",
373 375 "4294967295\n",
374 376 "8589934591\n",
375 377 "17179869183\n",
376 378 "34359738367\n",
377 379 "68719476735\n",
378 380 "137438953471\n",
379 381 "274877906943\n",
380 382 "549755813887\n",
381 383 "1099511627775\n",
382 384 "2199023255551\n",
383 385 "4398046511103\n",
384 386 "8796093022207\n",
385 387 "17592186044415\n",
386 388 "35184372088831\n",
387 389 "70368744177663\n",
388 390 "140737488355327\n",
389 391 "281474976710655\n",
390 392 "562949953421311\n",
391 393 "1125899906842623\n",
392 394 "2251799813685247\n",
393 395 "4503599627370495\n",
394 396 "9007199254740991\n",
395 397 "18014398509481983\n",
396 398 "36028797018963967\n",
397 399 "72057594037927935\n",
398 400 "144115188075855871\n",
399 401 "288230376151711743\n",
400 402 "576460752303423487\n",
401 403 "1152921504606846975\n",
402 404 "2305843009213693951\n",
403 405 "4611686018427387903\n",
404 406 "9223372036854775807\n",
405 407 "18446744073709551615\n",
406 408 "36893488147419103231\n",
407 409 "73786976294838206463\n",
408 410 "147573952589676412927\n",
409 411 "295147905179352825855\n",
410 412 "590295810358705651711\n",
411 413 "1180591620717411303423\n",
412 414 "2361183241434822606847\n",
413 415 "4722366482869645213695\n",
414 416 "9444732965739290427391\n",
415 417 "18889465931478580854783\n",
416 418 "37778931862957161709567\n",
417 419 "75557863725914323419135\n",
418 420 "151115727451828646838271\n",
419 421 "302231454903657293676543\n",
420 422 "604462909807314587353087\n",
421 423 "1208925819614629174706175\n",
422 424 "2417851639229258349412351\n",
423 425 "4835703278458516698824703\n",
424 426 "9671406556917033397649407\n",
425 427 "19342813113834066795298815\n",
426 428 "38685626227668133590597631\n",
427 429 "77371252455336267181195263\n",
428 430 "154742504910672534362390527\n",
429 431 "309485009821345068724781055\n",
430 432 "618970019642690137449562111\n",
431 433 "1237940039285380274899124223\n",
432 434 "2475880078570760549798248447\n",
433 435 "4951760157141521099596496895\n",
434 436 "9903520314283042199192993791\n",
435 437 "19807040628566084398385987583\n",
436 438 "39614081257132168796771975167\n",
437 439 "79228162514264337593543950335\n",
438 440 "158456325028528675187087900671\n",
439 441 "316912650057057350374175801343\n",
440 442 "633825300114114700748351602687\n",
441 443 "1267650600228229401496703205375\n",
442 444 "2535301200456458802993406410751\n",
443 445 "5070602400912917605986812821503\n",
444 446 "10141204801825835211973625643007\n",
445 447 "20282409603651670423947251286015\n",
446 448 "40564819207303340847894502572031\n",
447 449 "81129638414606681695789005144063\n",
448 450 "162259276829213363391578010288127\n",
449 451 "324518553658426726783156020576255\n",
450 452 "649037107316853453566312041152511\n",
451 453 "1298074214633706907132624082305023\n",
452 454 "2596148429267413814265248164610047\n",
453 455 "5192296858534827628530496329220095\n",
454 456 "10384593717069655257060992658440191\n",
455 457 "20769187434139310514121985316880383\n",
456 458 "41538374868278621028243970633760767\n",
457 459 "83076749736557242056487941267521535\n",
458 460 "166153499473114484112975882535043071\n",
459 461 "332306998946228968225951765070086143\n",
460 462 "664613997892457936451903530140172287\n",
461 463 "1329227995784915872903807060280344575\n",
462 464 "2658455991569831745807614120560689151\n",
463 465 "5316911983139663491615228241121378303\n",
464 466 "10633823966279326983230456482242756607\n",
465 467 "21267647932558653966460912964485513215\n",
466 468 "42535295865117307932921825928971026431\n",
467 469 "85070591730234615865843651857942052863\n",
468 470 "170141183460469231731687303715884105727\n",
469 471 "340282366920938463463374607431768211455\n",
470 472 "680564733841876926926749214863536422911\n",
471 473 "1361129467683753853853498429727072845823\n",
472 474 "2722258935367507707706996859454145691647\n",
473 475 "5444517870735015415413993718908291383295\n",
474 476 "10889035741470030830827987437816582766591\n",
475 477 "21778071482940061661655974875633165533183\n",
476 478 "43556142965880123323311949751266331066367\n",
477 479 "87112285931760246646623899502532662132735\n",
478 480 "174224571863520493293247799005065324265471\n",
479 481 "348449143727040986586495598010130648530943\n",
480 482 "696898287454081973172991196020261297061887\n",
481 483 "1393796574908163946345982392040522594123775\n",
482 484 "2787593149816327892691964784081045188247551\n",
483 485 "5575186299632655785383929568162090376495103\n",
484 486 "11150372599265311570767859136324180752990207\n",
485 487 "22300745198530623141535718272648361505980415\n",
486 488 "44601490397061246283071436545296723011960831\n",
487 489 "89202980794122492566142873090593446023921663\n",
488 490 "178405961588244985132285746181186892047843327\n",
489 491 "356811923176489970264571492362373784095686655\n",
490 492 "713623846352979940529142984724747568191373311\n",
491 493 "1427247692705959881058285969449495136382746623\n",
492 494 "2854495385411919762116571938898990272765493247\n",
493 495 "5708990770823839524233143877797980545530986495\n",
494 496 "11417981541647679048466287755595961091061972991\n",
495 497 "22835963083295358096932575511191922182123945983\n",
496 498 "45671926166590716193865151022383844364247891967\n",
497 499 "91343852333181432387730302044767688728495783935\n",
498 500 "182687704666362864775460604089535377456991567871\n",
499 501 "365375409332725729550921208179070754913983135743\n",
500 502 "730750818665451459101842416358141509827966271487\n",
501 503 "1461501637330902918203684832716283019655932542975\n",
502 504 "2923003274661805836407369665432566039311865085951\n",
503 505 "5846006549323611672814739330865132078623730171903\n",
504 506 "11692013098647223345629478661730264157247460343807\n",
505 507 "23384026197294446691258957323460528314494920687615\n",
506 508 "46768052394588893382517914646921056628989841375231\n",
507 509 "93536104789177786765035829293842113257979682750463\n",
508 510 "187072209578355573530071658587684226515959365500927\n",
509 511 "374144419156711147060143317175368453031918731001855\n",
510 512 "748288838313422294120286634350736906063837462003711\n",
511 513 "1496577676626844588240573268701473812127674924007423\n",
512 514 "2993155353253689176481146537402947624255349848014847\n",
513 515 "5986310706507378352962293074805895248510699696029695\n",
514 516 "11972621413014756705924586149611790497021399392059391\n",
515 517 "23945242826029513411849172299223580994042798784118783\n",
516 518 "47890485652059026823698344598447161988085597568237567\n",
517 519 "95780971304118053647396689196894323976171195136475135\n",
518 520 "191561942608236107294793378393788647952342390272950271\n",
519 521 "383123885216472214589586756787577295904684780545900543\n",
520 522 "766247770432944429179173513575154591809369561091801087\n",
521 523 "1532495540865888858358347027150309183618739122183602175\n",
522 524 "3064991081731777716716694054300618367237478244367204351\n",
523 525 "6129982163463555433433388108601236734474956488734408703\n",
524 526 "12259964326927110866866776217202473468949912977468817407\n",
525 527 "24519928653854221733733552434404946937899825954937634815\n",
526 528 "49039857307708443467467104868809893875799651909875269631\n",
527 529 "98079714615416886934934209737619787751599303819750539263\n",
528 530 "196159429230833773869868419475239575503198607639501078527\n",
529 531 "392318858461667547739736838950479151006397215279002157055\n",
530 532 "784637716923335095479473677900958302012794430558004314111\n",
531 533 "1569275433846670190958947355801916604025588861116008628223\n",
532 534 "3138550867693340381917894711603833208051177722232017256447\n",
533 535 "6277101735386680763835789423207666416102355444464034512895\n",
534 536 "12554203470773361527671578846415332832204710888928069025791\n",
535 537 "25108406941546723055343157692830665664409421777856138051583\n",
536 538 "50216813883093446110686315385661331328818843555712276103167\n",
537 539 "100433627766186892221372630771322662657637687111424552206335\n",
538 540 "200867255532373784442745261542645325315275374222849104412671\n",
539 541 "401734511064747568885490523085290650630550748445698208825343\n",
540 542 "803469022129495137770981046170581301261101496891396417650687\n",
541 543 "1606938044258990275541962092341162602522202993782792835301375\n",
542 544 "3213876088517980551083924184682325205044405987565585670602751\n",
543 545 "6427752177035961102167848369364650410088811975131171341205503\n",
544 546 "12855504354071922204335696738729300820177623950262342682411007\n",
545 547 "25711008708143844408671393477458601640355247900524685364822015\n",
546 548 "51422017416287688817342786954917203280710495801049370729644031\n",
547 549 "102844034832575377634685573909834406561420991602098741459288063\n",
548 550 "205688069665150755269371147819668813122841983204197482918576127\n",
549 551 "411376139330301510538742295639337626245683966408394965837152255\n",
550 552 "822752278660603021077484591278675252491367932816789931674304511\n",
551 553 "1645504557321206042154969182557350504982735865633579863348609023\n",
552 554 "3291009114642412084309938365114701009965471731267159726697218047\n",
553 555 "6582018229284824168619876730229402019930943462534319453394436095\n",
554 556 "13164036458569648337239753460458804039861886925068638906788872191\n",
555 557 "26328072917139296674479506920917608079723773850137277813577744383\n",
556 558 "52656145834278593348959013841835216159447547700274555627155488767\n",
557 559 "105312291668557186697918027683670432318895095400549111254310977535\n",
558 560 "210624583337114373395836055367340864637790190801098222508621955071\n",
559 561 "421249166674228746791672110734681729275580381602196445017243910143\n",
560 562 "842498333348457493583344221469363458551160763204392890034487820287\n",
561 563 "1684996666696914987166688442938726917102321526408785780068975640575\n",
562 564 "3369993333393829974333376885877453834204643052817571560137951281151\n",
563 565 "6739986666787659948666753771754907668409286105635143120275902562303\n",
564 566 "13479973333575319897333507543509815336818572211270286240551805124607\n",
565 567 "26959946667150639794667015087019630673637144422540572481103610249215\n",
566 568 "53919893334301279589334030174039261347274288845081144962207220498431\n",
567 569 "107839786668602559178668060348078522694548577690162289924414440996863\n",
568 570 "215679573337205118357336120696157045389097155380324579848828881993727\n",
569 571 "431359146674410236714672241392314090778194310760649159697657763987455\n",
570 572 "862718293348820473429344482784628181556388621521298319395315527974911\n",
571 573 "1725436586697640946858688965569256363112777243042596638790631055949823\n",
572 574 "3450873173395281893717377931138512726225554486085193277581262111899647\n",
573 575 "6901746346790563787434755862277025452451108972170386555162524223799295\n",
574 576 "13803492693581127574869511724554050904902217944340773110325048447598591\n",
575 577 "27606985387162255149739023449108101809804435888681546220650096895197183\n",
576 578 "55213970774324510299478046898216203619608871777363092441300193790394367\n",
577 579 "110427941548649020598956093796432407239217743554726184882600387580788735\n",
578 580 "220855883097298041197912187592864814478435487109452369765200775161577471\n",
579 581 "441711766194596082395824375185729628956870974218904739530401550323154943\n",
580 582 "883423532389192164791648750371459257913741948437809479060803100646309887\n",
581 583 "1766847064778384329583297500742918515827483896875618958121606201292619775\n",
582 584 "3533694129556768659166595001485837031654967793751237916243212402585239551\n",
583 585 "7067388259113537318333190002971674063309935587502475832486424805170479103\n",
584 586 "14134776518227074636666380005943348126619871175004951664972849610340958207\n",
585 587 "28269553036454149273332760011886696253239742350009903329945699220681916415\n",
586 588 "56539106072908298546665520023773392506479484700019806659891398441363832831\n",
587 589 "113078212145816597093331040047546785012958969400039613319782796882727665663\n",
588 590 "226156424291633194186662080095093570025917938800079226639565593765455331327\n",
589 591 "452312848583266388373324160190187140051835877600158453279131187530910662655\n",
590 592 "904625697166532776746648320380374280103671755200316906558262375061821325311\n",
591 593 "1809251394333065553493296640760748560207343510400633813116524750123642650623\n",
592 594 "3618502788666131106986593281521497120414687020801267626233049500247285301247\n",
593 595 "7237005577332262213973186563042994240829374041602535252466099000494570602495\n",
594 596 "14474011154664524427946373126085988481658748083205070504932198000989141204991\n",
595 597 "28948022309329048855892746252171976963317496166410141009864396001978282409983\n",
596 598 "57896044618658097711785492504343953926634992332820282019728792003956564819967\n",
597 599 "115792089237316195423570985008687907853269984665640564039457584007913129639935\n",
598 600 "231584178474632390847141970017375815706539969331281128078915168015826259279871\n",
599 601 "463168356949264781694283940034751631413079938662562256157830336031652518559743\n",
600 602 "926336713898529563388567880069503262826159877325124512315660672063305037119487\n",
601 603 "1852673427797059126777135760139006525652319754650249024631321344126610074238975\n",
602 604 "3705346855594118253554271520278013051304639509300498049262642688253220148477951\n",
603 605 "7410693711188236507108543040556026102609279018600996098525285376506440296955903\n",
604 606 "14821387422376473014217086081112052205218558037201992197050570753012880593911807\n",
605 607 "29642774844752946028434172162224104410437116074403984394101141506025761187823615\n",
606 608 "59285549689505892056868344324448208820874232148807968788202283012051522375647231\n",
607 609 "118571099379011784113736688648896417641748464297615937576404566024103044751294463\n",
608 610 "237142198758023568227473377297792835283496928595231875152809132048206089502588927\n",
609 611 "474284397516047136454946754595585670566993857190463750305618264096412179005177855\n",
610 612 "948568795032094272909893509191171341133987714380927500611236528192824358010355711\n",
611 613 "1897137590064188545819787018382342682267975428761855001222473056385648716020711423\n",
612 614 "3794275180128377091639574036764685364535950857523710002444946112771297432041422847\n",
613 615 "7588550360256754183279148073529370729071901715047420004889892225542594864082845695\n",
614 616 "15177100720513508366558296147058741458143803430094840009779784451085189728165691391\n",
615 617 "30354201441027016733116592294117482916287606860189680019559568902170379456331382783\n",
616 618 "60708402882054033466233184588234965832575213720379360039119137804340758912662765567\n",
617 619 "121416805764108066932466369176469931665150427440758720078238275608681517825325531135\n",
618 620 "242833611528216133864932738352939863330300854881517440156476551217363035650651062271\n",
619 621 "485667223056432267729865476705879726660601709763034880312953102434726071301302124543\n",
620 622 "971334446112864535459730953411759453321203419526069760625906204869452142602604249087\n",
621 623 "1942668892225729070919461906823518906642406839052139521251812409738904285205208498175\n",
622 624 "3885337784451458141838923813647037813284813678104279042503624819477808570410416996351\n",
623 625 "7770675568902916283677847627294075626569627356208558085007249638955617140820833992703\n",
624 626 "15541351137805832567355695254588151253139254712417116170014499277911234281641667985407\n",
625 627 "31082702275611665134711390509176302506278509424834232340028998555822468563283335970815\n",
626 628 "62165404551223330269422781018352605012557018849668464680057997111644937126566671941631\n",
627 629 "124330809102446660538845562036705210025114037699336929360115994223289874253133343883263\n",
628 630 "248661618204893321077691124073410420050228075398673858720231988446579748506266687766527\n",
629 631 "497323236409786642155382248146820840100456150797347717440463976893159497012533375533055\n",
630 632 "994646472819573284310764496293641680200912301594695434880927953786318994025066751066111\n",
631 633 "1989292945639146568621528992587283360401824603189390869761855907572637988050133502132223\n",
632 634 "3978585891278293137243057985174566720803649206378781739523711815145275976100267004264447\n",
633 635 "7957171782556586274486115970349133441607298412757563479047423630290551952200534008528895\n",
634 636 "15914343565113172548972231940698266883214596825515126958094847260581103904401068017057791\n",
635 637 "31828687130226345097944463881396533766429193651030253916189694521162207808802136034115583\n",
636 638 "63657374260452690195888927762793067532858387302060507832379389042324415617604272068231167\n",
637 639 "127314748520905380391777855525586135065716774604121015664758778084648831235208544136462335\n",
638 640 "254629497041810760783555711051172270131433549208242031329517556169297662470417088272924671\n",
639 641 "509258994083621521567111422102344540262867098416484062659035112338595324940834176545849343\n",
640 642 "1018517988167243043134222844204689080525734196832968125318070224677190649881668353091698687\n",
641 643 "2037035976334486086268445688409378161051468393665936250636140449354381299763336706183397375\n",
642 644 "4074071952668972172536891376818756322102936787331872501272280898708762599526673412366794751\n",
643 645 "8148143905337944345073782753637512644205873574663745002544561797417525199053346824733589503\n",
644 646 "16296287810675888690147565507275025288411747149327490005089123594835050398106693649467179007\n",
645 647 "32592575621351777380295131014550050576823494298654980010178247189670100796213387298934358015\n",
646 648 "65185151242703554760590262029100101153646988597309960020356494379340201592426774597868716031\n",
647 649 "130370302485407109521180524058200202307293977194619920040712988758680403184853549195737432063\n",
648 650 "260740604970814219042361048116400404614587954389239840081425977517360806369707098391474864127\n",
649 651 "521481209941628438084722096232800809229175908778479680162851955034721612739414196782949728255\n",
650 652 "1042962419883256876169444192465601618458351817556959360325703910069443225478828393565899456511\n",
651 653 "2085924839766513752338888384931203236916703635113918720651407820138886450957656787131798913023\n",
652 654 "4171849679533027504677776769862406473833407270227837441302815640277772901915313574263597826047\n",
653 655 "8343699359066055009355553539724812947666814540455674882605631280555545803830627148527195652095\n",
654 656 "16687398718132110018711107079449625895333629080911349765211262561111091607661254297054391304191\n",
655 657 "33374797436264220037422214158899251790667258161822699530422525122222183215322508594108782608383\n",
656 658 "66749594872528440074844428317798503581334516323645399060845050244444366430645017188217565216767\n",
657 659 "133499189745056880149688856635597007162669032647290798121690100488888732861290034376435130433535\n",
658 660 "266998379490113760299377713271194014325338065294581596243380200977777465722580068752870260867071\n",
659 661 "533996758980227520598755426542388028650676130589163192486760401955554931445160137505740521734143\n",
660 662 "1067993517960455041197510853084776057301352261178326384973520803911109862890320275011481043468287\n",
661 663 "2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936575\n",
662 664 "4271974071841820164790043412339104229205409044713305539894083215644439451561281100045924173873151\n",
663 665 "8543948143683640329580086824678208458410818089426611079788166431288878903122562200091848347746303\n",
664 666 "17087896287367280659160173649356416916821636178853222159576332862577757806245124400183696695492607\n",
665 667 "34175792574734561318320347298712833833643272357706444319152665725155515612490248800367393390985215\n",
666 668 "68351585149469122636640694597425667667286544715412888638305331450311031224980497600734786781970431\n",
667 669 "136703170298938245273281389194851335334573089430825777276610662900622062449960995201469573563940863\n",
668 670 "273406340597876490546562778389702670669146178861651554553221325801244124899921990402939147127881727\n",
669 671 "546812681195752981093125556779405341338292357723303109106442651602488249799843980805878294255763455\n",
670 672 "1093625362391505962186251113558810682676584715446606218212885303204976499599687961611756588511526911\n",
671 673 "2187250724783011924372502227117621365353169430893212436425770606409952999199375923223513177023053823\n",
672 674 "4374501449566023848745004454235242730706338861786424872851541212819905998398751846447026354046107647\n",
673 675 "8749002899132047697490008908470485461412677723572849745703082425639811996797503692894052708092215295\n",
674 676 "17498005798264095394980017816940970922825355447145699491406164851279623993595007385788105416184430591\n",
675 677 "34996011596528190789960035633881941845650710894291398982812329702559247987190014771576210832368861183\n",
676 678 "69992023193056381579920071267763883691301421788582797965624659405118495974380029543152421664737722367\n",
677 679 "139984046386112763159840142535527767382602843577165595931249318810236991948760059086304843329475444735\n",
678 680 "279968092772225526319680285071055534765205687154331191862498637620473983897520118172609686658950889471\n",
679 681 "559936185544451052639360570142111069530411374308662383724997275240947967795040236345219373317901778943\n",
680 682 "1119872371088902105278721140284222139060822748617324767449994550481895935590080472690438746635803557887\n",
681 683 "2239744742177804210557442280568444278121645497234649534899989100963791871180160945380877493271607115775\n",
682 684 "4479489484355608421114884561136888556243290994469299069799978201927583742360321890761754986543214231551\n",
683 685 "8958978968711216842229769122273777112486581988938598139599956403855167484720643781523509973086428463103\n",
684 686 "17917957937422433684459538244547554224973163977877196279199912807710334969441287563047019946172856926207\n",
685 687 "35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852415\n",
686 688 "71671831749689734737838152978190216899892655911508785116799651230841339877765150252188079784691427704831\n",
687 689 "143343663499379469475676305956380433799785311823017570233599302461682679755530300504376159569382855409663\n",
688 690 "286687326998758938951352611912760867599570623646035140467198604923365359511060601008752319138765710819327\n",
689 691 "573374653997517877902705223825521735199141247292070280934397209846730719022121202017504638277531421638655\n",
690 692 "1146749307995035755805410447651043470398282494584140561868794419693461438044242404035009276555062843277311\n",
691 693 "2293498615990071511610820895302086940796564989168281123737588839386922876088484808070018553110125686554623\n",
692 694 "4586997231980143023221641790604173881593129978336562247475177678773845752176969616140037106220251373109247\n",
693 695 "9173994463960286046443283581208347763186259956673124494950355357547691504353939232280074212440502746218495\n",
694 696 "18347988927920572092886567162416695526372519913346248989900710715095383008707878464560148424881005492436991\n",
695 697 "36695977855841144185773134324833391052745039826692497979801421430190766017415756929120296849762010984873983\n",
696 698 "73391955711682288371546268649666782105490079653384995959602842860381532034831513858240593699524021969747967\n",
697 699 "146783911423364576743092537299333564210980159306769991919205685720763064069663027716481187399048043939495935\n",
698 700 "293567822846729153486185074598667128421960318613539983838411371441526128139326055432962374798096087878991871\n",
699 701 "587135645693458306972370149197334256843920637227079967676822742883052256278652110865924749596192175757983743\n",
700 702 "1174271291386916613944740298394668513687841274454159935353645485766104512557304221731849499192384351515967487\n",
701 703 "2348542582773833227889480596789337027375682548908319870707290971532209025114608443463698998384768703031934975\n",
702 704 "4697085165547666455778961193578674054751365097816639741414581943064418050229216886927397996769537406063869951\n",
703 705 "9394170331095332911557922387157348109502730195633279482829163886128836100458433773854795993539074812127739903\n",
704 706 "18788340662190665823115844774314696219005460391266558965658327772257672200916867547709591987078149624255479807\n",
705 707 "37576681324381331646231689548629392438010920782533117931316655544515344401833735095419183974156299248510959615\n",
706 708 "75153362648762663292463379097258784876021841565066235862633311089030688803667470190838367948312598497021919231\n",
707 709 "150306725297525326584926758194517569752043683130132471725266622178061377607334940381676735896625196994043838463\n",
708 710 "300613450595050653169853516389035139504087366260264943450533244356122755214669880763353471793250393988087676927\n",
709 711 "601226901190101306339707032778070279008174732520529886901066488712245510429339761526706943586500787976175353855\n",
710 712 "1202453802380202612679414065556140558016349465041059773802132977424491020858679523053413887173001575952350707711\n",
711 713 "2404907604760405225358828131112281116032698930082119547604265954848982041717359046106827774346003151904701415423\n",
712 714 "4809815209520810450717656262224562232065397860164239095208531909697964083434718092213655548692006303809402830847\n",
713 715 "9619630419041620901435312524449124464130795720328478190417063819395928166869436184427311097384012607618805661695\n",
714 716 "19239260838083241802870625048898248928261591440656956380834127638791856333738872368854622194768025215237611323391\n",
715 717 "38478521676166483605741250097796497856523182881313912761668255277583712667477744737709244389536050430475222646783\n",
716 718 "76957043352332967211482500195592995713046365762627825523336510555167425334955489475418488779072100860950445293567\n",
717 719 "153914086704665934422965000391185991426092731525255651046673021110334850669910978950836977558144201721900890587135\n",
718 720 "307828173409331868845930000782371982852185463050511302093346042220669701339821957901673955116288403443801781174271\n",
719 721 "615656346818663737691860001564743965704370926101022604186692084441339402679643915803347910232576806887603562348543\n",
720 722 "1231312693637327475383720003129487931408741852202045208373384168882678805359287831606695820465153613775207124697087\n",
721 723 "2462625387274654950767440006258975862817483704404090416746768337765357610718575663213391640930307227550414249394175\n",
722 724 "4925250774549309901534880012517951725634967408808180833493536675530715221437151326426783281860614455100828498788351\n",
723 725 "9850501549098619803069760025035903451269934817616361666987073351061430442874302652853566563721228910201656997576703\n",
724 726 "19701003098197239606139520050071806902539869635232723333974146702122860885748605305707133127442457820403313995153407\n",
725 727 "39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306815\n",
726 728 "78804012392788958424558080200287227610159478540930893335896586808491443542994421222828532509769831281613255980613631\n",
727 729 "157608024785577916849116160400574455220318957081861786671793173616982887085988842445657065019539662563226511961227263\n",
728 730 "315216049571155833698232320801148910440637914163723573343586347233965774171977684891314130039079325126453023922454527\n",
729 731 "630432099142311667396464641602297820881275828327447146687172694467931548343955369782628260078158650252906047844909055\n",
730 732 "1260864198284623334792929283204595641762551656654894293374345388935863096687910739565256520156317300505812095689818111\n",
731 733 "2521728396569246669585858566409191283525103313309788586748690777871726193375821479130513040312634601011624191379636223\n",
732 734 "5043456793138493339171717132818382567050206626619577173497381555743452386751642958261026080625269202023248382759272447\n",
733 735 "10086913586276986678343434265636765134100413253239154346994763111486904773503285916522052161250538404046496765518544895\n",
734 736 "20173827172553973356686868531273530268200826506478308693989526222973809547006571833044104322501076808092993531037089791\n",
735 737 "40347654345107946713373737062547060536401653012956617387979052445947619094013143666088208645002153616185987062074179583\n",
736 738 "80695308690215893426747474125094121072803306025913234775958104891895238188026287332176417290004307232371974124148359167\n",
737 739 "161390617380431786853494948250188242145606612051826469551916209783790476376052574664352834580008614464743948248296718335\n",
738 740 "322781234760863573706989896500376484291213224103652939103832419567580952752105149328705669160017228929487896496593436671\n",
739 741 "645562469521727147413979793000752968582426448207305878207664839135161905504210298657411338320034457858975792993186873343\n",
740 742 "1291124939043454294827959586001505937164852896414611756415329678270323811008420597314822676640068915717951585986373746687\n",
741 743 "2582249878086908589655919172003011874329705792829223512830659356540647622016841194629645353280137831435903171972747493375\n",
742 744 "5164499756173817179311838344006023748659411585658447025661318713081295244033682389259290706560275662871806343945494986751\n",
743 745 "10328999512347634358623676688012047497318823171316894051322637426162590488067364778518581413120551325743612687890989973503\n",
744 746 "20657999024695268717247353376024094994637646342633788102645274852325180976134729557037162826241102651487225375781979947007\n",
745 747 "41315998049390537434494706752048189989275292685267576205290549704650361952269459114074325652482205302974450751563959894015\n",
746 748 "82631996098781074868989413504096379978550585370535152410581099409300723904538918228148651304964410605948901503127919788031\n",
747 749 "165263992197562149737978827008192759957101170741070304821162198818601447809077836456297302609928821211897803006255839576063\n",
748 750 "330527984395124299475957654016385519914202341482140609642324397637202895618155672912594605219857642423795606012511679152127\n",
749 751 "661055968790248598951915308032771039828404682964281219284648795274405791236311345825189210439715284847591212025023358304255\n",
750 752 "1322111937580497197903830616065542079656809365928562438569297590548811582472622691650378420879430569695182424050046716608511\n",
751 753 "2644223875160994395807661232131084159313618731857124877138595181097623164945245383300756841758861139390364848100093433217023\n",
752 754 "5288447750321988791615322464262168318627237463714249754277190362195246329890490766601513683517722278780729696200186866434047\n",
753 755 "10576895500643977583230644928524336637254474927428499508554380724390492659780981533203027367035444557561459392400373732868095\n",
754 756 "21153791001287955166461289857048673274508949854856999017108761448780985319561963066406054734070889115122918784800747465736191\n",
755 757 "42307582002575910332922579714097346549017899709713998034217522897561970639123926132812109468141778230245837569601494931472383\n",
756 758 "84615164005151820665845159428194693098035799419427996068435045795123941278247852265624218936283556460491675139202989862944767\n",
757 759 "169230328010303641331690318856389386196071598838855992136870091590247882556495704531248437872567112920983350278405979725889535\n",
758 760 "338460656020607282663380637712778772392143197677711984273740183180495765112991409062496875745134225841966700556811959451779071\n",
759 761 "676921312041214565326761275425557544784286395355423968547480366360991530225982818124993751490268451683933401113623918903558143\n",
760 762 "1353842624082429130653522550851115089568572790710847937094960732721983060451965636249987502980536903367866802227247837807116287\n",
761 763 "2707685248164858261307045101702230179137145581421695874189921465443966120903931272499975005961073806735733604454495675614232575\n",
762 764 "5415370496329716522614090203404460358274291162843391748379842930887932241807862544999950011922147613471467208908991351228465151\n",
763 765 "10830740992659433045228180406808920716548582325686783496759685861775864483615725089999900023844295226942934417817982702456930303\n",
764 766 "21661481985318866090456360813617841433097164651373566993519371723551728967231450179999800047688590453885868835635965404913860607\n",
765 767 "43322963970637732180912721627235682866194329302747133987038743447103457934462900359999600095377180907771737671271930809827721215\n",
766 768 "86645927941275464361825443254471365732388658605494267974077486894206915868925800719999200190754361815543475342543861619655442431\n",
767 769 "173291855882550928723650886508942731464777317210988535948154973788413831737851601439998400381508723631086950685087723239310884863\n",
768 770 "346583711765101857447301773017885462929554634421977071896309947576827663475703202879996800763017447262173901370175446478621769727\n",
769 771 "693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455\n",
770 772 "1386334847060407429789207092071541851718218537687908287585239790307310653902812811519987203052069789048695605480701785914487078911\n",
771 773 "2772669694120814859578414184143083703436437075375816575170479580614621307805625623039974406104139578097391210961403571828974157823\n",
772 774 "5545339388241629719156828368286167406872874150751633150340959161229242615611251246079948812208279156194782421922807143657948315647\n",
773 775 "11090678776483259438313656736572334813745748301503266300681918322458485231222502492159897624416558312389564843845614287315896631295\n",
774 776 "22181357552966518876627313473144669627491496603006532601363836644916970462445004984319795248833116624779129687691228574631793262591\n",
775 777 "44362715105933037753254626946289339254982993206013065202727673289833940924890009968639590497666233249558259375382457149263586525183\n",
776 778 "88725430211866075506509253892578678509965986412026130405455346579667881849780019937279180995332466499116518750764914298527173050367\n",
777 779 "177450860423732151013018507785157357019931972824052260810910693159335763699560039874558361990664932998233037501529828597054346100735\n",
778 780 "354901720847464302026037015570314714039863945648104521621821386318671527399120079749116723981329865996466075003059657194108692201471\n",
779 781 "709803441694928604052074031140629428079727891296209043243642772637343054798240159498233447962659731992932150006119314388217384402943\n",
780 782 "1419606883389857208104148062281258856159455782592418086487285545274686109596480318996466895925319463985864300012238628776434768805887\n",
781 783 "2839213766779714416208296124562517712318911565184836172974571090549372219192960637992933791850638927971728600024477257552869537611775\n",
782 784 "5678427533559428832416592249125035424637823130369672345949142181098744438385921275985867583701277855943457200048954515105739075223551\n",
783 785 "11356855067118857664833184498250070849275646260739344691898284362197488876771842551971735167402555711886914400097909030211478150447103\n",
784 786 "22713710134237715329666368996500141698551292521478689383796568724394977753543685103943470334805111423773828800195818060422956300894207\n",
785 787 "45427420268475430659332737993000283397102585042957378767593137448789955507087370207886940669610222847547657600391636120845912601788415\n",
786 788 "90854840536950861318665475986000566794205170085914757535186274897579911014174740415773881339220445695095315200783272241691825203576831\n",
787 789 "181709681073901722637330951972001133588410340171829515070372549795159822028349480831547762678440891390190630401566544483383650407153663\n",
788 790 "363419362147803445274661903944002267176820680343659030140745099590319644056698961663095525356881782780381260803133088966767300814307327\n",
789 791 "726838724295606890549323807888004534353641360687318060281490199180639288113397923326191050713763565560762521606266177933534601628614655\n",
790 792 "1453677448591213781098647615776009068707282721374636120562980398361278576226795846652382101427527131121525043212532355867069203257229311\n",
791 793 "2907354897182427562197295231552018137414565442749272241125960796722557152453591693304764202855054262243050086425064711734138406514458623\n",
792 794 "5814709794364855124394590463104036274829130885498544482251921593445114304907183386609528405710108524486100172850129423468276813028917247\n",
793 795 "11629419588729710248789180926208072549658261770997088964503843186890228609814366773219056811420217048972200345700258846936553626057834495\n",
794 796 "23258839177459420497578361852416145099316523541994177929007686373780457219628733546438113622840434097944400691400517693873107252115668991\n",
795 797 "46517678354918840995156723704832290198633047083988355858015372747560914439257467092876227245680868195888801382801035387746214504231337983\n",
796 798 "93035356709837681990313447409664580397266094167976711716030745495121828878514934185752454491361736391777602765602070775492429008462675967\n",
797 799 "186070713419675363980626894819329160794532188335953423432061490990243657757029868371504908982723472783555205531204141550984858016925351935\n",
798 800 "372141426839350727961253789638658321589064376671906846864122981980487315514059736743009817965446945567110411062408283101969716033850703871\n",
799 801 "744282853678701455922507579277316643178128753343813693728245963960974631028119473486019635930893891134220822124816566203939432067701407743\n",
800 802 "1488565707357402911845015158554633286356257506687627387456491927921949262056238946972039271861787782268441644249633132407878864135402815487\n",
801 803 "2977131414714805823690030317109266572712515013375254774912983855843898524112477893944078543723575564536883288499266264815757728270805630975\n",
802 804 "5954262829429611647380060634218533145425030026750509549825967711687797048224955787888157087447151129073766576998532529631515456541611261951\n",
803 805 "11908525658859223294760121268437066290850060053501019099651935423375594096449911575776314174894302258147533153997065059263030913083222523903\n",
804 806 "23817051317718446589520242536874132581700120107002038199303870846751188192899823151552628349788604516295066307994130118526061826166445047807\n",
805 807 "47634102635436893179040485073748265163400240214004076398607741693502376385799646303105256699577209032590132615988260237052123652332890095615\n",
806 808 "95268205270873786358080970147496530326800480428008152797215483387004752771599292606210513399154418065180265231976520474104247304665780191231\n",
807 809 "190536410541747572716161940294993060653600960856016305594430966774009505543198585212421026798308836130360530463953040948208494609331560382463\n",
808 810 "381072821083495145432323880589986121307201921712032611188861933548019011086397170424842053596617672260721060927906081896416989218663120764927\n",
809 811 "762145642166990290864647761179972242614403843424065222377723867096038022172794340849684107193235344521442121855812163792833978437326241529855\n",
810 812 "1524291284333980581729295522359944485228807686848130444755447734192076044345588681699368214386470689042884243711624327585667956874652483059711\n",
811 813 "3048582568667961163458591044719888970457615373696260889510895468384152088691177363398736428772941378085768487423248655171335913749304966119423\n",
812 814 "6097165137335922326917182089439777940915230747392521779021790936768304177382354726797472857545882756171536974846497310342671827498609932238847\n",
813 815 "12194330274671844653834364178879555881830461494785043558043581873536608354764709453594945715091765512343073949692994620685343654997219864477695\n",
814 816 "24388660549343689307668728357759111763660922989570087116087163747073216709529418907189891430183531024686147899385989241370687309994439728955391\n",
815 817 "48777321098687378615337456715518223527321845979140174232174327494146433419058837814379782860367062049372295798771978482741374619988879457910783\n",
816 818 "97554642197374757230674913431036447054643691958280348464348654988292866838117675628759565720734124098744591597543956965482749239977758915821567\n",
817 819 "195109284394749514461349826862072894109287383916560696928697309976585733676235351257519131441468248197489183195087913930965498479955517831643135\n",
818 820 "390218568789499028922699653724145788218574767833121393857394619953171467352470702515038262882936496394978366390175827861930996959911035663286271\n",
819 821 "780437137578998057845399307448291576437149535666242787714789239906342934704941405030076525765872992789956732780351655723861993919822071326572543\n",
820 822 "1560874275157996115690798614896583152874299071332485575429578479812685869409882810060153051531745985579913465560703311447723987839644142653145087\n",
821 823 "3121748550315992231381597229793166305748598142664971150859156959625371738819765620120306103063491971159826931121406622895447975679288285306290175\n",
822 824 "6243497100631984462763194459586332611497196285329942301718313919250743477639531240240612206126983942319653862242813245790895951358576570612580351\n",
823 825 "12486994201263968925526388919172665222994392570659884603436627838501486955279062480481224412253967884639307724485626491581791902717153141225160703\n",
824 826 "24973988402527937851052777838345330445988785141319769206873255677002973910558124960962448824507935769278615448971252983163583805434306282450321407\n",
825 827 "49947976805055875702105555676690660891977570282639538413746511354005947821116249921924897649015871538557230897942505966327167610868612564900642815\n",
826 828 "99895953610111751404211111353381321783955140565279076827493022708011895642232499843849795298031743077114461795885011932654335221737225129801285631\n",
827 829 "199791907220223502808422222706762643567910281130558153654986045416023791284464999687699590596063486154228923591770023865308670443474450259602571263\n",
828 830 "399583814440447005616844445413525287135820562261116307309972090832047582568929999375399181192126972308457847183540047730617340886948900519205142527\n",
829 831 "799167628880894011233688890827050574271641124522232614619944181664095165137859998750798362384253944616915694367080095461234681773897801038410285055\n",
830 832 "1598335257761788022467377781654101148543282249044465229239888363328190330275719997501596724768507889233831388734160190922469363547795602076820570111\n",
831 833 "3196670515523576044934755563308202297086564498088930458479776726656380660551439995003193449537015778467662777468320381844938727095591204153641140223\n",
832 834 "6393341031047152089869511126616404594173128996177860916959553453312761321102879990006386899074031556935325554936640763689877454191182408307282280447\n",
833 835 "12786682062094304179739022253232809188346257992355721833919106906625522642205759980012773798148063113870651109873281527379754908382364816614564560895\n",
834 836 "25573364124188608359478044506465618376692515984711443667838213813251045284411519960025547596296126227741302219746563054759509816764729633229129121791\n",
835 837 "51146728248377216718956089012931236753385031969422887335676427626502090568823039920051095192592252455482604439493126109519019633529459266458258243583\n",
836 838 "102293456496754433437912178025862473506770063938845774671352855253004181137646079840102190385184504910965208878986252219038039267058918532916516487167\n",
837 839 "204586912993508866875824356051724947013540127877691549342705710506008362275292159680204380770369009821930417757972504438076078534117837065833032974335\n",
838 840 "409173825987017733751648712103449894027080255755383098685411421012016724550584319360408761540738019643860835515945008876152157068235674131666065948671\n",
839 841 "818347651974035467503297424206899788054160511510766197370822842024033449101168638720817523081476039287721671031890017752304314136471348263332131897343\n",
840 842 "1636695303948070935006594848413799576108321023021532394741645684048066898202337277441635046162952078575443342063780035504608628272942696526664263794687\n"
841 843 ]
842 844 }
843 845 ],
844 846 "prompt_number": 6
845 847 },
846 848 {
847 849 "cell_type": "heading",
848 850 "level": 2,
849 851 "metadata": {},
850 852 "source": [
851 853 "Capturing output with <tt>%%capture</tt>"
852 854 ]
853 855 },
854 856 {
855 857 "cell_type": "markdown",
856 858 "metadata": {},
857 859 "source": [
858 860 "IPython has a cell magic, `%%capture`, which captures the stdout/stderr of a cell. With this magic you can discard these streams or store them in a variable."
859 861 ]
860 862 },
861 863 {
862 864 "cell_type": "code",
863 865 "collapsed": false,
864 866 "input": [
867 "from __future__ import print_function\n",
865 868 "import sys"
866 869 ],
867 870 "language": "python",
868 871 "metadata": {},
869 872 "outputs": [],
870 873 "prompt_number": 9
871 874 },
872 875 {
873 876 "cell_type": "markdown",
874 877 "metadata": {},
875 878 "source": [
876 879 "By default, `%%capture` discards these streams. This is a simple way to suppress unwanted output."
877 880 ]
878 881 },
879 882 {
880 883 "cell_type": "code",
881 884 "collapsed": false,
882 885 "input": [
883 886 "%%capture\n",
884 "print 'hi, stdout'\n",
885 "print >> sys.stderr, 'hi, stderr'"
887 "print('hi, stdout')\n",
888 "print('hi, stderr', file=sys.stderr)"
886 889 ],
887 890 "language": "python",
888 891 "metadata": {},
889 892 "outputs": [],
890 893 "prompt_number": 10
891 894 },
892 895 {
893 896 "cell_type": "markdown",
894 897 "metadata": {},
895 898 "source": [
896 899 "If you specify a name, then stdout/stderr will be stored in an object in your namespace."
897 900 ]
898 901 },
899 902 {
900 903 "cell_type": "code",
901 904 "collapsed": false,
902 905 "input": [
903 906 "%%capture captured\n",
904 "print 'hi, stdout'\n",
905 "print >> sys.stderr, 'hi, stderr'"
907 "print('hi, stdout')\n",
908 "print('hi, stderr', file=sys.stderr)"
906 909 ],
907 910 "language": "python",
908 911 "metadata": {},
909 912 "outputs": [],
910 913 "prompt_number": 11
911 914 },
912 915 {
913 916 "cell_type": "code",
914 917 "collapsed": false,
915 918 "input": [
916 919 "captured"
917 920 ],
918 921 "language": "python",
919 922 "metadata": {},
920 923 "outputs": [
921 924 {
922 925 "output_type": "pyout",
923 926 "prompt_number": 12,
924 927 "text": [
925 928 "<IPython.utils.io.CapturedIO at 0x107ea2590>"
926 929 ]
927 930 }
928 931 ],
929 932 "prompt_number": 12
930 933 },
931 934 {
932 935 "cell_type": "markdown",
933 936 "metadata": {},
934 937 "source": [
935 938 "Calling the object writes the output to stdout/stderr as appropriate."
936 939 ]
937 940 },
938 941 {
939 942 "cell_type": "code",
940 943 "collapsed": false,
941 944 "input": [
942 945 "captured()"
943 946 ],
944 947 "language": "python",
945 948 "metadata": {},
946 949 "outputs": [
947 950 {
948 951 "output_type": "stream",
949 952 "stream": "stdout",
950 953 "text": [
951 954 "hi, stdout\n"
952 955 ]
953 956 },
954 957 {
955 958 "output_type": "stream",
956 959 "stream": "stderr",
957 960 "text": [
958 961 "hi, stderr\n"
959 962 ]
960 963 }
961 964 ],
962 965 "prompt_number": 13
963 966 },
964 967 {
965 968 "cell_type": "code",
966 969 "collapsed": false,
967 970 "input": [
968 971 "captured.stdout"
969 972 ],
970 973 "language": "python",
971 974 "metadata": {},
972 975 "outputs": [
973 976 {
974 977 "output_type": "pyout",
975 978 "prompt_number": 14,
976 979 "text": [
977 980 "'hi, stdout\\n'"
978 981 ]
979 982 }
980 983 ],
981 984 "prompt_number": 14
982 985 },
983 986 {
984 987 "cell_type": "code",
985 988 "collapsed": false,
986 989 "input": [
987 990 "captured.stderr"
988 991 ],
989 992 "language": "python",
990 993 "metadata": {},
991 994 "outputs": [
992 995 {
993 996 "output_type": "pyout",
994 997 "prompt_number": 15,
995 998 "text": [
996 999 "'hi, stderr\\n'"
997 1000 ]
998 1001 }
999 1002 ],
1000 1003 "prompt_number": 15
1001 1004 },
1002 1005 {
1003 1006 "cell_type": "markdown",
1004 1007 "metadata": {},
1005 1008 "source": [
1006 1009 "`%%capture` only captures stdout/stderr, not other output types, so you can still do plots and use IPython's display system inside `%%capture`"
1007 1010 ]
1008 1011 },
1009 1012 {
1010 1013 "cell_type": "code",
1011 1014 "collapsed": false,
1012 1015 "input": [
1013 1016 "%pylab inline"
1014 1017 ],
1015 1018 "language": "python",
1016 1019 "metadata": {},
1017 1020 "outputs": [
1018 1021 {
1019 1022 "output_type": "stream",
1020 1023 "stream": "stdout",
1021 1024 "text": [
1022 1025 "\n",
1023 1026 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
1024 1027 "For more information, type 'help(pylab)'.\n"
1025 1028 ]
1026 1029 }
1027 1030 ],
1028 1031 "prompt_number": 16
1029 1032 },
1030 1033 {
1031 1034 "cell_type": "code",
1032 1035 "collapsed": false,
1033 1036 "input": [
1034 1037 "%%capture wontshutup\n",
1035 1038 "\n",
1036 "print \"setting up X\"\n",
1039 "print(\"setting up X\")\n",
1037 1040 "x = np.linspace(0,5,1000)\n",
1038 "print \"step 2: constructing y-data\"\n",
1041 "print(\"step 2: constructing y-data\")\n",
1039 1042 "y = np.sin(x)\n",
1040 "print \"step 3: display info about y\"\n",
1043 "print(\"step 3: display info about y\")\n",
1041 1044 "plt.plot(x,y)\n",
1042 "print \"okay, I'm done now\""
1045 "print(\"okay, I'm done now\")"
1043 1046 ],
1044 1047 "language": "python",
1045 1048 "metadata": {},
1046 1049 "outputs": [
1047 1050 {
1048 1051 "output_type": "display_data",
1049 1052 "png": "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\nRU5ErkJggg==\n",
1050 1053 "text": [
1051 1054 "<matplotlib.figure.Figure at 0x108356ed0>"
1052 1055 ]
1053 1056 }
1054 1057 ],
1055 1058 "prompt_number": 17
1056 1059 },
1057 1060 {
1058 1061 "cell_type": "code",
1059 1062 "collapsed": false,
1060 1063 "input": [
1061 1064 "wontshutup()"
1062 1065 ],
1063 1066 "language": "python",
1064 1067 "metadata": {},
1065 1068 "outputs": [
1066 1069 {
1067 1070 "output_type": "stream",
1068 1071 "stream": "stdout",
1069 1072 "text": [
1070 1073 "setting up X\n",
1071 1074 "step 2: constructing y-data\n",
1072 1075 "step 3: display info about y\n",
1073 1076 "okay, I'm done now\n"
1074 1077 ]
1075 1078 }
1076 1079 ],
1077 1080 "prompt_number": 18
1078 1081 },
1079 1082 {
1080 1083 "cell_type": "markdown",
1081 1084 "metadata": {},
1082 1085 "source": [
1083 1086 "And you can selectively disable capturing stdout or stderr by passing `--no-stdout/err`."
1084 1087 ]
1085 1088 },
1086 1089 {
1087 1090 "cell_type": "code",
1088 1091 "collapsed": false,
1089 1092 "input": [
1090 1093 "%%capture cap --no-stderr\n",
1091 "print 'hi, stdout'\n",
1092 "print >> sys.stderr, \"hello, stderr\""
1094 "print('hi, stdout')\n",
1095 "print(\"hello, stderr\", file=sys.stderr)"
1093 1096 ],
1094 1097 "language": "python",
1095 1098 "metadata": {},
1096 1099 "outputs": [
1097 1100 {
1098 1101 "output_type": "stream",
1099 1102 "stream": "stderr",
1100 1103 "text": [
1101 1104 "hello, stderr"
1102 1105 ]
1103 1106 },
1104 1107 {
1105 1108 "output_type": "stream",
1106 1109 "stream": "stderr",
1107 1110 "text": [
1108 1111 "\n"
1109 1112 ]
1110 1113 }
1111 1114 ],
1112 1115 "prompt_number": 19
1113 1116 },
1114 1117 {
1115 1118 "cell_type": "code",
1116 1119 "collapsed": false,
1117 1120 "input": [
1118 1121 "cap.stdout"
1119 1122 ],
1120 1123 "language": "python",
1121 1124 "metadata": {},
1122 1125 "outputs": [
1123 1126 {
1124 1127 "output_type": "pyout",
1125 1128 "prompt_number": 20,
1126 1129 "text": [
1127 1130 "'hi, stdout\\n'"
1128 1131 ]
1129 1132 }
1130 1133 ],
1131 1134 "prompt_number": 20
1132 1135 },
1133 1136 {
1134 1137 "cell_type": "code",
1135 1138 "collapsed": false,
1136 1139 "input": [
1137 1140 "cap.stderr"
1138 1141 ],
1139 1142 "language": "python",
1140 1143 "metadata": {},
1141 1144 "outputs": [
1142 1145 {
1143 1146 "output_type": "pyout",
1144 1147 "prompt_number": 21,
1145 1148 "text": [
1146 1149 "''"
1147 1150 ]
1148 1151 }
1149 1152 ],
1150 1153 "prompt_number": 21
1151 1154 }
1152 1155 ],
1153 1156 "metadata": {}
1154 1157 }
1155 1158 ]
1156 1159 } No newline at end of file
@@ -1,1129 +1,1130
1 1 {
2 2 "metadata": {
3 3 "name": "Part 5 - Rich Display System"
4 4 },
5 5 "nbformat": 3,
6 6 "nbformat_minor": 0,
7 7 "worksheets": [
8 8 {
9 9 "cells": [
10 10 {
11 11 "cell_type": "heading",
12 12 "level": 1,
13 13 "metadata": {},
14 14 "source": [
15 15 "IPython's Rich Display System"
16 16 ]
17 17 },
18 18 {
19 19 "cell_type": "markdown",
20 20 "metadata": {},
21 21 "source": [
22 22 "In Python, objects can declare their textual representation using the `__repr__` method. IPython expands on this idea and allows objects to declare other, richer representations including:\n",
23 23 "\n",
24 24 "* HTML\n",
25 25 "* JSON\n",
26 26 "* PNG\n",
27 27 "* JPEG\n",
28 28 "* SVG\n",
29 29 "* LaTeX\n",
30 30 "\n",
31 31 "A single object can declare some or all of these representations; all are handled by IPython's *display system*. This Notebook shows how you can use this display system to incorporate a broad range of content into your Notebooks."
32 32 ]
33 33 },
34 34 {
35 35 "cell_type": "heading",
36 36 "level": 2,
37 37 "metadata": {},
38 38 "source": [
39 39 "Basic display imports"
40 40 ]
41 41 },
42 42 {
43 43 "cell_type": "markdown",
44 44 "metadata": {},
45 45 "source": [
46 46 "The `display` function is a general purpose tool for displaying different representations of objects. Think of it as `print` for these rich representations."
47 47 ]
48 48 },
49 49 {
50 50 "cell_type": "code",
51 51 "collapsed": false,
52 52 "input": [
53 53 "from IPython.display import display"
54 54 ],
55 55 "language": "python",
56 56 "metadata": {},
57 57 "outputs": [],
58 58 "prompt_number": 8
59 59 },
60 60 {
61 61 "cell_type": "markdown",
62 62 "metadata": {},
63 63 "source": [
64 64 "A few points:\n",
65 65 "\n",
66 66 "* Calling `display` on an object will send **all** possible representations to the Notebook.\n",
67 67 "* These representations are stored in the Notebook document.\n",
68 68 "* In general the Notebook will use the richest available representation.\n",
69 69 "\n",
70 70 "If you want to display a particular representation, there are specific functions for that:"
71 71 ]
72 72 },
73 73 {
74 74 "cell_type": "code",
75 75 "collapsed": false,
76 76 "input": [
77 77 "from IPython.display import display_pretty, display_html, display_jpeg, display_png, display_json, display_latex, display_svg"
78 78 ],
79 79 "language": "python",
80 80 "metadata": {},
81 81 "outputs": [],
82 82 "prompt_number": 11
83 83 },
84 84 {
85 85 "cell_type": "heading",
86 86 "level": 2,
87 87 "metadata": {},
88 88 "source": [
89 89 "Images"
90 90 ]
91 91 },
92 92 {
93 93 "cell_type": "markdown",
94 94 "metadata": {},
95 95 "source": [
96 96 "To work with images (JPEG, PNG) use the `Image` class."
97 97 ]
98 98 },
99 99 {
100 100 "cell_type": "code",
101 101 "collapsed": false,
102 102 "input": [
103 103 "from IPython.display import Image"
104 104 ],
105 105 "language": "python",
106 106 "metadata": {},
107 107 "outputs": [],
108 108 "prompt_number": 2
109 109 },
110 110 {
111 111 "cell_type": "code",
112 112 "collapsed": false,
113 113 "input": [
114 114 "i = Image(filename='../../docs/source/_static/logo.png')"
115 115 ],
116 116 "language": "python",
117 117 "metadata": {},
118 118 "outputs": [],
119 119 "prompt_number": 5
120 120 },
121 121 {
122 122 "cell_type": "markdown",
123 123 "metadata": {},
124 124 "source": [
125 125 "Returning an `Image` object from an expression will automatically display it:"
126 126 ]
127 127 },
128 128 {
129 129 "cell_type": "code",
130 130 "collapsed": false,
131 131 "input": [
132 132 "i"
133 133 ],
134 134 "language": "python",
135 135 "metadata": {},
136 136 "outputs": [
137 137 {
138 138 "output_type": "pyout",
139 139 "png": "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\n",
140 140 "prompt_number": 6,
141 141 "text": [
142 142 "<IPython.core.display.Image at 0x107ea26d0>"
143 143 ]
144 144 }
145 145 ],
146 146 "prompt_number": 6
147 147 },
148 148 {
149 149 "cell_type": "markdown",
150 150 "metadata": {},
151 151 "source": [
152 152 "Or you can pass it to `display`:"
153 153 ]
154 154 },
155 155 {
156 156 "cell_type": "code",
157 157 "collapsed": false,
158 158 "input": [
159 159 "display(i)"
160 160 ],
161 161 "language": "python",
162 162 "metadata": {},
163 163 "outputs": [
164 164 {
165 165 "output_type": "display_data",
166 166 "png": "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\n",
167 167 "text": [
168 168 "<IPython.core.display.Image at 0x107ea26d0>"
169 169 ]
170 170 }
171 171 ],
172 172 "prompt_number": 9
173 173 },
174 174 {
175 175 "cell_type": "markdown",
176 176 "metadata": {},
177 177 "source": [
178 178 "An image can also be displayed from raw data or a url"
179 179 ]
180 180 },
181 181 {
182 182 "cell_type": "code",
183 183 "collapsed": false,
184 184 "input": [
185 185 "Image(url='http://python.org/images/python-logo.gif')"
186 186 ],
187 187 "language": "python",
188 188 "metadata": {},
189 189 "outputs": [
190 190 {
191 191 "html": [
192 192 "<img src=\"http://python.org/images/python-logo.gif\" />"
193 193 ],
194 194 "output_type": "pyout",
195 195 "prompt_number": 2,
196 196 "text": [
197 197 "<IPython.core.display.Image at 0x1060e7410>"
198 198 ]
199 199 }
200 200 ],
201 201 "prompt_number": 2
202 202 },
203 203 {
204 204 "cell_type": "markdown",
205 205 "metadata": {},
206 206 "source": [
207 207 "SVG images are also supported out of the box (since modern browsers do a good job of rendering them):"
208 208 ]
209 209 },
210 210 {
211 211 "cell_type": "code",
212 212 "collapsed": false,
213 213 "input": [
214 214 "from IPython.display import SVG\n",
215 215 "SVG(filename='python-logo.svg')"
216 216 ],
217 217 "language": "python",
218 218 "metadata": {},
219 219 "outputs": [
220 220 {
221 221 "output_type": "pyout",
222 222 "prompt_number": 3,
223 223 "svg": [
224 224 "<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",
225 225 " <metadata id=\"metadata2193\">\n",
226 226 " <rdf:RDF>\n",
227 227 " <cc:Work rdf:about=\"\">\n",
228 228 " <dc:format>image/svg+xml</dc:format>\n",
229 229 " <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
230 230 " </cc:Work>\n",
231 231 " </rdf:RDF>\n",
232 232 " </metadata>\n",
233 233 " <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",
234 234 " <defs id=\"defs4\">\n",
235 235 " <linearGradient id=\"linearGradient2795\">\n",
236 236 " <stop id=\"stop2797\" offset=\"0\" style=\"stop-color:#b8b8b8;stop-opacity:0.49803922\"/>\n",
237 237 " <stop id=\"stop2799\" offset=\"1\" style=\"stop-color:#7f7f7f;stop-opacity:0\"/>\n",
238 238 " </linearGradient>\n",
239 239 " <linearGradient id=\"linearGradient2787\">\n",
240 240 " <stop id=\"stop2789\" offset=\"0\" style=\"stop-color:#7f7f7f;stop-opacity:0.5\"/>\n",
241 241 " <stop id=\"stop2791\" offset=\"1\" style=\"stop-color:#7f7f7f;stop-opacity:0\"/>\n",
242 242 " </linearGradient>\n",
243 243 " <linearGradient id=\"linearGradient3676\">\n",
244 244 " <stop id=\"stop3678\" offset=\"0\" style=\"stop-color:#b2b2b2;stop-opacity:0.5\"/>\n",
245 245 " <stop id=\"stop3680\" offset=\"1\" style=\"stop-color:#b3b3b3;stop-opacity:0\"/>\n",
246 246 " </linearGradient>\n",
247 247 " <linearGradient id=\"linearGradient3236\">\n",
248 248 " <stop id=\"stop3244\" offset=\"0\" style=\"stop-color:#f4f4f4;stop-opacity:1\"/>\n",
249 249 " <stop id=\"stop3240\" offset=\"1\" style=\"stop-color:#ffffff;stop-opacity:1\"/>\n",
250 250 " </linearGradient>\n",
251 251 " <linearGradient id=\"linearGradient4671\">\n",
252 252 " <stop id=\"stop4673\" offset=\"0\" style=\"stop-color:#ffd43b;stop-opacity:1\"/>\n",
253 253 " <stop id=\"stop4675\" offset=\"1\" style=\"stop-color:#ffe873;stop-opacity:1\"/>\n",
254 254 " </linearGradient>\n",
255 255 " <linearGradient id=\"linearGradient4689\">\n",
256 256 " <stop id=\"stop4691\" offset=\"0\" style=\"stop-color:#5a9fd4;stop-opacity:1\"/>\n",
257 257 " <stop id=\"stop4693\" offset=\"1\" style=\"stop-color:#306998;stop-opacity:1\"/>\n",
258 258 " </linearGradient>\n",
259 259 " <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",
260 260 " <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",
261 261 " <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",
262 262 " <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",
263 263 " <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",
264 264 " <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",
265 265 " <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",
266 266 " <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",
267 267 " <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",
268 268 " <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",
269 269 " <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",
270 270 " <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",
271 271 " </defs>\n",
272 272 " <g id=\"g2303\">\n",
273 273 " <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",
274 274 " <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",
275 275 " <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",
276 276 " <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",
277 277 " <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",
278 278 " <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",
279 279 " <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",
280 280 " <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",
281 281 " <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",
282 282 " <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",
283 283 " </g>\n",
284 284 "</svg>"
285 285 ],
286 286 "text": [
287 287 "<IPython.core.display.SVG at 0x10fb998d0>"
288 288 ]
289 289 }
290 290 ],
291 291 "prompt_number": 3
292 292 },
293 293 {
294 294 "cell_type": "heading",
295 295 "level": 3,
296 296 "metadata": {},
297 297 "source": [
298 298 "Embedded vs Non-embedded Images"
299 299 ]
300 300 },
301 301 {
302 302 "cell_type": "markdown",
303 303 "metadata": {},
304 304 "source": [
305 305 "By default, image data is embedded in the Notebook document so that the images can be viewed offline. However it is also possible to tell the `Image` class to only store a *link* to the image. Let's see how this works using a webcam at Berkeley."
306 306 ]
307 307 },
308 308 {
309 309 "cell_type": "code",
310 310 "collapsed": false,
311 311 "input": [
312 312 "# by default Image data are embedded\n",
313 313 "Embed = Image( 'http://scienceview.berkeley.edu/view/images/newview.jpg')\n",
314 314 "\n",
315 315 "# if kwarg `url` is given, the embedding is assumed to be false\n",
316 316 "SoftLinked = Image(url='http://scienceview.berkeley.edu/view/images/newview.jpg')\n",
317 317 "\n",
318 318 "# In each case, embed can be specified explicitly with the `embed` kwarg\n",
319 319 "# ForceEmbed = Image(url='http://scienceview.berkeley.edu/view/images/newview.jpg', embed=True)"
320 320 ],
321 321 "language": "python",
322 322 "metadata": {},
323 323 "outputs": [],
324 324 "prompt_number": 4
325 325 },
326 326 {
327 327 "cell_type": "markdown",
328 328 "metadata": {},
329 329 "source": [
330 330 "Here is the embedded version. Note that this image was pulled from the webcam when this code cell was originally run and stored in the Notebook. Unless we rerun this cell, this is not todays image."
331 331 ]
332 332 },
333 333 {
334 334 "cell_type": "code",
335 335 "collapsed": false,
336 336 "input": [
337 337 "Embed"
338 338 ],
339 339 "language": "python",
340 340 "metadata": {},
341 341 "outputs": [
342 342 {
343 343 "jpeg": "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\nAFT+//8QBAAAfgQAAFIEAAAOBAAAEQQAAA4EAAANBAAADwQAAA0EAAALBAAA//8AAAAAAADABQAA\nFAEAAFQBAABBAAAAbwQAANcAAAAJAQAAMgAAAAAAAAAAAAAAAwAAAAMAAAACAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAKAAAAU0d28WAABAAJAAkAIAqY\nB2QAZAASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgASABIAEgDu/wAAEgDu/wAAEgDu/wAA\nEgDu/+7/7v8AAAAAAAASABIAEgCAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAACAAAQAAAAIAAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAigABAAAABAAIAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAoAEAAAAAEAAIAAEAAQCAAuABAAAAAAAAAAAAAAgAgAEAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAoAAAAAAAAAAABJNz0ciOBUJVCJsJVgaq7+\nSUkqAN4CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAEAAgAEAAAAUjk4\nAAIABwAEAAAAMDEwMAEQAwABAAAAIAoAAAIQAwABAAAAmAcAAAAAAAAAjScAJAEAAMCpHQDbAAAA\nQBEAAEARAAAGAAMBAwABAAAABgAAABoBBQABAAAAPA0AABsBBQABAAAARA0AACgBAwABAAAAAgAA\nAAECBAABAAAA9BMAAAICBAABAAAA1QoAAAAAAAC0AAAAAQAAALQAAAABAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9j/2wCEAAkGBggGBQkIBwgK\nCQkLDRYPDQwMDRwTFRAWIR0jIiEcIB8kKTQsJCcxJx4fLT0tMTY3Ojo6Iio/RD44QjM3OTYBCQkJ\nDAoMFAwMFA8KCgoPGhoKChoaTxoaGhoaT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09P\nT09PT//AABEIAHgAoAMBIQACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsB\nAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKCxAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEG\nE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVW\n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\n3prgmYlQfpOQMHkmuDVMI//Z\n",
344 344 "output_type": "pyout",
345 345 "prompt_number": 5,
346 346 "text": [
347 347 "<IPython.core.display.Image at 0x10fb99b50>"
348 348 ]
349 349 }
350 350 ],
351 351 "prompt_number": 5
352 352 },
353 353 {
354 354 "cell_type": "markdown",
355 355 "metadata": {},
356 356 "source": [
357 357 "Here is today's image from same webcam at Berkeley, (refreshed every minutes, if you reload the notebook), visible only with an active internet connection, that should be different from the previous one. Notebooks 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."
358 358 ]
359 359 },
360 360 {
361 361 "cell_type": "code",
362 362 "collapsed": false,
363 363 "input": [
364 364 "SoftLinked"
365 365 ],
366 366 "language": "python",
367 367 "metadata": {},
368 368 "outputs": [
369 369 {
370 370 "html": [
371 371 "<img src=\"http://scienceview.berkeley.edu/view/images/newview.jpg\" />"
372 372 ],
373 373 "output_type": "pyout",
374 374 "prompt_number": 6,
375 375 "text": [
376 376 "<IPython.core.display.Image at 0x10fb99b10>"
377 377 ]
378 378 }
379 379 ],
380 380 "prompt_number": 6
381 381 },
382 382 {
383 383 "cell_type": "markdown",
384 384 "metadata": {},
385 385 "source": [
386 386 "Of course, if you re-run this Notebook, the two images will be the same again."
387 387 ]
388 388 },
389 389 {
390 390 "cell_type": "heading",
391 391 "level": 2,
392 392 "metadata": {},
393 393 "source": [
394 394 "Video"
395 395 ]
396 396 },
397 397 {
398 398 "cell_type": "markdown",
399 399 "metadata": {},
400 400 "source": [
401 401 "More exotic objects can also be displayed, as long as their representation supports the IPython display protocol. For example, videos hosted externally on YouTube are easy to load (and writing a similar wrapper for other hosted content is trivial):"
402 402 ]
403 403 },
404 404 {
405 405 "cell_type": "code",
406 406 "collapsed": false,
407 407 "input": [
408 408 "from IPython.display import YouTubeVideo\n",
409 409 "# a talk about IPython at Sage Days at U. Washington, Seattle.\n",
410 410 "# Video credit: William Stein.\n",
411 411 "YouTubeVideo('1j_HxD4iLn8')"
412 412 ],
413 413 "language": "python",
414 414 "metadata": {},
415 415 "outputs": [
416 416 {
417 417 "html": [
418 418 "\n",
419 419 " <iframe\n",
420 420 " width=\"400\"\n",
421 421 " height=\"300\"\n",
422 422 " src=\"http://www.youtube.com/embed/1j_HxD4iLn8\"\n",
423 423 " frameborder=\"0\"\n",
424 424 " allowfullscreen\n",
425 425 " ></iframe>\n",
426 426 " "
427 427 ],
428 428 "output_type": "pyout",
429 429 "prompt_number": 7,
430 430 "text": [
431 431 "<IPython.lib.display.YouTubeVideo at 0x10fba2190>"
432 432 ]
433 433 }
434 434 ],
435 435 "prompt_number": 7
436 436 },
437 437 {
438 438 "cell_type": "markdown",
439 439 "metadata": {},
440 440 "source": [
441 441 "Using the nascent video capabilities of modern browsers, you may also be able to display local\n",
442 442 "videos. At the moment this doesn't work very well in all browsers, so it may or may not work for you;\n",
443 443 "we will continue testing this and looking for ways to make it more robust. \n",
444 444 "\n",
445 445 "The following cell loads a local file called `animation.m4v`, encodes the raw video as base64 for http\n",
446 446 "transport, and uses the HTML5 video tag to load it. On Chrome 15 it works correctly, displaying a control\n",
447 447 "bar at the bottom with a play/pause button and a location slider."
448 448 ]
449 449 },
450 450 {
451 451 "cell_type": "code",
452 452 "collapsed": false,
453 453 "input": [
454 454 "from IPython.display import HTML\n",
455 "from base64 import b64encode\n",
455 456 "video = open(\"animation.m4v\", \"rb\").read()\n",
456 "video_encoded = video.encode(\"base64\")\n",
457 "video_encoded = b64encode(video)\n",
457 458 "video_tag = '<video controls alt=\"test\" src=\"data:video/x-m4v;base64,{0}\">'.format(video_encoded)\n",
458 459 "HTML(data=video_tag)"
459 460 ],
460 461 "language": "python",
461 462 "metadata": {},
462 463 "outputs": [
463 464 {
464 465 "html": [
465 466 "<video controls alt=\"test\" src=\"data:video/x-m4v;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAAqiW1kYXQAAAKMBgX//4jcRem9\n",
466 467 "5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTE4IC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENv\n",
467 468 "cHlsZWZ0IDIwMDMtMjAxMSAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9w\n",
468 469 "dGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1o\n",
469 470 "ZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2\n",
470 471 "IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MSBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0\n",
471 472 "X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTEgc2xpY2VkX3RocmVhZHM9MCBu\n",
472 473 "cj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9p\n",
473 474 "bnRyYT0wIGJmcmFtZXM9MyBiX3B5cmFtaWQ9MiBiX2FkYXB0PTEgYl9iaWFzPTAgZGlyZWN0PTEg\n",
474 475 "d2VpZ2h0Yj0xIG9wZW5fZ29wPTAgd2VpZ2h0cD0yIGtleWludD0yNTAga2V5aW50X21pbj0yNSBz\n",
475 476 "Y2VuZWN1dD00MCBpbnRyYV9yZWZyZXNoPTAgcmNfbG9va2FoZWFkPTQwIHJjPWNyZiBtYnRyZWU9\n",
476 477 "MSBjcmY9MjMuMCBxY29tcD0wLjYwIHFwbWluPTAgcXBtYXg9NjkgcXBzdGVwPTQgaXBfcmF0aW89\n",
477 478 "MS40MCBhcT0xOjEuMDAAgAAACqVliIQAV/0TAAI/3gU2tIW7KawwaCmQGTGHKmuYAAADACBcshU+\n",
478 479 "yICkgAA14AHowiEeT6ei7v7h3Hu0i2fpUBLGBIkbCMP3Vfz+9BVGCDXnw9Uv5o3iN030tb7eq6rs\n",
479 480 "EEhHs2azbdTiE9Csz5Zm6SiUWRdmB43hbD5i6syATuODUJd7LM3d9cbFpc7zFlu5y3vUmNGd6urp\n",
480 481 "vKKT9iyleIyTuR1sVS431DhevGfkUllVeIznYUe2USoMW1tufETjyRdmGldN6eNlhAOsGAH4z+Hk\n",
481 482 "rwKecPPU7Q5T4gDAIxj9hW84jVExMTSTHxkPTq1I4OotgUxURCGTsw60k/ezPNmNg38j1bqaGmPc\n",
482 483 "ruDKEIBDsK5qEytFB90Q68s0h2wmlf2KXd5bleBefiK+/p47ZsyUO4IdlW25rRy+HLjt6wQXfYee\n",
483 484 "3IkiQOoOK+U7u/lxcl78zfxwIoEMjUUSKNZjkp8clnmecDDJ3Kz+viF7bPklk7N6QRyizAKPIIpn\n",
484 485 "NJUuMWQmqeL2Or6cr4D0/0tOym+4tficxmhuEONKUtO2pPn3hRjMllkd12tXp70fLTfxy0dwB70M\n",
485 486 "L9iLEcItHb7zVupHlP5RxdvecpREw+OsIPr9KWilIesNE19jgIbT+TkiRBjOoKvUuwcQnKg7fOTH\n",
486 487 "VoLvnKuAfea+oujEdm1Rwd2tEOnkF+ZC11WaNQsiNR/eJ9EnUXjXDYGfhB+Oe7qj8nYTT+eOXg1c\n",
487 488 "uJNgLXEs4vOheWEjQOqfIWMQc3DmTof5s0ksBmUQ3PQ+UHPxZSnmOEZB+j6xT3wbm7HGzDjWtSg1\n",
488 489 "SjTxd1EiJ8xA4SIxxR8WIKLg+TwFxJNS7Laxq7Uglu3AkXe82P1JCdJX5PsbFbxuDbuJgakzRcTw\n",
489 490 "MLLSKCiizS/eCW0uJed/lev9yb80kKlVET4S219cn/zhkpeDV83cHYOr+sJQKDRk/Wh2c7fsuxfx\n",
490 491 "aEH/6reSmvFDsAnXAyPXliJ3G4VG3OkEM5K5WyGGrBizZbTrdGsBnzj5VSGGOJdCKuRrUluw/8es\n",
491 492 "2vYRPs9BcTqAqvHk9M52SSIf+1T6L53EZP8VbtXB+G29CMW4xVCK/B/YDjaNmqMwJ61dapugjnWJ\n",
492 493 "fqeXlGGa3Ch3aA7gi30T8PucNRBjLK3lF67ZDDvkWXRQXd+VMnKWHkBbCkQ/F/fMuNpHO3C00Y2p\n",
493 494 "ljna1qImBhVMvPe0F7Qx7G/YyxLRzhyUU8e23HGzp0agtNJRbydbrPV+TqJMSifJMNcZIf8wkdnC\n",
494 495 "3/xdpcXnLf2Ye3Kbd0o7utciTG+q5h6WTEk+PaNbXLLA0YyZ2VnLTcyV1QTS76aNCbV9Q1/OQ7QU\n",
495 496 "81Gg0hPa9aSiscGary6jLVwDQaik4zLsi7jPqgPVdup7pwx7uJDqRCVcVi5QoZFp/GHdex5sJTF6\n",
496 497 "9A6sja69/NLkFIWNSIeRcuGahXpF+wZeYIrqJv975s1TKYKAvp1WtzgtgWNkcbzCtROqf8rPtlAI\n",
497 498 "xkX8GLcEo9zfExyfimeXQ64qfFxEy0IMy2Hsxau9fSMqUnIjntuVVjCQtBL+94gx1RZLndE6wROV\n",
498 499 "Tq/wHwHrQzo9QL9cpPqPFJjiZ/NGZIFuudS+wsBFe6Hu8Oitf5zToLqLdtU4Smwh4ne3JsiT9lOz\n",
499 500 "N+4PPw3VSx9l5FppVwdKUWELw1dYpCOppyVWlJ3YQ8H4FQQM8EcYMG9N3Bxu79y1J1ikuvuhMmLQ\n",
500 501 "lehLTbguhbix74hd1VIQC8EjHmOZSSWbssulYwPbr6FF49tifk6PymJvulR9/u+2585HkRfbxveG\n",
501 502 "eWCz0ix1pIVfaNpESKmtLy/0mcbMg9hYDz2werz9oe0lT2BiMV6uAin6RaQcT8Vk9MPctfwae+gk\n",
502 503 "vtnZA/sOBk8MbpylaHqc0KIVHhhLFMNnkOFiucjtGo/JWTa/F6g8wWeow5ZuIJUORaYHWqegZbTg\n",
503 504 "M9dCsYYsfZGjjVMuSlDIvpYvIvFFooGPC7Ye2Jfawmq4Ut7EL/nv/dyAd2HRc5msmUhzeu/XpX3r\n",
504 505 "VlzRmf9/Qan8Dbve3QfW1Ym0o5J/KAc3z1VBho7JBr5PgCL68RiD9jZHN0VvsT4gzsEjNlW3D91U\n",
505 506 "y4RduaodBFoNTzXwlfUYULBzdiTbH75l/UmVMC4TKeTWhNzw2UezaqeGd8at3WSY7W/VR3+hvZHD\n",
506 507 "pkIjgKuNNH0DsCRa/Kk56XQoHIyvvUH/eNekNvziReqS4qgLnXUT4BRGt2BOtCifI6+X/DGHUOmW\n",
507 508 "lX7TN5b4pw5U7jwfwshtbhGZM49T8JMk15Mzrc7tM6J11TYxb5R3mQhZ8TZumJ0bMJXPM69HFyih\n",
508 509 "r5dJSEJMycxJVUh6NTQALUOoRTHIOwE+FpWI6feTv1SiZ0YpYe5DbkYJJbN7zAHbAKw25XvqR2mA\n",
509 510 "jQmOlsfX/tK8DPjP/8h5/xgAF4EUbj1tOnQCBQL8jk9vHtfsXncsprww4Z+P/Z/UrKifuFyEpBWN\n",
510 511 "8kLpF7yywE2iYdDruV9+/qKR8rC9ozNKyqQNIwtxrzYkWpE5t8K7gG4JFnrHona/Rp8dOX6VW41+\n",
511 512 "jb5LB1LEtE8MwjLp3RCUOq/+6yLzaOEgBTqzvEjDeFpg/u9DMHMr4/2TOchfjg7dl+uQ6Gsx+4Ia\n",
512 513 "9W7vivG95027p25eKL0nHvx/OqmAQEZYJL/JO58lOj0zPdJxrQ5dZksjMISzVZNn7DsxqE3zgBBu\n",
513 514 "Nzk50R8lTK3U8P12QiOAQYSTeGlYlkvfeofrfO1AitEj02m9aUkxTFd1ZZJoLQT2d3zEU5PmE4lx\n",
514 515 "MVfL5ttNnIbqfcIU2RJKNWqdw77xfjfrNc/eNpRKPZ/6z50LzBprgjzBHRfKgSWWkDxHrX0aTbgw\n",
515 516 "QFwd51+PoUWH4DkQg26uGslF5Hn3hB58+fkeLTosTANOIBNAeFZtTc4PIaLHw759zae7scY55xcT\n",
516 517 "abzlilYIftst2RZ6ntsRC3zFxduCKvL6wLfYT+TiIWJn5P7sTwZwXuSzXY+9Q3xMZ5o4Xcpz6vD9\n",
517 518 "FtTjzS69iefEYt4pXiDrZUo4ePGiLeoIFIwYB/v6GXdmG5VLLk+eKbOc9AmsX2zmvqtcvDRGQbzu\n",
518 519 "gXbH/kTH/lkNPBTmqN3ZJODUEXVohPEJ6th0xna0EVleB73Q3eNvaVUvhlJbjs3D/T17FRCebN7A\n",
519 520 "OXvzzbLE/I5kNfEmJcv4dxtIeo2uQ/z9ohSpiZzbDj1u40nJRyJxUK60wEv0nA9f/NuJ6/PEyU0b\n",
520 521 "kK16z2KH12k3Lc4+1f5fawIzkK2qJRB4wnj8VHhUW9mbJhs9vgfFmU3xrXSShY67Ygb+gYNPxxtn\n",
521 522 "4K/9eTSwIA9fv/nR33lA2lZoXALRUTmOZIl3R0gAM5h6oX1y1thIyqViBK95VZc8Pvy7G3O90M9S\n",
522 523 "4zkpyFQ36jrMazvMveMA4d39fvoaC7p90quiJfjI4yrl+ECVkCJL5MxRSa+iVcIL7Xbl0jVaGhZI\n",
523 524 "cMYmcGOBbLzhJgloM1x1zFnnj3ggJRFAM8yNnXxhavk+mA18JC+y3lqGsp6vPReRxGlGHMou17L4\n",
524 525 "It070LzkoeCzarpv8Apw59smdS5KN9qVN1WgeL7OSN8BHg94ubCvS7DW6H3/PbtRB62jFLsBhUV5\n",
525 526 "YqCIbIN5VZ81AAACpUGaIWxFfwAru8x8uT3FuOjrAeSWXmAWqq9jCNGE+N5AOv//9//xjk4uBAcA\n",
526 527 "DN96c97AVGmzRtnWwPsgcCbLrVdQJgbKp4QSmPwQnVhv0hXyBjeFWWlcvx70urEN3FK6/lvk2tQe\n",
527 528 "ZgbtlbzXluvTfnSj/Ctz7vZ+O1FjhDzzdpL7uLzewzCIW5VWLAEKUVuS2J6wNk6MR7UblcEd4EtO\n",
528 529 "Y+R4/qJgfojCsfRvA0oC5dc41Vd0erZbSkrmPTjLCn815bxlchUJMS8gQD5hJNwoKHvNLNwn7XKu\n",
529 530 "TtYIhH2wVNZvDWgzCjlPeQajnrcMsb6bZYJvNJU8HuGHvm50r7VG8qifEwmuyegAZXojh5Ul5Vvj\n",
530 531 "DW7kSAZyw8a7I6mHY3FZHd+OA3V4JZMbNliI3Tj1L6+MKTmilVialmyZagRtEMeKRdtxUPd3vVEt\n",
531 532 "rOBVIVYWdgAGA7HmZiHQUQNxLkWxbLyWVlrh5EM0Do2NdbclHxxArz90d+MSVeUOIXQ/4V9quq8C\n",
532 533 "8qVflo1gPtPMkjO2/UrdOYqhY404ReObOu/fdp4hAEDq6jhy64vOeT7XUK/Onq0rXTldtA6kvgQa\n",
533 534 "Jg+mgYSR9hfXtMbOUSLgLj/RmBSO8aAMHuJJZqf1tCM5pZ9eYUsrHmy+/z2NGalon0//uF6+33bQ\n",
534 535 "zT/RLRfBbYTjy9QrJqHLlw46lggWPGkHuPKSqk/CB7U4pNPXUbR0DdcJy9Db00wCzVzxVc6h7jfC\n",
535 536 "FgiL2Y0HVqd6bgIaVUqn/gJCEyCDVplnzebv0gg3XwMJAGu639lHu7rEvxTp1smIYjWp9R5L4Ssp\n",
536 537 "VvS07Nb+Smk1FgsMp1K3EMUT8X2Fty4VG54/Ec6bE8tNVw4/QV1VzBw7Px2/2eEhhUS+FMfbHAlD\n",
537 538 "28x00jRgAAACW0GaQjwhkymEVwArOUkEOhoFqiELtH8wgecFLiUq6WqmwAP7iGEwbYzfnHacfqUN\n",
538 539 "XAfD+CGR2ap0lAHL25ipuYtd5j2O0PU/MpaWPG/n2y5OkfTzaOpotaR5tWjN55B2XblVVqsFfBC/\n",
539 540 "mvsiPvCBWUHFChacdY5whj5mP5rqQ0dqLJCsWjrs4TWnIbL2V/Iwfj3hwI35jfo1JkTOeR+8GhOd\n",
540 541 "ma9rgiKWafCbQyhYMTDmVdvhND60Flm97EDSTjF0OC+0gD9b8Yn4tNeHipCa/aWyt0n79bMmjfcj\n",
541 542 "ntBCPjrcB5ecRTpfGHbEHy1IRj2cjkGXKC+VYoYJXBp4rd4cMd8ygLCk5nBSd8/cTaKNRjdBscOe\n",
542 543 "TXG6QEjSxj9/2pVwx9DMRVtWQR0BSaAcQcZ8W2KPSaeRC4QwmNMu2xx25CSyrDiq2rFSK/JJtmvo\n",
543 544 "IjAKq0ciEXoOgw+Ke+Ylb7ULKCS3k1p/613UNRp450uSq5b7CAHo7S0b7fBMLfNmwSjRYEhLlo0H\n",
544 545 "UaRe/I+IX2Z6XdZH9Hty/399ZA1PwZGC6EfvUJIf7CBeaxv7cu6IT2/s0zPRGthpvXpYw6A7P4Ww\n",
545 546 "z5C4V98KnIUNUanadqabKP6eXWhvbvcQHxAjiOOiKZgXZplZW2g+B2NNyJSLiR+g48DqvWR6t9S2\n",
546 547 "aGfFjdOW1Gi6oTtZ1d4p5XIslAr8mryeZ6+htSSQe4AcfVt7k+V6mOthBCYtr/LEU4ZHtl0mW987\n",
547 548 "6PK8mRFAaT8DJOUFVz1lPfzRApuPggkkyq+UMvyfKTUbCk7/DpfX8Y4s4QAAAg9BmmNJ4Q8mUwIr\n",
548 549 "/wAsWUPjZw3ksgRsxZ6n4fQjprPbkj2aUh30y0bZJnLmiXnWskvOGnCPwBnG9dEhatwX3hoxk7BN\n",
549 550 "yG+wQ4emZUpcVzcWl2T9nKQB1euucuZWHTg7TCtM/iHyfPO2vbmGsfzs70b/egIbywUH4y4BQSL1\n",
550 551 "nWc1SmpHm2zHMBcUjYLDZ5gL5vdfxn0V8FFw66G88c/LN4I5icUa7xf4fcSBKywU0ajbp1P+aJYj\n",
551 552 "BgWT6Ggu0MDLDNl54tfqd42lKosQtM1aif4WXAZFP5Ww3vrQ1rH9+utSYxqZd6N6gGtNbSNMcVia\n",
552 553 "Kn5LcnjsbBi3T3EmGqshEbcme8VHKwR3kSfBOAprrIsv6K8R+X6az+MD23rWka/2v64m1qM69D7X\n",
553 554 "a+Kcs/n0KLCJdTilyaGadopLeaAn3eYvWTeHcucMM1Fp1KgHD1tiFeO6HvobLkZlRximsA3/7Mio\n",
554 555 "hYklLIcJrZL22BH+6W9d6kZsYIsej9RM681nU6mWNjepBAfAfTbrGRrVB/h2DxC5B8YyRjgSIzQj\n",
555 556 "NYrse0rzChqbrsLl7mQ7W+1bsNKze5//9ZIa8rSsF+BXh/vgoRTDkPW/ws95B7VPCZEFChfX0icw\n",
556 557 "+tpcpN/q7NY87tUn4vESdSiMMlyhKklMjQu/G51J69ZRQLs2oUO6YfoJFqliy4qCFCrf8SZE9Fc6\n",
557 558 "DcCagAAAAodBmoRJ4Q8mUwIr/wArPWF/KOw78THwadfPqhJO0CnmR/M74/XYZLqVYKlNcEaYauf+\n",
558 559 "vrRUDJPmu75sMKy2Y+Bnslc/iAISSyWtw/h/3CF8fE5ZrbrwSNst+MSyCoNWP+8imtoX2eyojpdC\n",
559 560 "k8YP5K+cbK4SJPCkZXbYqSXYk7hO8AdSemBHgXKWiZ+UOr802aJo+98ZOIjX9hWL9bo31Gqx7cy4\n",
560 561 "ZG+W/ar/WGlzDa1xPWnPRsEdrIcZlEVGV/jGmbirkxw1lyUYoqj8Vv7Bxube9XPQlBkXOV6Lc1LT\n",
561 562 "2IzNq0V7WwVhF0kA6yxfAsFxc9krNEH8vGGntTWI608ovjatXc/CKKXw7AjJSftlTcLI0hIIGXbR\n",
562 563 "Ur0NCYNp7M4cVd/n73Rjetnixz4SAKpcz/P47UsijZG7T3SxzK2D79WS42aEalc12hQwCZ01LfmF\n",
563 564 "/H2mmGEvOzPBie1D0YT7Jh19vxa4Dd3SQ1FrDfmSUpvv4DjbYcZ2PrPpFpWtMjWqHBeoyMiZf6RP\n",
564 565 "3EfYR6z9jsVNIIHxM0bzzBQF8eeYkPgDySydxPXv9Izo+QUY94N8kWi16fI6eZSDc1G0Yo0L91jc\n",
565 566 "RQuDMGGS7B2zuf/0GbJyRhUO48UbMrqnILMrbQg1LF00Q3pH9nbGEK/RRQpRN3T/J/4IZQjwW2Ft\n",
566 567 "2ipWGztg1Jn9I4DmffKS60QC+JQcyakdVON6zDcKttIKlqeTcmAi4xzmo4QXa2dRKleS+fs3EtTd\n",
567 568 "BBtony2wK9T2Imj+NCziOSEL7Q7VuIU8kclUHrJJsSneFcxGRgIgGGUEQM8/pklwTOqab7mMmJeR\n",
568 569 "iaBrjJDEnDpkR4Vz3qXxgyn4/5x24FuTMNVPwQAAAhtBmqVJ4Q8mUwIr/wApcLwPT0/Xh9UdWqWX\n",
569 570 "Is8Wbj5K1hivmN6qIQnq+aolcegdlM/63MbHsdC6xYZC1e/Q8UjQCt9N/Ejqwms8DzeWv2qxskel\n",
570 571 "iZH0kt1QWkErWSEodq7V0ZNksctLkMGWayX33gBT368EehfIeGDolBZoqIbJfb4nqcfU+ev4OzVv\n",
571 572 "9zVqWyLck315GFmXxQKIM8pICQc8Q5es34LH1+DmnMnW8kQpVGrztQcDXhjCU3F0fOgoSsXSVWCj\n",
572 573 "c6XKqGbCwQDfJUxCfXfIT6YmQoPpVp1mpGy1wQypXus9z0bScDpyDu23hViYDntdj1O45ea0znKZ\n",
573 574 "kj1+tLHbBtqAGJ1WTcbGlF6Vya6hQhEsiiZUIC2fRxIj8/wEXCICIbr0gZ/m6gcOhE10tenvE7iy\n",
574 575 "+BKY81wLWrnzos3S6FWxYtmCRes+LLhNGOKWRuQo6SyePH2OZ90xZm8oA1MuTe3V59euVNxjAt0F\n",
575 576 "LkAc9TEiFhP/8CB+gA8mF+A8h1U01f4DVX55GzCH51jHI2xUS0L9GtsHoBxLPLK/NNel8zcnwG4X\n",
576 577 "+UusfcfEb5hh+ffnXteCE9vRGbs2n9wYW0xA3ZicklfadmWKUtMiHYBfkMSULWnkBQr4CXxjpYOs\n",
577 578 "6ygeEoA5+5B0B1SZObgZ42wWqddyyYE0NfwQAl75tfdJGqOa7OMHwBYNeatJaJK0zT2+bFaw2qWC\n",
578 579 "WwAAAitBmsZJ4Q8mUwIr/wAstkdsayRXchoFk703izqzduZ5WsyXriI9cfUdMUWvm0iGHwYIrUuj\n",
579 580 "vz3Yjou+JLwv9df2kt7MJo8u+3P5CjEKbwlz4vkE5AHTAbgXn3+Xc/MMJLgW5cm7iX3KiGNnBpbp\n",
580 581 "hhwJRlb3u91NRDr0d1IR2up/z7lKxE7XPAPFe0siPMYVlIqWNSn5KqLABPeuxxbOsvMEb27/nH1L\n",
581 582 "UVM8I2F95c1I3Lv1SpkhZXjs1JsmS9X7gsoTxkXyShGC2+zRJSGUbhCPo/q1XSFMHQyMWJ79FKPQ\n",
582 583 "SL/RpVsacN2bYwdKo4TFBw1SsKq/L1iOmqMI+4Gxnbbjojdk0ek0JIcDb4bHv1czxchF7FX1Ym8H\n",
583 584 "6IpPuE8CeNKjzQ1a1wqhEu+wl1N0x3Y37ZryCCKJRkxj0FT7bOoH3L38/yMUuh/v3aCmxY4eCkyk\n",
584 585 "b2p6ZrYMFE044anM/nMjmbErMibfRFuCz58Io1rBlF7JfkIz0R2/5vjUMVskcdbX2mm7DntncOsW\n",
585 586 "DIdg/XVmgsC9CzVzUyq4VsS/sk97lJggcddpWLNw/29egz8iLyzWHOAXCvl2fTIPkviYAOQXfVhZ\n",
586 587 "UQdxsyJUNFMTiALrZCmoQLMp2LmDbfbW8JQriDeR3fVz6P1sjT8C2yEDvzkCn7sh0aTBK+sx7BKH\n",
587 588 "1nb4320+caQepQj4TCJtCeNXjdrVcNEnjvwlcRJwFT1pT+Y7HREbHnT71XYNh4EAAAGEQZrnSeEP\n",
588 589 "JlMCK/8AKIjxcI58rm/ML255fOJW1zbznFna7lfgMQrka7OTPPsvVAV4EJXye/Uxiu9dlftmRypJ\n",
589 590 "qfDot3xwDe8lX/qAVf6pBkSlUsaLyBYtww/SUSa1bGl1JvrJCN7FXCCXbLd5R4PoYlPiDIm/DQH2\n",
590 591 "puO0StIWmrR77Isc/J1pRvdu5+mQa/n0SEHUeM2KkoRzCznfD9zaaRO7BDtvC9SYIT0uYZxrwTjx\n",
591 592 "Q7N7UERTrYG0P+vRLAhxkfohFIYl3HXyjPOvnlbUFP2oiiy6nkUFuaIyQcJawJv3GU8k4ObcKsC1\n",
592 593 "cNDXjSpsyQRrxLFaCCjke4mikyt7vs0iN0bnrNWv9HXruG9zOFEOer1ggIFTsT1Eos5CXRkgja5H\n",
593 594 "N4QUM6MhWpc5du/HgBIH8ANFcoo2kJpqcadw9r/0qk25X91MQSDJQiH8Hny2dQhqR+LFWEawiW75\n",
594 595 "3SJhn0ngZcv/mPj3mwcHv1SL9ErBqAjm4JGiDetPKYtFwANYY11OyQAAAVdBmwhJ4Q8mUwIr/wAr\n",
595 596 "Ox5HV2505jRePGgMxptW4PGIHEszV1xGZS+flSkF+aq30AaqO7u6XK9jJsuWXTfYCRQTn1bZfFQ2\n",
596 597 "2DbO5DXAxK/TUmbQleCflFzeS6/czxkL4PJ8AwOs2U+oehekgCZC8gZyHHaQSaKbNJ46gTjNsLy8\n",
597 598 "4ACQ5uNt11TPuCPqPTuh+schdw9S+/lU/6m+EyaqGZ49wDFPiBFBYXglQQBjyP9k/rqq0xL7SiLj\n",
598 599 "pe4riYg8SFUuUtOzPdWHyvxnI7Ug/0VLPGAAhgMISUnqe01d5QFf36yHpwMAHexjAZFIGQHAFaut\n",
599 600 "uMuEw6HzUZVzNdeHYxvEYOGkTo007bLwbuf/nxzrywGOxlRTYJLRdYI0mk0SdN3+LeTv1RIJwv21\n",
600 601 "+e9rT5iFOTCgzeQoekEWXLYz0X8YLq5bVCtijP7/T7w1Ck71j0aqfrEn6wtIAAABNUGbKUnhDyZT\n",
601 602 "Aiv/ACcySi7VBgOid6qZNXvhh/JsllHkMLLq0yNbQTqv/Wk2EBoSKICZwFwAD0WRzhvvReCGirep\n",
602 603 "1Fe4bxjm49/UR+OYrXRmHR18T0C83AUVeBk7KvDZmb/eHzuzEN4yfXucr/NWFJl+USVMY4r4UQ9C\n",
603 604 "ayrfEY9v6AQ6mzAdLy2UMfFxrRJ99g/Rfl8qx+m4jIZNjlrTaThzJ/3OpVmAliDfxVyg8+CVIlI3\n",
604 605 "1IykiwQrXcebgajG+av8XU1SfyAG5ibvwbtdSAxkGBcJWL387V+uTdY56w3KN2vBtoQpVKD2zb3y\n",
605 606 "azIcATZ02upwIytNcM/rpaLCdMb1myWcikE25agzLhDhOS+4zwjYz2DnW6VY0gFBAPsphhsUMnau\n",
606 607 "VVdUVHzCTSdvzEve/H8q4AAAAVdBm0pJ4Q8mUwIr/wAo+x5XKuiN1am7SkJKSMonFZDPU3f5XFcD\n",
607 608 "QSs0FLVq2idfsKwuIkt1mxIq8NgMHpzofTnDHqs/WedvAmhBgL0N5azdQa5MNKG2rJ4IAvGQY/uF\n",
608 609 "m3jKQAKzvhSS01gO1oIfizF817z9IShS4QK2WT0PeFPELqLSpED8eNOpVTR96vmwpk/WBKRVJdTQ\n",
609 610 "JzjiCQ5pgEwjtvk7KqoS0+lwXSbvIrXkYm8DignEts3DLNoLHrPjXlQmbIop76JZSyJEtB+91GrL\n",
610 611 "wo6Km5GeebyA2E6qGL3xSkpppej/ruoFprSKrH60UMbrq/SK7eCo+1QFoySPQmqDFsMGiQFqvtld\n",
611 612 "5BXDYdVI4yRaoyN7Y7wi83HRC6eVazuHU9OtIY3xJJApBWq1aJOsYwc38aTC3ee863Aa/4n9Lk4D\n",
612 613 "AtyFYHNZjB5m2e2vk8G2Gny9YFlBAAABQEGba0nhDyZTAiv/ACoZSZQfHxhfQxEqOBQrP+L3Dmgv\n",
613 614 "HSJQtB1iVkcLTxm+vagLHBLG91OGnopwrr7gT/loDypIhoRxjcwAAOeg/jN4WBbXzCJtnWGGllUC\n",
614 615 "SdtUZQzKOSp9iM4yX18C6jrY4Sq6R9PUV/lEGNveJR4gw4FMve7110XdEPL1O2VTdHvdqeANyaq0\n",
615 616 "nLdEmtXnrzvdrFlBaUvmaR4EdlkqGkvkZKWJej8Vq+msbKa7JdbxjwZtRufiyGfD/NVqMgSrYRzw\n",
616 617 "9z/a8Zwbr+9+19CxlWD5bCuAEfPmjY6kZJE2L/CQI6+tnCBTXOmWZtZMBoCLGOf7G2uAC3+kFlbo\n",
617 618 "h9as5WCkO6+iqXq29dyhKnsHInorRYsPlgxIXyU1Om/Kyhj1DJV0Am9WJK3Dln0zNUH0q6ZTOnZc\n",
618 619 "FD36AAABYkGbjEnhDyZTAiv/ACcwdIOLRFfoGK2ZkKsvgMwG0m0qsY0vMLPSzefc+ebp/aztyF7M\n",
619 620 "lsBz/fBeNtxFBcsKgR4pf65GvdfOMHah0ltZ918sMDmXUEZMeRHy/xpnWpTLeGz6uTs/7MATPmU5\n",
620 621 "BgHbT/DkD8QeaZnFAzidyFCXDz2l/jaKhEdgqipbB2pH0+fQ039r05z9axxEWGmaLQjg6x9+po1o\n",
621 622 "24yhkVO7m03YwWmPyCgy8cOwrvRyJkXJpRN4m8ZBS1zwY80HeN/VyMQQJSMwsTo7R1XMerSFuyx0\n",
622 623 "nz+8qOuhiqykc2ohCCsXia/+kIKbJ5Vs+cbWtvkqBKIDSfU7FhAd3GjcY/xar0EVmi6wWFTugAog\n",
623 624 "R3I7mTrQDdlTAqYgqO7Gn5NMXQVHu2i1zhFSdo9GjMbeGnbkJwsFbQ2XkoKRIDpuW7AewC9AEBt0\n",
624 625 "Ox/Ah6dGXfXO1jl8pEApj2RFmgAAAPlBm61J4Q8mUwIr/wAlR+eW/VZ7bSrmwwMA62G05DZ7p/5F\n",
625 626 "UugsSsQdonUq6abtbU5hjFr+I1lPgoiV5c3CkTQZS+K5zivdo+Ti2P4K90xXANp8dSMAu85uJIOC\n",
626 627 "Qn2TXbEnNDifLB+3V84ht5tj4lvTaZx317BcliV8D5v2zZQW8RO1mUbuJEBItst8E7hfE+ZXj7tf\n",
627 628 "DxNZPTvtpFyUv0fH1cTg1pr2VLy0d0zQLiA58dg+GkRvR1/hs2LyifBgHcj6eTWz0vsypVn9iPXR\n",
628 629 "H/unJ6i8cfFL69NO24tQ9QQB+nDFhoP2cRhkAvhHwn56n5PppBD/oxni2f8AAAE9QZvOSeEPJlMC\n",
629 630 "K/8AJjAXVGf+Kj2XNJnFeKC/gr7dJDTC2ngpd4WeAHlg04GuJKnn9hAmiECxxo9qM1IYMRiB85t6\n",
630 631 "gALnlm9sRqGmioyzAm18RJndc9Ah8RlpGzr+44a6ntRaPx0cIwNIWAA8buL2JP00dmfjNqEiAlCa\n",
631 632 "8OdV8FQxjp1vDXsGcAGF3Qbd62KEpkimeI3wH2nuXpbDHm8/ZKOR49s5ifUCkxCoJpfp43aC0lTz\n",
632 633 "h2NXpcfVw6h0QnK8G60R4ZAxOxaJB7c0nn8ixXSU2JVY24EtGMF53nxJnHfzUheewUfBOGYSxeo8\n",
633 634 "oK7oUCqX4rztzDwoc2QywNqQUJUkFrqIN+sb5ecYvX24Zujn+ZzTW6UDAF3R6WdNyJyRAremgC8s\n",
634 635 "pSflTqygQNGfHyGkfIEEJJaFo/pBCBkAAAEWQZvvSeEPJlMCK/8AKI41fuekXG59Knbw4Y6YJrit\n",
635 636 "sh9VtQgc3QKvVmxrzzo7f4aXn8N74eyP4b2lV1Z2Q+rohxps7EHTkOY9jLdqxI3MXe7je4g2qepz\n",
636 637 "71+hY+jYdX+9LO0kA0Zg3NfyAlIRX7k6c/YHAZNtNaGZgTBMqiPgmEjiJH9Luk7shbgr+srfwiYw\n",
637 638 "BX9rdS3fQNNFwcT8orQC+F60LAY9+GbFo2Sw3Ld4Tw9jq9yJtrY8RtHAdzytyek/mv2+j2TbTvAQ\n",
638 639 "KbbCYtdC8E/KtR4V5ZTSScr5Wb63vmbw7UpddEXYvl55pARyyvMxWNSh3Li4GF8Jk5JBi5B5ASQw\n",
639 640 "xCMYpX5hkAMc+d8tl2bT+IEvUTsAAAElQZoQSeEPJlMCK/8AJIAzFZs00JJ0yfm8CZiew4xWdArL\n",
640 641 "klEvBVXo/+ukPLu3XP9HFOfsme3T6BJEKmPPgZw/Lxnraq6Sl2kLVW19YU1qmqgfv+80LkZaWU5g\n",
641 642 "RAH4hqyo3bFYcbuY2SC3IW5Wm69gtYyAXOdbAYSEHA16fvCeRQjHEsxKVndJdrRAlrGHsKgUBQ3U\n",
642 643 "p/ZXIy1vkdFOfKSjpuZnswkuqr8NZI5tJ/dnBSErBTNWPaNwWV7nNomC0EYVGo+geGBhLXzaLw0U\n",
643 644 "AOCYGjiPc3803BDw1GLoLIXjrIFJxwRfBNIAXYZAglu30oYzhpAfRWSprkeULMWYJTlWvbUQ5CNe\n",
644 645 "wSZssuDWIRAc3w8AcFaywwn+YSGhtR8VI1OGjYkfBbcAAAD8QZoxSeEPJlMCK/8AJdokjCUETRw/\n",
645 646 "nciVPtaZQSBP/VxAQSITASEzlJBl9Na1r0DJhLOz279+KQLtl/xHZ8vAKc528mTMTqtWs4sFbeVg\n",
646 647 "HWyBpHcHEtgTzjIqEinp/MPuUXF5poo8YLSSMFn9Ozx2FbU5/Kh9A39oN9NHQflVxV1NA6yT/84H\n",
647 648 "HyfMtfdSMS8KTvAEE2lDs14VQayNs5ctjXboQT7xMBf5OLj6thhPvgaDrFB2o/PV9ouK147lruWT\n",
648 649 "P2mkoA9oDIMYW1pcBx4yyV/t9GOPZ3aXneMUb2fFmUCX43BjXfUDMaa4GO2/Ankj3UEQwDxA7ZlN\n",
649 650 "UQK2AAAA4UGaUknhDyZTAiv/ACJHv33I08bkhybYiJ/JiiheW5zMPBu4n5CxGr3frhE7TkLh0vPk\n",
650 651 "tM8m/AhaDiJisdk5QXNe/4WmxEDSAyaVi4eUVu0iHT2ly/KNTGqiORqA2oKpTjh84nYbrpXwnGv9\n",
651 652 "SOf/34Z06xN6Yo3t35UZrP8nlcs/63GtnEmnUwVZHBYfPM6bs5M5AeBfAQ/9mIqu7vnEst+5O2wp\n",
652 653 "PjzdItjwGCZ2ApHVjGnYYFomlA9nm6AXnxNIWHIsDgxCk3zx+6QbXipu/CWLG1Wf0WIbt4C0JPVl\n",
653 654 "3TEb0QAAAMlBmnNJ4Q8mUwIr/wAVV64OfTKmlktYOqZHH1W1DhPy/X/6sD4T6hRdzfOgNtTOX2Ic\n",
654 655 "kRJHshfBQVkJIzns079io6kpJFCcS3VD4zrWCn/dNaGV0kWTpFBRuusfn8F0C0R/EhsQeyTsdZft\n",
655 656 "EkLGb5tq+nrir3vfmeb7rjmWJRXkIrTEKu8pIuAd+4FBGp8ARgGe80Jqpp//s1433HqBFqXsIFJT\n",
656 657 "mU8j/toF9HyueI1Ea4uvsQ6NANGcYCbOAKCmbNiwABMCFaiUTMAAAAPSbW9vdgAAAGxtdmhkAAAA\n",
657 658 "AHwlsIB8JbCAAAAD6AAAAyAAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAA\n",
658 659 "AAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAv10cmFrAAAAXHRraGQA\n",
659 660 "AAAPfCWwgHwlsIAAAAABAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAB\n",
660 661 "AAAAAAAAAAAAAAAAAABAAAAAAY4AAAGGAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAMgAAAA\n",
661 662 "AgABAAAAAAJ1bWRpYQAAACBtZGhkAAAAAHwlsIB8JbCAAAAAGQAAABRVxAAAAAAALWhkbHIAAAAA\n",
662 663 "AAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAACIG1pbmYAAAAUdm1oZAAAAAEAAAAA\n",
663 664 "AAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAeBzdGJsAAAAtHN0c2QA\n",
664 665 "AAAAAAAAAQAAAKRhdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAY4BhgBIAAAASAAAAAAAAAAB\n",
665 666 "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGP//AAAAMmF2Y0MBZAAV/+EAGWdkABWs\n",
666 667 "2UGQz6mhAAADAAEAAAMAMg8WLZYBAAZo6+PLIsAAAAAcdXVpZGtoQPJfJE/FujmlG88DI/MAAAAA\n",
667 668 "AAAAGHN0dHMAAAAAAAAAAQAAABQAAAABAAAAFHN0c3MAAAAAAAAAAQAAAAEAAAAYY3R0cwAAAAAA\n",
668 669 "AAABAAAAFAAAAAIAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAEAAAABAAAAZHN0c3oAAAAAAAAAAAAA\n",
669 670 "ABQAAA05AAACqQAAAl8AAAITAAACiwAAAh8AAAIvAAABiAAAAVsAAAE5AAABWwAAAUQAAAFmAAAA\n",
670 671 "/QAAAUEAAAEaAAABKQAAAQAAAADlAAAAzQAAAGBzdGNvAAAAAAAAABQAAAAsAAANZQAAEA4AABJt\n",
671 672 "AAAUgAAAFwsAABkqAAAbWQAAHOEAAB48AAAfdQAAINAAACIUAAAjegAAJHcAACW4AAAm0gAAJ/sA\n",
672 673 "ACj7AAAp4AAAAGF1ZHRhAAAAWW1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAA\n",
673 674 "AAAAAAAALGlsc3QAAAAkqXRvbwAAABxkYXRhAAAAAQAAAABMYXZmNTIuMTExLjA=\n",
674 675 "\">"
675 676 ],
676 677 "output_type": "pyout",
677 678 "prompt_number": 8,
678 679 "text": [
679 680 "<IPython.core.display.HTML at 0x10fba28d0>"
680 681 ]
681 682 }
682 683 ],
683 684 "prompt_number": 8
684 685 },
685 686 {
686 687 "cell_type": "heading",
687 688 "level": 2,
688 689 "metadata": {},
689 690 "source": [
690 691 "HTML"
691 692 ]
692 693 },
693 694 {
694 695 "cell_type": "markdown",
695 696 "metadata": {},
696 697 "source": [
697 698 "Python objects can declare HTML representations that will be displayed in the Notebook. If you have some HTML you want to display, simply use the `HTML` class."
698 699 ]
699 700 },
700 701 {
701 702 "cell_type": "code",
702 703 "collapsed": false,
703 704 "input": [
704 705 "from IPython.display import HTML"
705 706 ],
706 707 "language": "python",
707 708 "metadata": {},
708 709 "outputs": [],
709 710 "prompt_number": 3
710 711 },
711 712 {
712 713 "cell_type": "code",
713 714 "collapsed": false,
714 715 "input": [
715 716 "s = \"\"\"<table>\n",
716 717 "<tr>\n",
717 718 "<th>Header 1</th>\n",
718 719 "<th>Header 2</th>\n",
719 720 "</tr>\n",
720 721 "<tr>\n",
721 722 "<td>row 1, cell 1</td>\n",
722 723 "<td>row 1, cell 2</td>\n",
723 724 "</tr>\n",
724 725 "<tr>\n",
725 726 "<td>row 2, cell 1</td>\n",
726 727 "<td>row 2, cell 2</td>\n",
727 728 "</tr>\n",
728 729 "</table>\"\"\""
729 730 ],
730 731 "language": "python",
731 732 "metadata": {},
732 733 "outputs": [],
733 734 "prompt_number": 4
734 735 },
735 736 {
736 737 "cell_type": "code",
737 738 "collapsed": false,
738 739 "input": [
739 740 "h = HTML(s); h"
740 741 ],
741 742 "language": "python",
742 743 "metadata": {},
743 744 "outputs": [
744 745 {
745 746 "html": [
746 747 "<table>\n",
747 748 "<tr>\n",
748 749 "<th>Header 1</th>\n",
749 750 "<th>Header 2</th>\n",
750 751 "</tr>\n",
751 752 "<tr>\n",
752 753 "<td>row 1, cell 1</td>\n",
753 754 "<td>row 1, cell 2</td>\n",
754 755 "</tr>\n",
755 756 "<tr>\n",
756 757 "<td>row 2, cell 1</td>\n",
757 758 "<td>row 2, cell 2</td>\n",
758 759 "</tr>\n",
759 760 "</table>"
760 761 ],
761 762 "output_type": "pyout",
762 763 "prompt_number": 5,
763 764 "text": [
764 765 "<IPython.core.display.HTML at 0x1087a0c10>"
765 766 ]
766 767 }
767 768 ],
768 769 "prompt_number": 5
769 770 },
770 771 {
771 772 "cell_type": "markdown",
772 773 "metadata": {},
773 774 "source": [
774 775 "Pandas makes use of this capability to allow `DataFrames` to be represented as HTML tables."
775 776 ]
776 777 },
777 778 {
778 779 "cell_type": "code",
779 780 "collapsed": false,
780 781 "input": [
781 782 "import pandas"
782 783 ],
783 784 "language": "python",
784 785 "metadata": {},
785 786 "outputs": [],
786 787 "prompt_number": 6
787 788 },
788 789 {
789 790 "cell_type": "markdown",
790 791 "metadata": {},
791 792 "source": [
792 793 "By default, `DataFrames` will be represented as text; to enable HTML representations we need to set a print option:"
793 794 ]
794 795 },
795 796 {
796 797 "cell_type": "code",
797 798 "collapsed": false,
798 799 "input": [
799 800 "pandas.core.format.set_printoptions(notebook_repr_html=True)"
800 801 ],
801 802 "language": "python",
802 803 "metadata": {},
803 804 "outputs": [],
804 805 "prompt_number": 9
805 806 },
806 807 {
807 808 "cell_type": "markdown",
808 809 "metadata": {},
809 810 "source": [
810 811 "Here is a small amount of stock data for APPL:"
811 812 ]
812 813 },
813 814 {
814 815 "cell_type": "code",
815 816 "collapsed": false,
816 817 "input": [
817 818 "%%file data.csv\n",
818 819 "Date,Open,High,Low,Close,Volume,Adj Close\n",
819 820 "2012-06-01,569.16,590.00,548.50,584.00,14077000,581.50\n",
820 821 "2012-05-01,584.90,596.76,522.18,577.73,18827900,575.26\n",
821 822 "2012-04-02,601.83,644.00,555.00,583.98,28759100,581.48\n",
822 823 "2012-03-01,548.17,621.45,516.22,599.55,26486000,596.99\n",
823 824 "2012-02-01,458.41,547.61,453.98,542.44,22001000,540.12\n",
824 825 "2012-01-03,409.40,458.24,409.00,456.48,12949100,454.53"
825 826 ],
826 827 "language": "python",
827 828 "metadata": {},
828 829 "outputs": [
829 830 {
830 831 "output_type": "stream",
831 832 "stream": "stdout",
832 833 "text": [
833 834 "Writing data.csv\n"
834 835 ]
835 836 }
836 837 ],
837 838 "prompt_number": 11
838 839 },
839 840 {
840 841 "cell_type": "markdown",
841 842 "metadata": {},
842 843 "source": [
843 844 "Read this as into a `DataFrame`:"
844 845 ]
845 846 },
846 847 {
847 848 "cell_type": "code",
848 849 "collapsed": false,
849 850 "input": [
850 851 "df = pandas.read_csv('data.csv')"
851 852 ],
852 853 "language": "python",
853 854 "metadata": {},
854 855 "outputs": [],
855 856 "prompt_number": 12
856 857 },
857 858 {
858 859 "cell_type": "markdown",
859 860 "metadata": {},
860 861 "source": [
861 862 "And view the HTML representation:"
862 863 ]
863 864 },
864 865 {
865 866 "cell_type": "code",
866 867 "collapsed": false,
867 868 "input": [
868 869 "df"
869 870 ],
870 871 "language": "python",
871 872 "metadata": {},
872 873 "outputs": [
873 874 {
874 875 "html": [
875 876 "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
876 877 "<table border=\"1\">\n",
877 878 " <thead>\n",
878 879 " <tr>\n",
879 880 " <th></th>\n",
880 881 " <th>Date</th>\n",
881 882 " <th>Open</th>\n",
882 883 " <th>High</th>\n",
883 884 " <th>Low</th>\n",
884 885 " <th>Close</th>\n",
885 886 " <th>Volume</th>\n",
886 887 " <th>Adj Close</th>\n",
887 888 " </tr>\n",
888 889 " </thead>\n",
889 890 " <tbody>\n",
890 891 " <tr>\n",
891 892 " <td><strong>0</strong></td>\n",
892 893 " <td> 2012-06-01</td>\n",
893 894 " <td> 569.16</td>\n",
894 895 " <td> 590.00</td>\n",
895 896 " <td> 548.50</td>\n",
896 897 " <td> 584.00</td>\n",
897 898 " <td> 14077000</td>\n",
898 899 " <td> 581.50</td>\n",
899 900 " </tr>\n",
900 901 " <tr>\n",
901 902 " <td><strong>1</strong></td>\n",
902 903 " <td> 2012-05-01</td>\n",
903 904 " <td> 584.90</td>\n",
904 905 " <td> 596.76</td>\n",
905 906 " <td> 522.18</td>\n",
906 907 " <td> 577.73</td>\n",
907 908 " <td> 18827900</td>\n",
908 909 " <td> 575.26</td>\n",
909 910 " </tr>\n",
910 911 " <tr>\n",
911 912 " <td><strong>2</strong></td>\n",
912 913 " <td> 2012-04-02</td>\n",
913 914 " <td> 601.83</td>\n",
914 915 " <td> 644.00</td>\n",
915 916 " <td> 555.00</td>\n",
916 917 " <td> 583.98</td>\n",
917 918 " <td> 28759100</td>\n",
918 919 " <td> 581.48</td>\n",
919 920 " </tr>\n",
920 921 " <tr>\n",
921 922 " <td><strong>3</strong></td>\n",
922 923 " <td> 2012-03-01</td>\n",
923 924 " <td> 548.17</td>\n",
924 925 " <td> 621.45</td>\n",
925 926 " <td> 516.22</td>\n",
926 927 " <td> 599.55</td>\n",
927 928 " <td> 26486000</td>\n",
928 929 " <td> 596.99</td>\n",
929 930 " </tr>\n",
930 931 " <tr>\n",
931 932 " <td><strong>4</strong></td>\n",
932 933 " <td> 2012-02-01</td>\n",
933 934 " <td> 458.41</td>\n",
934 935 " <td> 547.61</td>\n",
935 936 " <td> 453.98</td>\n",
936 937 " <td> 542.44</td>\n",
937 938 " <td> 22001000</td>\n",
938 939 " <td> 540.12</td>\n",
939 940 " </tr>\n",
940 941 " <tr>\n",
941 942 " <td><strong>5</strong></td>\n",
942 943 " <td> 2012-01-03</td>\n",
943 944 " <td> 409.40</td>\n",
944 945 " <td> 458.24</td>\n",
945 946 " <td> 409.00</td>\n",
946 947 " <td> 456.48</td>\n",
947 948 " <td> 12949100</td>\n",
948 949 " <td> 454.53</td>\n",
949 950 " </tr>\n",
950 951 " </tbody>\n",
951 952 "</table>\n",
952 953 "</div>"
953 954 ],
954 955 "output_type": "pyout",
955 956 "prompt_number": 14,
956 957 "text": [
957 958 " Date Open High Low Close Volume Adj Close\n",
958 959 "0 2012-06-01 569.16 590.00 548.50 584.00 14077000 581.50\n",
959 960 "1 2012-05-01 584.90 596.76 522.18 577.73 18827900 575.26\n",
960 961 "2 2012-04-02 601.83 644.00 555.00 583.98 28759100 581.48\n",
961 962 "3 2012-03-01 548.17 621.45 516.22 599.55 26486000 596.99\n",
962 963 "4 2012-02-01 458.41 547.61 453.98 542.44 22001000 540.12\n",
963 964 "5 2012-01-03 409.40 458.24 409.00 456.48 12949100 454.53"
964 965 ]
965 966 }
966 967 ],
967 968 "prompt_number": 14
968 969 },
969 970 {
970 971 "cell_type": "heading",
971 972 "level": 2,
972 973 "metadata": {},
973 974 "source": [
974 975 "External sites"
975 976 ]
976 977 },
977 978 {
978 979 "cell_type": "markdown",
979 980 "metadata": {},
980 981 "source": [
981 982 "You can even embed an entire page from another site in an iframe; for example this is today's Wikipedia\n",
982 983 "page for mobile users:"
983 984 ]
984 985 },
985 986 {
986 987 "cell_type": "code",
987 988 "collapsed": false,
988 989 "input": [
989 990 "HTML('<iframe src=http://en.mobile.wikipedia.org/?useformat=mobile width=700 height=350></iframe>')"
990 991 ],
991 992 "language": "python",
992 993 "metadata": {},
993 994 "outputs": [
994 995 {
995 996 "html": [
996 997 "<iframe src=http://en.mobile.wikipedia.org/?useformat=mobile width=700 height=350></iframe>"
997 998 ],
998 999 "output_type": "pyout",
999 1000 "prompt_number": 9,
1000 1001 "text": [
1001 1002 "<IPython.core.display.HTML at 0x1094900d0>"
1002 1003 ]
1003 1004 }
1004 1005 ],
1005 1006 "prompt_number": 9
1006 1007 },
1007 1008 {
1008 1009 "cell_type": "heading",
1009 1010 "level": 2,
1010 1011 "metadata": {},
1011 1012 "source": [
1012 1013 "LaTeX"
1013 1014 ]
1014 1015 },
1015 1016 {
1016 1017 "cell_type": "markdown",
1017 1018 "metadata": {},
1018 1019 "source": [
1019 1020 "And we also support the display of mathematical expressions typeset in LaTeX, which is rendered\n",
1020 1021 "in the browser thanks to the [MathJax library](http://mathjax.org)."
1021 1022 ]
1022 1023 },
1023 1024 {
1024 1025 "cell_type": "code",
1025 1026 "collapsed": false,
1026 1027 "input": [
1027 1028 "from IPython.display import Math\n",
1028 1029 "Math(r'F(k) = \\int_{-\\infty}^{\\infty} f(x) e^{2\\pi i k} dx')"
1029 1030 ],
1030 1031 "language": "python",
1031 1032 "metadata": {},
1032 1033 "outputs": [
1033 1034 {
1034 1035 "latex": [
1035 1036 "$$F(k) = \\int_{-\\infty}^{\\infty} f(x) e^{2\\pi i k} dx$$"
1036 1037 ],
1037 1038 "output_type": "pyout",
1038 1039 "prompt_number": 10,
1039 1040 "text": [
1040 1041 "<IPython.core.display.Math at 0x10fba26d0>"
1041 1042 ]
1042 1043 }
1043 1044 ],
1044 1045 "prompt_number": 10
1045 1046 },
1046 1047 {
1047 1048 "cell_type": "markdown",
1048 1049 "metadata": {},
1049 1050 "source": [
1050 1051 "With the `Latex` class, you have to include the delimiters yourself. This allows you to use other LaTeX modes such as `eqnarray`:"
1051 1052 ]
1052 1053 },
1053 1054 {
1054 1055 "cell_type": "code",
1055 1056 "collapsed": false,
1056 1057 "input": [
1057 1058 "from IPython.display import Latex\n",
1058 1059 "Latex(r\"\"\"\\begin{eqnarray}\n",
1059 1060 "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n",
1060 1061 "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n",
1061 1062 "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n",
1062 1063 "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 \n",
1063 1064 "\\end{eqnarray}\"\"\")"
1064 1065 ],
1065 1066 "language": "python",
1066 1067 "metadata": {},
1067 1068 "outputs": [
1068 1069 {
1069 1070 "latex": [
1070 1071 "\\begin{eqnarray}\n",
1071 1072 "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n",
1072 1073 "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n",
1073 1074 "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n",
1074 1075 "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 \n",
1075 1076 "\\end{eqnarray}"
1076 1077 ],
1077 1078 "output_type": "pyout",
1078 1079 "prompt_number": 11,
1079 1080 "text": [
1080 1081 "<IPython.core.display.Latex at 0x10fba2c10>"
1081 1082 ]
1082 1083 }
1083 1084 ],
1084 1085 "prompt_number": 11
1085 1086 },
1086 1087 {
1087 1088 "cell_type": "markdown",
1088 1089 "metadata": {},
1089 1090 "source": [
1090 1091 "Or you can enter latex directly with the `%%latex` cell magic:"
1091 1092 ]
1092 1093 },
1093 1094 {
1094 1095 "cell_type": "code",
1095 1096 "collapsed": false,
1096 1097 "input": [
1097 1098 "%%latex\n",
1098 1099 "\\begin{aligned}\n",
1099 1100 "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n",
1100 1101 "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n",
1101 1102 "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n",
1102 1103 "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0\n",
1103 1104 "\\end{aligned}"
1104 1105 ],
1105 1106 "language": "python",
1106 1107 "metadata": {},
1107 1108 "outputs": [
1108 1109 {
1109 1110 "latex": [
1110 1111 "\\begin{aligned}\n",
1111 1112 "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n",
1112 1113 "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n",
1113 1114 "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n",
1114 1115 "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0\n",
1115 1116 "\\end{aligned}"
1116 1117 ],
1117 1118 "output_type": "display_data",
1118 1119 "text": [
1119 1120 "<IPython.core.display.Latex at 0x10a617c90>"
1120 1121 ]
1121 1122 }
1122 1123 ],
1123 1124 "prompt_number": 12
1124 1125 }
1125 1126 ],
1126 1127 "metadata": {}
1127 1128 }
1128 1129 ]
1129 1130 }
@@ -1,146 +1,147
1 1 {
2 2 "metadata": {
3 3 "name": "Progress Bars"
4 4 },
5 5 "nbformat": 3,
6 6 "nbformat_minor": 0,
7 7 "worksheets": [
8 8 {
9 9 "cells": [
10 10 {
11 11 "cell_type": "heading",
12 12 "level": 1,
13 13 "metadata": {},
14 14 "source": [
15 15 "Two Examples of Progress Bars"
16 16 ]
17 17 },
18 18 {
19 19 "cell_type": "heading",
20 20 "level": 2,
21 21 "metadata": {},
22 22 "source": [
23 23 "A Javascript Progress Bar"
24 24 ]
25 25 },
26 26 {
27 27 "cell_type": "markdown",
28 28 "metadata": {},
29 29 "source": [
30 30 "Here is a simple progress bar using HTML/Javascript:"
31 31 ]
32 32 },
33 33 {
34 34 "cell_type": "code",
35 35 "collapsed": false,
36 36 "input": [
37 37 "import uuid\n",
38 38 "import time\n",
39 39 "from IPython.display import HTML, Javascript, display\n",
40 40 "\n",
41 41 "divid = str(uuid.uuid4())\n",
42 42 "\n",
43 43 "pb = HTML(\n",
44 44 "\"\"\"\n",
45 45 "<div style=\"border: 1px solid black; width:500px\">\n",
46 46 " <div id=\"%s\" style=\"background-color:blue; width:0%%\">&nbsp;</div>\n",
47 47 "</div> \n",
48 48 "\"\"\" % divid)\n",
49 49 "display(pb)\n",
50 50 "for i in range(1,101):\n",
51 51 " time.sleep(0.1)\n",
52 52 " \n",
53 53 " display(Javascript(\"$('div#%s').width('%i%%')\" % (divid, i)))"
54 54 ],
55 55 "language": "python",
56 56 "metadata": {},
57 57 "outputs": [],
58 58 "prompt_number": 2
59 59 },
60 60 {
61 61 "cell_type": "markdown",
62 62 "metadata": {},
63 63 "source": [
64 64 "The above simply makes a div that is a box, and a blue div inside it with a unique ID \n",
65 65 "(so that the javascript won't collide with other similar progress bars on the same page). \n",
66 66 "\n",
67 67 "Then, at every progress point, we run a simple jQuery call to resize the blue box to\n",
68 68 "the appropriate fraction of the width of its containing box, and voil\u00e0 a nice\n",
69 69 "HTML/Javascript progress bar!"
70 70 ]
71 71 },
72 72 {
73 73 "cell_type": "heading",
74 74 "level": 1,
75 75 "metadata": {},
76 76 "source": [
77 77 "ProgressBar class"
78 78 ]
79 79 },
80 80 {
81 81 "cell_type": "markdown",
82 82 "metadata": {},
83 83 "source": [
84 84 "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"
85 85 ]
86 86 },
87 87 {
88 88 "cell_type": "code",
89 89 "collapsed": true,
90 90 "input": [
91 "from __future__ import print_function\n",
91 92 "import sys, time\n",
92 93 "\n",
93 94 "class ProgressBar:\n",
94 95 " def __init__(self, iterations):\n",
95 96 " self.iterations = iterations\n",
96 97 " self.prog_bar = '[]'\n",
97 98 " self.fill_char = '*'\n",
98 99 " self.width = 50\n",
99 100 " self.__update_amount(0)\n",
100 101 "\n",
101 102 " def animate(self, iter):\n",
102 " print '\\r', self,\n",
103 " print('\\r', self, end='')\n",
103 104 " sys.stdout.flush()\n",
104 105 " self.update_iteration(iter + 1)\n",
105 106 "\n",
106 107 " def update_iteration(self, elapsed_iter):\n",
107 108 " self.__update_amount((elapsed_iter / float(self.iterations)) * 100.0)\n",
108 109 " self.prog_bar += ' %d of %s complete' % (elapsed_iter, self.iterations)\n",
109 110 "\n",
110 111 " def __update_amount(self, new_amount):\n",
111 112 " percent_done = int(round((new_amount / 100.0) * 100.0))\n",
112 113 " all_full = self.width - 2\n",
113 114 " num_hashes = int(round((percent_done / 100.0) * all_full))\n",
114 115 " self.prog_bar = '[' + self.fill_char * num_hashes + ' ' * (all_full - num_hashes) + ']'\n",
115 116 " pct_place = (len(self.prog_bar) // 2) - len(str(percent_done))\n",
116 117 " pct_string = '%d%%' % percent_done\n",
117 118 " self.prog_bar = self.prog_bar[0:pct_place] + \\\n",
118 119 " (pct_string + self.prog_bar[pct_place + len(pct_string):])\n",
119 120 "\n",
120 121 " def __str__(self):\n",
121 122 " return str(self.prog_bar)"
122 123 ],
123 124 "language": "python",
124 125 "metadata": {},
125 126 "outputs": [],
126 127 "prompt_number": 3
127 128 },
128 129 {
129 130 "cell_type": "code",
130 131 "collapsed": false,
131 132 "input": [
132 133 "p = ProgressBar(1000)\n",
133 134 "for i in range(1001):\n",
134 135 " time.sleep(0.002)\n",
135 136 " p.animate(i)"
136 137 ],
137 138 "language": "python",
138 139 "metadata": {},
139 140 "outputs": [],
140 141 "prompt_number": 4
141 142 }
142 143 ],
143 144 "metadata": {}
144 145 }
145 146 ]
146 147 } No newline at end of file
@@ -1,928 +1,929
1 1 {
2 2 "metadata": {
3 3 "name": "R Magics"
4 4 },
5 5 "nbformat": 3,
6 6 "nbformat_minor": 0,
7 7 "worksheets": [
8 8 {
9 9 "cells": [
10 10 {
11 11 "cell_type": "heading",
12 12 "level": 1,
13 13 "metadata": {},
14 14 "source": [
15 15 "Using R Within the IPython Notebok"
16 16 ]
17 17 },
18 18 {
19 19 "cell_type": "markdown",
20 20 "metadata": {},
21 21 "source": [
22 22 "Using the `rmagic` extension, users can run R code from within the IPython Notebook. This example Notebook demonstrates this capability. "
23 23 ]
24 24 },
25 25 {
26 26 "cell_type": "code",
27 27 "collapsed": false,
28 28 "input": [
29 29 "%pylab inline"
30 30 ],
31 31 "language": "python",
32 32 "metadata": {},
33 33 "outputs": []
34 34 },
35 35 {
36 36 "cell_type": "heading",
37 37 "level": 2,
38 38 "metadata": {},
39 39 "source": [
40 40 "Line magics"
41 41 ]
42 42 },
43 43 {
44 44 "cell_type": "markdown",
45 45 "metadata": {},
46 46 "source": [
47 47 "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:"
48 48 ]
49 49 },
50 50 {
51 51 "cell_type": "code",
52 52 "collapsed": true,
53 53 "input": [
54 54 "%load_ext rmagic "
55 55 ],
56 56 "language": "python",
57 57 "metadata": {},
58 58 "outputs": [],
59 59 "prompt_number": 1
60 60 },
61 61 {
62 62 "cell_type": "markdown",
63 63 "metadata": {},
64 64 "source": [
65 65 "A typical use case one imagines is having some numpy arrays, wanting to compute some statistics of interest on these\n",
66 66 " arrays and return the result back to python. Let's suppose we just want to fit a simple linear model to a scatterplot."
67 67 ]
68 68 },
69 69 {
70 70 "cell_type": "code",
71 71 "collapsed": false,
72 72 "input": [
73 73 "import numpy as np\n",
74 74 "import pylab\n",
75 75 "X = np.array([0,1,2,3,4])\n",
76 76 "Y = np.array([3,5,4,6,7])\n",
77 77 "pylab.scatter(X, Y)"
78 78 ],
79 79 "language": "python",
80 80 "metadata": {},
81 81 "outputs": [
82 82 {
83 83 "output_type": "pyout",
84 84 "prompt_number": 2,
85 85 "text": [
86 86 "<matplotlib.collections.PathCollection at 0x10f32f610>"
87 87 ]
88 88 }
89 89 ],
90 90 "prompt_number": 2
91 91 },
92 92 {
93 93 "cell_type": "markdown",
94 94 "metadata": {},
95 95 "source": [
96 96 "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."
97 97 ]
98 98 },
99 99 {
100 100 "cell_type": "code",
101 101 "collapsed": false,
102 102 "input": [
103 103 "%Rpush X Y\n",
104 104 "%R lm(Y~X)$coef"
105 105 ],
106 106 "language": "python",
107 107 "metadata": {},
108 108 "outputs": [
109 109 {
110 110 "output_type": "pyout",
111 111 "prompt_number": 3,
112 112 "text": [
113 113 "array([ 3.2, 0.9])"
114 114 ]
115 115 }
116 116 ],
117 117 "prompt_number": 3
118 118 },
119 119 {
120 120 "cell_type": "markdown",
121 121 "metadata": {},
122 122 "source": [
123 123 "We can check that this is correct fairly easily:"
124 124 ]
125 125 },
126 126 {
127 127 "cell_type": "code",
128 128 "collapsed": false,
129 129 "input": [
130 130 "Xr = X - X.mean(); Yr = Y - Y.mean()\n",
131 131 "slope = (Xr*Yr).sum() / (Xr**2).sum()\n",
132 132 "intercept = Y.mean() - X.mean() * slope\n",
133 133 "(intercept, slope)"
134 134 ],
135 135 "language": "python",
136 136 "metadata": {},
137 137 "outputs": [
138 138 {
139 139 "output_type": "pyout",
140 140 "prompt_number": 4,
141 141 "text": [
142 142 "(3.2000000000000002, 0.90000000000000002)"
143 143 ]
144 144 }
145 145 ],
146 146 "prompt_number": 4
147 147 },
148 148 {
149 149 "cell_type": "markdown",
150 150 "metadata": {},
151 151 "source": [
152 152 "It is also possible to return more than one value with %R."
153 153 ]
154 154 },
155 155 {
156 156 "cell_type": "code",
157 157 "collapsed": false,
158 158 "input": [
159 159 "%R resid(lm(Y~X)); coef(lm(X~Y))\n"
160 160 ],
161 161 "language": "python",
162 162 "metadata": {},
163 163 "outputs": [
164 164 {
165 165 "output_type": "pyout",
166 166 "prompt_number": 5,
167 167 "text": [
168 168 "array([-2.5, 0.9])"
169 169 ]
170 170 }
171 171 ],
172 172 "prompt_number": 5
173 173 },
174 174 {
175 175 "cell_type": "markdown",
176 176 "metadata": {},
177 177 "source": [
178 178 "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",
179 179 "the *coef(lm(X~Y))*. To pull other variables from R, there is one more magic."
180 180 ]
181 181 },
182 182 {
183 183 "cell_type": "markdown",
184 184 "metadata": {},
185 185 "source": [
186 186 "There are two more line magics, %Rpull and %Rget. Both are useful after some R code has been executed and there are variables\n",
187 187 "in the rpy2 namespace that one would like to retrieve. The main difference is that one\n",
188 188 " returns the value (%Rget), while the other pulls it to self.shell.user_ns (%Rpull). Imagine we've stored the results\n",
189 189 "of some calculation in the variable \"a\" in rpy2's namespace. By using the %R magic, we can obtain these results and\n",
190 190 "store them in b. We can also pull them directly to user_ns with %Rpull. They are both views on the same data."
191 191 ]
192 192 },
193 193 {
194 194 "cell_type": "code",
195 195 "collapsed": false,
196 196 "input": [
197 197 "b = %R a=resid(lm(Y~X))\n",
198 198 "%Rpull a\n",
199 "print a\n",
199 "print(a)\n",
200 200 "assert id(b.data) == id(a.data)\n",
201 201 "%R -o a"
202 202 ],
203 203 "language": "python",
204 204 "metadata": {},
205 205 "outputs": [
206 206 {
207 207 "output_type": "stream",
208 208 "stream": "stdout",
209 209 "text": [
210 210 "[-0.2 0.9 -1. 0.1 0.2]\n"
211 211 ]
212 212 }
213 213 ],
214 214 "prompt_number": 6
215 215 },
216 216 {
217 217 "cell_type": "markdown",
218 218 "metadata": {},
219 219 "source": [
220 220 "%Rpull is equivalent to calling %R with just -o\n"
221 221 ]
222 222 },
223 223 {
224 224 "cell_type": "code",
225 225 "collapsed": false,
226 226 "input": [
227 227 "%R d=resid(lm(Y~X)); e=coef(lm(Y~X))\n",
228 228 "%R -o d -o e\n",
229 229 "%Rpull e\n",
230 "print d\n",
231 "print e\n",
230 "print(d)\n",
231 "print(e)\n",
232 232 "import numpy as np\n",
233 233 "np.testing.assert_almost_equal(d, a)"
234 234 ],
235 235 "language": "python",
236 236 "metadata": {},
237 237 "outputs": [
238 238 {
239 239 "output_type": "stream",
240 240 "stream": "stdout",
241 241 "text": [
242 242 "[-0.2 0.9 -1. 0.1 0.2]\n",
243 243 "[ 3.2 0.9]\n"
244 244 ]
245 245 }
246 246 ],
247 247 "prompt_number": 7
248 248 },
249 249 {
250 250 "cell_type": "markdown",
251 251 "metadata": {},
252 252 "source": [
253 253 "On the other hand %Rpush is equivalent to calling %R with just -i and no trailing code."
254 254 ]
255 255 },
256 256 {
257 257 "cell_type": "code",
258 258 "collapsed": false,
259 259 "input": [
260 260 "A = np.arange(20)\n",
261 261 "%R -i A\n",
262 262 "%R mean(A)\n"
263 263 ],
264 264 "language": "python",
265 265 "metadata": {},
266 266 "outputs": [
267 267 {
268 268 "output_type": "pyout",
269 269 "prompt_number": 8,
270 270 "text": [
271 271 "array([ 9.5])"
272 272 ]
273 273 }
274 274 ],
275 275 "prompt_number": 8
276 276 },
277 277 {
278 278 "cell_type": "markdown",
279 279 "metadata": {},
280 280 "source": [
281 281 "The magic %Rget retrieves one variable from R."
282 282 ]
283 283 },
284 284 {
285 285 "cell_type": "code",
286 286 "collapsed": false,
287 287 "input": [
288 288 "%Rget A"
289 289 ],
290 290 "language": "python",
291 291 "metadata": {},
292 292 "outputs": [
293 293 {
294 294 "output_type": "pyout",
295 295 "prompt_number": 9,
296 296 "text": [
297 297 "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n",
298 298 " 17, 18, 19], dtype=int32)"
299 299 ]
300 300 }
301 301 ],
302 302 "prompt_number": 9
303 303 },
304 304 {
305 305 "cell_type": "heading",
306 306 "level": 2,
307 307 "metadata": {},
308 308 "source": [
309 309 "Plotting and capturing output"
310 310 ]
311 311 },
312 312 {
313 313 "cell_type": "markdown",
314 314 "metadata": {},
315 315 "source": [
316 316 "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."
317 317 ]
318 318 },
319 319 {
320 320 "cell_type": "code",
321 321 "collapsed": false,
322 322 "input": [
323 "from __future__ import print_function\n",
323 324 "v1 = %R plot(X,Y); print(summary(lm(Y~X))); vv=mean(X)*mean(Y)\n",
324 "print 'v1 is:', v1\n",
325 "print('v1 is:', v1)\n",
325 326 "v2 = %R mean(X)*mean(Y)\n",
326 "print 'v2 is:', v2"
327 "print('v2 is:', v2)"
327 328 ],
328 329 "language": "python",
329 330 "metadata": {},
330 331 "outputs": [
331 332 {
332 333 "output_type": "display_data",
333 334 "text": [
334 335 "\n",
335 336 "Call:\n",
336 337 "lm(formula = Y ~ X)\n",
337 338 "\n",
338 339 "Residuals:\n",
339 340 " 1 2 3 4 5 \n",
340 341 "-0.2 0.9 -1.0 0.1 0.2 \n",
341 342 "\n",
342 343 "Coefficients:\n",
343 344 " Estimate Std. Error t value Pr(>|t|) \n",
344 345 "(Intercept) 3.2000 0.6164 5.191 0.0139 *\n",
345 346 "X 0.9000 0.2517 3.576 0.0374 *\n",
346 347 "---\n",
347 348 "Signif. codes: 0 \u2018***\u2019 0.001 \u2018**\u2019 0.01 \u2018*\u2019 0.05 \u2018.\u2019 0.1 \u2018 \u2019 1 \n",
348 349 "\n",
349 350 "Residual standard error: 0.7958 on 3 degrees of freedom\n",
350 351 "Multiple R-squared: 0.81,\tAdjusted R-squared: 0.7467 \n",
351 352 "F-statistic: 12.79 on 1 and 3 DF, p-value: 0.03739 \n",
352 353 "\n"
353 354 ]
354 355 },
355 356 {
356 357 "output_type": "display_data",
357 358 "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"
358 359 },
359 360 {
360 361 "output_type": "stream",
361 362 "stream": "stdout",
362 363 "text": [
363 364 "v1 is: [ 10.]\n",
364 365 "v2 is: [ 10.]\n"
365 366 ]
366 367 }
367 368 ],
368 369 "prompt_number": 10
369 370 },
370 371 {
371 372 "cell_type": "heading",
372 373 "level": 2,
373 374 "metadata": {},
374 375 "source": [
375 376 "What value is returned from %R?"
376 377 ]
377 378 },
378 379 {
379 380 "cell_type": "markdown",
380 381 "metadata": {},
381 382 "source": [
382 383 "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."
383 384 ]
384 385 },
385 386 {
386 387 "cell_type": "code",
387 388 "collapsed": false,
388 389 "input": [
389 390 "v = %R plot(X,Y)\n",
390 391 "assert v == None"
391 392 ],
392 393 "language": "python",
393 394 "metadata": {},
394 395 "outputs": [
395 396 {
396 397 "output_type": "display_data",
397 398 "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"
398 399 }
399 400 ],
400 401 "prompt_number": 11
401 402 },
402 403 {
403 404 "cell_type": "markdown",
404 405 "metadata": {},
405 406 "source": [
406 407 "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."
407 408 ]
408 409 },
409 410 {
410 411 "cell_type": "code",
411 412 "collapsed": false,
412 413 "input": [
413 414 "v = %R print(X)\n",
414 415 "assert v == None"
415 416 ],
416 417 "language": "python",
417 418 "metadata": {},
418 419 "outputs": [
419 420 {
420 421 "output_type": "display_data",
421 422 "text": [
422 423 "[1] 0 1 2 3 4\n"
423 424 ]
424 425 }
425 426 ],
426 427 "prompt_number": 12
427 428 },
428 429 {
429 430 "cell_type": "markdown",
430 431 "metadata": {},
431 432 "source": [
432 433 "But, if the last value did not print anything to console, the value is returned:\n"
433 434 ]
434 435 },
435 436 {
436 437 "cell_type": "code",
437 438 "collapsed": false,
438 439 "input": [
439 440 "v = %R print(summary(X)); X\n",
440 "print 'v:', v"
441 "print('v:', v)"
441 442 ],
442 443 "language": "python",
443 444 "metadata": {},
444 445 "outputs": [
445 446 {
446 447 "output_type": "display_data",
447 448 "text": [
448 449 " Min. 1st Qu. Median Mean 3rd Qu. Max. \n",
449 450 " 0 1 2 2 3 4 \n"
450 451 ]
451 452 },
452 453 {
453 454 "output_type": "stream",
454 455 "stream": "stdout",
455 456 "text": [
456 457 "v: [0 1 2 3 4]\n"
457 458 ]
458 459 }
459 460 ],
460 461 "prompt_number": 13
461 462 },
462 463 {
463 464 "cell_type": "markdown",
464 465 "metadata": {},
465 466 "source": [
466 467 "The return value can be suppressed by a trailing ';' or an -n argument.\n"
467 468 ]
468 469 },
469 470 {
470 471 "cell_type": "code",
471 472 "collapsed": true,
472 473 "input": [
473 474 "%R -n X"
474 475 ],
475 476 "language": "python",
476 477 "metadata": {},
477 478 "outputs": [],
478 479 "prompt_number": 14
479 480 },
480 481 {
481 482 "cell_type": "code",
482 483 "collapsed": true,
483 484 "input": [
484 485 "%R X; "
485 486 ],
486 487 "language": "python",
487 488 "metadata": {},
488 489 "outputs": [],
489 490 "prompt_number": 15
490 491 },
491 492 {
492 493 "cell_type": "heading",
493 494 "level": 2,
494 495 "metadata": {},
495 496 "source": [
496 497 "Cell level magic"
497 498 ]
498 499 },
499 500 {
500 501 "cell_type": "markdown",
501 502 "metadata": {},
502 503 "source": [
503 504 "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",
504 505 "use before returning to python. This is the cell-level magic.\n",
505 506 "\n",
506 507 "\n",
507 508 "For the cell level magic, inputs can be passed via the -i or --inputs argument in the line. These variables are copied \n",
508 509 "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",
509 510 "\n",
510 511 "We can redo the above calculations in one ipython cell. We might also want to add some output such as a summary\n",
511 512 " from R or perhaps the standard plotting diagnostics of the lm."
512 513 ]
513 514 },
514 515 {
515 516 "cell_type": "code",
516 517 "collapsed": false,
517 518 "input": [
518 519 "%%R -i X,Y -o XYcoef\n",
519 520 "XYlm = lm(Y~X)\n",
520 521 "XYcoef = coef(XYlm)\n",
521 522 "print(summary(XYlm))\n",
522 523 "par(mfrow=c(2,2))\n",
523 524 "plot(XYlm)"
524 525 ],
525 526 "language": "python",
526 527 "metadata": {},
527 528 "outputs": [
528 529 {
529 530 "output_type": "display_data",
530 531 "text": [
531 532 "\n",
532 533 "Call:\n",
533 534 "lm(formula = Y ~ X)\n",
534 535 "\n",
535 536 "Residuals:\n",
536 537 " 1 2 3 4 5 \n",
537 538 "-0.2 0.9 -1.0 0.1 0.2 \n",
538 539 "\n",
539 540 "Coefficients:\n",
540 541 " Estimate Std. Error t value Pr(>|t|) \n",
541 542 "(Intercept) 3.2000 0.6164 5.191 0.0139 *\n",
542 543 "X 0.9000 0.2517 3.576 0.0374 *\n",
543 544 "---\n",
544 545 "Signif. codes: 0 \u2018***\u2019 0.001 \u2018**\u2019 0.01 \u2018*\u2019 0.05 \u2018.\u2019 0.1 \u2018 \u2019 1 \n",
545 546 "\n",
546 547 "Residual standard error: 0.7958 on 3 degrees of freedom\n",
547 548 "Multiple R-squared: 0.81,\tAdjusted R-squared: 0.7467 \n",
548 549 "F-statistic: 12.79 on 1 and 3 DF, p-value: 0.03739 \n",
549 550 "\n"
550 551 ]
551 552 },
552 553 {
553 554 "output_type": "display_data",
554 555 "png": "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\n"
555 556 }
556 557 ],
557 558 "prompt_number": 16
558 559 },
559 560 {
560 561 "cell_type": "heading",
561 562 "level": 2,
562 563 "metadata": {},
563 564 "source": [
564 565 "Passing data back and forth"
565 566 ]
566 567 },
567 568 {
568 569 "cell_type": "markdown",
569 570 "metadata": {},
570 571 "source": [
571 572 "Currently, data is passed through RMagics.pyconverter when going from python to R and RMagics.Rconverter when \n",
572 573 "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",
573 574 "\n",
574 575 "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"
575 576 ]
576 577 },
577 578 {
578 579 "cell_type": "code",
579 580 "collapsed": true,
580 581 "input": [
581 582 "seq1 = np.arange(10)"
582 583 ],
583 584 "language": "python",
584 585 "metadata": {},
585 586 "outputs": [],
586 587 "prompt_number": 17
587 588 },
588 589 {
589 590 "cell_type": "code",
590 591 "collapsed": false,
591 592 "input": [
592 593 "%%R -i seq1 -o seq2\n",
593 594 "seq2 = rep(seq1, 2)\n",
594 595 "print(seq2)"
595 596 ],
596 597 "language": "python",
597 598 "metadata": {},
598 599 "outputs": [
599 600 {
600 601 "output_type": "display_data",
601 602 "text": [
602 603 " [1] 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9\n"
603 604 ]
604 605 }
605 606 ],
606 607 "prompt_number": 18
607 608 },
608 609 {
609 610 "cell_type": "code",
610 611 "collapsed": false,
611 612 "input": [
612 613 "seq2[::2] = 0\n",
613 614 "seq2"
614 615 ],
615 616 "language": "python",
616 617 "metadata": {},
617 618 "outputs": [
618 619 {
619 620 "output_type": "pyout",
620 621 "prompt_number": 19,
621 622 "text": [
622 623 "array([0, 1, 0, 3, 0, 5, 0, 7, 0, 9, 0, 1, 0, 3, 0, 5, 0, 7, 0, 9], dtype=int32)"
623 624 ]
624 625 }
625 626 ],
626 627 "prompt_number": 19
627 628 },
628 629 {
629 630 "cell_type": "code",
630 631 "collapsed": false,
631 632 "input": [
632 633 "%%R\n",
633 634 "print(seq2)"
634 635 ],
635 636 "language": "python",
636 637 "metadata": {},
637 638 "outputs": [
638 639 {
639 640 "output_type": "display_data",
640 641 "text": [
641 642 " [1] 0 1 0 3 0 5 0 7 0 9 0 1 0 3 0 5 0 7 0 9\n"
642 643 ]
643 644 }
644 645 ],
645 646 "prompt_number": 20
646 647 },
647 648 {
648 649 "cell_type": "markdown",
649 650 "metadata": {},
650 651 "source": [
651 652 "Once the array data has been passed to R, modifring its contents does not modify R's copy of the data."
652 653 ]
653 654 },
654 655 {
655 656 "cell_type": "code",
656 657 "collapsed": false,
657 658 "input": [
658 659 "seq1[0] = 200\n",
659 660 "%R print(seq1)"
660 661 ],
661 662 "language": "python",
662 663 "metadata": {},
663 664 "outputs": [
664 665 {
665 666 "output_type": "display_data",
666 667 "text": [
667 668 " [1] 0 1 2 3 4 5 6 7 8 9\n"
668 669 ]
669 670 }
670 671 ],
671 672 "prompt_number": 21
672 673 },
673 674 {
674 675 "cell_type": "markdown",
675 676 "metadata": {},
676 677 "source": [
677 678 "But, if we pass data as both input and output, then the value of \"data\" in user_ns will be overwritten and the\n",
678 679 "new array will be a view of the data in R's copy."
679 680 ]
680 681 },
681 682 {
682 683 "cell_type": "code",
683 684 "collapsed": false,
684 685 "input": [
685 "print seq1\n",
686 "print(seq1)\n",
686 687 "%R -i seq1 -o seq1\n",
687 "print seq1\n",
688 "print(seq1)\n",
688 689 "seq1[0] = 200\n",
689 690 "%R print(seq1)\n",
690 691 "seq1_view = %R seq1\n",
691 692 "assert(id(seq1_view.data) == id(seq1.data))"
692 693 ],
693 694 "language": "python",
694 695 "metadata": {},
695 696 "outputs": [
696 697 {
697 698 "output_type": "stream",
698 699 "stream": "stdout",
699 700 "text": [
700 701 "[200 1 2 3 4 5 6 7 8 9]\n",
701 702 "[200 1 2 3 4 5 6 7 8 9]\n"
702 703 ]
703 704 },
704 705 {
705 706 "output_type": "display_data",
706 707 "text": [
707 708 " [1] 200 1 2 3 4 5 6 7 8 9\n"
708 709 ]
709 710 }
710 711 ],
711 712 "prompt_number": 22
712 713 },
713 714 {
714 715 "cell_type": "heading",
715 716 "level": 2,
716 717 "metadata": {},
717 718 "source": [
718 719 "Exception handling\n"
719 720 ]
720 721 },
721 722 {
722 723 "cell_type": "markdown",
723 724 "metadata": {},
724 725 "source": [
725 726 "Exceptions are handled by passing back rpy2's exception and the line that triggered it."
726 727 ]
727 728 },
728 729 {
729 730 "cell_type": "code",
730 731 "collapsed": false,
731 732 "input": [
732 733 "try:\n",
733 734 " %R -n nosuchvar\n",
734 735 "except Exception as e:\n",
735 " print e.message\n",
736 " print(e)\n",
736 737 " pass"
737 738 ],
738 739 "language": "python",
739 740 "metadata": {},
740 741 "outputs": [
741 742 {
742 743 "output_type": "stream",
743 744 "stream": "stdout",
744 745 "text": [
745 746 "parsing and evaluating line \"nosuchvar\".\n",
746 747 "R error message: \"Error in eval(expr, envir, enclos) : object 'nosuchvar' not found\n",
747 748 "\"\n",
748 749 " R stdout:\"Error in eval(expr, envir, enclos) : object 'nosuchvar' not found\n",
749 750 "\"\n",
750 751 "\n"
751 752 ]
752 753 }
753 754 ],
754 755 "prompt_number": 23
755 756 },
756 757 {
757 758 "cell_type": "heading",
758 759 "level": 2,
759 760 "metadata": {},
760 761 "source": [
761 762 "Structured arrays and data frames\n"
762 763 ]
763 764 },
764 765 {
765 766 "cell_type": "markdown",
766 767 "metadata": {},
767 768 "source": [
768 769 "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"
769 770 ]
770 771 },
771 772 {
772 773 "cell_type": "code",
773 774 "collapsed": true,
774 775 "input": [
775 776 "datapy= np.array([(1, 2.9, 'a'), (2, 3.5, 'b'), (3, 2.1, 'c')],\n",
776 777 " dtype=[('x', '<i4'), ('y', '<f8'), ('z', '|S1')])\n"
777 778 ],
778 779 "language": "python",
779 780 "metadata": {},
780 781 "outputs": [],
781 782 "prompt_number": 24
782 783 },
783 784 {
784 785 "cell_type": "code",
785 786 "collapsed": true,
786 787 "input": [
787 788 "%%R -i datapy -d datar\n",
788 789 "datar = datapy"
789 790 ],
790 791 "language": "python",
791 792 "metadata": {},
792 793 "outputs": [],
793 794 "prompt_number": 25
794 795 },
795 796 {
796 797 "cell_type": "code",
797 798 "collapsed": false,
798 799 "input": [
799 800 "datar"
800 801 ],
801 802 "language": "python",
802 803 "metadata": {},
803 804 "outputs": [
804 805 {
805 806 "output_type": "pyout",
806 807 "prompt_number": 26,
807 808 "text": [
808 809 "array([(1, 2.9, 'a'), (2, 3.5, 'b'), (3, 2.1, 'c')], \n",
809 810 " dtype=[('x', '<i4'), ('y', '<f8'), ('z', '|S1')])"
810 811 ]
811 812 }
812 813 ],
813 814 "prompt_number": 26
814 815 },
815 816 {
816 817 "cell_type": "code",
817 818 "collapsed": false,
818 819 "input": [
819 820 "%R datar2 = datapy\n",
820 821 "%Rpull -d datar2\n",
821 822 "datar2"
822 823 ],
823 824 "language": "python",
824 825 "metadata": {},
825 826 "outputs": [
826 827 {
827 828 "output_type": "pyout",
828 829 "prompt_number": 27,
829 830 "text": [
830 831 "array([(1, 2.9, 'a'), (2, 3.5, 'b'), (3, 2.1, 'c')], \n",
831 832 " dtype=[('x', '<i4'), ('y', '<f8'), ('z', '|S1')])"
832 833 ]
833 834 }
834 835 ],
835 836 "prompt_number": 27
836 837 },
837 838 {
838 839 "cell_type": "code",
839 840 "collapsed": false,
840 841 "input": [
841 842 "%Rget -d datar2"
842 843 ],
843 844 "language": "python",
844 845 "metadata": {},
845 846 "outputs": [
846 847 {
847 848 "output_type": "pyout",
848 849 "prompt_number": 28,
849 850 "text": [
850 851 "array([(1, 2.9, 'a'), (2, 3.5, 'b'), (3, 2.1, 'c')], \n",
851 852 " dtype=[('x', '<i4'), ('y', '<f8'), ('z', '|S1')])"
852 853 ]
853 854 }
854 855 ],
855 856 "prompt_number": 28
856 857 },
857 858 {
858 859 "cell_type": "markdown",
859 860 "metadata": {},
860 861 "source": [
861 862 "For arrays without names, the -d argument has no effect because the R object has no colnames or names."
862 863 ]
863 864 },
864 865 {
865 866 "cell_type": "code",
866 867 "collapsed": false,
867 868 "input": [
868 869 "Z = np.arange(6)\n",
869 870 "%R -i Z\n",
870 871 "%Rget -d Z"
871 872 ],
872 873 "language": "python",
873 874 "metadata": {},
874 875 "outputs": [
875 876 {
876 877 "output_type": "pyout",
877 878 "prompt_number": 29,
878 879 "text": [
879 880 "array([0, 1, 2, 3, 4, 5], dtype=int32)"
880 881 ]
881 882 }
882 883 ],
883 884 "prompt_number": 29
884 885 },
885 886 {
886 887 "cell_type": "markdown",
887 888 "metadata": {},
888 889 "source": [
889 890 "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",
890 891 "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)"
891 892 ]
892 893 },
893 894 {
894 895 "cell_type": "code",
895 896 "collapsed": false,
896 897 "input": [
897 898 "%Rget datar2"
898 899 ],
899 900 "language": "python",
900 901 "metadata": {},
901 902 "outputs": [
902 903 {
903 904 "output_type": "pyout",
904 905 "prompt_number": 30,
905 906 "text": [
906 907 "array([['1', '2', '3'],\n",
907 908 " ['2', '3', '2'],\n",
908 909 " ['a', 'b', 'c']], \n",
909 910 " dtype='|S1')"
910 911 ]
911 912 }
912 913 ],
913 914 "prompt_number": 30
914 915 },
915 916 {
916 917 "cell_type": "code",
917 918 "collapsed": true,
918 919 "input": [],
919 920 "language": "python",
920 921 "metadata": {},
921 922 "outputs": [],
922 923 "prompt_number": 30
923 924 }
924 925 ],
925 926 "metadata": {}
926 927 }
927 928 ]
928 929 } No newline at end of file
@@ -1,482 +1,482
1 1 {
2 2 "metadata": {
3 3 "name": "Script Magics"
4 4 },
5 5 "nbformat": 3,
6 6 "nbformat_minor": 0,
7 7 "worksheets": [
8 8 {
9 9 "cells": [
10 10 {
11 11 "cell_type": "heading",
12 12 "level": 1,
13 13 "metadata": {},
14 14 "source": [
15 15 "Running Scripts from IPython"
16 16 ]
17 17 },
18 18 {
19 19 "cell_type": "markdown",
20 20 "metadata": {},
21 21 "source": [
22 22 "IPython has a `%%script` cell magic, which lets you run a cell in\n",
23 23 "a subprocess of any interpreter on your system, such as: bash, ruby, perl, zsh, R, etc.\n",
24 24 "\n",
25 25 "It can even be a script of your own, which expects input on stdin."
26 26 ]
27 27 },
28 28 {
29 29 "cell_type": "code",
30 30 "collapsed": false,
31 31 "input": [
32 32 "import sys"
33 33 ],
34 34 "language": "python",
35 35 "metadata": {},
36 36 "outputs": [],
37 37 "prompt_number": 1
38 38 },
39 39 {
40 40 "cell_type": "heading",
41 41 "level": 2,
42 42 "metadata": {},
43 43 "source": [
44 44 "Basic usage"
45 45 ]
46 46 },
47 47 {
48 48 "cell_type": "markdown",
49 49 "metadata": {},
50 50 "source": [
51 51 "To use it, simply pass a path or shell command to the program you want to run on the `%%script` line,\n",
52 52 "and the rest of the cell will be run by that script, and stdout/err from the subprocess are captured and displayed."
53 53 ]
54 54 },
55 55 {
56 56 "cell_type": "code",
57 57 "collapsed": false,
58 58 "input": [
59 59 "%%script python\n",
60 60 "import sys\n",
61 61 "print 'hello from Python %s' % sys.version"
62 62 ],
63 63 "language": "python",
64 64 "metadata": {},
65 65 "outputs": [
66 66 {
67 67 "output_type": "stream",
68 68 "stream": "stdout",
69 69 "text": [
70 70 "hello from Python 2.7.1 (r271:86832, Jul 31 2011, 19:30:53) \n",
71 71 "[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)]\n"
72 72 ]
73 73 }
74 74 ],
75 75 "prompt_number": 2
76 76 },
77 77 {
78 78 "cell_type": "code",
79 79 "collapsed": false,
80 80 "input": [
81 81 "%%script python3\n",
82 82 "import sys\n",
83 83 "print('hello from Python: %s' % sys.version)"
84 84 ],
85 85 "language": "python",
86 86 "metadata": {},
87 87 "outputs": [
88 88 {
89 89 "output_type": "stream",
90 90 "stream": "stdout",
91 91 "text": [
92 92 "hello from Python: 3.2.3 (v3.2.3:3d0686d90f55, Apr 10 2012, 11:25:50) \n",
93 93 "[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]\n"
94 94 ]
95 95 }
96 96 ],
97 97 "prompt_number": 3
98 98 },
99 99 {
100 100 "cell_type": "markdown",
101 101 "metadata": {},
102 102 "source": [
103 103 "IPython also creates aliases for a few common interpreters, such as bash, ruby, perl, etc.\n",
104 104 "\n",
105 105 "These are all equivalent to `%%script <name>`"
106 106 ]
107 107 },
108 108 {
109 109 "cell_type": "code",
110 110 "collapsed": false,
111 111 "input": [
112 112 "%%ruby\n",
113 113 "puts \"Hello from Ruby #{RUBY_VERSION}\""
114 114 ],
115 115 "language": "python",
116 116 "metadata": {},
117 117 "outputs": [
118 118 {
119 119 "output_type": "stream",
120 120 "stream": "stdout",
121 121 "text": [
122 122 "Hello from Ruby 1.8.7\n"
123 123 ]
124 124 }
125 125 ],
126 126 "prompt_number": 4
127 127 },
128 128 {
129 129 "cell_type": "code",
130 130 "collapsed": false,
131 131 "input": [
132 132 "%%bash\n",
133 133 "echo \"hello from $BASH\""
134 134 ],
135 135 "language": "python",
136 136 "metadata": {},
137 137 "outputs": [
138 138 {
139 139 "output_type": "stream",
140 140 "stream": "stdout",
141 141 "text": [
142 142 "hello from /usr/local/bin/bash\n"
143 143 ]
144 144 }
145 145 ],
146 146 "prompt_number": 5
147 147 },
148 148 {
149 149 "cell_type": "heading",
150 150 "level": 2,
151 151 "metadata": {},
152 152 "source": [
153 153 "Capturing output"
154 154 ]
155 155 },
156 156 {
157 157 "cell_type": "markdown",
158 158 "metadata": {},
159 159 "source": [
160 160 "You can also capture stdout/err from these subprocesses into Python variables, instead of letting them go directly to stdout/err"
161 161 ]
162 162 },
163 163 {
164 164 "cell_type": "code",
165 165 "collapsed": false,
166 166 "input": [
167 167 "%%bash\n",
168 168 "echo \"hi, stdout\"\n",
169 169 "echo \"hello, stderr\" >&2\n"
170 170 ],
171 171 "language": "python",
172 172 "metadata": {},
173 173 "outputs": [
174 174 {
175 175 "output_type": "stream",
176 176 "stream": "stdout",
177 177 "text": [
178 178 "hi, stdout\n"
179 179 ]
180 180 },
181 181 {
182 182 "output_type": "stream",
183 183 "stream": "stderr",
184 184 "text": [
185 185 "hello, stderr\n"
186 186 ]
187 187 }
188 188 ],
189 189 "prompt_number": 6
190 190 },
191 191 {
192 192 "cell_type": "code",
193 193 "collapsed": false,
194 194 "input": [
195 195 "%%bash --out output --err error\n",
196 196 "echo \"hi, stdout\"\n",
197 197 "echo \"hello, stderr\" >&2"
198 198 ],
199 199 "language": "python",
200 200 "metadata": {},
201 201 "outputs": [],
202 202 "prompt_number": 7
203 203 },
204 204 {
205 205 "cell_type": "code",
206 206 "collapsed": false,
207 207 "input": [
208 "print error\n",
209 "print output"
208 "print(error)\n",
209 "print(output)"
210 210 ],
211 211 "language": "python",
212 212 "metadata": {},
213 213 "outputs": [
214 214 {
215 215 "output_type": "stream",
216 216 "stream": "stdout",
217 217 "text": [
218 218 "hello, stderr\n",
219 219 "\n",
220 220 "hi, stdout\n",
221 221 "\n"
222 222 ]
223 223 }
224 224 ],
225 225 "prompt_number": 8
226 226 },
227 227 {
228 228 "cell_type": "heading",
229 229 "level": 2,
230 230 "metadata": {},
231 231 "source": [
232 232 "Background Scripts"
233 233 ]
234 234 },
235 235 {
236 236 "cell_type": "markdown",
237 237 "metadata": {},
238 238 "source": [
239 239 "These scripts can be run in the background, by adding the `--bg` flag.\n",
240 240 "\n",
241 241 "When you do this, output is discarded unless you use the `--out/err`\n",
242 242 "flags to store output as above."
243 243 ]
244 244 },
245 245 {
246 246 "cell_type": "code",
247 247 "collapsed": false,
248 248 "input": [
249 249 "%%ruby --bg --out ruby_lines\n",
250 250 "for n in 1...10\n",
251 251 " sleep 1\n",
252 252 " puts \"line #{n}\"\n",
253 253 " STDOUT.flush\n",
254 254 "end"
255 255 ],
256 256 "language": "python",
257 257 "metadata": {},
258 258 "outputs": [
259 259 {
260 260 "output_type": "stream",
261 261 "stream": "stdout",
262 262 "text": [
263 263 "Starting job # 0 in a separate thread.\n"
264 264 ]
265 265 }
266 266 ],
267 267 "prompt_number": 9
268 268 },
269 269 {
270 270 "cell_type": "markdown",
271 271 "metadata": {},
272 272 "source": [
273 273 "When you do store output of a background thread, these are the stdout/err *pipes*,\n",
274 274 "rather than the text of the output."
275 275 ]
276 276 },
277 277 {
278 278 "cell_type": "code",
279 279 "collapsed": false,
280 280 "input": [
281 281 "ruby_lines"
282 282 ],
283 283 "language": "python",
284 284 "metadata": {},
285 285 "outputs": [
286 286 {
287 287 "output_type": "pyout",
288 288 "prompt_number": 10,
289 289 "text": [
290 290 "<open file '<fdopen>', mode 'rb' at 0x10a4be660>"
291 291 ]
292 292 }
293 293 ],
294 294 "prompt_number": 10
295 295 },
296 296 {
297 297 "cell_type": "code",
298 298 "collapsed": false,
299 299 "input": [
300 "print ruby_lines.read()"
300 "print(ruby_lines.read())"
301 301 ],
302 302 "language": "python",
303 303 "metadata": {},
304 304 "outputs": [
305 305 {
306 306 "output_type": "stream",
307 307 "stream": "stdout",
308 308 "text": [
309 309 "line 1\n",
310 310 "line 2\n",
311 311 "line 3\n",
312 312 "line 4\n",
313 313 "line 5\n",
314 314 "line 6\n",
315 315 "line 7\n",
316 316 "line 8\n",
317 317 "line 9\n",
318 318 "\n"
319 319 ]
320 320 }
321 321 ],
322 322 "prompt_number": 11
323 323 },
324 324 {
325 325 "cell_type": "heading",
326 326 "level": 2,
327 327 "metadata": {},
328 328 "source": [
329 329 "Arguments to subcommand"
330 330 ]
331 331 },
332 332 {
333 333 "cell_type": "markdown",
334 334 "metadata": {},
335 335 "source": [
336 336 "You can pass arguments the subcommand as well,\n",
337 337 "such as this example instructing Python to use integer division from Python 3:"
338 338 ]
339 339 },
340 340 {
341 341 "cell_type": "code",
342 342 "collapsed": false,
343 343 "input": [
344 344 "%%script python -Qnew\n",
345 345 "print 1/3"
346 346 ],
347 347 "language": "python",
348 348 "metadata": {},
349 349 "outputs": [
350 350 {
351 351 "output_type": "stream",
352 352 "stream": "stdout",
353 353 "text": [
354 354 "0.333333333333\n"
355 355 ]
356 356 }
357 357 ],
358 358 "prompt_number": 12
359 359 },
360 360 {
361 361 "cell_type": "markdown",
362 362 "metadata": {},
363 363 "source": [
364 364 "You can really specify *any* program for `%%script`,\n",
365 365 "for instance here is a 'program' that echos the lines of stdin, with delays between each line."
366 366 ]
367 367 },
368 368 {
369 369 "cell_type": "code",
370 370 "collapsed": false,
371 371 "input": [
372 372 "%%script --bg --out bashout bash -c \"while read line; do echo $line; sleep 1; done\"\n",
373 373 "line 1\n",
374 374 "line 2\n",
375 375 "line 3\n",
376 376 "line 4\n",
377 377 "line 5\n"
378 378 ],
379 379 "language": "python",
380 380 "metadata": {},
381 381 "outputs": [
382 382 {
383 383 "output_type": "stream",
384 384 "stream": "stdout",
385 385 "text": [
386 386 "Starting job # 2 in a separate thread.\n"
387 387 ]
388 388 }
389 389 ],
390 390 "prompt_number": 13
391 391 },
392 392 {
393 393 "cell_type": "markdown",
394 394 "metadata": {},
395 395 "source": [
396 396 "Remember, since the output of a background script is just the stdout pipe,\n",
397 397 "you can read it as lines become available:"
398 398 ]
399 399 },
400 400 {
401 401 "cell_type": "code",
402 402 "collapsed": false,
403 403 "input": [
404 404 "import time\n",
405 405 "tic = time.time()\n",
406 406 "line = True\n",
407 407 "while True:\n",
408 408 " line = bashout.readline()\n",
409 409 " if not line:\n",
410 410 " break\n",
411 411 " sys.stdout.write(\"%.1fs: %s\" %(time.time()-tic, line))\n",
412 412 " sys.stdout.flush()\n"
413 413 ],
414 414 "language": "python",
415 415 "metadata": {},
416 416 "outputs": [
417 417 {
418 418 "output_type": "stream",
419 419 "stream": "stdout",
420 420 "text": [
421 421 "0.0s: line 1\n"
422 422 ]
423 423 },
424 424 {
425 425 "output_type": "stream",
426 426 "stream": "stdout",
427 427 "text": [
428 428 "1.0s: line 2\n"
429 429 ]
430 430 },
431 431 {
432 432 "output_type": "stream",
433 433 "stream": "stdout",
434 434 "text": [
435 435 "2.0s: line 3\n"
436 436 ]
437 437 },
438 438 {
439 439 "output_type": "stream",
440 440 "stream": "stdout",
441 441 "text": [
442 442 "3.0s: line 4\n"
443 443 ]
444 444 },
445 445 {
446 446 "output_type": "stream",
447 447 "stream": "stdout",
448 448 "text": [
449 449 "4.0s: line 5\n"
450 450 ]
451 451 }
452 452 ],
453 453 "prompt_number": 14
454 454 },
455 455 {
456 456 "cell_type": "heading",
457 457 "level": 2,
458 458 "metadata": {},
459 459 "source": [
460 460 "Configuring the default ScriptMagics"
461 461 ]
462 462 },
463 463 {
464 464 "cell_type": "markdown",
465 465 "metadata": {},
466 466 "source": [
467 467 "The list of aliased script magics is configurable.\n",
468 468 "\n",
469 469 "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",
470 470 "\n",
471 471 " c.ScriptMagics.scripts = ['R', 'pypy', 'myprogram']\n",
472 472 "\n",
473 473 "And if any of these programs do not apear on your default PATH, then you would also need to specify their location with:\n",
474 474 "\n",
475 475 " c.ScriptMagics.script_paths = {'myprogram': '/opt/path/to/myprogram'}"
476 476 ]
477 477 }
478 478 ],
479 479 "metadata": {}
480 480 }
481 481 ]
482 482 } No newline at end of file
@@ -1,147 +1,148
1 1 {
2 2 "metadata": {
3 3 "name": "Trapezoid Rule"
4 4 },
5 5 "nbformat": 3,
6 6 "nbformat_minor": 0,
7 7 "worksheets": [
8 8 {
9 9 "cells": [
10 10 {
11 11 "cell_type": "heading",
12 12 "level": 1,
13 13 "metadata": {},
14 14 "source": [
15 15 "Basic Numerical Integration: the Trapezoid Rule"
16 16 ]
17 17 },
18 18 {
19 19 "cell_type": "markdown",
20 20 "metadata": {},
21 21 "source": [
22 22 "A simple illustration of the trapezoid rule for definite integration:\n",
23 23 "\n",
24 24 "$$\n",
25 25 "\\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",
26 26 "$$\n",
27 27 "<br>\n",
28 28 "First, we define a simple function and sample it between 0 and 10 at 200 points"
29 29 ]
30 30 },
31 31 {
32 32 "cell_type": "code",
33 33 "collapsed": false,
34 34 "input": [
35 35 "%pylab inline"
36 36 ],
37 37 "language": "python",
38 38 "metadata": {},
39 39 "outputs": [
40 40 {
41 41 "output_type": "stream",
42 42 "stream": "stdout",
43 43 "text": [
44 44 "\n",
45 45 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
46 46 "For more information, type 'help(pylab)'.\n"
47 47 ]
48 48 }
49 49 ],
50 50 "prompt_number": 1
51 51 },
52 52 {
53 53 "cell_type": "code",
54 54 "collapsed": true,
55 55 "input": [
56 56 "def f(x):\n",
57 57 " return (x-3)*(x-5)*(x-7)+85\n",
58 58 "\n",
59 59 "x = linspace(0, 10, 200)\n",
60 60 "y = f(x)"
61 61 ],
62 62 "language": "python",
63 63 "metadata": {},
64 64 "outputs": [],
65 65 "prompt_number": 2
66 66 },
67 67 {
68 68 "cell_type": "markdown",
69 69 "metadata": {},
70 70 "source": [
71 71 "Choose a region to integrate over and take only a few points in that region"
72 72 ]
73 73 },
74 74 {
75 75 "cell_type": "code",
76 76 "collapsed": true,
77 77 "input": [
78 78 "a, b = 1, 9\n",
79 79 "xint = x[logical_and(x>=a, x<=b)][::30]\n",
80 80 "yint = y[logical_and(x>=a, x<=b)][::30]"
81 81 ],
82 82 "language": "python",
83 83 "metadata": {},
84 84 "outputs": [],
85 85 "prompt_number": 3
86 86 },
87 87 {
88 88 "cell_type": "markdown",
89 89 "metadata": {},
90 90 "source": [
91 91 "Plot both the function and the area below it in the trapezoid approximation"
92 92 ]
93 93 },
94 94 {
95 95 "cell_type": "code",
96 96 "collapsed": false,
97 97 "input": [
98 98 "plot(x, y, lw=2)\n",
99 99 "axis([0, 10, 0, 140])\n",
100 100 "fill_between(xint, 0, yint, facecolor='gray', alpha=0.4)\n",
101 101 "text(0.5 * (a + b), 30,r\"$\\int_a^b f(x)dx$\", horizontalalignment='center', fontsize=20);"
102 102 ],
103 103 "language": "python",
104 104 "metadata": {},
105 105 "outputs": [
106 106 {
107 107 "output_type": "display_data",
108 108 "png": "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\n"
109 109 }
110 110 ],
111 111 "prompt_number": 4
112 112 },
113 113 {
114 114 "cell_type": "markdown",
115 115 "metadata": {},
116 116 "source": [
117 117 "Compute the integral both at high accuracy and with the trapezoid approximation"
118 118 ]
119 119 },
120 120 {
121 121 "cell_type": "code",
122 122 "collapsed": false,
123 123 "input": [
124 "from __future__ import print_function\n",
124 125 "from scipy.integrate import quad, trapz\n",
125 126 "integral, error = quad(f, 1, 9)\n",
126 "print \"The integral is:\", integral, \"+/-\", error\n",
127 "print \"The trapezoid approximation with\", len(xint), \"points is:\", trapz(yint, xint)"
127 "print(\"The integral is:\", integral, \"+/-\", error)\n",
128 "print(\"The trapezoid approximation with\", len(xint), \"points is:\", trapz(yint, xint))"
128 129 ],
129 130 "language": "python",
130 131 "metadata": {},
131 132 "outputs": [
132 133 {
133 134 "output_type": "stream",
134 135 "stream": "stdout",
135 136 "text": [
136 137 "The integral is: 680.0 +/- 7.54951656745e-12\n",
137 138 "The trapezoid approximation with 6 points is: 621.286411141\n"
138 139 ]
139 140 }
140 141 ],
141 142 "prompt_number": 5
142 143 }
143 144 ],
144 145 "metadata": {}
145 146 }
146 147 ]
147 148 } No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now