##// END OF EJS Templates
reveal converter
Matthias BUSSONNIER -
Show More
@@ -0,0 +1,10 b''
1 c = get_config()
2
3
4 c.ConverterTemplate.extract_figures=False
5 c.ConverterTemplate.template_file='reveal'
6 c.ConverterTemplate.tex_environement=False
7
8 c.NbconvertApp.fileext='html'
9
10 c.ExtractFigureTransformer.enabled = False
This diff has been collapsed as it changes many lines, (1514 lines changed) Show them Hide them
@@ -0,0 +1,1514 b''
1 {
2 "metadata": {
3 "name": "00_notebook_tour"
4 },
5 "nbformat": 3,
6 "nbformat_minor": 0,
7 "worksheets": [
8 {
9 "cells": [
10 {
11 "cell_type": "markdown",
12 "metadata": {
13 "slideshow": {
14 "slide_type": "slide"
15 }
16 },
17 "source": [
18 "# A brief tour of the IPython notebook\n",
19 "\n",
20 "This document will give you a brief tour of the capabilities of the IPython notebook. \n",
21 "You can view its contents by scrolling around, or execute each cell by typing `Shift-Enter`.\n",
22 "After you conclude this brief high-level tour, you should read the accompanying notebook \n",
23 "titled `01_notebook_introduction`, which takes a more step-by-step approach to the features of the\n",
24 "system. \n",
25 "\n",
26 "The rest of the notebooks in this directory illustrate various other aspects and \n",
27 "capabilities of the IPython notebook; some of them may require additional libraries to be executed."
28 ]
29 },
30 {
31 "cell_type": "markdown",
32 "metadata": {
33 "slideshow": {
34 "slide_type": "notes"
35 }
36 },
37 "source": [
38 "**NOTE:** This notebook *must* be run from its own directory, so you must ``cd``\n",
39 "to this directory and then start the notebook, but do *not* use the ``--notebook-dir``\n",
40 "option to run it from another location.\n",
41 "\n",
42 "The first thing you need to know is that you are still controlling the same old IPython you're used to,\n",
43 "so things like shell aliases and magic commands still work:"
44 ]
45 },
46 {
47 "cell_type": "code",
48 "collapsed": false,
49 "input": [
50 "pwd"
51 ],
52 "language": "python",
53 "metadata": {
54 "slideshow": {
55 "slide_type": "slide"
56 }
57 },
58 "outputs": [
59 {
60 "output_type": "pyout",
61 "prompt_number": 1,
62 "text": [
63 "u'/Users/minrk/dev/ip/mine/docs/examples/notebooks'"
64 ]
65 }
66 ],
67 "prompt_number": 1
68 },
69 {
70 "cell_type": "code",
71 "collapsed": false,
72 "input": [
73 "ls"
74 ],
75 "language": "python",
76 "metadata": {},
77 "outputs": [
78 {
79 "output_type": "stream",
80 "stream": "stdout",
81 "text": [
82 "00_notebook_tour.ipynb callbacks.ipynb python-logo.svg\r\n",
83 "01_notebook_introduction.ipynb cython_extension.ipynb rmagic_extension.ipynb\r\n",
84 "Animations_and_Progress.ipynb display_protocol.ipynb sympy.ipynb\r\n",
85 "Capturing Output.ipynb formatting.ipynb sympy_quantum_computing.ipynb\r\n",
86 "Script Magics.ipynb octavemagic_extension.ipynb trapezoid_rule.ipynb\r\n",
87 "animation.m4v progbar.ipynb\r\n"
88 ]
89 }
90 ],
91 "prompt_number": 2
92 },
93 {
94 "cell_type": "code",
95 "collapsed": false,
96 "input": [
97 "message = 'The IPython notebook is great!'\n",
98 "# note: the echo command does not run on Windows, it's a unix command.\n",
99 "!echo $message"
100 ],
101 "language": "python",
102 "metadata": {},
103 "outputs": [
104 {
105 "output_type": "stream",
106 "stream": "stdout",
107 "text": [
108 "The IPython notebook is great!\r\n"
109 ]
110 }
111 ],
112 "prompt_number": 3
113 },
114 {
115 "cell_type": "heading",
116 "level": 2,
117 "metadata": {
118 "slideshow": {
119 "slide_type": "slide"
120 }
121 },
122 "source": [
123 "Plots with matplotlib"
124 ]
125 },
126 {
127 "cell_type": "markdown",
128 "metadata": {},
129 "source": [
130 "IPython adds an 'inline' matplotlib backend,\n",
131 "which embeds any matplotlib figures into the notebook."
132 ]
133 },
134 {
135 "cell_type": "code",
136 "collapsed": false,
137 "input": [
138 "%pylab inline"
139 ],
140 "language": "python",
141 "metadata": {},
142 "outputs": [
143 {
144 "output_type": "stream",
145 "stream": "stdout",
146 "text": [
147 "\n",
148 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
149 "For more information, type 'help(pylab)'.\n"
150 ]
151 }
152 ],
153 "prompt_number": 4
154 },
155 {
156 "cell_type": "code",
157 "collapsed": false,
158 "input": [
159 "x = linspace(0, 3*pi, 500)\n",
160 "plot(x, sin(x**2))\n",
161 "title('A simple chirp');"
162 ],
163 "language": "python",
164 "metadata": {},
165 "outputs": [
166 {
167 "output_type": "display_data",
168 "png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEICAYAAACzliQjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztfXt0VdWd/+fmwSvhlUDeAcSECREFFWtLi8YKWlBTrS8c\nq1StZVppO21XZ3XNrJnqmqmF6XSpa9EquqYVOlZp+6tCUfHZKK2ltIpohcqjonnwCOQBeSc35/fH\n7s49OTmP/Tzn3GR/1sqCJGc/7s09n/05n+93f3fCsiwLBgYGBgZjAhlRT8DAwMDAIDwY0jcwMDAY\nQzCkb2BgYDCGYEjfwMDAYAzBkL6BgYHBGIIhfQMDA4MxBEP6BmmPJ554AldeeaWWvr/whS/g3//9\n35X2ee+99+K2227z/P2CBQvw+uuvKx3TwIDCkL5B5KipqUFeXh76+vqE2t9666144YUXFM+KIJFI\nIJFIKO/TD3/5y19wySWXKB3TwIDCkL5BpDhy5Ah2796NgoICbNu2LerpuEL1/kWZ/pLJpMKZGIxF\nGNI3iBSbN2/GsmXLcNttt2HTpk2+1z7++OM4++yzMWXKFMydOxc///nPh36+dOnSoesyMjLw8MMP\no7KyElOmTMF//Md/4PDhw/jEJz6BadOmYdWqVejv7wcA1NXVoaysDN///vcxc+ZMnHXWWUP9umH7\n9u1YtGgRpk+fjk9+8pN49913Pa997733sHz5cuTn56OoqAjf//73ARCl39fXh9WrV2PKlClYsGAB\n3nzzzaF2c+bMwauvvgqAWEE33HADbrvtNkydOhWPP/740M9WrVqFKVOm4MILL8Q777wT8E4bGBAY\n0jeIFJs3b8bNN9+Mm266CS+88AJOnDjhel1nZye+/vWvY8eOHTh9+jT+8Ic/YNGiRZ79vvjii9iz\nZw927dqF9evX4+6778aTTz6Jjz76CO+++y6efPLJoWuPHz+OU6dOoampCZs2bcKXvvQlHDx4cESf\ne/bswV133YXHHnsMLS0tWLNmDWpra11tqTNnzmDZsmVYuXIljh49ikOHDuHyyy8HQJT+tm3bcMst\nt6C9vR21tbVYu3btUFun/bNt2zbceOONaG9vx6233jr0s5tuugmtra34x3/8R1x77bUYGBjweacN\nDAgM6RtEht/97ndobGxEbW0tKisrUV1d7auyMzIy8O6776K7uxuFhYWorq72vPZf/uVfkJubi+rq\n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\n"
169 }
170 ],
171 "prompt_number": 5
172 },
173 {
174 "cell_type": "markdown",
175 "metadata": {
176 "slideshow": {
177 "slide_type": "subslide"
178 }
179 },
180 "source": [
181 "You can paste blocks of input with prompt markers, such as those from\n",
182 "[the official Python tutorial](http://docs.python.org/tutorial/interpreter.html#interactive-mode)"
183 ]
184 },
185 {
186 "cell_type": "code",
187 "collapsed": false,
188 "input": [
189 ">>> the_world_is_flat = 1\n",
190 ">>> if the_world_is_flat:\n",
191 "... print \"Be careful not to fall off!\""
192 ],
193 "language": "python",
194 "metadata": {},
195 "outputs": [
196 {
197 "output_type": "stream",
198 "stream": "stdout",
199 "text": [
200 "Be careful not to fall off!\n"
201 ]
202 }
203 ],
204 "prompt_number": 6
205 },
206 {
207 "cell_type": "markdown",
208 "metadata": {
209 "slideshow": {
210 "slide_type": "subslide"
211 }
212 },
213 "source": [
214 "Errors are shown in informative ways:"
215 ]
216 },
217 {
218 "cell_type": "code",
219 "collapsed": false,
220 "input": [
221 "%run non_existent_file"
222 ],
223 "language": "python",
224 "metadata": {},
225 "outputs": [
226 {
227 "output_type": "stream",
228 "stream": "stderr",
229 "text": [
230 "ERROR: File `u'non_existent_file.py'` not found."
231 ]
232 }
233 ],
234 "prompt_number": 7
235 },
236 {
237 "cell_type": "code",
238 "collapsed": false,
239 "input": [
240 "x = 1\n",
241 "y = 4\n",
242 "z = y/(1-x)"
243 ],
244 "language": "python",
245 "metadata": {},
246 "outputs": [
247 {
248 "ename": "ZeroDivisionError",
249 "evalue": "integer division or modulo by zero",
250 "output_type": "pyerr",
251 "traceback": [
252 "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)",
253 "\u001b[1;32m<ipython-input-8-dc39888fd1d2>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m4\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mz\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m/\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m-\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
254 "\u001b[1;31mZeroDivisionError\u001b[0m: integer division or modulo by zero"
255 ]
256 }
257 ],
258 "prompt_number": 8
259 },
260 {
261 "cell_type": "markdown",
262 "metadata": {
263 "slideshow": {
264 "slide_type": "subslide"
265 }
266 },
267 "source": [
268 "When IPython needs to display additional information (such as providing details on an object via `x?`\n",
269 "it will automatically invoke a pager at the bottom of the screen:"
270 ]
271 },
272 {
273 "cell_type": "code",
274 "collapsed": false,
275 "input": [
276 "magic"
277 ],
278 "language": "python",
279 "metadata": {
280 "slideshow": {
281 "slide_type": "fragment"
282 }
283 },
284 "outputs": [],
285 "prompt_number": 18
286 },
287 {
288 "cell_type": "markdown",
289 "metadata": {
290 "slideshow": {
291 "slide_type": "slide"
292 }
293 },
294 "source": [
295 "## Non-blocking output of kernel\n",
296 "\n",
297 "If you execute the next cell, you will see the output arriving as it is generated, not all at the end."
298 ]
299 },
300 {
301 "cell_type": "code",
302 "collapsed": false,
303 "input": [
304 "import time, sys\n",
305 "for i in range(8):\n",
306 " print i,\n",
307 " time.sleep(0.5)"
308 ],
309 "language": "python",
310 "metadata": {},
311 "outputs": [
312 {
313 "output_type": "stream",
314 "stream": "stdout",
315 "text": [
316 "0 "
317 ]
318 },
319 {
320 "output_type": "stream",
321 "stream": "stdout",
322 "text": [
323 "1 "
324 ]
325 },
326 {
327 "output_type": "stream",
328 "stream": "stdout",
329 "text": [
330 "2 "
331 ]
332 },
333 {
334 "output_type": "stream",
335 "stream": "stdout",
336 "text": [
337 "3 "
338 ]
339 },
340 {
341 "output_type": "stream",
342 "stream": "stdout",
343 "text": [
344 "4 "
345 ]
346 },
347 {
348 "output_type": "stream",
349 "stream": "stdout",
350 "text": [
351 "5 "
352 ]
353 },
354 {
355 "output_type": "stream",
356 "stream": "stdout",
357 "text": [
358 "6 "
359 ]
360 },
361 {
362 "output_type": "stream",
363 "stream": "stdout",
364 "text": [
365 "7\n"
366 ]
367 }
368 ],
369 "prompt_number": 19
370 },
371 {
372 "cell_type": "markdown",
373 "metadata": {
374 "slideshow": {
375 "slide_type": "slide"
376 }
377 },
378 "source": [
379 "## Clean crash and restart\n",
380 "\n",
381 "We call the low-level system libc.time routine with the wrong argument via\n",
382 "ctypes to segfault the Python interpreter:"
383 ]
384 },
385 {
386 "cell_type": "code",
387 "collapsed": false,
388 "input": [
389 "import sys\n",
390 "from ctypes import CDLL\n",
391 "# This will crash a Linux or Mac system; equivalent calls can be made on Windows\n",
392 "dll = 'dylib' if sys.platform == 'darwin' else '.so.6'\n",
393 "libc = CDLL(\"libc.%s\" % dll) \n",
394 "libc.time(-1) # BOOM!!"
395 ],
396 "language": "python",
397 "metadata": {},
398 "outputs": [],
399 "prompt_number": "*"
400 },
401 {
402 "cell_type": "markdown",
403 "metadata": {
404 "slideshow": {
405 "slide_type": "slide"
406 }
407 },
408 "source": [
409 "## Markdown cells can contain formatted text and code\n",
410 "\n",
411 "You can *italicize*, **boldface**\n",
412 "\n",
413 "* build\n",
414 "* lists\n",
415 "\n",
416 "and embed code meant for illustration instead of execution in Python:\n",
417 "\n",
418 " def f(x):\n",
419 " \"\"\"a docstring\"\"\"\n",
420 " return x**2\n",
421 "\n",
422 "or other languages:\n",
423 "\n",
424 " if (i=0; i<n; i++) {\n",
425 " printf(\"hello %d\\n\", i);\n",
426 " x += 4;\n",
427 " }"
428 ]
429 },
430 {
431 "cell_type": "markdown",
432 "metadata": {
433 "slideshow": {
434 "slide_type": "subslide"
435 }
436 },
437 "source": [
438 "Courtesy of MathJax, you can include mathematical expressions both inline: \n",
439 "$e^{i\\pi} + 1 = 0$ and displayed:\n",
440 "\n",
441 "$$e^x=\\sum_{i=0}^\\infty \\frac{1}{i!}x^i$$"
442 ]
443 },
444 {
445 "cell_type": "markdown",
446 "metadata": {
447 "slideshow": {
448 "slide_type": "slide"
449 }
450 },
451 "source": [
452 "## Rich displays: include anyting a browser can show\n",
453 "\n",
454 "Note that we have an actual protocol for this, see the `display_protocol` notebook for further details.\n",
455 "\n",
456 "### Images"
457 ]
458 },
459 {
460 "cell_type": "code",
461 "collapsed": false,
462 "input": [
463 "from IPython.display import Image\n",
464 "Image(filename='../../source/_static/logo.png')"
465 ],
466 "language": "python",
467 "metadata": {},
468 "outputs": [
469 {
470 "output_type": "pyout",
471 "png": "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\n",
472 "prompt_number": 1,
473 "text": [
474 "<IPython.core.display.Image at 0x10faeafd0>"
475 ]
476 }
477 ],
478 "prompt_number": 1
479 },
480 {
481 "cell_type": "markdown",
482 "metadata": {
483 "slideshow": {
484 "slide_type": "subslide"
485 }
486 },
487 "source": [
488 "An image can also be displayed from raw data or a url"
489 ]
490 },
491 {
492 "cell_type": "code",
493 "collapsed": false,
494 "input": [
495 "Image(url='http://python.org/images/python-logo.gif')"
496 ],
497 "language": "python",
498 "metadata": {},
499 "outputs": [
500 {
501 "html": [
502 "<img src=\"http://python.org/images/python-logo.gif\" />"
503 ],
504 "output_type": "pyout",
505 "prompt_number": 2,
506 "text": [
507 "<IPython.core.display.Image at 0x1060e7410>"
508 ]
509 }
510 ],
511 "prompt_number": 2
512 },
513 {
514 "cell_type": "markdown",
515 "metadata": {
516 "slideshow": {
517 "slide_type": "skip"
518 }
519 },
520 "source": [
521 "SVG images are also supported out of the box (since modern browsers do a good job of rendering them):"
522 ]
523 },
524 {
525 "cell_type": "code",
526 "collapsed": false,
527 "input": [
528 "from IPython.display import SVG\n",
529 "SVG(filename='python-logo.svg')"
530 ],
531 "language": "python",
532 "metadata": {
533 "slideshow": {
534 "slide_type": "skip"
535 }
536 },
537 "outputs": [
538 {
539 "output_type": "pyout",
540 "prompt_number": 3,
541 "svg": [
542 "<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",
543 " <metadata id=\"metadata2193\">\n",
544 " <rdf:RDF>\n",
545 " <cc:Work rdf:about=\"\">\n",
546 " <dc:format>image/svg+xml</dc:format>\n",
547 " <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
548 " </cc:Work>\n",
549 " </rdf:RDF>\n",
550 " </metadata>\n",
551 " <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",
552 " <defs id=\"defs4\">\n",
553 " <linearGradient id=\"linearGradient2795\">\n",
554 " <stop id=\"stop2797\" offset=\"0\" style=\"stop-color:#b8b8b8;stop-opacity:0.49803922\"/>\n",
555 " <stop id=\"stop2799\" offset=\"1\" style=\"stop-color:#7f7f7f;stop-opacity:0\"/>\n",
556 " </linearGradient>\n",
557 " <linearGradient id=\"linearGradient2787\">\n",
558 " <stop id=\"stop2789\" offset=\"0\" style=\"stop-color:#7f7f7f;stop-opacity:0.5\"/>\n",
559 " <stop id=\"stop2791\" offset=\"1\" style=\"stop-color:#7f7f7f;stop-opacity:0\"/>\n",
560 " </linearGradient>\n",
561 " <linearGradient id=\"linearGradient3676\">\n",
562 " <stop id=\"stop3678\" offset=\"0\" style=\"stop-color:#b2b2b2;stop-opacity:0.5\"/>\n",
563 " <stop id=\"stop3680\" offset=\"1\" style=\"stop-color:#b3b3b3;stop-opacity:0\"/>\n",
564 " </linearGradient>\n",
565 " <linearGradient id=\"linearGradient3236\">\n",
566 " <stop id=\"stop3244\" offset=\"0\" style=\"stop-color:#f4f4f4;stop-opacity:1\"/>\n",
567 " <stop id=\"stop3240\" offset=\"1\" style=\"stop-color:#ffffff;stop-opacity:1\"/>\n",
568 " </linearGradient>\n",
569 " <linearGradient id=\"linearGradient4671\">\n",
570 " <stop id=\"stop4673\" offset=\"0\" style=\"stop-color:#ffd43b;stop-opacity:1\"/>\n",
571 " <stop id=\"stop4675\" offset=\"1\" style=\"stop-color:#ffe873;stop-opacity:1\"/>\n",
572 " </linearGradient>\n",
573 " <linearGradient id=\"linearGradient4689\">\n",
574 " <stop id=\"stop4691\" offset=\"0\" style=\"stop-color:#5a9fd4;stop-opacity:1\"/>\n",
575 " <stop id=\"stop4693\" offset=\"1\" style=\"stop-color:#306998;stop-opacity:1\"/>\n",
576 " </linearGradient>\n",
577 " <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",
578 " <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",
579 " <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",
580 " <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",
581 " <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",
582 " <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",
583 " <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",
584 " <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",
585 " <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",
586 " <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",
587 " <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",
588 " <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",
589 " </defs>\n",
590 " <g id=\"g2303\">\n",
591 " <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",
592 " <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",
593 " <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",
594 " <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",
595 " <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",
596 " <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",
597 " <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",
598 " <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",
599 " <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",
600 " <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",
601 " </g>\n",
602 "</svg>"
603 ],
604 "text": [
605 "<IPython.core.display.SVG at 0x10fb998d0>"
606 ]
607 }
608 ],
609 "prompt_number": 3
610 },
611 {
612 "cell_type": "markdown",
613 "metadata": {
614 "slideshow": {
615 "slide_type": "slide"
616 }
617 },
618 "source": [
619 "#### Embedded vs Non-embedded Images"
620 ]
621 },
622 {
623 "cell_type": "markdown",
624 "metadata": {},
625 "source": [
626 "As of IPython 0.13, images are embedded by default for compatibility with QtConsole, and the ability to still be displayed offline.\n",
627 "\n",
628 "Let's look at the differences:"
629 ]
630 },
631 {
632 "cell_type": "code",
633 "collapsed": false,
634 "input": [
635 "# by default Image data are embedded\n",
636 "Embed = Image( 'http://scienceview.berkeley.edu/view/images/newview.jpg')\n",
637 "\n",
638 "# if kwarg `url` is given, the embedding is assumed to be false\n",
639 "SoftLinked = Image(url='http://scienceview.berkeley.edu/view/images/newview.jpg')\n",
640 "\n",
641 "# In each case, embed can be specified explicitly with the `embed` kwarg\n",
642 "# ForceEmbed = Image(url='http://scienceview.berkeley.edu/view/images/newview.jpg', embed=True)"
643 ],
644 "language": "python",
645 "metadata": {},
646 "outputs": [],
647 "prompt_number": 4
648 },
649 {
650 "cell_type": "markdown",
651 "metadata": {
652 "slideshow": {
653 "slide_type": "subslide"
654 }
655 },
656 "source": [
657 "Today's image from a webcam at Berkeley, (at the time I created this notebook). This should also work in the Qtconsole.\n",
658 "Drawback is that the saved notebook will be larger, but the image will still be present offline."
659 ]
660 },
661 {
662 "cell_type": "code",
663 "collapsed": false,
664 "input": [
665 "Embed"
666 ],
667 "language": "python",
668 "metadata": {},
669 "outputs": [
670 {
671 "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",
672 "output_type": "pyout",
673 "prompt_number": 5,
674 "text": [
675 "<IPython.core.display.Image at 0x10fb99b50>"
676 ]
677 }
678 ],
679 "prompt_number": 5
680 },
681 {
682 "cell_type": "markdown",
683 "metadata": {
684 "slideshow": {
685 "slide_type": "subslide"
686 }
687 },
688 "source": [
689 "Today's image from same webcam at Berkeley, (refreshed every minutes, if you reload the notebook), visible only with an active internet connexion, that should be different from the previous one. This will not work on Qtconsole.\n",
690 "Notebook saved with this kind of image will be lighter and always reflect the current version of the source, but the image won't display offline."
691 ]
692 },
693 {
694 "cell_type": "code",
695 "collapsed": false,
696 "input": [
697 "SoftLinked"
698 ],
699 "language": "python",
700 "metadata": {},
701 "outputs": [
702 {
703 "html": [
704 "<img src=\"http://scienceview.berkeley.edu/view/images/newview.jpg\" />"
705 ],
706 "output_type": "pyout",
707 "prompt_number": 6,
708 "text": [
709 "<IPython.core.display.Image at 0x10fb99b10>"
710 ]
711 }
712 ],
713 "prompt_number": 6
714 },
715 {
716 "cell_type": "markdown",
717 "metadata": {
718 "slideshow": {
719 "slide_type": "skip"
720 }
721 },
722 "source": [
723 "Of course, if you re-run the all notebook, the two images will be the same again."
724 ]
725 },
726 {
727 "cell_type": "markdown",
728 "metadata": {
729 "slideshow": {
730 "slide_type": "slide"
731 }
732 },
733 "source": [
734 "### Video"
735 ]
736 },
737 {
738 "cell_type": "markdown",
739 "metadata": {},
740 "source": [
741 "And more exotic objects can also be displayed, as long as their representation supports \n",
742 "the IPython display protocol.\n",
743 "\n",
744 "For example, videos hosted externally on YouTube are easy to load (and writing a similar wrapper for other\n",
745 "hosted content is trivial):"
746 ]
747 },
748 {
749 "cell_type": "code",
750 "collapsed": false,
751 "input": [
752 "from IPython.display import YouTubeVideo\n",
753 "# a talk about IPython at Sage Days at U. Washington, Seattle.\n",
754 "# Video credit: William Stein.\n",
755 "YouTubeVideo('1j_HxD4iLn8')"
756 ],
757 "language": "python",
758 "metadata": {},
759 "outputs": [
760 {
761 "html": [
762 "\n",
763 " <iframe\n",
764 " width=\"400\"\n",
765 " height=\"300\"\n",
766 " src=\"http://www.youtube.com/embed/1j_HxD4iLn8\"\n",
767 " frameborder=\"0\"\n",
768 " allowfullscreen\n",
769 " ></iframe>\n",
770 " "
771 ],
772 "output_type": "pyout",
773 "prompt_number": 7,
774 "text": [
775 "<IPython.lib.display.YouTubeVideo at 0x10fba2190>"
776 ]
777 }
778 ],
779 "prompt_number": 7
780 },
781 {
782 "cell_type": "markdown",
783 "metadata": {
784 "slideshow": {
785 "slide_type": "skip"
786 }
787 },
788 "source": [
789 "Using the nascent video capabilities of modern browsers, you may also be able to display local\n",
790 "videos. At the moment this doesn't work very well in all browsers, so it may or may not work for you;\n",
791 "we will continue testing this and looking for ways to make it more robust. \n",
792 "\n",
793 "The following cell loads a local file called `animation.m4v`, encodes the raw video as base64 for http\n",
794 "transport, and uses the HTML5 video tag to load it. On Chrome 15 it works correctly, displaying a control\n",
795 "bar at the bottom with a play/pause button and a location slider."
796 ]
797 },
798 {
799 "cell_type": "code",
800 "collapsed": false,
801 "input": [
802 "from IPython.display import HTML\n",
803 "video = open(\"animation.m4v\", \"rb\").read()\n",
804 "video_encoded = video.encode(\"base64\")\n",
805 "video_tag = '<video controls alt=\"test\" src=\"data:video/x-m4v;base64,{0}\">'.format(video_encoded)\n",
806 "HTML(data=video_tag)"
807 ],
808 "language": "python",
809 "metadata": {
810 "slideshow": {
811 "slide_type": "skip"
812 }
813 },
814 "outputs": [
815 {
816 "html": [
817 "<video controls alt=\"test\" src=\"data:video/x-m4v;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAAqiW1kYXQAAAKMBgX//4jcRem9\n",
818 "5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTE4IC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENv\n",
819 "cHlsZWZ0IDIwMDMtMjAxMSAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9w\n",
820 "dGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1o\n",
821 "ZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2\n",
822 "IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MSBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0\n",
823 "X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTEgc2xpY2VkX3RocmVhZHM9MCBu\n",
824 "cj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9p\n",
825 "bnRyYT0wIGJmcmFtZXM9MyBiX3B5cmFtaWQ9MiBiX2FkYXB0PTEgYl9iaWFzPTAgZGlyZWN0PTEg\n",
826 "d2VpZ2h0Yj0xIG9wZW5fZ29wPTAgd2VpZ2h0cD0yIGtleWludD0yNTAga2V5aW50X21pbj0yNSBz\n",
827 "Y2VuZWN1dD00MCBpbnRyYV9yZWZyZXNoPTAgcmNfbG9va2FoZWFkPTQwIHJjPWNyZiBtYnRyZWU9\n",
828 "MSBjcmY9MjMuMCBxY29tcD0wLjYwIHFwbWluPTAgcXBtYXg9NjkgcXBzdGVwPTQgaXBfcmF0aW89\n",
829 "MS40MCBhcT0xOjEuMDAAgAAACqVliIQAV/0TAAI/3gU2tIW7KawwaCmQGTGHKmuYAAADACBcshU+\n",
830 "yICkgAA14AHowiEeT6ei7v7h3Hu0i2fpUBLGBIkbCMP3Vfz+9BVGCDXnw9Uv5o3iN030tb7eq6rs\n",
831 "EEhHs2azbdTiE9Csz5Zm6SiUWRdmB43hbD5i6syATuODUJd7LM3d9cbFpc7zFlu5y3vUmNGd6urp\n",
832 "vKKT9iyleIyTuR1sVS431DhevGfkUllVeIznYUe2USoMW1tufETjyRdmGldN6eNlhAOsGAH4z+Hk\n",
833 "rwKecPPU7Q5T4gDAIxj9hW84jVExMTSTHxkPTq1I4OotgUxURCGTsw60k/ezPNmNg38j1bqaGmPc\n",
834 "ruDKEIBDsK5qEytFB90Q68s0h2wmlf2KXd5bleBefiK+/p47ZsyUO4IdlW25rRy+HLjt6wQXfYee\n",
835 "3IkiQOoOK+U7u/lxcl78zfxwIoEMjUUSKNZjkp8clnmecDDJ3Kz+viF7bPklk7N6QRyizAKPIIpn\n",
836 "NJUuMWQmqeL2Or6cr4D0/0tOym+4tficxmhuEONKUtO2pPn3hRjMllkd12tXp70fLTfxy0dwB70M\n",
837 "L9iLEcItHb7zVupHlP5RxdvecpREw+OsIPr9KWilIesNE19jgIbT+TkiRBjOoKvUuwcQnKg7fOTH\n",
838 "VoLvnKuAfea+oujEdm1Rwd2tEOnkF+ZC11WaNQsiNR/eJ9EnUXjXDYGfhB+Oe7qj8nYTT+eOXg1c\n",
839 "uJNgLXEs4vOheWEjQOqfIWMQc3DmTof5s0ksBmUQ3PQ+UHPxZSnmOEZB+j6xT3wbm7HGzDjWtSg1\n",
840 "SjTxd1EiJ8xA4SIxxR8WIKLg+TwFxJNS7Laxq7Uglu3AkXe82P1JCdJX5PsbFbxuDbuJgakzRcTw\n",
841 "MLLSKCiizS/eCW0uJed/lev9yb80kKlVET4S219cn/zhkpeDV83cHYOr+sJQKDRk/Wh2c7fsuxfx\n",
842 "aEH/6reSmvFDsAnXAyPXliJ3G4VG3OkEM5K5WyGGrBizZbTrdGsBnzj5VSGGOJdCKuRrUluw/8es\n",
843 "2vYRPs9BcTqAqvHk9M52SSIf+1T6L53EZP8VbtXB+G29CMW4xVCK/B/YDjaNmqMwJ61dapugjnWJ\n",
844 "fqeXlGGa3Ch3aA7gi30T8PucNRBjLK3lF67ZDDvkWXRQXd+VMnKWHkBbCkQ/F/fMuNpHO3C00Y2p\n",
845 "ljna1qImBhVMvPe0F7Qx7G/YyxLRzhyUU8e23HGzp0agtNJRbydbrPV+TqJMSifJMNcZIf8wkdnC\n",
846 "3/xdpcXnLf2Ye3Kbd0o7utciTG+q5h6WTEk+PaNbXLLA0YyZ2VnLTcyV1QTS76aNCbV9Q1/OQ7QU\n",
847 "81Gg0hPa9aSiscGary6jLVwDQaik4zLsi7jPqgPVdup7pwx7uJDqRCVcVi5QoZFp/GHdex5sJTF6\n",
848 "9A6sja69/NLkFIWNSIeRcuGahXpF+wZeYIrqJv975s1TKYKAvp1WtzgtgWNkcbzCtROqf8rPtlAI\n",
849 "xkX8GLcEo9zfExyfimeXQ64qfFxEy0IMy2Hsxau9fSMqUnIjntuVVjCQtBL+94gx1RZLndE6wROV\n",
850 "Tq/wHwHrQzo9QL9cpPqPFJjiZ/NGZIFuudS+wsBFe6Hu8Oitf5zToLqLdtU4Smwh4ne3JsiT9lOz\n",
851 "N+4PPw3VSx9l5FppVwdKUWELw1dYpCOppyVWlJ3YQ8H4FQQM8EcYMG9N3Bxu79y1J1ikuvuhMmLQ\n",
852 "lehLTbguhbix74hd1VIQC8EjHmOZSSWbssulYwPbr6FF49tifk6PymJvulR9/u+2585HkRfbxveG\n",
853 "eWCz0ix1pIVfaNpESKmtLy/0mcbMg9hYDz2werz9oe0lT2BiMV6uAin6RaQcT8Vk9MPctfwae+gk\n",
854 "vtnZA/sOBk8MbpylaHqc0KIVHhhLFMNnkOFiucjtGo/JWTa/F6g8wWeow5ZuIJUORaYHWqegZbTg\n",
855 "M9dCsYYsfZGjjVMuSlDIvpYvIvFFooGPC7Ye2Jfawmq4Ut7EL/nv/dyAd2HRc5msmUhzeu/XpX3r\n",
856 "VlzRmf9/Qan8Dbve3QfW1Ym0o5J/KAc3z1VBho7JBr5PgCL68RiD9jZHN0VvsT4gzsEjNlW3D91U\n",
857 "y4RduaodBFoNTzXwlfUYULBzdiTbH75l/UmVMC4TKeTWhNzw2UezaqeGd8at3WSY7W/VR3+hvZHD\n",
858 "pkIjgKuNNH0DsCRa/Kk56XQoHIyvvUH/eNekNvziReqS4qgLnXUT4BRGt2BOtCifI6+X/DGHUOmW\n",
859 "lX7TN5b4pw5U7jwfwshtbhGZM49T8JMk15Mzrc7tM6J11TYxb5R3mQhZ8TZumJ0bMJXPM69HFyih\n",
860 "r5dJSEJMycxJVUh6NTQALUOoRTHIOwE+FpWI6feTv1SiZ0YpYe5DbkYJJbN7zAHbAKw25XvqR2mA\n",
861 "jQmOlsfX/tK8DPjP/8h5/xgAF4EUbj1tOnQCBQL8jk9vHtfsXncsprww4Z+P/Z/UrKifuFyEpBWN\n",
862 "8kLpF7yywE2iYdDruV9+/qKR8rC9ozNKyqQNIwtxrzYkWpE5t8K7gG4JFnrHona/Rp8dOX6VW41+\n",
863 "jb5LB1LEtE8MwjLp3RCUOq/+6yLzaOEgBTqzvEjDeFpg/u9DMHMr4/2TOchfjg7dl+uQ6Gsx+4Ia\n",
864 "9W7vivG95027p25eKL0nHvx/OqmAQEZYJL/JO58lOj0zPdJxrQ5dZksjMISzVZNn7DsxqE3zgBBu\n",
865 "Nzk50R8lTK3U8P12QiOAQYSTeGlYlkvfeofrfO1AitEj02m9aUkxTFd1ZZJoLQT2d3zEU5PmE4lx\n",
866 "MVfL5ttNnIbqfcIU2RJKNWqdw77xfjfrNc/eNpRKPZ/6z50LzBprgjzBHRfKgSWWkDxHrX0aTbgw\n",
867 "QFwd51+PoUWH4DkQg26uGslF5Hn3hB58+fkeLTosTANOIBNAeFZtTc4PIaLHw759zae7scY55xcT\n",
868 "abzlilYIftst2RZ6ntsRC3zFxduCKvL6wLfYT+TiIWJn5P7sTwZwXuSzXY+9Q3xMZ5o4Xcpz6vD9\n",
869 "FtTjzS69iefEYt4pXiDrZUo4ePGiLeoIFIwYB/v6GXdmG5VLLk+eKbOc9AmsX2zmvqtcvDRGQbzu\n",
870 "gXbH/kTH/lkNPBTmqN3ZJODUEXVohPEJ6th0xna0EVleB73Q3eNvaVUvhlJbjs3D/T17FRCebN7A\n",
871 "OXvzzbLE/I5kNfEmJcv4dxtIeo2uQ/z9ohSpiZzbDj1u40nJRyJxUK60wEv0nA9f/NuJ6/PEyU0b\n",
872 "kK16z2KH12k3Lc4+1f5fawIzkK2qJRB4wnj8VHhUW9mbJhs9vgfFmU3xrXSShY67Ygb+gYNPxxtn\n",
873 "4K/9eTSwIA9fv/nR33lA2lZoXALRUTmOZIl3R0gAM5h6oX1y1thIyqViBK95VZc8Pvy7G3O90M9S\n",
874 "4zkpyFQ36jrMazvMveMA4d39fvoaC7p90quiJfjI4yrl+ECVkCJL5MxRSa+iVcIL7Xbl0jVaGhZI\n",
875 "cMYmcGOBbLzhJgloM1x1zFnnj3ggJRFAM8yNnXxhavk+mA18JC+y3lqGsp6vPReRxGlGHMou17L4\n",
876 "It070LzkoeCzarpv8Apw59smdS5KN9qVN1WgeL7OSN8BHg94ubCvS7DW6H3/PbtRB62jFLsBhUV5\n",
877 "YqCIbIN5VZ81AAACpUGaIWxFfwAru8x8uT3FuOjrAeSWXmAWqq9jCNGE+N5AOv//9//xjk4uBAcA\n",
878 "DN96c97AVGmzRtnWwPsgcCbLrVdQJgbKp4QSmPwQnVhv0hXyBjeFWWlcvx70urEN3FK6/lvk2tQe\n",
879 "ZgbtlbzXluvTfnSj/Ctz7vZ+O1FjhDzzdpL7uLzewzCIW5VWLAEKUVuS2J6wNk6MR7UblcEd4EtO\n",
880 "Y+R4/qJgfojCsfRvA0oC5dc41Vd0erZbSkrmPTjLCn815bxlchUJMS8gQD5hJNwoKHvNLNwn7XKu\n",
881 "TtYIhH2wVNZvDWgzCjlPeQajnrcMsb6bZYJvNJU8HuGHvm50r7VG8qifEwmuyegAZXojh5Ul5Vvj\n",
882 "DW7kSAZyw8a7I6mHY3FZHd+OA3V4JZMbNliI3Tj1L6+MKTmilVialmyZagRtEMeKRdtxUPd3vVEt\n",
883 "rOBVIVYWdgAGA7HmZiHQUQNxLkWxbLyWVlrh5EM0Do2NdbclHxxArz90d+MSVeUOIXQ/4V9quq8C\n",
884 "8qVflo1gPtPMkjO2/UrdOYqhY404ReObOu/fdp4hAEDq6jhy64vOeT7XUK/Onq0rXTldtA6kvgQa\n",
885 "Jg+mgYSR9hfXtMbOUSLgLj/RmBSO8aAMHuJJZqf1tCM5pZ9eYUsrHmy+/z2NGalon0//uF6+33bQ\n",
886 "zT/RLRfBbYTjy9QrJqHLlw46lggWPGkHuPKSqk/CB7U4pNPXUbR0DdcJy9Db00wCzVzxVc6h7jfC\n",
887 "FgiL2Y0HVqd6bgIaVUqn/gJCEyCDVplnzebv0gg3XwMJAGu639lHu7rEvxTp1smIYjWp9R5L4Ssp\n",
888 "VvS07Nb+Smk1FgsMp1K3EMUT8X2Fty4VG54/Ec6bE8tNVw4/QV1VzBw7Px2/2eEhhUS+FMfbHAlD\n",
889 "28x00jRgAAACW0GaQjwhkymEVwArOUkEOhoFqiELtH8wgecFLiUq6WqmwAP7iGEwbYzfnHacfqUN\n",
890 "XAfD+CGR2ap0lAHL25ipuYtd5j2O0PU/MpaWPG/n2y5OkfTzaOpotaR5tWjN55B2XblVVqsFfBC/\n",
891 "mvsiPvCBWUHFChacdY5whj5mP5rqQ0dqLJCsWjrs4TWnIbL2V/Iwfj3hwI35jfo1JkTOeR+8GhOd\n",
892 "ma9rgiKWafCbQyhYMTDmVdvhND60Flm97EDSTjF0OC+0gD9b8Yn4tNeHipCa/aWyt0n79bMmjfcj\n",
893 "ntBCPjrcB5ecRTpfGHbEHy1IRj2cjkGXKC+VYoYJXBp4rd4cMd8ygLCk5nBSd8/cTaKNRjdBscOe\n",
894 "TXG6QEjSxj9/2pVwx9DMRVtWQR0BSaAcQcZ8W2KPSaeRC4QwmNMu2xx25CSyrDiq2rFSK/JJtmvo\n",
895 "IjAKq0ciEXoOgw+Ke+Ylb7ULKCS3k1p/613UNRp450uSq5b7CAHo7S0b7fBMLfNmwSjRYEhLlo0H\n",
896 "UaRe/I+IX2Z6XdZH9Hty/399ZA1PwZGC6EfvUJIf7CBeaxv7cu6IT2/s0zPRGthpvXpYw6A7P4Ww\n",
897 "z5C4V98KnIUNUanadqabKP6eXWhvbvcQHxAjiOOiKZgXZplZW2g+B2NNyJSLiR+g48DqvWR6t9S2\n",
898 "aGfFjdOW1Gi6oTtZ1d4p5XIslAr8mryeZ6+htSSQe4AcfVt7k+V6mOthBCYtr/LEU4ZHtl0mW987\n",
899 "6PK8mRFAaT8DJOUFVz1lPfzRApuPggkkyq+UMvyfKTUbCk7/DpfX8Y4s4QAAAg9BmmNJ4Q8mUwIr\n",
900 "/wAsWUPjZw3ksgRsxZ6n4fQjprPbkj2aUh30y0bZJnLmiXnWskvOGnCPwBnG9dEhatwX3hoxk7BN\n",
901 "yG+wQ4emZUpcVzcWl2T9nKQB1euucuZWHTg7TCtM/iHyfPO2vbmGsfzs70b/egIbywUH4y4BQSL1\n",
902 "nWc1SmpHm2zHMBcUjYLDZ5gL5vdfxn0V8FFw66G88c/LN4I5icUa7xf4fcSBKywU0ajbp1P+aJYj\n",
903 "BgWT6Ggu0MDLDNl54tfqd42lKosQtM1aif4WXAZFP5Ww3vrQ1rH9+utSYxqZd6N6gGtNbSNMcVia\n",
904 "Kn5LcnjsbBi3T3EmGqshEbcme8VHKwR3kSfBOAprrIsv6K8R+X6az+MD23rWka/2v64m1qM69D7X\n",
905 "a+Kcs/n0KLCJdTilyaGadopLeaAn3eYvWTeHcucMM1Fp1KgHD1tiFeO6HvobLkZlRximsA3/7Mio\n",
906 "hYklLIcJrZL22BH+6W9d6kZsYIsej9RM681nU6mWNjepBAfAfTbrGRrVB/h2DxC5B8YyRjgSIzQj\n",
907 "NYrse0rzChqbrsLl7mQ7W+1bsNKze5//9ZIa8rSsF+BXh/vgoRTDkPW/ws95B7VPCZEFChfX0icw\n",
908 "+tpcpN/q7NY87tUn4vESdSiMMlyhKklMjQu/G51J69ZRQLs2oUO6YfoJFqliy4qCFCrf8SZE9Fc6\n",
909 "DcCagAAAAodBmoRJ4Q8mUwIr/wArPWF/KOw78THwadfPqhJO0CnmR/M74/XYZLqVYKlNcEaYauf+\n",
910 "vrRUDJPmu75sMKy2Y+Bnslc/iAISSyWtw/h/3CF8fE5ZrbrwSNst+MSyCoNWP+8imtoX2eyojpdC\n",
911 "k8YP5K+cbK4SJPCkZXbYqSXYk7hO8AdSemBHgXKWiZ+UOr802aJo+98ZOIjX9hWL9bo31Gqx7cy4\n",
912 "ZG+W/ar/WGlzDa1xPWnPRsEdrIcZlEVGV/jGmbirkxw1lyUYoqj8Vv7Bxube9XPQlBkXOV6Lc1LT\n",
913 "2IzNq0V7WwVhF0kA6yxfAsFxc9krNEH8vGGntTWI608ovjatXc/CKKXw7AjJSftlTcLI0hIIGXbR\n",
914 "Ur0NCYNp7M4cVd/n73Rjetnixz4SAKpcz/P47UsijZG7T3SxzK2D79WS42aEalc12hQwCZ01LfmF\n",
915 "/H2mmGEvOzPBie1D0YT7Jh19vxa4Dd3SQ1FrDfmSUpvv4DjbYcZ2PrPpFpWtMjWqHBeoyMiZf6RP\n",
916 "3EfYR6z9jsVNIIHxM0bzzBQF8eeYkPgDySydxPXv9Izo+QUY94N8kWi16fI6eZSDc1G0Yo0L91jc\n",
917 "RQuDMGGS7B2zuf/0GbJyRhUO48UbMrqnILMrbQg1LF00Q3pH9nbGEK/RRQpRN3T/J/4IZQjwW2Ft\n",
918 "2ipWGztg1Jn9I4DmffKS60QC+JQcyakdVON6zDcKttIKlqeTcmAi4xzmo4QXa2dRKleS+fs3EtTd\n",
919 "BBtony2wK9T2Imj+NCziOSEL7Q7VuIU8kclUHrJJsSneFcxGRgIgGGUEQM8/pklwTOqab7mMmJeR\n",
920 "iaBrjJDEnDpkR4Vz3qXxgyn4/5x24FuTMNVPwQAAAhtBmqVJ4Q8mUwIr/wApcLwPT0/Xh9UdWqWX\n",
921 "Is8Wbj5K1hivmN6qIQnq+aolcegdlM/63MbHsdC6xYZC1e/Q8UjQCt9N/Ejqwms8DzeWv2qxskel\n",
922 "iZH0kt1QWkErWSEodq7V0ZNksctLkMGWayX33gBT368EehfIeGDolBZoqIbJfb4nqcfU+ev4OzVv\n",
923 "9zVqWyLck315GFmXxQKIM8pICQc8Q5es34LH1+DmnMnW8kQpVGrztQcDXhjCU3F0fOgoSsXSVWCj\n",
924 "c6XKqGbCwQDfJUxCfXfIT6YmQoPpVp1mpGy1wQypXus9z0bScDpyDu23hViYDntdj1O45ea0znKZ\n",
925 "kj1+tLHbBtqAGJ1WTcbGlF6Vya6hQhEsiiZUIC2fRxIj8/wEXCICIbr0gZ/m6gcOhE10tenvE7iy\n",
926 "+BKY81wLWrnzos3S6FWxYtmCRes+LLhNGOKWRuQo6SyePH2OZ90xZm8oA1MuTe3V59euVNxjAt0F\n",
927 "LkAc9TEiFhP/8CB+gA8mF+A8h1U01f4DVX55GzCH51jHI2xUS0L9GtsHoBxLPLK/NNel8zcnwG4X\n",
928 "+UusfcfEb5hh+ffnXteCE9vRGbs2n9wYW0xA3ZicklfadmWKUtMiHYBfkMSULWnkBQr4CXxjpYOs\n",
929 "6ygeEoA5+5B0B1SZObgZ42wWqddyyYE0NfwQAl75tfdJGqOa7OMHwBYNeatJaJK0zT2+bFaw2qWC\n",
930 "WwAAAitBmsZJ4Q8mUwIr/wAstkdsayRXchoFk703izqzduZ5WsyXriI9cfUdMUWvm0iGHwYIrUuj\n",
931 "vz3Yjou+JLwv9df2kt7MJo8u+3P5CjEKbwlz4vkE5AHTAbgXn3+Xc/MMJLgW5cm7iX3KiGNnBpbp\n",
932 "hhwJRlb3u91NRDr0d1IR2up/z7lKxE7XPAPFe0siPMYVlIqWNSn5KqLABPeuxxbOsvMEb27/nH1L\n",
933 "UVM8I2F95c1I3Lv1SpkhZXjs1JsmS9X7gsoTxkXyShGC2+zRJSGUbhCPo/q1XSFMHQyMWJ79FKPQ\n",
934 "SL/RpVsacN2bYwdKo4TFBw1SsKq/L1iOmqMI+4Gxnbbjojdk0ek0JIcDb4bHv1czxchF7FX1Ym8H\n",
935 "6IpPuE8CeNKjzQ1a1wqhEu+wl1N0x3Y37ZryCCKJRkxj0FT7bOoH3L38/yMUuh/v3aCmxY4eCkyk\n",
936 "b2p6ZrYMFE044anM/nMjmbErMibfRFuCz58Io1rBlF7JfkIz0R2/5vjUMVskcdbX2mm7DntncOsW\n",
937 "DIdg/XVmgsC9CzVzUyq4VsS/sk97lJggcddpWLNw/29egz8iLyzWHOAXCvl2fTIPkviYAOQXfVhZ\n",
938 "UQdxsyJUNFMTiALrZCmoQLMp2LmDbfbW8JQriDeR3fVz6P1sjT8C2yEDvzkCn7sh0aTBK+sx7BKH\n",
939 "1nb4320+caQepQj4TCJtCeNXjdrVcNEnjvwlcRJwFT1pT+Y7HREbHnT71XYNh4EAAAGEQZrnSeEP\n",
940 "JlMCK/8AKIjxcI58rm/ML255fOJW1zbznFna7lfgMQrka7OTPPsvVAV4EJXye/Uxiu9dlftmRypJ\n",
941 "qfDot3xwDe8lX/qAVf6pBkSlUsaLyBYtww/SUSa1bGl1JvrJCN7FXCCXbLd5R4PoYlPiDIm/DQH2\n",
942 "puO0StIWmrR77Isc/J1pRvdu5+mQa/n0SEHUeM2KkoRzCznfD9zaaRO7BDtvC9SYIT0uYZxrwTjx\n",
943 "Q7N7UERTrYG0P+vRLAhxkfohFIYl3HXyjPOvnlbUFP2oiiy6nkUFuaIyQcJawJv3GU8k4ObcKsC1\n",
944 "cNDXjSpsyQRrxLFaCCjke4mikyt7vs0iN0bnrNWv9HXruG9zOFEOer1ggIFTsT1Eos5CXRkgja5H\n",
945 "N4QUM6MhWpc5du/HgBIH8ANFcoo2kJpqcadw9r/0qk25X91MQSDJQiH8Hny2dQhqR+LFWEawiW75\n",
946 "3SJhn0ngZcv/mPj3mwcHv1SL9ErBqAjm4JGiDetPKYtFwANYY11OyQAAAVdBmwhJ4Q8mUwIr/wAr\n",
947 "Ox5HV2505jRePGgMxptW4PGIHEszV1xGZS+flSkF+aq30AaqO7u6XK9jJsuWXTfYCRQTn1bZfFQ2\n",
948 "2DbO5DXAxK/TUmbQleCflFzeS6/czxkL4PJ8AwOs2U+oehekgCZC8gZyHHaQSaKbNJ46gTjNsLy8\n",
949 "4ACQ5uNt11TPuCPqPTuh+schdw9S+/lU/6m+EyaqGZ49wDFPiBFBYXglQQBjyP9k/rqq0xL7SiLj\n",
950 "pe4riYg8SFUuUtOzPdWHyvxnI7Ug/0VLPGAAhgMISUnqe01d5QFf36yHpwMAHexjAZFIGQHAFaut\n",
951 "uMuEw6HzUZVzNdeHYxvEYOGkTo007bLwbuf/nxzrywGOxlRTYJLRdYI0mk0SdN3+LeTv1RIJwv21\n",
952 "+e9rT5iFOTCgzeQoekEWXLYz0X8YLq5bVCtijP7/T7w1Ck71j0aqfrEn6wtIAAABNUGbKUnhDyZT\n",
953 "Aiv/ACcySi7VBgOid6qZNXvhh/JsllHkMLLq0yNbQTqv/Wk2EBoSKICZwFwAD0WRzhvvReCGirep\n",
954 "1Fe4bxjm49/UR+OYrXRmHR18T0C83AUVeBk7KvDZmb/eHzuzEN4yfXucr/NWFJl+USVMY4r4UQ9C\n",
955 "ayrfEY9v6AQ6mzAdLy2UMfFxrRJ99g/Rfl8qx+m4jIZNjlrTaThzJ/3OpVmAliDfxVyg8+CVIlI3\n",
956 "1IykiwQrXcebgajG+av8XU1SfyAG5ibvwbtdSAxkGBcJWL387V+uTdY56w3KN2vBtoQpVKD2zb3y\n",
957 "azIcATZ02upwIytNcM/rpaLCdMb1myWcikE25agzLhDhOS+4zwjYz2DnW6VY0gFBAPsphhsUMnau\n",
958 "VVdUVHzCTSdvzEve/H8q4AAAAVdBm0pJ4Q8mUwIr/wAo+x5XKuiN1am7SkJKSMonFZDPU3f5XFcD\n",
959 "QSs0FLVq2idfsKwuIkt1mxIq8NgMHpzofTnDHqs/WedvAmhBgL0N5azdQa5MNKG2rJ4IAvGQY/uF\n",
960 "m3jKQAKzvhSS01gO1oIfizF817z9IShS4QK2WT0PeFPELqLSpED8eNOpVTR96vmwpk/WBKRVJdTQ\n",
961 "JzjiCQ5pgEwjtvk7KqoS0+lwXSbvIrXkYm8DignEts3DLNoLHrPjXlQmbIop76JZSyJEtB+91GrL\n",
962 "wo6Km5GeebyA2E6qGL3xSkpppej/ruoFprSKrH60UMbrq/SK7eCo+1QFoySPQmqDFsMGiQFqvtld\n",
963 "5BXDYdVI4yRaoyN7Y7wi83HRC6eVazuHU9OtIY3xJJApBWq1aJOsYwc38aTC3ee863Aa/4n9Lk4D\n",
964 "AtyFYHNZjB5m2e2vk8G2Gny9YFlBAAABQEGba0nhDyZTAiv/ACoZSZQfHxhfQxEqOBQrP+L3Dmgv\n",
965 "HSJQtB1iVkcLTxm+vagLHBLG91OGnopwrr7gT/loDypIhoRxjcwAAOeg/jN4WBbXzCJtnWGGllUC\n",
966 "SdtUZQzKOSp9iM4yX18C6jrY4Sq6R9PUV/lEGNveJR4gw4FMve7110XdEPL1O2VTdHvdqeANyaq0\n",
967 "nLdEmtXnrzvdrFlBaUvmaR4EdlkqGkvkZKWJej8Vq+msbKa7JdbxjwZtRufiyGfD/NVqMgSrYRzw\n",
968 "9z/a8Zwbr+9+19CxlWD5bCuAEfPmjY6kZJE2L/CQI6+tnCBTXOmWZtZMBoCLGOf7G2uAC3+kFlbo\n",
969 "h9as5WCkO6+iqXq29dyhKnsHInorRYsPlgxIXyU1Om/Kyhj1DJV0Am9WJK3Dln0zNUH0q6ZTOnZc\n",
970 "FD36AAABYkGbjEnhDyZTAiv/ACcwdIOLRFfoGK2ZkKsvgMwG0m0qsY0vMLPSzefc+ebp/aztyF7M\n",
971 "lsBz/fBeNtxFBcsKgR4pf65GvdfOMHah0ltZ918sMDmXUEZMeRHy/xpnWpTLeGz6uTs/7MATPmU5\n",
972 "BgHbT/DkD8QeaZnFAzidyFCXDz2l/jaKhEdgqipbB2pH0+fQ039r05z9axxEWGmaLQjg6x9+po1o\n",
973 "24yhkVO7m03YwWmPyCgy8cOwrvRyJkXJpRN4m8ZBS1zwY80HeN/VyMQQJSMwsTo7R1XMerSFuyx0\n",
974 "nz+8qOuhiqykc2ohCCsXia/+kIKbJ5Vs+cbWtvkqBKIDSfU7FhAd3GjcY/xar0EVmi6wWFTugAog\n",
975 "R3I7mTrQDdlTAqYgqO7Gn5NMXQVHu2i1zhFSdo9GjMbeGnbkJwsFbQ2XkoKRIDpuW7AewC9AEBt0\n",
976 "Ox/Ah6dGXfXO1jl8pEApj2RFmgAAAPlBm61J4Q8mUwIr/wAlR+eW/VZ7bSrmwwMA62G05DZ7p/5F\n",
977 "UugsSsQdonUq6abtbU5hjFr+I1lPgoiV5c3CkTQZS+K5zivdo+Ti2P4K90xXANp8dSMAu85uJIOC\n",
978 "Qn2TXbEnNDifLB+3V84ht5tj4lvTaZx317BcliV8D5v2zZQW8RO1mUbuJEBItst8E7hfE+ZXj7tf\n",
979 "DxNZPTvtpFyUv0fH1cTg1pr2VLy0d0zQLiA58dg+GkRvR1/hs2LyifBgHcj6eTWz0vsypVn9iPXR\n",
980 "H/unJ6i8cfFL69NO24tQ9QQB+nDFhoP2cRhkAvhHwn56n5PppBD/oxni2f8AAAE9QZvOSeEPJlMC\n",
981 "K/8AJjAXVGf+Kj2XNJnFeKC/gr7dJDTC2ngpd4WeAHlg04GuJKnn9hAmiECxxo9qM1IYMRiB85t6\n",
982 "gALnlm9sRqGmioyzAm18RJndc9Ah8RlpGzr+44a6ntRaPx0cIwNIWAA8buL2JP00dmfjNqEiAlCa\n",
983 "8OdV8FQxjp1vDXsGcAGF3Qbd62KEpkimeI3wH2nuXpbDHm8/ZKOR49s5ifUCkxCoJpfp43aC0lTz\n",
984 "h2NXpcfVw6h0QnK8G60R4ZAxOxaJB7c0nn8ixXSU2JVY24EtGMF53nxJnHfzUheewUfBOGYSxeo8\n",
985 "oK7oUCqX4rztzDwoc2QywNqQUJUkFrqIN+sb5ecYvX24Zujn+ZzTW6UDAF3R6WdNyJyRAremgC8s\n",
986 "pSflTqygQNGfHyGkfIEEJJaFo/pBCBkAAAEWQZvvSeEPJlMCK/8AKI41fuekXG59Knbw4Y6YJrit\n",
987 "sh9VtQgc3QKvVmxrzzo7f4aXn8N74eyP4b2lV1Z2Q+rohxps7EHTkOY9jLdqxI3MXe7je4g2qepz\n",
988 "71+hY+jYdX+9LO0kA0Zg3NfyAlIRX7k6c/YHAZNtNaGZgTBMqiPgmEjiJH9Luk7shbgr+srfwiYw\n",
989 "BX9rdS3fQNNFwcT8orQC+F60LAY9+GbFo2Sw3Ld4Tw9jq9yJtrY8RtHAdzytyek/mv2+j2TbTvAQ\n",
990 "KbbCYtdC8E/KtR4V5ZTSScr5Wb63vmbw7UpddEXYvl55pARyyvMxWNSh3Li4GF8Jk5JBi5B5ASQw\n",
991 "xCMYpX5hkAMc+d8tl2bT+IEvUTsAAAElQZoQSeEPJlMCK/8AJIAzFZs00JJ0yfm8CZiew4xWdArL\n",
992 "klEvBVXo/+ukPLu3XP9HFOfsme3T6BJEKmPPgZw/Lxnraq6Sl2kLVW19YU1qmqgfv+80LkZaWU5g\n",
993 "RAH4hqyo3bFYcbuY2SC3IW5Wm69gtYyAXOdbAYSEHA16fvCeRQjHEsxKVndJdrRAlrGHsKgUBQ3U\n",
994 "p/ZXIy1vkdFOfKSjpuZnswkuqr8NZI5tJ/dnBSErBTNWPaNwWV7nNomC0EYVGo+geGBhLXzaLw0U\n",
995 "AOCYGjiPc3803BDw1GLoLIXjrIFJxwRfBNIAXYZAglu30oYzhpAfRWSprkeULMWYJTlWvbUQ5CNe\n",
996 "wSZssuDWIRAc3w8AcFaywwn+YSGhtR8VI1OGjYkfBbcAAAD8QZoxSeEPJlMCK/8AJdokjCUETRw/\n",
997 "nciVPtaZQSBP/VxAQSITASEzlJBl9Na1r0DJhLOz279+KQLtl/xHZ8vAKc528mTMTqtWs4sFbeVg\n",
998 "HWyBpHcHEtgTzjIqEinp/MPuUXF5poo8YLSSMFn9Ozx2FbU5/Kh9A39oN9NHQflVxV1NA6yT/84H\n",
999 "HyfMtfdSMS8KTvAEE2lDs14VQayNs5ctjXboQT7xMBf5OLj6thhPvgaDrFB2o/PV9ouK147lruWT\n",
1000 "P2mkoA9oDIMYW1pcBx4yyV/t9GOPZ3aXneMUb2fFmUCX43BjXfUDMaa4GO2/Ankj3UEQwDxA7ZlN\n",
1001 "UQK2AAAA4UGaUknhDyZTAiv/ACJHv33I08bkhybYiJ/JiiheW5zMPBu4n5CxGr3frhE7TkLh0vPk\n",
1002 "tM8m/AhaDiJisdk5QXNe/4WmxEDSAyaVi4eUVu0iHT2ly/KNTGqiORqA2oKpTjh84nYbrpXwnGv9\n",
1003 "SOf/34Z06xN6Yo3t35UZrP8nlcs/63GtnEmnUwVZHBYfPM6bs5M5AeBfAQ/9mIqu7vnEst+5O2wp\n",
1004 "PjzdItjwGCZ2ApHVjGnYYFomlA9nm6AXnxNIWHIsDgxCk3zx+6QbXipu/CWLG1Wf0WIbt4C0JPVl\n",
1005 "3TEb0QAAAMlBmnNJ4Q8mUwIr/wAVV64OfTKmlktYOqZHH1W1DhPy/X/6sD4T6hRdzfOgNtTOX2Ic\n",
1006 "kRJHshfBQVkJIzns079io6kpJFCcS3VD4zrWCn/dNaGV0kWTpFBRuusfn8F0C0R/EhsQeyTsdZft\n",
1007 "EkLGb5tq+nrir3vfmeb7rjmWJRXkIrTEKu8pIuAd+4FBGp8ARgGe80Jqpp//s1433HqBFqXsIFJT\n",
1008 "mU8j/toF9HyueI1Ea4uvsQ6NANGcYCbOAKCmbNiwABMCFaiUTMAAAAPSbW9vdgAAAGxtdmhkAAAA\n",
1009 "AHwlsIB8JbCAAAAD6AAAAyAAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAA\n",
1010 "AAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAv10cmFrAAAAXHRraGQA\n",
1011 "AAAPfCWwgHwlsIAAAAABAAAAAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAB\n",
1012 "AAAAAAAAAAAAAAAAAABAAAAAAY4AAAGGAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAMgAAAA\n",
1013 "AgABAAAAAAJ1bWRpYQAAACBtZGhkAAAAAHwlsIB8JbCAAAAAGQAAABRVxAAAAAAALWhkbHIAAAAA\n",
1014 "AAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAACIG1pbmYAAAAUdm1oZAAAAAEAAAAA\n",
1015 "AAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAeBzdGJsAAAAtHN0c2QA\n",
1016 "AAAAAAAAAQAAAKRhdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAY4BhgBIAAAASAAAAAAAAAAB\n",
1017 "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGP//AAAAMmF2Y0MBZAAV/+EAGWdkABWs\n",
1018 "2UGQz6mhAAADAAEAAAMAMg8WLZYBAAZo6+PLIsAAAAAcdXVpZGtoQPJfJE/FujmlG88DI/MAAAAA\n",
1019 "AAAAGHN0dHMAAAAAAAAAAQAAABQAAAABAAAAFHN0c3MAAAAAAAAAAQAAAAEAAAAYY3R0cwAAAAAA\n",
1020 "AAABAAAAFAAAAAIAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAEAAAABAAAAZHN0c3oAAAAAAAAAAAAA\n",
1021 "ABQAAA05AAACqQAAAl8AAAITAAACiwAAAh8AAAIvAAABiAAAAVsAAAE5AAABWwAAAUQAAAFmAAAA\n",
1022 "/QAAAUEAAAEaAAABKQAAAQAAAADlAAAAzQAAAGBzdGNvAAAAAAAAABQAAAAsAAANZQAAEA4AABJt\n",
1023 "AAAUgAAAFwsAABkqAAAbWQAAHOEAAB48AAAfdQAAINAAACIUAAAjegAAJHcAACW4AAAm0gAAJ/sA\n",
1024 "ACj7AAAp4AAAAGF1ZHRhAAAAWW1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAA\n",
1025 "AAAAAAAALGlsc3QAAAAkqXRvbwAAABxkYXRhAAAAAQAAAABMYXZmNTIuMTExLjA=\n",
1026 "\">"
1027 ],
1028 "output_type": "pyout",
1029 "prompt_number": 8,
1030 "text": [
1031 "<IPython.core.display.HTML at 0x10fba28d0>"
1032 ]
1033 }
1034 ],
1035 "prompt_number": 8
1036 },
1037 {
1038 "cell_type": "markdown",
1039 "metadata": {
1040 "slideshow": {
1041 "slide_type": "slide"
1042 }
1043 },
1044 "source": [
1045 "## Local Files\n",
1046 "\n",
1047 "The above examples embed images and video from the notebook filesystem in the output\n",
1048 "areas of code cells. It is also possible to request these files directly in markdown cells\n",
1049 "if they reside in the notebook directory via relative urls prefixed with `files/`:\n",
1050 "\n",
1051 " files/[subdirectory/]<filename>"
1052 ]
1053 },
1054 {
1055 "cell_type": "markdown",
1056 "metadata": {
1057 "slideshow": {
1058 "slide_type": "skip"
1059 }
1060 },
1061 "source": [
1062 "For example, in the example notebook folder, we have the Python logo, addressed as:\n",
1063 "\n",
1064 " <img src=\"files/python-logo.svg\" />\n",
1065 "\n",
1066 "<img src=\"/files/python-logo.svg\" />\n",
1067 "\n",
1068 "and a video with the HTML5 video tag:\n",
1069 "\n",
1070 " <video controls src=\"files/animation.m4v\" />\n",
1071 "\n",
1072 "<video controls src=\"/files/animation.m4v\" />\n",
1073 "\n",
1074 "These do not embed the data into the notebook file,\n",
1075 "and require that the files exist when you are viewing the notebook.\n",
1076 "\n",
1077 "### Security of local files\n",
1078 "\n",
1079 "Note that this means that the IPython notebook server also acts as a generic file server\n",
1080 "for files inside the same tree as your notebooks. Access is not granted outside the\n",
1081 "notebook folder so you have strict control over what files are visible, but for this\n",
1082 "reason it is highly recommended that you do not run the notebook server with a notebook\n",
1083 "directory at a high level in your filesystem (e.g. your home directory).\n",
1084 "\n",
1085 "When you run the notebook in a password-protected manner, local file access is restricted\n",
1086 "to authenticated users unless read-only views are active."
1087 ]
1088 },
1089 {
1090 "cell_type": "markdown",
1091 "metadata": {
1092 "slideshow": {
1093 "slide_type": "slide"
1094 }
1095 },
1096 "source": [
1097 "## Linking to files and directories for viewing in the browser\n",
1098 "\n",
1099 "It is also possible to link directly to files or directories so they can be opened in the browser. This is especially convenient if you're interacting with a tool within IPython that generates HTML pages, and you'd like to easily be able to open those in a new browser window. Alternatively, if your IPython notebook server is on a remote system, creating links provides an easy way to download any files that get generated.\n",
1100 "\n",
1101 "As we saw above, there are a bunch of `.ipynb` files in our current directory."
1102 ]
1103 },
1104 {
1105 "cell_type": "code",
1106 "collapsed": false,
1107 "input": [
1108 "ls"
1109 ],
1110 "language": "python",
1111 "metadata": {},
1112 "outputs": [
1113 {
1114 "output_type": "stream",
1115 "stream": "stdout",
1116 "text": [
1117 "00_notebook_tour.ipynb formatting.ipynb\r\n",
1118 "01_notebook_introduction.ipynb octavemagic_extension.ipynb\r\n",
1119 "Animations_and_Progress.ipynb publish_data.ipynb\r\n",
1120 "Capturing Output.ipynb python-logo.svg\r\n",
1121 "Script Magics.ipynb rmagic_extension.ipynb\r\n",
1122 "animation.m4v sympy.ipynb\r\n",
1123 "cython_extension.ipynb sympy_quantum_computing.ipynb\r\n",
1124 "display_protocol.ipynb trapezoid_rule.ipynb\r\n"
1125 ]
1126 }
1127 ],
1128 "prompt_number": 1
1129 },
1130 {
1131 "cell_type": "markdown",
1132 "metadata": {
1133 "slideshow": {
1134 "slide_type": "subslide"
1135 }
1136 },
1137 "source": [
1138 "If we want to create a link to one of them, we can call use the `FileLink` object."
1139 ]
1140 },
1141 {
1142 "cell_type": "code",
1143 "collapsed": false,
1144 "input": [
1145 "from IPython.display import FileLink\n",
1146 "FileLink('00_notebook_tour.ipynb')"
1147 ],
1148 "language": "python",
1149 "metadata": {},
1150 "outputs": [
1151 {
1152 "html": [
1153 "<a href='files/00_notebook_tour.ipynb' target='_blank'>00_notebook_tour.ipynb</a><br>"
1154 ],
1155 "output_type": "pyout",
1156 "prompt_number": 2,
1157 "text": [
1158 "<IPython.lib.display.FileLink at 0x10f7ea3d0>"
1159 ]
1160 }
1161 ],
1162 "prompt_number": 2
1163 },
1164 {
1165 "cell_type": "markdown",
1166 "metadata": {
1167 "slideshow": {
1168 "slide_type": "subslide"
1169 }
1170 },
1171 "source": [
1172 "Alternatively, if we want to link to all of them, we can use the `FileLinks` object, passing `'.'` to indicate that we want links generated for the current working directory. Note that if there were other directories under the current directory, `FileLinks` would work in a recursive manner creating links to files in all sub-directories as well."
1173 ]
1174 },
1175 {
1176 "cell_type": "code",
1177 "collapsed": false,
1178 "input": [
1179 "from IPython.display import FileLinks\n",
1180 "FileLinks('.')"
1181 ],
1182 "language": "python",
1183 "metadata": {},
1184 "outputs": [
1185 {
1186 "html": [
1187 "<a href='files/./00_notebook_tour.ipynb' target='_blank'>00_notebook_tour.ipynb</a><br>\n",
1188 "<a href='files/./01_notebook_introduction.ipynb' target='_blank'>01_notebook_introduction.ipynb</a><br>\n",
1189 "<a href='files/./animation.m4v' target='_blank'>animation.m4v</a><br>\n",
1190 "<a href='files/./Animations_and_Progress.ipynb' target='_blank'>Animations_and_Progress.ipynb</a><br>\n",
1191 "<a href='files/./Capturing Output.ipynb' target='_blank'>Capturing Output.ipynb</a><br>\n",
1192 "<a href='files/./cython_extension.ipynb' target='_blank'>cython_extension.ipynb</a><br>\n",
1193 "<a href='files/./display_protocol.ipynb' target='_blank'>display_protocol.ipynb</a><br>\n",
1194 "<a href='files/./formatting.ipynb' target='_blank'>formatting.ipynb</a><br>\n",
1195 "<a href='files/./octavemagic_extension.ipynb' target='_blank'>octavemagic_extension.ipynb</a><br>\n",
1196 "<a href='files/./publish_data.ipynb' target='_blank'>publish_data.ipynb</a><br>\n",
1197 "<a href='files/./python-logo.svg' target='_blank'>python-logo.svg</a><br>\n",
1198 "<a href='files/./rmagic_extension.ipynb' target='_blank'>rmagic_extension.ipynb</a><br>\n",
1199 "<a href='files/./Script Magics.ipynb' target='_blank'>Script Magics.ipynb</a><br>\n",
1200 "<a href='files/./sympy.ipynb' target='_blank'>sympy.ipynb</a><br>\n",
1201 "<a href='files/./sympy_quantum_computing.ipynb' target='_blank'>sympy_quantum_computing.ipynb</a><br>\n",
1202 "<a href='files/./trapezoid_rule.ipynb' target='_blank'>trapezoid_rule.ipynb</a><br>"
1203 ],
1204 "output_type": "pyout",
1205 "prompt_number": 7,
1206 "text": [
1207 "<IPython.lib.display.FileLinks at 0x10f7eaad0>"
1208 ]
1209 }
1210 ],
1211 "prompt_number": 7
1212 },
1213 {
1214 "cell_type": "markdown",
1215 "metadata": {
1216 "slideshow": {
1217 "slide_type": "slide"
1218 }
1219 },
1220 "source": [
1221 "### External sites\n",
1222 "\n",
1223 "You can even embed an entire page from another site in an iframe; for example this is today's Wikipedia\n",
1224 "page for mobile users:"
1225 ]
1226 },
1227 {
1228 "cell_type": "code",
1229 "collapsed": false,
1230 "input": [
1231 "HTML('<iframe src=http://en.mobile.wikipedia.org/?useformat=mobile width=700 height=350></iframe>')"
1232 ],
1233 "language": "python",
1234 "metadata": {},
1235 "outputs": [
1236 {
1237 "html": [
1238 "<iframe src=http://en.mobile.wikipedia.org/?useformat=mobile width=700 height=350></iframe>"
1239 ],
1240 "output_type": "pyout",
1241 "prompt_number": 9,
1242 "text": [
1243 "<IPython.core.display.HTML at 0x1094900d0>"
1244 ]
1245 }
1246 ],
1247 "prompt_number": 9
1248 },
1249 {
1250 "cell_type": "markdown",
1251 "metadata": {
1252 "slideshow": {
1253 "slide_type": "slide"
1254 }
1255 },
1256 "source": [
1257 "### Mathematics\n",
1258 "\n",
1259 "And we also support the display of mathematical expressions typeset in LaTeX, which is rendered\n",
1260 "in the browser thanks to the [MathJax library](http://mathjax.org). \n",
1261 "\n",
1262 "Note that this is *different* from the above examples. Above we were typing mathematical expressions\n",
1263 "in Markdown cells (along with normal text) and letting the browser render them; now we are displaying\n",
1264 "the output of a Python computation as a LaTeX expression wrapped by the `Math()` object so the browser\n",
1265 "renders it. The `Math` object will add the needed LaTeX delimiters (`$$`) if they are not provided:"
1266 ]
1267 },
1268 {
1269 "cell_type": "code",
1270 "collapsed": false,
1271 "input": [
1272 "from IPython.display import Math\n",
1273 "Math(r'F(k) = \\int_{-\\infty}^{\\infty} f(x) e^{2\\pi i k} dx')"
1274 ],
1275 "language": "python",
1276 "metadata": {},
1277 "outputs": [
1278 {
1279 "latex": [
1280 "$$F(k) = \\int_{-\\infty}^{\\infty} f(x) e^{2\\pi i k} dx$$"
1281 ],
1282 "output_type": "pyout",
1283 "prompt_number": 10,
1284 "text": [
1285 "<IPython.core.display.Math at 0x10fba26d0>"
1286 ]
1287 }
1288 ],
1289 "prompt_number": 10
1290 },
1291 {
1292 "cell_type": "markdown",
1293 "metadata": {
1294 "slideshow": {
1295 "slide_type": "subslide"
1296 }
1297 },
1298 "source": [
1299 "With the `Latex` class, you have to include the delimiters yourself. This allows you to use other LaTeX modes such as `eqnarray`:"
1300 ]
1301 },
1302 {
1303 "cell_type": "code",
1304 "collapsed": false,
1305 "input": [
1306 "from IPython.display import Latex\n",
1307 "Latex(r\"\"\"\\begin{eqnarray}\n",
1308 "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n",
1309 "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n",
1310 "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n",
1311 "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 \n",
1312 "\\end{eqnarray}\"\"\")"
1313 ],
1314 "language": "python",
1315 "metadata": {},
1316 "outputs": [
1317 {
1318 "latex": [
1319 "\\begin{eqnarray}\n",
1320 "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n",
1321 "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n",
1322 "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n",
1323 "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 \n",
1324 "\\end{eqnarray}"
1325 ],
1326 "output_type": "pyout",
1327 "prompt_number": 11,
1328 "text": [
1329 "<IPython.core.display.Latex at 0x10fba2c10>"
1330 ]
1331 }
1332 ],
1333 "prompt_number": 11
1334 },
1335 {
1336 "cell_type": "markdown",
1337 "metadata": {
1338 "slideshow": {
1339 "slide_type": "subslide"
1340 }
1341 },
1342 "source": [
1343 "Or you can enter latex directly with the `%%latex` cell magic:"
1344 ]
1345 },
1346 {
1347 "cell_type": "code",
1348 "collapsed": false,
1349 "input": [
1350 "%%latex\n",
1351 "\\begin{aligned}\n",
1352 "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n",
1353 "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n",
1354 "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n",
1355 "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0\n",
1356 "\\end{aligned}"
1357 ],
1358 "language": "python",
1359 "metadata": {},
1360 "outputs": [
1361 {
1362 "latex": [
1363 "\\begin{aligned}\n",
1364 "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n",
1365 "\\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n",
1366 "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n",
1367 "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0\n",
1368 "\\end{aligned}"
1369 ],
1370 "output_type": "display_data",
1371 "text": [
1372 "<IPython.core.display.Latex at 0x10a617c90>"
1373 ]
1374 }
1375 ],
1376 "prompt_number": 12
1377 },
1378 {
1379 "cell_type": "markdown",
1380 "metadata": {
1381 "slideshow": {
1382 "slide_type": "skip"
1383 }
1384 },
1385 "source": [
1386 "There is also a `%%javascript` cell magic for running javascript directly,\n",
1387 "and `%%svg` for manually entering SVG content."
1388 ]
1389 },
1390 {
1391 "cell_type": "markdown",
1392 "metadata": {
1393 "slideshow": {
1394 "slide_type": "slide"
1395 }
1396 },
1397 "source": [
1398 "# Loading external codes\n",
1399 "* Drag and drop a ``.py`` in the dashboard\n",
1400 "* Use ``%load`` with any local or remote url: [the Matplotlib Gallery!](http://matplotlib.sourceforge.net/gallery.html)\n",
1401 "\n",
1402 "In this notebook we've kept the output saved so you can see the result, but you should run the next\n",
1403 "cell yourself (with an active internet connection)."
1404 ]
1405 },
1406 {
1407 "cell_type": "markdown",
1408 "metadata": {
1409 "slideshow": {
1410 "slide_type": "subslide"
1411 }
1412 },
1413 "source": [
1414 "Let's make sure we have pylab again, in case we have restarted the kernel due to the crash demo above"
1415 ]
1416 },
1417 {
1418 "cell_type": "code",
1419 "collapsed": false,
1420 "input": [
1421 "%pylab inline"
1422 ],
1423 "language": "python",
1424 "metadata": {
1425 "slideshow": {
1426 "slide_type": "fragment"
1427 }
1428 },
1429 "outputs": [
1430 {
1431 "output_type": "stream",
1432 "stream": "stdout",
1433 "text": [
1434 "\n",
1435 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
1436 "For more information, type 'help(pylab)'.\n"
1437 ]
1438 }
1439 ],
1440 "prompt_number": 12
1441 },
1442 {
1443 "cell_type": "code",
1444 "collapsed": false,
1445 "input": [
1446 "%load http://matplotlib.sourceforge.net/mpl_examples/pylab_examples/integral_demo.py"
1447 ],
1448 "language": "python",
1449 "metadata": {
1450 "slideshow": {
1451 "slide_type": "fragment"
1452 }
1453 },
1454 "outputs": [],
1455 "prompt_number": 15
1456 },
1457 {
1458 "cell_type": "code",
1459 "collapsed": false,
1460 "input": [
1461 "#!/usr/bin/env python\n",
1462 "\n",
1463 "# implement the example graphs/integral from pyx\n",
1464 "from pylab import *\n",
1465 "from matplotlib.patches import Polygon\n",
1466 "\n",
1467 "def func(x):\n",
1468 " return (x-3)*(x-5)*(x-7)+85\n",
1469 "\n",
1470 "ax = subplot(111)\n",
1471 "\n",
1472 "a, b = 2, 9 # integral area\n",
1473 "x = arange(0, 10, 0.01)\n",
1474 "y = func(x)\n",
1475 "plot(x, y, linewidth=1)\n",
1476 "\n",
1477 "# make the shaded region\n",
1478 "ix = arange(a, b, 0.01)\n",
1479 "iy = func(ix)\n",
1480 "verts = [(a,0)] + zip(ix,iy) + [(b,0)]\n",
1481 "poly = Polygon(verts, facecolor='0.8', edgecolor='k')\n",
1482 "ax.add_patch(poly)\n",
1483 "\n",
1484 "text(0.5 * (a + b), 30,\n",
1485 " r\"$\\int_a^b f(x)\\mathrm{d}x$\", horizontalalignment='center',\n",
1486 " fontsize=20)\n",
1487 "\n",
1488 "axis([0,10, 0, 180])\n",
1489 "figtext(0.9, 0.05, 'x')\n",
1490 "figtext(0.1, 0.9, 'y')\n",
1491 "ax.set_xticks((a,b))\n",
1492 "ax.set_xticklabels(('a','b'))\n",
1493 "ax.set_yticks([])\n",
1494 "show()\n"
1495 ],
1496 "language": "python",
1497 "metadata": {
1498 "slideshow": {
1499 "slide_type": "skip"
1500 }
1501 },
1502 "outputs": [
1503 {
1504 "output_type": "display_data",
1505 "png": "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\ng23UdEXM4ccffzS6hFo5pem+/roj5XrwGEVEmgFPnuWe0uQLaVu3Qno6/PvfzijHM/n4+LBv3z6e\nfvppo0vJDkGKAAAB1ElEQVQRkVrYbDajS6iTxV7L1NkMf2qIiHii87XWWpOup18FFBExGx28KCLi\nRmq6IiJupKZbh9tuu43evXuTnJzMhx9+aHQ5IlKDvLw8uprkziyXP4Ld7D7++GOioqIoLy+nb9++\n3H777bRs2dLoskTEpJR06/D222/TvXt3BgwYQEFBATk5OUaXJCI1qK6uZtSoUXTp0oU777yT8vJy\no0uqkZpuLX788UeWLFlCWloaGzdupHv37lRWVhpdlojUICsri7Fjx5KZmUlERATvvvuu0SXVSE23\nFsXFxURFRREUFMS2bdtIS0szuiQROY/27dszYMAAAEaNGsXy5csNrqhmarq1uP7666murqZLly48\n++yzp/+DiojnOfNmLk8+3lEX0moREBDAwoULjS5DROohPz+ftLQ0+vfvz7x587jiiiuMLqlGSroi\nYnoWi4XExETeeecdunTpwrFjx3j00UeNLqtGtZ69ICIizqWkKyLiRmq6IiJupKYrIuJka9asoVu3\nblRWVlJaWkpycjKZmZmAZroiIi4xadIkKioqKC8vp3379kycOBFQ0xURcYkTJ07Qu3dvgoOD+eWX\nX07vG9Z4QUTEBQ4dOkRpaSklJSVnnQPx/xV9BfkfDyZLAAAAAElFTkSuQmCC\n"
1506 }
1507 ],
1508 "prompt_number": 16
1509 }
1510 ],
1511 "metadata": {}
1512 }
1513 ]
1514 } No newline at end of file
This diff has been collapsed as it changes many lines, (876 lines changed) Show them Hide them
@@ -0,0 +1,876 b''
1 {%- extends 'basichtml.tpl' -%}
2
3
4 {% block any_cell -%}
5
6 {% if cell.metadata.slideshow.close_fragment %}
7 </div>
8 {% endif %}
9 {% if cell.metadata.slideshow.close_subsection %}
10 </section>
11 {% endif %}
12 {% if cell.metadata.slideshow.close_section %}
13 </section>
14 {% endif %}
15
16 {% if cell.metadata.slideshow.open_section %}
17 <section>
18 {%- endif %}
19 {% if cell.metadata.slideshow.open_subsection %}
20 <section>
21 {%- endif %}
22 {% if cell.metadata.slideshow.open_fragment %}
23 <div class='fragment'>
24 {% endif %}
25 {% if cell.metadata.slideshow.slide_type in ['notes'] %}
26 <aside class="notes">
27 {{ super() }}
28 </aside>
29 {% elif cell.metadata.slideshow.slide_tyle not in ['skip'] %}
30 {{ super() }}
31 {% endif %}
32
33 {% endblock %}
34
35
36 {% block body %}
37 <body>
38 <div class="reveal"><div class="slides">
39 {{ super() }}
40 </section>
41 </section>
42 </div></div>
43
44 <script src="reveal/lib/js/head.min.js"></script>
45
46 <script src="reveal/js/reveal.min.js"></script>
47
48 <script>
49
50 // Full list of configuration options available here: https://github.com/hakimel/reveal.js#configuration
51 Reveal.initialize({
52 controls: true,
53 progress: true,
54 history: true,
55
56 theme: Reveal.getQueryHash().theme, // available themes are in /css/theme
57 transition: Reveal.getQueryHash().transition || 'linear', // default/cube/page/concave/zoom/linear/none
58
59 // Optional libraries used to extend on reveal.js
60 dependencies: [
61 { src: 'reveal/lib/js/classList.js', condition: function() { return !document.body.classList; } },
62 { src: 'reveal/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
63 { src: 'reveal/plugin/zoom-js/zoom.js', async: true, condition: function() { return !!document.body.classList; } },
64 { src: 'notes/notes.js', async: true, condition: function() { return !!document.body.classList; } },
65 { src: 'https://c328740.ssl.cf1.rackcdn.com/mathjax/latest/MathJax.js?config=TeX-AMS_HTML', async: true },
66 { src: 'js/revealmathjax.js', async: true}
67 ]
68 });
69 </script>
70
71 <script>
72 Reveal.addEventListener( 'slidechanged', function( event ) {
73 MathJax.Hub.Rerender(event.currentSlide);
74 });
75 </script>
76 </body>
77 </html>{% endblock body %}
78
79
80
81
82 {% block header %}<!DOCTYPE html>
83 <html>
84 <head>
85
86 <meta charset="utf-8" />
87 <meta http-equiv="X-UA-Compatible" content="chrome=1">
88
89 <meta name="apple-mobile-web-app-capable" content="yes" />
90 <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
91
92 <link rel="stylesheet" href="reveal/css/reveal.css">
93 <link rel="stylesheet" href="reveal/css/theme/simple.css" id="theme">
94
95 <!-- For syntax highlighting -->
96 <link rel="stylesheet" href="reveal/lib/css/zenburn.css">
97
98 <!-- If the query includes 'print-pdf', use the PDF print sheet -->
99 <script>
100 document.write( '<link rel="stylesheet" href="reveal/css/print/' + ( window.location.search.match( /print-pdf/gi ) ? 'pdf' : 'paper' ) + '.css" type="text/css" media="print">' );
101 </script>
102
103 <!--[if lt IE 9]>
104 <script src="reveal/lib/js/html5shiv.js"></script>
105 <![endif]-->
106
107 <style type="text/css">
108 /**
109 * HTML5 ✰ Boilerplate
110 *
111 * style.css contains a reset, font normalization and some base styles.
112 *
113 * Credit is left where credit is due.
114 * Much inspiration was taken from these projects:
115 * - yui.yahooapis.com/2.8.1/build/base/base.css
116 * - camendesign.com/design/
117 * - praegnanz.de/weblog/htmlcssjs-kickstart
118 */
119
120
121 /**
122 * html5doctor.com Reset Stylesheet (Eric Meyer's Reset Reloaded + HTML5 baseline)
123 * v1.6.1 2010-09-17 | Authors: Eric Meyer & Richard Clark
124 * html5doctor.com/html-5-reset-stylesheet/
125 */
126
127 html, body, div, span, object, iframe,
128 h1, h2, h3, h4, h5, h6, p, blockquote, pre,
129 abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp,
130 small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li,
131 fieldset, form, label, legend,
132 table, caption, tbody, tfoot, thead, tr, th, td,
133 article, aside, canvas, details, figcaption, figure,
134 footer, header, hgroup, menu, nav, section, summary,
135 time, mark, audio, video {
136 margin: 0;
137 padding: 0;
138 border: 0;
139 font-size: 100%;
140 font: inherit;
141 vertical-align: baseline;
142 }
143
144 sup { vertical-align: super; }
145 sub { vertical-align: sub; }
146
147 article, aside, details, figcaption, figure,
148 footer, header, hgroup, menu, nav, section {
149 display: block;
150 }
151
152 blockquote, q { quotes: none; }
153
154 blockquote:before, blockquote:after,
155 q:before, q:after { content: ""; content: none; }
156
157 ins { background-color: #ff9; color: #000; text-decoration: none; }
158
159 mark { background-color: #ff9; color: #000; font-style: italic; font-weight: bold; }
160
161 del { text-decoration: line-through; }
162
163 abbr[title], dfn[title] { border-bottom: 1px dotted; cursor: help; }
164
165 table { border-collapse: collapse; border-spacing: 0; }
166
167 hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
168
169 input, select { vertical-align: middle; }
170
171
172 /**
173 * Font normalization inspired by YUI Library's fonts.css: developer.yahoo.com/yui/
174 */
175
176 body { font:13px/1.231 sans-serif; *font-size:small; } /* Hack retained to preserve specificity */
177 select, input, textarea, button { font:99% sans-serif; }
178
179 /* Normalize monospace sizing:
180 en.wikipedia.org/wiki/MediaWiki_talk:Common.css/Archive_11#Teletype_style_fix_for_Chrome */
181 pre, code, kbd, samp { font-family: monospace, sans-serif; }
182
183 em,i { font-style: italic; }
184 b,strong { font-weight: bold; }
185
186 </style>
187 <style type="text/css">
188
189 /* Flexible box model classes */
190 /* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
191
192 .hbox {
193 display: -webkit-box;
194 -webkit-box-orient: horizontal;
195 -webkit-box-align: stretch;
196
197 display: -moz-box;
198 -moz-box-orient: horizontal;
199 -moz-box-align: stretch;
200
201 display: box;
202 box-orient: horizontal;
203 box-align: stretch;
204 }
205
206 .hbox > * {
207 -webkit-box-flex: 0;
208 -moz-box-flex: 0;
209 box-flex: 0;
210 }
211
212 .vbox {
213 display: -webkit-box;
214 -webkit-box-orient: vertical;
215 -webkit-box-align: stretch;
216
217 display: -moz-box;
218 -moz-box-orient: vertical;
219 -moz-box-align: stretch;
220
221 display: box;
222 box-orient: vertical;
223 box-align: stretch;
224 }
225
226 .vbox > * {
227 -webkit-box-flex: 0;
228 -moz-box-flex: 0;
229 box-flex: 0;
230 }
231
232 .reverse {
233 -webkit-box-direction: reverse;
234 -moz-box-direction: reverse;
235 box-direction: reverse;
236 }
237
238 .box-flex0 {
239 -webkit-box-flex: 0;
240 -moz-box-flex: 0;
241 box-flex: 0;
242 }
243
244 .box-flex1, .box-flex {
245 -webkit-box-flex: 1;
246 -moz-box-flex: 1;
247 box-flex: 1;
248 }
249
250 .box-flex2 {
251 -webkit-box-flex: 2;
252 -moz-box-flex: 2;
253 box-flex: 2;
254 }
255
256 .box-group1 {
257 -webkit-box-flex-group: 1;
258 -moz-box-flex-group: 1;
259 box-flex-group: 1;
260 }
261
262 .box-group2 {
263 -webkit-box-flex-group: 2;
264 -moz-box-flex-group: 2;
265 box-flex-group: 2;
266 }
267
268 .start {
269 -webkit-box-pack: start;
270 -moz-box-pack: start;
271 box-pack: start;
272 }
273
274 .end {
275 -webkit-box-pack: end;
276 -moz-box-pack: end;
277 box-pack: end;
278 }
279
280 .center {
281 -webkit-box-pack: center;
282 -moz-box-pack: center;
283 box-pack: center;
284 }
285
286 </style>
287 <style type="text/css">
288 /**
289 * Primary styles
290 *
291 * Author: IPython Development Team
292 */
293
294
295 body {
296 overflow: hidden;
297 }
298
299 blockquote {
300 border-left: 4px solid #DDD;
301 padding: 0 15px;
302 color: #777;
303 }
304
305 span#save_widget {
306 padding: 5px;
307 margin: 0px 0px 0px 300px;
308 display:inline-block;
309 }
310
311 span#notebook_name {
312 height: 1em;
313 line-height: 1em;
314 padding: 3px;
315 border: none;
316 font-size: 146.5%;
317 }
318
319 .ui-menubar-item .ui-button .ui-button-text {
320 padding: 0.4em 1.0em;
321 font-size: 100%;
322 }
323
324 .ui-menu {
325 -moz-box-shadow: 0px 6px 10px -1px #adadad;
326 -webkit-box-shadow: 0px 6px 10px -1px #adadad;
327 box-shadow: 0px 6px 10px -1px #adadad;
328 }
329
330 .ui-menu .ui-menu-item a {
331 border: 1px solid transparent;
332 padding: 2px 1.6em;
333 }
334
335 .ui-menu .ui-menu-item a.ui-state-focus {
336 margin: 0;
337 }
338
339 .ui-menu hr {
340 margin: 0.3em 0;
341 }
342
343 #menubar_container {
344 position: relative;
345 }
346
347 #notification_area {
348 position: absolute;
349 right: 0px;
350 top: 0px;
351 height: 25px;
352 padding: 3px 0px;
353 padding-right: 3px;
354 z-index: 10;
355 }
356
357 .notification_widget{
358 float : right;
359 right: 0px;
360 top: 1px;
361 height: 25px;
362 padding: 3px 6px;
363 z-index: 10;
364 }
365
366 .toolbar {
367 padding: 3px 15px;
368 }
369
370 #maintoolbar > select, #maintoolbar label {
371 font-size: 85%;
372 margin-left:0.3em;
373 margin-right:0.3em;
374
375 }
376
377
378 div#main_app {
379 width: 100%;
380 position: relative;
381 }
382
383 span#quick_help_area {
384 position: static;
385 padding: 5px 0px;
386 margin: 0px 0px 0px 0px;
387 }
388
389 .help_string {
390 float: right;
391 width: 170px;
392 padding: 0px 5px;
393 text-align: left;
394 font-size: 85%;
395 }
396
397 .help_string_label {
398 float: right;
399 font-size: 85%;
400 }
401
402 div#notebook_panel {
403 margin: 0px 0px 0px 0px;
404 padding: 0px;
405 }
406
407 div#notebook {
408 overflow-y: scroll;
409 overflow-x: auto;
410 width: 100%;
411 /* This spaces the cell away from the edge of the notebook area */
412 padding: 5px 5px 15px 5px;
413 margin: 0px;
414 background-color: white;
415 }
416
417 div#pager_splitter {
418 height: 8px;
419 }
420
421 #pager_container {
422 position : relative;
423 }
424
425
426 div#pager {
427 padding: 15px;
428 overflow: auto;
429 display: none;
430 }
431
432 div.ui-widget-content {
433 border: 1px solid #aaa;
434 outline: none;
435 }
436
437 .cell {
438 border: 1px solid transparent;
439 }
440
441 div.cell {
442 width: 100%;
443 padding: 5px 5px 5px 0px;
444 /* This acts as a spacer between cells, that is outside the border */
445 margin: 2px 0px 2px 0px;
446 outline: none;
447 }
448
449 div.code_cell {
450 background-color: white;
451 }
452
453 /* any special styling for code cells that are currently running goes here */
454 div.code_cell.running {
455 }
456
457 div.prompt {
458 /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
459 width: 11ex;
460 /* This 0.4em is tuned to match the padding on the CodeMirror editor. */
461 padding: 0.4em;
462 margin: 0px;
463 font-family: monospace;
464 text-align:right;
465 }
466
467 div.input {
468 page-break-inside: avoid;
469 }
470
471 /* input_area and input_prompt must match in top border and margin for alignment */
472 div.input_area {
473 color: black;
474 border: 1px solid #ddd;
475 border-radius: 3px;
476 background: #f7f7f7;
477 }
478
479 div.input_prompt {
480 color: navy;
481 border-top: 1px solid transparent;
482 }
483
484 div.output_wrapper {
485 /* This is a spacer between the input and output of each cell */
486 margin-top: 5px;
487 margin-left: 5px;
488 /* FF needs explicit width to stretch */
489 width: 100%;
490 /* this position must be relative to enable descendents to be absolute within it */
491 position: relative;
492 }
493
494 /* class for the output area when it should be height-limited */
495 div.output_scroll {
496 /* ideally, this would be max-height, but FF barfs all over that */
497 height: 24em;
498 /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
499 width: 100%;
500
501 overflow: auto;
502 border-radius: 3px;
503 box-shadow: inset 0 2px 8px rgba(0, 0, 0, .8);
504 }
505
506 /* output div while it is collapsed */
507 div.output_collapsed {
508 margin-right: 5px;
509 }
510
511 div.out_prompt_overlay {
512 height: 100%;
513 padding: 0px;
514 position: absolute;
515 border-radius: 3px;
516 }
517
518 div.out_prompt_overlay:hover {
519 /* use inner shadow to get border that is computed the same on WebKit/FF */
520 box-shadow: inset 0 0 1px #000;
521 background: rgba(240, 240, 240, 0.5);
522 }
523
524 div.output_prompt {
525 color: darkred;
526 /* 5px right shift to account for margin in parent container */
527 margin: 0 5px 0 -5px;
528 }
529
530 /* This class is the outer container of all output sections. */
531 div.output_area {
532 padding: 0px;
533 page-break-inside: avoid;
534 }
535
536 /* This class is for the output subarea inside the output_area and after
537 the prompt div. */
538 div.output_subarea {
539 padding: 0.4em 0.4em 0.4em 0.4em;
540 }
541
542 /* The rest of the output_* classes are for special styling of the different
543 output types */
544
545 /* all text output has this class: */
546 div.output_text {
547 text-align: left;
548 color: black;
549 font-family: monospace;
550 }
551
552 /* stdout/stderr are 'text' as well as 'stream', but pyout/pyerr are *not* streams */
553 div.output_stream {
554 padding-top: 0.0em;
555 padding-bottom: 0.0em;
556 }
557 div.output_stdout {
558 }
559 div.output_stderr {
560 background: #fdd; /* very light red background for stderr */
561 }
562
563 div.output_latex {
564 text-align: left;
565 color: black;
566 }
567
568 div.output_html {
569 }
570
571 div.output_png {
572 }
573
574 div.output_jpeg {
575 }
576
577 div.text_cell {
578 background-color: white;
579 padding: 5px 5px 5px 5px;
580 }
581
582 div.text_cell_input {
583 color: black;
584 border: 1px solid #ddd;
585 border-radius: 3px;
586 background: #f7f7f7;
587 }
588
589 div.text_cell_render {
590 font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;
591 outline: none;
592 resize: none;
593 width: inherit;
594 border-style: none;
595 padding: 5px;
596 color: black;
597 }
598
599 /* The following gets added to the <head> if it is detected that the user has a
600 * monospace font with inconsistent normal/bold/italic height. See
601 * notebookmain.js. Such fonts will have keywords vertically offset with
602 * respect to the rest of the text. The user should select a better font.
603 * See: https://github.com/ipython/ipython/issues/1503
604 *
605 * .CodeMirror span {
606 * vertical-align: bottom;
607 * }
608 */
609
610 .CodeMirror {
611 line-height: 1.231; /* Changed from 1em to our global default */
612 }
613
614 .CodeMirror-scroll {
615 height: auto; /* Changed to auto to autogrow */
616 /* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
617 /* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
618 overflow-y: hidden;
619 overflow-x: auto; /* Changed from auto to remove scrollbar */
620 }
621
622 /* CSS font colors for translated ANSI colors. */
623
624
625 .ansiblack {color: black;}
626 .ansired {color: darkred;}
627 .ansigreen {color: darkgreen;}
628 .ansiyellow {color: brown;}
629 .ansiblue {color: darkblue;}
630 .ansipurple {color: darkviolet;}
631 .ansicyan {color: steelblue;}
632 .ansigrey {color: grey;}
633 .ansibold {font-weight: bold;}
634
635 .completions {
636 position: absolute;
637 z-index: 10;
638 overflow: hidden;
639 border: 1px solid grey;
640 }
641
642 .completions select {
643 background: white;
644 outline: none;
645 border: none;
646 padding: 0px;
647 margin: 0px;
648 overflow: auto;
649 font-family: monospace;
650 }
651
652 option.context {
653 background-color: #DEF7FF;
654 }
655 option.introspection {
656 background-color: #EBF4EB;
657 }
658
659 /*fixed part of the completion*/
660 .completions p b {
661 font-weight:bold;
662 }
663
664 .completions p {
665 background: #DDF;
666 /*outline: none;
667 padding: 0px;*/
668 border-bottom: black solid 1px;
669 padding: 1px;
670 font-family: monospace;
671 }
672
673 pre.dialog {
674 background-color: #f7f7f7;
675 border: 1px solid #ddd;
676 border-radius: 3px;
677 padding: 0.4em;
678 padding-left: 2em;
679 }
680
681 p.dialog {
682 padding : 0.2em;
683 }
684
685 .shortcut_key {
686 display: inline-block;
687 width: 15ex;
688 text-align: right;
689 font-family: monospace;
690 }
691
692 .shortcut_descr {
693 }
694
695 /* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems
696 to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do.
697 */
698 pre, code, kbd, samp { white-space: pre-wrap; }
699
700 #fonttest {
701 font-family: monospace;
702 }
703
704 </style>
705 <style type="text/css">
706 .rendered_html {color: black;}
707 .rendered_html em {font-style: italic;}
708 .rendered_html strong {font-weight: bold;}
709 .rendered_html u {text-decoration: underline;}
710 .rendered_html :link { text-decoration: underline }
711 .rendered_html :visited { text-decoration: underline }
712 .rendered_html h1 {font-size: 197%; margin: .65em 0; font-weight: bold;}
713 .rendered_html h2 {font-size: 153.9%; margin: .75em 0; font-weight: bold;}
714 .rendered_html h3 {font-size: 123.1%; margin: .85em 0; font-weight: bold;}
715 .rendered_html h4 {font-size: 100% margin: 0.95em 0; font-weight: bold;}
716 .rendered_html h5 {font-size: 85%; margin: 1.5em 0; font-weight: bold;}
717 .rendered_html h6 {font-size: 77%; margin: 1.65em 0; font-weight: bold;}
718 .rendered_html ul {list-style:disc; margin: 1em 2em;}
719 .rendered_html ul ul {list-style:square; margin: 0em 2em;}
720 .rendered_html ul ul ul {list-style:circle; margin-left: 0em 2em;}
721 .rendered_html ol {list-style:upper-roman; margin: 1em 2em;}
722 .rendered_html ol ol {list-style:upper-alpha; margin: 0em 2em;}
723 .rendered_html ol ol ol {list-style:decimal; margin: 0em 2em;}
724 .rendered_html ol ol ol ol {list-style:lower-alpha; margin 0em 2em;}
725 .rendered_html ol ol ol ol ol {list-style:lower-roman; 0em 2em;}
726
727 .rendered_html hr {
728 color: black;
729 background-color: black;
730 }
731
732 .rendered_html pre {
733 margin: 1em 2em;
734 }
735
736 .rendered_html blockquote {
737 margin: 1em 2em;
738 }
739
740 .rendered_html table {
741 border: 1px solid black;
742 border-collapse: collapse;
743 margin: 1em 2em;
744 }
745
746 .rendered_html td {
747 border: 1px solid black;
748 text-align: left;
749 vertical-align: middle;
750 padding: 4px;
751 }
752
753 .rendered_html th {
754 border: 1px solid black;
755 text-align: left;
756 vertical-align: middle;
757 padding: 4px;
758 font-weight: bold;
759 }
760
761 .rendered_html tr {
762 border: 1px solid black;
763 }
764
765 .rendered_html p + p {
766 margin-top: 1em;
767 }
768
769
770 </style>
771 <style type="text/css">
772 /* Overrides of notebook CSS for static HTML export
773
774 */
775
776 .reveal {
777 font-size: 20px;
778 }
779 .reveal pre {
780 width: 100%;
781 padding: 0.2em;
782 margin: 0px auto;
783 font-family: monospace, sans-serif;
784 font-size: 60%;
785 box-shadow: 0px 0px 0px rgba(0, 0, 0, 0);
786 }
787 .reveal section img {
788 border: 0px solid black;
789 box-shadow: 0 0 10px rgba(0, 0, 0, 0);
790 }
791 div.input_area {
792 padding: 0.2em;
793 }
794 div.code_cell {
795 background-color: transparent;
796 }
797 div.prompt {
798 width: 11ex;
799 padding: 0.0em;
800 margin: 0px;
801 font-family: monospace;
802 font-size: 60%;
803 text-align: center;
804 }
805 div.output_prompt {
806 /* 5px right shift to account for margin in parent container */
807 margin: 5px 5px 0 -5px;
808 }
809
810 </style>
811 <meta charset="UTF-8">
812 <style type="text/css">
813 .highlight .hll { background-color: #ffffcc }
814 .highlight { background: #f8f8f8; }
815 .highlight .c { color: #408080; font-style: italic } /* Comment */
816 .highlight .err { border: 1px solid #FF0000 } /* Error */
817 .highlight .k { color: #008000; font-weight: bold } /* Keyword */
818 .highlight .o { color: #666666 } /* Operator */
819 .highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
820 .highlight .cp { color: #BC7A00 } /* Comment.Preproc */
821 .highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
822 .highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
823 .highlight .gd { color: #A00000 } /* Generic.Deleted */
824 .highlight .ge { font-style: italic } /* Generic.Emph */
825 .highlight .gr { color: #FF0000 } /* Generic.Error */
826 .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
827 .highlight .gi { color: #00A000 } /* Generic.Inserted */
828 .highlight .go { color: #808080 } /* Generic.Output */
829 .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
830 .highlight .gs { font-weight: bold } /* Generic.Strong */
831 .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
832 .highlight .gt { color: #0040D0 } /* Generic.Traceback */
833 .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
834 .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
835 .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
836 .highlight .kp { color: #008000 } /* Keyword.Pseudo */
837 .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
838 .highlight .kt { color: #B00040 } /* Keyword.Type */
839 .highlight .m { color: #666666 } /* Literal.Number */
840 .highlight .s { color: #BA2121 } /* Literal.String */
841 .highlight .na { color: #7D9029 } /* Name.Attribute */
842 .highlight .nb { color: #008000 } /* Name.Builtin */
843 .highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
844 .highlight .no { color: #880000 } /* Name.Constant */
845 .highlight .nd { color: #AA22FF } /* Name.Decorator */
846 .highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
847 .highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
848 .highlight .nf { color: #0000FF } /* Name.Function */
849 .highlight .nl { color: #A0A000 } /* Name.Label */
850 .highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
851 .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
852 .highlight .nv { color: #19177C } /* Name.Variable */
853 .highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
854 .highlight .w { color: #bbbbbb } /* Text.Whitespace */
855 .highlight .mf { color: #666666 } /* Literal.Number.Float */
856 .highlight .mh { color: #666666 } /* Literal.Number.Hex */
857 .highlight .mi { color: #666666 } /* Literal.Number.Integer */
858 .highlight .mo { color: #666666 } /* Literal.Number.Oct */
859 .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
860 .highlight .sc { color: #BA2121 } /* Literal.String.Char */
861 .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
862 .highlight .s2 { color: #BA2121 } /* Literal.String.Double */
863 .highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
864 .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
865 .highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
866 .highlight .sx { color: #008000 } /* Literal.String.Other */
867 .highlight .sr { color: #BB6688 } /* Literal.String.Regex */
868 .highlight .s1 { color: #BA2121 } /* Literal.String.Single */
869 .highlight .ss { color: #19177C } /* Literal.String.Symbol */
870 .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
871 .highlight .vc { color: #19177C } /* Name.Variable.Class */
872 .highlight .vg { color: #19177C } /* Name.Variable.Global */
873 .highlight .vi { color: #19177C } /* Name.Variable.Instance */
874 .highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
875 </style>
876 </head>{% endblock %}
@@ -1,241 +1,242 b''
1 """Base classes for the notebook conversion pipeline.
1 """Base classes for the notebook conversion pipeline.
2
2
3 This module defines Converter, from which all objects designed to implement
3 This module defines Converter, from which all objects designed to implement
4 a conversion of IPython notebooks to some other format should inherit.
4 a conversion of IPython notebooks to some other format should inherit.
5 """
5 """
6 #-----------------------------------------------------------------------------
6 #-----------------------------------------------------------------------------
7 # Copyright (c) 2012, the IPython Development Team.
7 # Copyright (c) 2012, the IPython Development Team.
8 #
8 #
9 # Distributed under the terms of the Modified BSD License.
9 # Distributed under the terms of the Modified BSD License.
10 #
10 #
11 # The full license is in the file COPYING.txt, distributed with this software.
11 # The full license is in the file COPYING.txt, distributed with this software.
12 #-----------------------------------------------------------------------------
12 #-----------------------------------------------------------------------------
13
13
14 #-----------------------------------------------------------------------------
14 #-----------------------------------------------------------------------------
15 # Imports
15 # Imports
16 #-----------------------------------------------------------------------------
16 #-----------------------------------------------------------------------------
17
17
18 from __future__ import print_function, absolute_import
18 from __future__ import print_function, absolute_import
19 import converters.transformers as trans
19 import converters.transformers as trans
20 from converters.jinja_filters import (python_comment, indent,
20 from converters.jinja_filters import (python_comment, indent,
21 rm_fake, remove_ansi, markdown, highlight,
21 rm_fake, remove_ansi, markdown, highlight,
22 ansi2html, markdown2latex, escape_tex)
22 ansi2html, markdown2latex, escape_tex)
23
23
24 from converters.utils import markdown2rst
24 from converters.utils import markdown2rst
25
25
26
26
27
27
28 # Stdlib imports
28 # Stdlib imports
29 import io
29 import io
30 import os
30 import os
31 from IPython.utils import path
31 from IPython.utils import path
32 from IPython.utils.traitlets import MetaHasTraits
32 from IPython.utils.traitlets import MetaHasTraits
33
33
34 from jinja2 import Environment, FileSystemLoader
34 from jinja2 import Environment, FileSystemLoader
35 env = Environment(
35 env = Environment(
36 loader=FileSystemLoader([
36 loader=FileSystemLoader([
37 './templates/',
37 './templates/',
38 './templates/skeleton/',
38 './templates/skeleton/',
39 ]),
39 ]),
40 extensions=['jinja2.ext.loopcontrols']
40 extensions=['jinja2.ext.loopcontrols']
41 )
41 )
42
42
43 texenv = Environment(
43 texenv = Environment(
44 loader=FileSystemLoader([
44 loader=FileSystemLoader([
45 './templates/tex/',
45 './templates/tex/',
46 './templates/skeleton/tex/',
46 './templates/skeleton/tex/',
47 ]),
47 ]),
48 extensions=['jinja2.ext.loopcontrols']
48 extensions=['jinja2.ext.loopcontrols']
49 )
49 )
50
50
51 # IPython imports
51 # IPython imports
52 from IPython.nbformat import current as nbformat
52 from IPython.nbformat import current as nbformat
53 from IPython.config.configurable import Configurable
53 from IPython.config.configurable import Configurable
54 from IPython.utils.traitlets import ( Unicode, Any, List, Bool)
54 from IPython.utils.traitlets import ( Unicode, Any, List, Bool)
55
55
56 #-----------------------------------------------------------------------------
56 #-----------------------------------------------------------------------------
57 # Class declarations
57 # Class declarations
58 #-----------------------------------------------------------------------------
58 #-----------------------------------------------------------------------------
59 class ConversionException(Exception):
59 class ConversionException(Exception):
60 pass
60 pass
61
61
62 #todo move this out
62 #todo move this out
63 def header_body():
63 def header_body():
64 """Return the body of the header as a list of strings."""
64 """Return the body of the header as a list of strings."""
65
65
66 from pygments.formatters import HtmlFormatter
66 from pygments.formatters import HtmlFormatter
67
67
68 header = []
68 header = []
69 static = os.path.join(path.get_ipython_package_dir(),
69 static = os.path.join(path.get_ipython_package_dir(),
70 'frontend', 'html', 'notebook', 'static',
70 'frontend', 'html', 'notebook', 'static',
71 )
71 )
72 here = os.path.split(os.path.realpath(__file__))[0]
72 here = os.path.split(os.path.realpath(__file__))[0]
73 css = os.path.join(static, 'css')
73 css = os.path.join(static, 'css')
74 for sheet in [
74 for sheet in [
75 # do we need jquery and prettify?
75 # do we need jquery and prettify?
76 # os.path.join(static, 'jquery', 'css', 'themes', 'base',
76 # os.path.join(static, 'jquery', 'css', 'themes', 'base',
77 # 'jquery-ui.min.css'),
77 # 'jquery-ui.min.css'),
78 # os.path.join(static, 'prettify', 'prettify.css'),
78 # os.path.join(static, 'prettify', 'prettify.css'),
79 os.path.join(css, 'boilerplate.css'),
79 os.path.join(css, 'boilerplate.css'),
80 os.path.join(css, 'fbm.css'),
80 os.path.join(css, 'fbm.css'),
81 os.path.join(css, 'notebook.css'),
81 os.path.join(css, 'notebook.css'),
82 os.path.join(css, 'renderedhtml.css'),
82 os.path.join(css, 'renderedhtml.css'),
83 # our overrides:
83 # our overrides:
84 os.path.join(here, '..', 'css', 'static_html.css'),
84 os.path.join(here, '..', 'css', 'static_html.css'),
85 ]:
85 ]:
86
86
87 with io.open(sheet, encoding='utf-8') as f:
87 with io.open(sheet, encoding='utf-8') as f:
88 s = f.read()
88 s = f.read()
89 header.append(s)
89 header.append(s)
90
90
91 pygments_css = HtmlFormatter().get_style_defs('.highlight')
91 pygments_css = HtmlFormatter().get_style_defs('.highlight')
92 header.append(pygments_css)
92 header.append(pygments_css)
93 return header
93 return header
94
94
95
95
96
96
97
97
98
98
99 inlining = {}
99 inlining = {}
100 inlining['css'] = header_body()
100 inlining['css'] = header_body()
101
101
102
102
103
103
104 texenv.block_start_string = '((*'
104 texenv.block_start_string = '((*'
105 texenv.block_end_string = '*))'
105 texenv.block_end_string = '*))'
106 texenv.variable_start_string = '((('
106 texenv.variable_start_string = '((('
107 texenv.variable_end_string = ')))'
107 texenv.variable_end_string = ')))'
108 texenv.comment_start_string = '((='
108 texenv.comment_start_string = '((='
109 texenv.comment_end_string = '=))'
109 texenv.comment_end_string = '=))'
110 texenv.filters['escape_tex'] = escape_tex
110 texenv.filters['escape_tex'] = escape_tex
111
111
112
112
113 class ConverterTemplate(Configurable):
113 class ConverterTemplate(Configurable):
114 """ A Jinja2 base converter templates
114 """ A Jinja2 base converter templates
115
115
116 Preprocess the ipynb files, feed it throug jinja templates,
116 Preprocess the ipynb files, feed it throug jinja templates,
117 and spit an converted files and a data object with other data
117 and spit an converted files and a data object with other data
118
118
119 shoudl be mostly configurable
119 shoudl be mostly configurable
120 """
120 """
121
121
122 display_data_priority = List(['html', 'pdf', 'svg', 'latex', 'png', 'jpg', 'jpeg' , 'text'],
122 display_data_priority = List(['html', 'pdf', 'svg', 'latex', 'png', 'jpg', 'jpeg' , 'text'],
123 config=True,
123 config=True,
124 help= """
124 help= """
125 An ordered list of prefered output type, the first
125 An ordered list of prefered output type, the first
126 encounterd will usually be used when converting discarding
126 encounterd will usually be used when converting discarding
127 the others.
127 the others.
128 """
128 """
129 )
129 )
130
130
131 pre_transformer_order = List(['haspyout_transformer'],
131 pre_transformer_order = List(['haspyout_transformer'],
132 config=True,
132 config=True,
133 help= """
133 help= """
134 An ordered list of pre transformer to apply to the ipynb
134 An ordered list of pre transformer to apply to the ipynb
135 file befor running through templates
135 file befor running through templates
136 """
136 """
137 )
137 )
138
138
139 extract_figures = Bool(False,
139 extract_figures = Bool(False,
140 config=True,
140 config=True,
141 help= """
141 help= """
142 wether to remove figure data from ipynb and store them in auxiliary
142 wether to remove figure data from ipynb and store them in auxiliary
143 dictionnary
143 dictionnary
144 """
144 """
145 )
145 )
146
146
147 tex_environement = Bool(False,
147 tex_environement = Bool(False,
148 config=True,
148 config=True,
149 help=""" is this a tex environment or not """)
149 help=""" is this a tex environment or not """)
150
150
151 template_file = Unicode('',
151 template_file = Unicode('',
152 config=True,
152 config=True,
153 help=""" Name of the template file to use """ )
153 help=""" Name of the template file to use """ )
154 #-------------------------------------------------------------------------
154 #-------------------------------------------------------------------------
155 # Instance-level attributes that are set in the constructor for this
155 # Instance-level attributes that are set in the constructor for this
156 # class.
156 # class.
157 #-------------------------------------------------------------------------
157 #-------------------------------------------------------------------------
158 infile = Any()
158 infile = Any()
159
159
160
160
161 infile_dir = Unicode()
161 infile_dir = Unicode()
162
162
163 #todo: move to filter
163 #todo: move to filter
164 def filter_data_type(self, output):
164 def filter_data_type(self, output):
165 """ return the first availlable format in priority """
165 """ return the first availlable format in priority """
166 for fmt in self.display_data_priority:
166 for fmt in self.display_data_priority:
167 if fmt in output:
167 if fmt in output:
168 return [fmt]
168 return [fmt]
169 raise Exception("did not found any format I can extract in output, shoudl at lest have one")
169 raise Exception("did not found any format I can extract in output, shoudl at lest have one")
170
170
171 preprocessors = []
171 preprocessors = []
172
172
173 def __init__(self, preprocessors={}, jinja_filters={}, config=None, **kw):
173 def __init__(self, preprocessors={}, jinja_filters={}, config=None, **kw):
174 """
174 """
175 config: the Configurable confg object to pass around
175 config: the Configurable confg object to pass around
176
176
177 preprocessors: dict of **availlable** key/value function to run on ipynb json data before conversion
177 preprocessors: dict of **availlable** key/value function to run on ipynb json data before conversion
178 to extract/inline file,
178 to extract/inline file,
179
179
180 """
180 """
181 super(ConverterTemplate, self).__init__(config=config, **kw)
181 super(ConverterTemplate, self).__init__(config=config, **kw)
182 self.env = texenv if self.tex_environement else env
182 self.env = texenv if self.tex_environement else env
183 self.ext = '.tplx' if self.tex_environement else '.tpl'
183 self.ext = '.tplx' if self.tex_environement else '.tpl'
184
184
185 for name in self.pre_transformer_order:
185 for name in self.pre_transformer_order:
186 transformer = getattr(preprocessors, name, getattr(trans, name, None))
186 transformer = getattr(preprocessors, name, getattr(trans, name, None))
187 if isinstance(transformer, MetaHasTraits):
187 if isinstance(transformer, MetaHasTraits):
188 transformer = transformer(config=config)
188 transformer = transformer(config=config)
189 self.preprocessors.append(transformer)
189 self.preprocessors.append(transformer)
190
190
191 ## for compat, remove later
191 ## for compat, remove later
192 if self.extract_figures:
192 if self.extract_figures:
193 self.preprocessors.append(trans.ExtractFigureTransformer(config=config))
193 self.preprocessors.append(trans.ExtractFigureTransformer(config=config))
194 self.preprocessors.append(trans.RevealHelpTransformer(config=config))
194
195
195 ##
196 ##
196 self.env.filters['filter_data_type'] = self.filter_data_type
197 self.env.filters['filter_data_type'] = self.filter_data_type
197 self.env.filters['pycomment'] = python_comment
198 self.env.filters['pycomment'] = python_comment
198 self.env.filters['indent'] = indent
199 self.env.filters['indent'] = indent
199 self.env.filters['rm_fake'] = rm_fake
200 self.env.filters['rm_fake'] = rm_fake
200 self.env.filters['rm_ansi'] = remove_ansi
201 self.env.filters['rm_ansi'] = remove_ansi
201 self.env.filters['markdown'] = markdown
202 self.env.filters['markdown'] = markdown
202 self.env.filters['highlight'] = highlight
203 self.env.filters['highlight'] = highlight
203 self.env.filters['ansi2html'] = ansi2html
204 self.env.filters['ansi2html'] = ansi2html
204 self.env.filters['markdown2latex'] = markdown2latex
205 self.env.filters['markdown2latex'] = markdown2latex
205 self.env.filters['markdown2rst'] = markdown2rst
206 self.env.filters['markdown2rst'] = markdown2rst
206 for k, v in jinja_filters.iteritems():
207 for k, v in jinja_filters.iteritems():
207 self.env.filters[k] = v
208 self.env.filters[k] = v
208
209
209 self.template = self.env.get_template(self.template_file+self.ext)
210 self.template = self.env.get_template(self.template_file+self.ext)
210
211
211
212
212 def process(self, nb):
213 def process(self, nb):
213 """
214 """
214 preprocess the notebook json for easier use with the templates.
215 preprocess the notebook json for easier use with the templates.
215 will call all the `preprocessor`s in order before returning it.
216 will call all the `preprocessor`s in order before returning it.
216 """
217 """
217
218
218 # dict of 'resources' that could be made by the preprocessors
219 # dict of 'resources' that could be made by the preprocessors
219 # like key/value data to extract files from ipynb like in latex conversion
220 # like key/value data to extract files from ipynb like in latex conversion
220 resources = {}
221 resources = {}
221
222
222 for preprocessor in self.preprocessors:
223 for preprocessor in self.preprocessors:
223 nb, resources = preprocessor(nb, resources)
224 nb, resources = preprocessor(nb, resources)
224
225
225 return nb, resources
226 return nb, resources
226
227
227 def convert(self, nb):
228 def convert(self, nb):
228 """ convert the ipynb file
229 """ convert the ipynb file
229
230
230 return both the converted ipynb file and a dict containing potential
231 return both the converted ipynb file and a dict containing potential
231 other resources
232 other resources
232 """
233 """
233 nb, resources = self.process(nb)
234 nb, resources = self.process(nb)
234 return self.template.render(nb=nb, inlining=inlining), resources
235 return self.template.render(nb=nb, inlining=inlining), resources
235
236
236
237
237 def from_filename(self, filename):
238 def from_filename(self, filename):
238 "read and parse notebook into NotebookNode called self.nb"
239 "read and parse notebook into NotebookNode called self.nb"
239 with io.open(filename) as f:
240 with io.open(filename) as f:
240 return self.convert(nbformat.read(f, 'json'))
241 return self.convert(nbformat.read(f, 'json'))
241
242
@@ -1,134 +1,242 b''
1 """
1 """
2
2
3 """
3 """
4
4
5 from __future__ import print_function
5 from __future__ import print_function
6
6
7 from IPython.config.configurable import Configurable
7 from IPython.config.configurable import Configurable
8 from IPython.utils.traitlets import Unicode, Bool, Dict, List
8 from IPython.utils.traitlets import Unicode, Bool, Dict, List
9
9
10 class ConfigurableTransformers(Configurable):
10 class ConfigurableTransformers(Configurable):
11 """ A configurable transformer """
11 """ A configurable transformer """
12
12
13 def __init__(self, config=None, **kw):
13 def __init__(self, config=None, **kw):
14 super(ConfigurableTransformers, self).__init__(config=config, **kw)
14 super(ConfigurableTransformers, self).__init__(config=config, **kw)
15
15
16 def __call__(self, nb, other):
16 def __call__(self, nb, other):
17 try :
17 try :
18 for worksheet in nb.worksheets :
18 for worksheet in nb.worksheets :
19 for index, cell in enumerate(worksheet.cells):
19 for index, cell in enumerate(worksheet.cells):
20 worksheet.cells[index], other = self.cell_transform(cell, other, index)
20 worksheet.cells[index], other = self.cell_transform(cell, other, index)
21 return nb, other
21 return nb, other
22 except NotImplementedError as error :
22 except NotImplementedError as error :
23 raise NotImplementedError('should be implemented by subclass')
23 raise NotImplementedError('should be implemented by subclass')
24
24
25 def cell_transform(self, cell, other, index):
25 def cell_transform(self, cell, other, index):
26 """
26 """
27 Overwrite if you want to apply a transformation on each cell
27 Overwrite if you want to apply a transformation on each cell
28 """
28 """
29 raise NotImplementedError('should be implemented by subclass')
29 raise NotImplementedError('should be implemented by subclass')
30
30
31
31
32 class Foobar(ConfigurableTransformers):
32 class Foobar(ConfigurableTransformers):
33 message = Unicode('-- nothing', config=True)
33 message = Unicode('-- nothing', config=True)
34
34
35
35
36 def cell_transform(self, cell, other, index):
36 def cell_transform(self, cell, other, index):
37 return cell, other
37 return cell, other
38
38
39
39
40 def cell_preprocessor(function):
40 def cell_preprocessor(function):
41 """ wrap a function to be executed on all cells of a notebook
41 """ wrap a function to be executed on all cells of a notebook
42
42
43 wrapped function parameters :
43 wrapped function parameters :
44 cell : the cell
44 cell : the cell
45 other : external resources
45 other : external resources
46 index : index of the cell
46 index : index of the cell
47 """
47 """
48 def wrappedfunc(nb, other):
48 def wrappedfunc(nb, other):
49 for worksheet in nb.worksheets :
49 for worksheet in nb.worksheets :
50 for index, cell in enumerate(worksheet.cells):
50 for index, cell in enumerate(worksheet.cells):
51 worksheet.cells[index], other = function(cell, other, index)
51 worksheet.cells[index], other = function(cell, other, index)
52 return nb, other
52 return nb, other
53 return wrappedfunc
53 return wrappedfunc
54
54
55
55
56 @cell_preprocessor
56 @cell_preprocessor
57 def haspyout_transformer(cell, other, count):
57 def haspyout_transformer(cell, other, count):
58 """
58 """
59 Add a haspyout flag to cell that have it
59 Add a haspyout flag to cell that have it
60
60
61 Easier for templating, where you can't know in advance
61 Easier for templating, where you can't know in advance
62 wether to write the out prompt
62 wether to write the out prompt
63
63
64 """
64 """
65 cell.type = cell.cell_type
65 cell.type = cell.cell_type
66 cell.haspyout = False
66 cell.haspyout = False
67 for out in cell.get('outputs', []):
67 for out in cell.get('outputs', []):
68 if out.output_type == 'pyout':
68 if out.output_type == 'pyout':
69 cell.haspyout = True
69 cell.haspyout = True
70 break
70 break
71 return cell, other
71 return cell, other
72
72
73
73
74 # todo, make the key part configurable.
74 # todo, make the key part configurable.
75
75
76 class ExtractFigureTransformer(ConfigurableTransformers):
76 class ExtractFigureTransformer(ConfigurableTransformers):
77 enabled = Bool(False,
77 enabled = Bool(False,
78 config=True,
78 config=True,
79 help=""" If set to false, this transformer will be no-op """
79 help=""" If set to false, this transformer will be no-op """
80 )
80 )
81
81
82 extra_ext_map = Dict({},
82 extra_ext_map = Dict({},
83 config=True,
83 config=True,
84 help="""extra map to override extension based on type.
84 help="""extra map to override extension based on type.
85 Usefull for latex where svg will be converted to pdf before inclusion
85 Usefull for latex where svg will be converted to pdf before inclusion
86 """
86 """
87 )
87 )
88 display_data_priority = List(['html', 'pdf', 'svg', 'latex', 'png', 'jpg', 'jpeg' , 'text'],
88 display_data_priority = List(['html', 'pdf', 'svg', 'latex', 'png', 'jpg', 'jpeg' , 'text'],
89 config=True,
89 config=True,
90 help= """
90 help= """
91 An ordered list of prefered output type, the first
91 An ordered list of prefered output type, the first
92 encounterd will usually be used when converting discarding
92 encounterd will usually be used when converting discarding
93 the others.
93 the others.
94 """
94 """
95 )
95 )
96
96
97
97
98 #to do change this to .format {} syntax
98 #to do change this to .format {} syntax
99 key_tpl = Unicode('_fig_%02i.%s', config=True)
99 key_tpl = Unicode('_fig_%02i.%s', config=True)
100
100
101 def _get_ext(self, ext):
101 def _get_ext(self, ext):
102 if ext in self.extra_ext_map :
102 if ext in self.extra_ext_map :
103 return self.extra_ext_map[ext]
103 return self.extra_ext_map[ext]
104 return ext
104 return ext
105
105
106 def _new_figure(self, data, fmt, count):
106 def _new_figure(self, data, fmt, count):
107 """Create a new figure file in the given format.
107 """Create a new figure file in the given format.
108
108
109 Returns a path relative to the input file.
109 Returns a path relative to the input file.
110 """
110 """
111 figname = self.key_tpl % (count, self._get_ext(fmt))
111 figname = self.key_tpl % (count, self._get_ext(fmt))
112 key = self.key_tpl % (count, fmt)
112 key = self.key_tpl % (count, fmt)
113
113
114 # Binary files are base64-encoded, SVG is already XML
114 # Binary files are base64-encoded, SVG is already XML
115 if fmt in ('png', 'jpg', 'pdf'):
115 if fmt in ('png', 'jpg', 'pdf'):
116 data = data.decode('base64')
116 data = data.decode('base64')
117
117
118 return figname, key, data
118 return figname, key, data
119
119
120
120
121 def cell_transform(self, cell, other, count):
121 def cell_transform(self, cell, other, count):
122 if not self.enabled:
122 if not self.enabled:
123 return cell, other
123 return cell, other
124 if other.get('figures',None) is None :
124 if other.get('figures',None) is None :
125 other['figures']={}
125 other['figures']={}
126 for i, out in enumerate(cell.get('outputs', [])):
126 for i, out in enumerate(cell.get('outputs', [])):
127 for type in self.display_data_priority:
127 for type in self.display_data_priority:
128 if out.hasattr(type):
128 if out.hasattr(type):
129 figname, key, data = self._new_figure(out[type], type, count)
129 figname, key, data = self._new_figure(out[type], type, count)
130 out['key_'+type] = figname
130 out['key_'+type] = figname
131 other['figures'][key] = data
131 other['figures'][key] = data
132 count = count+1
132 count = count+1
133 return cell, other
133 return cell, other
134
134
135 class RevealHelpTransformer(ConfigurableTransformers):
136
137 section_open = False
138 subsection_open = False
139 fragment_open = False
140
141 def open_subsection(self):
142 self.subsection_open = True
143 #print('open subsection')
144 return True
145
146 def open_section(self):
147 self.section_open = True
148 #print('open section')
149 return True
150
151 def open_fragment(self):
152 self.fragment_open = True
153 #print('open fragment')
154 return True
155
156 def maybe_close_section(self):
157 """return True is already open, false otherwise
158 and change state to close
159 """
160 if self.section_open :
161 #print('close section')
162 self.section_open = False
163 return True
164 else :
165 return False
166
167 def maybe_open_section(self):
168 """return True is already open, false otherwise
169 and change state to close
170 """
171 if not self.section_open :
172 self.section_open = True
173 #print('open section (m)')
174 return True
175 else :
176 return False
177
178 def maybe_open_subsection(self):
179 """return True is already open, false otherwise
180 and change state to close
181 """
182 if not self.subsection_open :
183 #print('open subsection (m)')
184 self.subsection_open = True
185 return True
186 else :
187 return False
188
189 def maybe_close_subsection(self):
190 """return True is already open, false otherwise
191 and change state to close
192 """
193 if self.subsection_open :
194 #print('close subsection (m)')
195 self.subsection_open = False
196 return True
197 else :
198 return False
199
200 def maybe_close_fragment(self):
201 """return True is already open, false otherwise
202 and change state to close
203 """
204 if self.fragment_open :
205 self.fragment_open = False
206 #print('close fragment (m)')
207 return True
208 else :
209 return False
210
211 def cell_transform(self, cell, other,count):
212 ctype = cell.metadata.get('slideshow',{}).get('slide_type',None)
213 if ctype is None :
214 cell.metadata.slideshow = {}
215 cell.metadata.slideshow['slide_type'] = None
216 if ctype == 'fragment':
217 cell.metadata.slideshow.close_fragment = self.maybe_close_fragment()
218 cell.metadata.slideshow.close_subsection = False
219 cell.metadata.slideshow.close_section = False
220
221 cell.metadata.slideshow.open_section = self.maybe_open_section()
222 cell.metadata.slideshow.open_subsection = self.maybe_open_subsection()
223 cell.metadata.slideshow.open_fragment = self.open_fragment()
224
225 elif ctype == 'subslide':
226 cell.metadata.slideshow.close_fragment = self.maybe_close_fragment()
227 cell.metadata.slideshow.close_subsection = self.maybe_close_subsection()
228 cell.metadata.slideshow.close_section = False
229
230 cell.metadata.slideshow.open_section = self.maybe_open_section()
231 cell.metadata.slideshow.open_subsection = self.open_subsection()
232 cell.metadata.slideshow.open_fragment = False
233 elif ctype == 'slide':
234 cell.metadata.slideshow.close_fragment = self.maybe_close_fragment()
235 cell.metadata.slideshow.close_subsection = self.maybe_close_subsection()
236 cell.metadata.slideshow.close_section = self.maybe_close_section()
237
238 cell.metadata.slideshow.open_section = self.open_section()
239 cell.metadata.slideshow.open_subsection = self.open_subsection()
240 cell.metadata.slideshow.open_fragment = False
241 return cell,other
242
General Comments 0
You need to be logged in to leave comments. Login now