##// END OF EJS Templates
First go and reorganizing the examples.
Brian Granger -
Show More

The requested changes are too big and content was truncated. Show full diff

@@ -0,0 +1,157 b''
1 {
2 "metadata": {
3 "name": "Frontend-Kernel Model"
4 },
5 "nbformat": 3,
6 "nbformat_minor": 0,
7 "worksheets": [
8 {
9 "cells": [
10 {
11 "cell_type": "heading",
12 "level": 1,
13 "metadata": {},
14 "source": [
15 "The Frontend/Kernel Model"
16 ]
17 },
18 {
19 "cell_type": "markdown",
20 "metadata": {},
21 "source": [
22 "The traditional IPython (`ipython`) consists of a single process that combines a terminal based UI with the process that runs the users code.\n",
23 "\n",
24 "While this traditional application still exists, the modern IPython consists of two processes:\n",
25 "\n",
26 "* Kernel: this is the process that runs the users code.\n",
27 "* Frontend: this is the process that provides the user interface where the user types code and sees results.\n",
28 "\n",
29 "IPython currently has 3 frontends:\n",
30 "\n",
31 "* Terminal Console (`ipython console`)\n",
32 "* Qt Console (`ipython qtconsole`)\n",
33 "* Notebook (`ipython notebook`)\n",
34 "\n",
35 "The Kernel and Frontend communicate over a ZeroMQ/JSON based messaging protocol, which allows multiple Frontends (even of different types) to communicate with a single Kernel. This opens the door for all sorts of interesting things, such as connecting a Console or Qt Console to a Notebook's Kernel. For example, you may want to connect a Qt console to your Notebook's Kernel and use it as a help\n",
36 "browser, calling `??` on objects in the Qt console (whose pager is more flexible than the\n",
37 "one in the notebook). \n",
38 "\n",
39 "This Notebook describes how you would connect another Frontend to a Kernel that is associated with a Notebook."
40 ]
41 },
42 {
43 "cell_type": "heading",
44 "level": 2,
45 "metadata": {},
46 "source": [
47 "Manual connection"
48 ]
49 },
50 {
51 "cell_type": "markdown",
52 "metadata": {},
53 "source": [
54 "To connect another Frontend to a Kernel manually, you first need to find out the connection information for the Kernel using the `%connect_info` magic:"
55 ]
56 },
57 {
58 "cell_type": "code",
59 "collapsed": false,
60 "input": [
61 "%connect_info"
62 ],
63 "language": "python",
64 "metadata": {},
65 "outputs": [
66 {
67 "output_type": "stream",
68 "stream": "stdout",
69 "text": [
70 "{\n",
71 " \"stdin_port\": 52858, \n",
72 " \"ip\": \"127.0.0.1\", \n",
73 " \"hb_port\": 52859, \n",
74 " \"key\": \"7efd45ca-d8a2-41b0-9cea-d9116d0fb883\", \n",
75 " \"shell_port\": 52856, \n",
76 " \"iopub_port\": 52857\n",
77 "}\n",
78 "\n",
79 "Paste the above JSON into a file, and connect with:\n",
80 " $> ipython <app> --existing <file>\n",
81 "or, if you are local, you can connect with just:\n",
82 " $> ipython <app> --existing kernel-b3bac7c1-8b2c-4536-8082-8d1df24f99ac.json \n",
83 "or even just:\n",
84 " $> ipython <app> --existing \n",
85 "if this is the most recent IPython session you have started.\n"
86 ]
87 }
88 ],
89 "prompt_number": 6
90 },
91 {
92 "cell_type": "markdown",
93 "metadata": {},
94 "source": [
95 "You can see that this magic displays everything you need to connect to this Notebook's Kernel."
96 ]
97 },
98 {
99 "cell_type": "heading",
100 "level": 2,
101 "metadata": {},
102 "source": [
103 "Automatic connection using a new Qt Console"
104 ]
105 },
106 {
107 "cell_type": "markdown",
108 "metadata": {},
109 "source": [
110 "You can also start a new Qt Console connected to your current Kernel by using the `%qtconsole` magic. This will detect the necessary connection\n",
111 "information and start the Qt Console for you automatically."
112 ]
113 },
114 {
115 "cell_type": "code",
116 "collapsed": false,
117 "input": [
118 "a = 10"
119 ],
120 "language": "python",
121 "metadata": {},
122 "outputs": [],
123 "prompt_number": 1
124 },
125 {
126 "cell_type": "code",
127 "collapsed": false,
128 "input": [
129 "%qtconsole"
130 ],
131 "language": "python",
132 "metadata": {},
133 "outputs": [],
134 "prompt_number": 2
135 },
136 {
137 "cell_type": "heading",
138 "level": 2,
139 "metadata": {},
140 "source": [
141 "The kernel's `raw_input` and `%debug`"
142 ]
143 },
144 {
145 "cell_type": "markdown",
146 "metadata": {},
147 "source": [
148 "The one feature the notebook currently doesn't support as a Frontend is the ability to send data to the Kernel's standard input socket. That is, if the Kernel requires information to be typed interactively by calling the builtin `raw_input` function, the Notebook will be blocked. This happens for example if you run a script that queries interactively for parameters, and very importantly, is how the interactive IPython debugger that activates when you type `%debug` works.\n",
149 "\n",
150 "So, in order to be able to use `%debug` or anything else that requires `raw_input`, you can either use a Terminal Console or Qt Console connected to a Notebook's Kernel as described above.\n"
151 ]
152 }
153 ],
154 "metadata": {}
155 }
156 ]
157 } No newline at end of file
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
@@ -0,0 +1,54 b''
1 {
2 "metadata": {
3 "name": "Local Files"
4 },
5 "nbformat": 3,
6 "nbformat_minor": 0,
7 "worksheets": [
8 {
9 "cells": [
10 {
11 "cell_type": "markdown",
12 "metadata": {},
13 "source": [
14 "## Local Files\n",
15 "\n",
16 "The above examples embed images and video from the notebook filesystem in the output\n",
17 "areas of code cells. It is also possible to request these files directly in markdown cells\n",
18 "if they reside in the notebook directory via relative urls prefixed with `files/`:\n",
19 "\n",
20 " files/[subdirectory/]<filename>\n",
21 "\n",
22 "\n",
23 "For example, in the example notebook folder, we have the Python logo, addressed as:\n",
24 "\n",
25 " <img src=\"files/python-logo.svg\" />\n",
26 "\n",
27 "<img src=\"/files/python-logo.svg\" />\n",
28 "\n",
29 "and a video with the HTML5 video tag:\n",
30 "\n",
31 " <video controls src=\"files/animation.m4v\" />\n",
32 "\n",
33 "<video controls src=\"/files/animation.m4v\" />\n",
34 "\n",
35 "These do not embed the data into the notebook file,\n",
36 "and require that the files exist when you are viewing the notebook.\n",
37 "\n",
38 "### Security of local files\n",
39 "\n",
40 "Note that this means that the IPython notebook server also acts as a generic file server\n",
41 "for files inside the same tree as your notebooks. Access is not granted outside the\n",
42 "notebook folder so you have strict control over what files are visible, but for this\n",
43 "reason it is highly recommended that you do not run the notebook server with a notebook\n",
44 "directory at a high level in your filesystem (e.g. your home directory).\n",
45 "\n",
46 "When you run the notebook in a password-protected manner, local file access is restricted\n",
47 "to authenticated users unless read-only views are active."
48 ]
49 }
50 ],
51 "metadata": {}
52 }
53 ]
54 } No newline at end of file
This diff has been collapsed as it changes many lines, (1156 lines changed) Show them Hide them
@@ -0,0 +1,1156 b''
1 {
2 "metadata": {
3 "name": "Part 2 - Basic Output"
4 },
5 "nbformat": 3,
6 "nbformat_minor": 0,
7 "worksheets": [
8 {
9 "cells": [
10 {
11 "cell_type": "heading",
12 "level": 1,
13 "metadata": {},
14 "source": [
15 "Basic Output"
16 ]
17 },
18 {
19 "cell_type": "markdown",
20 "metadata": {},
21 "source": [
22 "When a cell is run, it can generate *output*. In IPython, the definition of output is quite general; it can be text, images, LaTeX, HTML or JSON. All output is displayed below the code that generated it, in the *output area*.\n",
23 "\n",
24 "This Notebook describes the basics of output and shows how the `stdout/stderr` streams are handled."
25 ]
26 },
27 {
28 "cell_type": "heading",
29 "level": 2,
30 "metadata": {},
31 "source": [
32 "Displayhook"
33 ]
34 },
35 {
36 "cell_type": "markdown",
37 "metadata": {},
38 "source": [
39 "When a Python object is returned by an expression, Python's `displayhook` mechanism is triggered. In IPython, this results in an output prompt, such as `Out[2]`. These objects are then available under the variables:\n",
40 "\n",
41 "* `_` (last output)\n",
42 "* `__` (second to last output)\n",
43 "* `_N` (`Out[N]`)"
44 ]
45 },
46 {
47 "cell_type": "code",
48 "collapsed": false,
49 "input": [
50 "import numpy as np"
51 ],
52 "language": "python",
53 "metadata": {},
54 "outputs": [],
55 "prompt_number": 24
56 },
57 {
58 "cell_type": "code",
59 "collapsed": false,
60 "input": [
61 "numpy.random.rand(10)"
62 ],
63 "language": "python",
64 "metadata": {},
65 "outputs": [
66 {
67 "output_type": "pyout",
68 "prompt_number": 27,
69 "text": [
70 "array([ 0.94311014, 0.03500265, 0.59873731, 0.63411734, 0.03642486,\n",
71 " 0.22090049, 0.33132549, 0.24439398, 0.80084185, 0.25114916])"
72 ]
73 }
74 ],
75 "prompt_number": 27
76 },
77 {
78 "cell_type": "code",
79 "collapsed": false,
80 "input": [
81 "np.sin(_)"
82 ],
83 "language": "python",
84 "metadata": {},
85 "outputs": [
86 {
87 "output_type": "pyout",
88 "prompt_number": 28,
89 "text": [
90 "array([ 0.80938852, 0.0349955 , 0.56359988, 0.59246668, 0.0364168 ,\n",
91 " 0.21910832, 0.32529671, 0.24196836, 0.71794236, 0.24851724])"
92 ]
93 }
94 ],
95 "prompt_number": 28
96 },
97 {
98 "cell_type": "heading",
99 "level": 2,
100 "metadata": {},
101 "source": [
102 "sys.stdout and sys.stderr"
103 ]
104 },
105 {
106 "cell_type": "markdown",
107 "metadata": {},
108 "source": [
109 "The stdout and stderr streams are displayed as text in the output area."
110 ]
111 },
112 {
113 "cell_type": "code",
114 "collapsed": false,
115 "input": [
116 "print \"hi, stdout\""
117 ],
118 "language": "python",
119 "metadata": {},
120 "outputs": [
121 {
122 "output_type": "stream",
123 "stream": "stdout",
124 "text": [
125 "hi, stdout\n"
126 ]
127 }
128 ],
129 "prompt_number": 29
130 },
131 {
132 "cell_type": "code",
133 "collapsed": false,
134 "input": [
135 "print >> sys.stderr, 'hi, stderr'"
136 ],
137 "language": "python",
138 "metadata": {},
139 "outputs": [
140 {
141 "output_type": "stream",
142 "stream": "stderr",
143 "text": [
144 "hi, stderr\n"
145 ]
146 }
147 ],
148 "prompt_number": 8
149 },
150 {
151 "cell_type": "heading",
152 "level": 2,
153 "metadata": {},
154 "source": [
155 "Output is asynchronous"
156 ]
157 },
158 {
159 "cell_type": "markdown",
160 "metadata": {},
161 "source": [
162 "All output is displayed asynchronously as it is generated in the Kernel. If you execute the next cell, you will see the output one piece at a time, not all at the end."
163 ]
164 },
165 {
166 "cell_type": "code",
167 "collapsed": false,
168 "input": [
169 "import time, sys\n",
170 "for i in range(8):\n",
171 " print i,\n",
172 " time.sleep(0.5)"
173 ],
174 "language": "python",
175 "metadata": {},
176 "outputs": [
177 {
178 "output_type": "stream",
179 "stream": "stdout",
180 "text": [
181 "0 "
182 ]
183 },
184 {
185 "output_type": "stream",
186 "stream": "stdout",
187 "text": [
188 "1 "
189 ]
190 },
191 {
192 "output_type": "stream",
193 "stream": "stdout",
194 "text": [
195 "2 "
196 ]
197 },
198 {
199 "output_type": "stream",
200 "stream": "stdout",
201 "text": [
202 "3 "
203 ]
204 },
205 {
206 "output_type": "stream",
207 "stream": "stdout",
208 "text": [
209 "4 "
210 ]
211 },
212 {
213 "output_type": "stream",
214 "stream": "stdout",
215 "text": [
216 "5 "
217 ]
218 },
219 {
220 "output_type": "stream",
221 "stream": "stdout",
222 "text": [
223 "6 "
224 ]
225 },
226 {
227 "output_type": "stream",
228 "stream": "stdout",
229 "text": [
230 "7\n"
231 ]
232 }
233 ],
234 "prompt_number": 30
235 },
236 {
237 "cell_type": "heading",
238 "level": 2,
239 "metadata": {},
240 "source": [
241 "Large outputs"
242 ]
243 },
244 {
245 "cell_type": "markdown",
246 "metadata": {},
247 "source": [
248 "To better handle large outputs, the output area can be collapsed. Run the following cell and then single- or double- click on the active area to the left of the output:"
249 ]
250 },
251 {
252 "cell_type": "code",
253 "collapsed": false,
254 "input": [
255 "for i in range(50):\n",
256 " print i"
257 ],
258 "language": "python",
259 "metadata": {},
260 "outputs": [
261 {
262 "output_type": "stream",
263 "stream": "stdout",
264 "text": [
265 "0\n",
266 "1\n",
267 "2\n",
268 "3\n",
269 "4\n",
270 "5\n",
271 "6\n",
272 "7\n",
273 "8\n",
274 "9\n",
275 "10\n",
276 "11\n",
277 "12\n",
278 "13\n",
279 "14\n",
280 "15\n",
281 "16\n",
282 "17\n",
283 "18\n",
284 "19\n",
285 "20\n",
286 "21\n",
287 "22\n",
288 "23\n",
289 "24\n",
290 "25\n",
291 "26\n",
292 "27\n",
293 "28\n",
294 "29\n",
295 "30\n",
296 "31\n",
297 "32\n",
298 "33\n",
299 "34\n",
300 "35\n",
301 "36\n",
302 "37\n",
303 "38\n",
304 "39\n",
305 "40\n",
306 "41\n",
307 "42\n",
308 "43\n",
309 "44\n",
310 "45\n",
311 "46\n",
312 "47\n",
313 "48\n",
314 "49\n"
315 ]
316 }
317 ],
318 "prompt_number": 4
319 },
320 {
321 "cell_type": "markdown",
322 "metadata": {},
323 "source": [
324 "Beyond a certain point, output will scroll automatically:"
325 ]
326 },
327 {
328 "cell_type": "code",
329 "collapsed": false,
330 "input": [
331 "for i in range(500):\n",
332 " print 2**i - 1"
333 ],
334 "language": "python",
335 "metadata": {},
336 "outputs": [
337 {
338 "output_type": "stream",
339 "stream": "stdout",
340 "text": [
341 "0\n",
342 "1\n",
343 "3\n",
344 "7\n",
345 "15\n",
346 "31\n",
347 "63\n",
348 "127\n",
349 "255\n",
350 "511\n",
351 "1023\n",
352 "2047\n",
353 "4095\n",
354 "8191\n",
355 "16383\n",
356 "32767\n",
357 "65535\n",
358 "131071\n",
359 "262143\n",
360 "524287\n",
361 "1048575\n",
362 "2097151\n",
363 "4194303\n",
364 "8388607\n",
365 "16777215\n",
366 "33554431\n",
367 "67108863\n",
368 "134217727\n",
369 "268435455\n",
370 "536870911\n",
371 "1073741823\n",
372 "2147483647\n",
373 "4294967295\n",
374 "8589934591\n",
375 "17179869183\n",
376 "34359738367\n",
377 "68719476735\n",
378 "137438953471\n",
379 "274877906943\n",
380 "549755813887\n",
381 "1099511627775\n",
382 "2199023255551\n",
383 "4398046511103\n",
384 "8796093022207\n",
385 "17592186044415\n",
386 "35184372088831\n",
387 "70368744177663\n",
388 "140737488355327\n",
389 "281474976710655\n",
390 "562949953421311\n",
391 "1125899906842623\n",
392 "2251799813685247\n",
393 "4503599627370495\n",
394 "9007199254740991\n",
395 "18014398509481983\n",
396 "36028797018963967\n",
397 "72057594037927935\n",
398 "144115188075855871\n",
399 "288230376151711743\n",
400 "576460752303423487\n",
401 "1152921504606846975\n",
402 "2305843009213693951\n",
403 "4611686018427387903\n",
404 "9223372036854775807\n",
405 "18446744073709551615\n",
406 "36893488147419103231\n",
407 "73786976294838206463\n",
408 "147573952589676412927\n",
409 "295147905179352825855\n",
410 "590295810358705651711\n",
411 "1180591620717411303423\n",
412 "2361183241434822606847\n",
413 "4722366482869645213695\n",
414 "9444732965739290427391\n",
415 "18889465931478580854783\n",
416 "37778931862957161709567\n",
417 "75557863725914323419135\n",
418 "151115727451828646838271\n",
419 "302231454903657293676543\n",
420 "604462909807314587353087\n",
421 "1208925819614629174706175\n",
422 "2417851639229258349412351\n",
423 "4835703278458516698824703\n",
424 "9671406556917033397649407\n",
425 "19342813113834066795298815\n",
426 "38685626227668133590597631\n",
427 "77371252455336267181195263\n",
428 "154742504910672534362390527\n",
429 "309485009821345068724781055\n",
430 "618970019642690137449562111\n",
431 "1237940039285380274899124223\n",
432 "2475880078570760549798248447\n",
433 "4951760157141521099596496895\n",
434 "9903520314283042199192993791\n",
435 "19807040628566084398385987583\n",
436 "39614081257132168796771975167\n",
437 "79228162514264337593543950335\n",
438 "158456325028528675187087900671\n",
439 "316912650057057350374175801343\n",
440 "633825300114114700748351602687\n",
441 "1267650600228229401496703205375\n",
442 "2535301200456458802993406410751\n",
443 "5070602400912917605986812821503\n",
444 "10141204801825835211973625643007\n",
445 "20282409603651670423947251286015\n",
446 "40564819207303340847894502572031\n",
447 "81129638414606681695789005144063\n",
448 "162259276829213363391578010288127\n",
449 "324518553658426726783156020576255\n",
450 "649037107316853453566312041152511\n",
451 "1298074214633706907132624082305023\n",
452 "2596148429267413814265248164610047\n",
453 "5192296858534827628530496329220095\n",
454 "10384593717069655257060992658440191\n",
455 "20769187434139310514121985316880383\n",
456 "41538374868278621028243970633760767\n",
457 "83076749736557242056487941267521535\n",
458 "166153499473114484112975882535043071\n",
459 "332306998946228968225951765070086143\n",
460 "664613997892457936451903530140172287\n",
461 "1329227995784915872903807060280344575\n",
462 "2658455991569831745807614120560689151\n",
463 "5316911983139663491615228241121378303\n",
464 "10633823966279326983230456482242756607\n",
465 "21267647932558653966460912964485513215\n",
466 "42535295865117307932921825928971026431\n",
467 "85070591730234615865843651857942052863\n",
468 "170141183460469231731687303715884105727\n",
469 "340282366920938463463374607431768211455\n",
470 "680564733841876926926749214863536422911\n",
471 "1361129467683753853853498429727072845823\n",
472 "2722258935367507707706996859454145691647\n",
473 "5444517870735015415413993718908291383295\n",
474 "10889035741470030830827987437816582766591\n",
475 "21778071482940061661655974875633165533183\n",
476 "43556142965880123323311949751266331066367\n",
477 "87112285931760246646623899502532662132735\n",
478 "174224571863520493293247799005065324265471\n",
479 "348449143727040986586495598010130648530943\n",
480 "696898287454081973172991196020261297061887\n",
481 "1393796574908163946345982392040522594123775\n",
482 "2787593149816327892691964784081045188247551\n",
483 "5575186299632655785383929568162090376495103\n",
484 "11150372599265311570767859136324180752990207\n",
485 "22300745198530623141535718272648361505980415\n",
486 "44601490397061246283071436545296723011960831\n",
487 "89202980794122492566142873090593446023921663\n",
488 "178405961588244985132285746181186892047843327\n",
489 "356811923176489970264571492362373784095686655\n",
490 "713623846352979940529142984724747568191373311\n",
491 "1427247692705959881058285969449495136382746623\n",
492 "2854495385411919762116571938898990272765493247\n",
493 "5708990770823839524233143877797980545530986495\n",
494 "11417981541647679048466287755595961091061972991\n",
495 "22835963083295358096932575511191922182123945983\n",
496 "45671926166590716193865151022383844364247891967\n",
497 "91343852333181432387730302044767688728495783935\n",
498 "182687704666362864775460604089535377456991567871\n",
499 "365375409332725729550921208179070754913983135743\n",
500 "730750818665451459101842416358141509827966271487\n",
501 "1461501637330902918203684832716283019655932542975\n",
502 "2923003274661805836407369665432566039311865085951\n",
503 "5846006549323611672814739330865132078623730171903\n",
504 "11692013098647223345629478661730264157247460343807\n",
505 "23384026197294446691258957323460528314494920687615\n",
506 "46768052394588893382517914646921056628989841375231\n",
507 "93536104789177786765035829293842113257979682750463\n",
508 "187072209578355573530071658587684226515959365500927\n",
509 "374144419156711147060143317175368453031918731001855\n",
510 "748288838313422294120286634350736906063837462003711\n",
511 "1496577676626844588240573268701473812127674924007423\n",
512 "2993155353253689176481146537402947624255349848014847\n",
513 "5986310706507378352962293074805895248510699696029695\n",
514 "11972621413014756705924586149611790497021399392059391\n",
515 "23945242826029513411849172299223580994042798784118783\n",
516 "47890485652059026823698344598447161988085597568237567\n",
517 "95780971304118053647396689196894323976171195136475135\n",
518 "191561942608236107294793378393788647952342390272950271\n",
519 "383123885216472214589586756787577295904684780545900543\n",
520 "766247770432944429179173513575154591809369561091801087\n",
521 "1532495540865888858358347027150309183618739122183602175\n",
522 "3064991081731777716716694054300618367237478244367204351\n",
523 "6129982163463555433433388108601236734474956488734408703\n",
524 "12259964326927110866866776217202473468949912977468817407\n",
525 "24519928653854221733733552434404946937899825954937634815\n",
526 "49039857307708443467467104868809893875799651909875269631\n",
527 "98079714615416886934934209737619787751599303819750539263\n",
528 "196159429230833773869868419475239575503198607639501078527\n",
529 "392318858461667547739736838950479151006397215279002157055\n",
530 "784637716923335095479473677900958302012794430558004314111\n",
531 "1569275433846670190958947355801916604025588861116008628223\n",
532 "3138550867693340381917894711603833208051177722232017256447\n",
533 "6277101735386680763835789423207666416102355444464034512895\n",
534 "12554203470773361527671578846415332832204710888928069025791\n",
535 "25108406941546723055343157692830665664409421777856138051583\n",
536 "50216813883093446110686315385661331328818843555712276103167\n",
537 "100433627766186892221372630771322662657637687111424552206335\n",
538 "200867255532373784442745261542645325315275374222849104412671\n",
539 "401734511064747568885490523085290650630550748445698208825343\n",
540 "803469022129495137770981046170581301261101496891396417650687\n",
541 "1606938044258990275541962092341162602522202993782792835301375\n",
542 "3213876088517980551083924184682325205044405987565585670602751\n",
543 "6427752177035961102167848369364650410088811975131171341205503\n",
544 "12855504354071922204335696738729300820177623950262342682411007\n",
545 "25711008708143844408671393477458601640355247900524685364822015\n",
546 "51422017416287688817342786954917203280710495801049370729644031\n",
547 "102844034832575377634685573909834406561420991602098741459288063\n",
548 "205688069665150755269371147819668813122841983204197482918576127\n",
549 "411376139330301510538742295639337626245683966408394965837152255\n",
550 "822752278660603021077484591278675252491367932816789931674304511\n",
551 "1645504557321206042154969182557350504982735865633579863348609023\n",
552 "3291009114642412084309938365114701009965471731267159726697218047\n",
553 "6582018229284824168619876730229402019930943462534319453394436095\n",
554 "13164036458569648337239753460458804039861886925068638906788872191\n",
555 "26328072917139296674479506920917608079723773850137277813577744383\n",
556 "52656145834278593348959013841835216159447547700274555627155488767\n",
557 "105312291668557186697918027683670432318895095400549111254310977535\n",
558 "210624583337114373395836055367340864637790190801098222508621955071\n",
559 "421249166674228746791672110734681729275580381602196445017243910143\n",
560 "842498333348457493583344221469363458551160763204392890034487820287\n",
561 "1684996666696914987166688442938726917102321526408785780068975640575\n",
562 "3369993333393829974333376885877453834204643052817571560137951281151\n",
563 "6739986666787659948666753771754907668409286105635143120275902562303\n",
564 "13479973333575319897333507543509815336818572211270286240551805124607\n",
565 "26959946667150639794667015087019630673637144422540572481103610249215\n",
566 "53919893334301279589334030174039261347274288845081144962207220498431\n",
567 "107839786668602559178668060348078522694548577690162289924414440996863\n",
568 "215679573337205118357336120696157045389097155380324579848828881993727\n",
569 "431359146674410236714672241392314090778194310760649159697657763987455\n",
570 "862718293348820473429344482784628181556388621521298319395315527974911\n",
571 "1725436586697640946858688965569256363112777243042596638790631055949823\n",
572 "3450873173395281893717377931138512726225554486085193277581262111899647\n",
573 "6901746346790563787434755862277025452451108972170386555162524223799295\n",
574 "13803492693581127574869511724554050904902217944340773110325048447598591\n",
575 "27606985387162255149739023449108101809804435888681546220650096895197183\n",
576 "55213970774324510299478046898216203619608871777363092441300193790394367\n",
577 "110427941548649020598956093796432407239217743554726184882600387580788735\n",
578 "220855883097298041197912187592864814478435487109452369765200775161577471\n",
579 "441711766194596082395824375185729628956870974218904739530401550323154943\n",
580 "883423532389192164791648750371459257913741948437809479060803100646309887\n",
581 "1766847064778384329583297500742918515827483896875618958121606201292619775\n",
582 "3533694129556768659166595001485837031654967793751237916243212402585239551\n",
583 "7067388259113537318333190002971674063309935587502475832486424805170479103\n",
584 "14134776518227074636666380005943348126619871175004951664972849610340958207\n",
585 "28269553036454149273332760011886696253239742350009903329945699220681916415\n",
586 "56539106072908298546665520023773392506479484700019806659891398441363832831\n",
587 "113078212145816597093331040047546785012958969400039613319782796882727665663\n",
588 "226156424291633194186662080095093570025917938800079226639565593765455331327\n",
589 "452312848583266388373324160190187140051835877600158453279131187530910662655\n",
590 "904625697166532776746648320380374280103671755200316906558262375061821325311\n",
591 "1809251394333065553493296640760748560207343510400633813116524750123642650623\n",
592 "3618502788666131106986593281521497120414687020801267626233049500247285301247\n",
593 "7237005577332262213973186563042994240829374041602535252466099000494570602495\n",
594 "14474011154664524427946373126085988481658748083205070504932198000989141204991\n",
595 "28948022309329048855892746252171976963317496166410141009864396001978282409983\n",
596 "57896044618658097711785492504343953926634992332820282019728792003956564819967\n",
597 "115792089237316195423570985008687907853269984665640564039457584007913129639935\n",
598 "231584178474632390847141970017375815706539969331281128078915168015826259279871\n",
599 "463168356949264781694283940034751631413079938662562256157830336031652518559743\n",
600 "926336713898529563388567880069503262826159877325124512315660672063305037119487\n",
601 "1852673427797059126777135760139006525652319754650249024631321344126610074238975\n",
602 "3705346855594118253554271520278013051304639509300498049262642688253220148477951\n",
603 "7410693711188236507108543040556026102609279018600996098525285376506440296955903\n",
604 "14821387422376473014217086081112052205218558037201992197050570753012880593911807\n",
605 "29642774844752946028434172162224104410437116074403984394101141506025761187823615\n",
606 "59285549689505892056868344324448208820874232148807968788202283012051522375647231\n",
607 "118571099379011784113736688648896417641748464297615937576404566024103044751294463\n",
608 "237142198758023568227473377297792835283496928595231875152809132048206089502588927\n",
609 "474284397516047136454946754595585670566993857190463750305618264096412179005177855\n",
610 "948568795032094272909893509191171341133987714380927500611236528192824358010355711\n",
611 "1897137590064188545819787018382342682267975428761855001222473056385648716020711423\n",
612 "3794275180128377091639574036764685364535950857523710002444946112771297432041422847\n",
613 "7588550360256754183279148073529370729071901715047420004889892225542594864082845695\n",
614 "15177100720513508366558296147058741458143803430094840009779784451085189728165691391\n",
615 "30354201441027016733116592294117482916287606860189680019559568902170379456331382783\n",
616 "60708402882054033466233184588234965832575213720379360039119137804340758912662765567\n",
617 "121416805764108066932466369176469931665150427440758720078238275608681517825325531135\n",
618 "242833611528216133864932738352939863330300854881517440156476551217363035650651062271\n",
619 "485667223056432267729865476705879726660601709763034880312953102434726071301302124543\n",
620 "971334446112864535459730953411759453321203419526069760625906204869452142602604249087\n",
621 "1942668892225729070919461906823518906642406839052139521251812409738904285205208498175\n",
622 "3885337784451458141838923813647037813284813678104279042503624819477808570410416996351\n",
623 "7770675568902916283677847627294075626569627356208558085007249638955617140820833992703\n",
624 "15541351137805832567355695254588151253139254712417116170014499277911234281641667985407\n",
625 "31082702275611665134711390509176302506278509424834232340028998555822468563283335970815\n",
626 "62165404551223330269422781018352605012557018849668464680057997111644937126566671941631\n",
627 "124330809102446660538845562036705210025114037699336929360115994223289874253133343883263\n",
628 "248661618204893321077691124073410420050228075398673858720231988446579748506266687766527\n",
629 "497323236409786642155382248146820840100456150797347717440463976893159497012533375533055\n",
630 "994646472819573284310764496293641680200912301594695434880927953786318994025066751066111\n",
631 "1989292945639146568621528992587283360401824603189390869761855907572637988050133502132223\n",
632 "3978585891278293137243057985174566720803649206378781739523711815145275976100267004264447\n",
633 "7957171782556586274486115970349133441607298412757563479047423630290551952200534008528895\n",
634 "15914343565113172548972231940698266883214596825515126958094847260581103904401068017057791\n",
635 "31828687130226345097944463881396533766429193651030253916189694521162207808802136034115583\n",
636 "63657374260452690195888927762793067532858387302060507832379389042324415617604272068231167\n",
637 "127314748520905380391777855525586135065716774604121015664758778084648831235208544136462335\n",
638 "254629497041810760783555711051172270131433549208242031329517556169297662470417088272924671\n",
639 "509258994083621521567111422102344540262867098416484062659035112338595324940834176545849343\n",
640 "1018517988167243043134222844204689080525734196832968125318070224677190649881668353091698687\n",
641 "2037035976334486086268445688409378161051468393665936250636140449354381299763336706183397375\n",
642 "4074071952668972172536891376818756322102936787331872501272280898708762599526673412366794751\n",
643 "8148143905337944345073782753637512644205873574663745002544561797417525199053346824733589503\n",
644 "16296287810675888690147565507275025288411747149327490005089123594835050398106693649467179007\n",
645 "32592575621351777380295131014550050576823494298654980010178247189670100796213387298934358015\n",
646 "65185151242703554760590262029100101153646988597309960020356494379340201592426774597868716031\n",
647 "130370302485407109521180524058200202307293977194619920040712988758680403184853549195737432063\n",
648 "260740604970814219042361048116400404614587954389239840081425977517360806369707098391474864127\n",
649 "521481209941628438084722096232800809229175908778479680162851955034721612739414196782949728255\n",
650 "1042962419883256876169444192465601618458351817556959360325703910069443225478828393565899456511\n",
651 "2085924839766513752338888384931203236916703635113918720651407820138886450957656787131798913023\n",
652 "4171849679533027504677776769862406473833407270227837441302815640277772901915313574263597826047\n",
653 "8343699359066055009355553539724812947666814540455674882605631280555545803830627148527195652095\n",
654 "16687398718132110018711107079449625895333629080911349765211262561111091607661254297054391304191\n",
655 "33374797436264220037422214158899251790667258161822699530422525122222183215322508594108782608383\n",
656 "66749594872528440074844428317798503581334516323645399060845050244444366430645017188217565216767\n",
657 "133499189745056880149688856635597007162669032647290798121690100488888732861290034376435130433535\n",
658 "266998379490113760299377713271194014325338065294581596243380200977777465722580068752870260867071\n",
659 "533996758980227520598755426542388028650676130589163192486760401955554931445160137505740521734143\n",
660 "1067993517960455041197510853084776057301352261178326384973520803911109862890320275011481043468287\n",
661 "2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936575\n",
662 "4271974071841820164790043412339104229205409044713305539894083215644439451561281100045924173873151\n",
663 "8543948143683640329580086824678208458410818089426611079788166431288878903122562200091848347746303\n",
664 "17087896287367280659160173649356416916821636178853222159576332862577757806245124400183696695492607\n",
665 "34175792574734561318320347298712833833643272357706444319152665725155515612490248800367393390985215\n",
666 "68351585149469122636640694597425667667286544715412888638305331450311031224980497600734786781970431\n",
667 "136703170298938245273281389194851335334573089430825777276610662900622062449960995201469573563940863\n",
668 "273406340597876490546562778389702670669146178861651554553221325801244124899921990402939147127881727\n",
669 "546812681195752981093125556779405341338292357723303109106442651602488249799843980805878294255763455\n",
670 "1093625362391505962186251113558810682676584715446606218212885303204976499599687961611756588511526911\n",
671 "2187250724783011924372502227117621365353169430893212436425770606409952999199375923223513177023053823\n",
672 "4374501449566023848745004454235242730706338861786424872851541212819905998398751846447026354046107647\n",
673 "8749002899132047697490008908470485461412677723572849745703082425639811996797503692894052708092215295\n",
674 "17498005798264095394980017816940970922825355447145699491406164851279623993595007385788105416184430591\n",
675 "34996011596528190789960035633881941845650710894291398982812329702559247987190014771576210832368861183\n",
676 "69992023193056381579920071267763883691301421788582797965624659405118495974380029543152421664737722367\n",
677 "139984046386112763159840142535527767382602843577165595931249318810236991948760059086304843329475444735\n",
678 "279968092772225526319680285071055534765205687154331191862498637620473983897520118172609686658950889471\n",
679 "559936185544451052639360570142111069530411374308662383724997275240947967795040236345219373317901778943\n",
680 "1119872371088902105278721140284222139060822748617324767449994550481895935590080472690438746635803557887\n",
681 "2239744742177804210557442280568444278121645497234649534899989100963791871180160945380877493271607115775\n",
682 "4479489484355608421114884561136888556243290994469299069799978201927583742360321890761754986543214231551\n",
683 "8958978968711216842229769122273777112486581988938598139599956403855167484720643781523509973086428463103\n",
684 "17917957937422433684459538244547554224973163977877196279199912807710334969441287563047019946172856926207\n",
685 "35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852415\n",
686 "71671831749689734737838152978190216899892655911508785116799651230841339877765150252188079784691427704831\n",
687 "143343663499379469475676305956380433799785311823017570233599302461682679755530300504376159569382855409663\n",
688 "286687326998758938951352611912760867599570623646035140467198604923365359511060601008752319138765710819327\n",
689 "573374653997517877902705223825521735199141247292070280934397209846730719022121202017504638277531421638655\n",
690 "1146749307995035755805410447651043470398282494584140561868794419693461438044242404035009276555062843277311\n",
691 "2293498615990071511610820895302086940796564989168281123737588839386922876088484808070018553110125686554623\n",
692 "4586997231980143023221641790604173881593129978336562247475177678773845752176969616140037106220251373109247\n",
693 "9173994463960286046443283581208347763186259956673124494950355357547691504353939232280074212440502746218495\n",
694 "18347988927920572092886567162416695526372519913346248989900710715095383008707878464560148424881005492436991\n",
695 "36695977855841144185773134324833391052745039826692497979801421430190766017415756929120296849762010984873983\n",
696 "73391955711682288371546268649666782105490079653384995959602842860381532034831513858240593699524021969747967\n",
697 "146783911423364576743092537299333564210980159306769991919205685720763064069663027716481187399048043939495935\n",
698 "293567822846729153486185074598667128421960318613539983838411371441526128139326055432962374798096087878991871\n",
699 "587135645693458306972370149197334256843920637227079967676822742883052256278652110865924749596192175757983743\n",
700 "1174271291386916613944740298394668513687841274454159935353645485766104512557304221731849499192384351515967487\n",
701 "2348542582773833227889480596789337027375682548908319870707290971532209025114608443463698998384768703031934975\n",
702 "4697085165547666455778961193578674054751365097816639741414581943064418050229216886927397996769537406063869951\n",
703 "9394170331095332911557922387157348109502730195633279482829163886128836100458433773854795993539074812127739903\n",
704 "18788340662190665823115844774314696219005460391266558965658327772257672200916867547709591987078149624255479807\n",
705 "37576681324381331646231689548629392438010920782533117931316655544515344401833735095419183974156299248510959615\n",
706 "75153362648762663292463379097258784876021841565066235862633311089030688803667470190838367948312598497021919231\n",
707 "150306725297525326584926758194517569752043683130132471725266622178061377607334940381676735896625196994043838463\n",
708 "300613450595050653169853516389035139504087366260264943450533244356122755214669880763353471793250393988087676927\n",
709 "601226901190101306339707032778070279008174732520529886901066488712245510429339761526706943586500787976175353855\n",
710 "1202453802380202612679414065556140558016349465041059773802132977424491020858679523053413887173001575952350707711\n",
711 "2404907604760405225358828131112281116032698930082119547604265954848982041717359046106827774346003151904701415423\n",
712 "4809815209520810450717656262224562232065397860164239095208531909697964083434718092213655548692006303809402830847\n",
713 "9619630419041620901435312524449124464130795720328478190417063819395928166869436184427311097384012607618805661695\n",
714 "19239260838083241802870625048898248928261591440656956380834127638791856333738872368854622194768025215237611323391\n",
715 "38478521676166483605741250097796497856523182881313912761668255277583712667477744737709244389536050430475222646783\n",
716 "76957043352332967211482500195592995713046365762627825523336510555167425334955489475418488779072100860950445293567\n",
717 "153914086704665934422965000391185991426092731525255651046673021110334850669910978950836977558144201721900890587135\n",
718 "307828173409331868845930000782371982852185463050511302093346042220669701339821957901673955116288403443801781174271\n",
719 "615656346818663737691860001564743965704370926101022604186692084441339402679643915803347910232576806887603562348543\n",
720 "1231312693637327475383720003129487931408741852202045208373384168882678805359287831606695820465153613775207124697087\n",
721 "2462625387274654950767440006258975862817483704404090416746768337765357610718575663213391640930307227550414249394175\n",
722 "4925250774549309901534880012517951725634967408808180833493536675530715221437151326426783281860614455100828498788351\n",
723 "9850501549098619803069760025035903451269934817616361666987073351061430442874302652853566563721228910201656997576703\n",
724 "19701003098197239606139520050071806902539869635232723333974146702122860885748605305707133127442457820403313995153407\n",
725 "39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306815\n",
726 "78804012392788958424558080200287227610159478540930893335896586808491443542994421222828532509769831281613255980613631\n",
727 "157608024785577916849116160400574455220318957081861786671793173616982887085988842445657065019539662563226511961227263\n",
728 "315216049571155833698232320801148910440637914163723573343586347233965774171977684891314130039079325126453023922454527\n",
729 "630432099142311667396464641602297820881275828327447146687172694467931548343955369782628260078158650252906047844909055\n",
730 "1260864198284623334792929283204595641762551656654894293374345388935863096687910739565256520156317300505812095689818111\n",
731 "2521728396569246669585858566409191283525103313309788586748690777871726193375821479130513040312634601011624191379636223\n",
732 "5043456793138493339171717132818382567050206626619577173497381555743452386751642958261026080625269202023248382759272447\n",
733 "10086913586276986678343434265636765134100413253239154346994763111486904773503285916522052161250538404046496765518544895\n",
734 "20173827172553973356686868531273530268200826506478308693989526222973809547006571833044104322501076808092993531037089791\n",
735 "40347654345107946713373737062547060536401653012956617387979052445947619094013143666088208645002153616185987062074179583\n",
736 "80695308690215893426747474125094121072803306025913234775958104891895238188026287332176417290004307232371974124148359167\n",
737 "161390617380431786853494948250188242145606612051826469551916209783790476376052574664352834580008614464743948248296718335\n",
738 "322781234760863573706989896500376484291213224103652939103832419567580952752105149328705669160017228929487896496593436671\n",
739 "645562469521727147413979793000752968582426448207305878207664839135161905504210298657411338320034457858975792993186873343\n",
740 "1291124939043454294827959586001505937164852896414611756415329678270323811008420597314822676640068915717951585986373746687\n",
741 "2582249878086908589655919172003011874329705792829223512830659356540647622016841194629645353280137831435903171972747493375\n",
742 "5164499756173817179311838344006023748659411585658447025661318713081295244033682389259290706560275662871806343945494986751\n",
743 "10328999512347634358623676688012047497318823171316894051322637426162590488067364778518581413120551325743612687890989973503\n",
744 "20657999024695268717247353376024094994637646342633788102645274852325180976134729557037162826241102651487225375781979947007\n",
745 "41315998049390537434494706752048189989275292685267576205290549704650361952269459114074325652482205302974450751563959894015\n",
746 "82631996098781074868989413504096379978550585370535152410581099409300723904538918228148651304964410605948901503127919788031\n",
747 "165263992197562149737978827008192759957101170741070304821162198818601447809077836456297302609928821211897803006255839576063\n",
748 "330527984395124299475957654016385519914202341482140609642324397637202895618155672912594605219857642423795606012511679152127\n",
749 "661055968790248598951915308032771039828404682964281219284648795274405791236311345825189210439715284847591212025023358304255\n",
750 "1322111937580497197903830616065542079656809365928562438569297590548811582472622691650378420879430569695182424050046716608511\n",
751 "2644223875160994395807661232131084159313618731857124877138595181097623164945245383300756841758861139390364848100093433217023\n",
752 "5288447750321988791615322464262168318627237463714249754277190362195246329890490766601513683517722278780729696200186866434047\n",
753 "10576895500643977583230644928524336637254474927428499508554380724390492659780981533203027367035444557561459392400373732868095\n",
754 "21153791001287955166461289857048673274508949854856999017108761448780985319561963066406054734070889115122918784800747465736191\n",
755 "42307582002575910332922579714097346549017899709713998034217522897561970639123926132812109468141778230245837569601494931472383\n",
756 "84615164005151820665845159428194693098035799419427996068435045795123941278247852265624218936283556460491675139202989862944767\n",
757 "169230328010303641331690318856389386196071598838855992136870091590247882556495704531248437872567112920983350278405979725889535\n",
758 "338460656020607282663380637712778772392143197677711984273740183180495765112991409062496875745134225841966700556811959451779071\n",
759 "676921312041214565326761275425557544784286395355423968547480366360991530225982818124993751490268451683933401113623918903558143\n",
760 "1353842624082429130653522550851115089568572790710847937094960732721983060451965636249987502980536903367866802227247837807116287\n",
761 "2707685248164858261307045101702230179137145581421695874189921465443966120903931272499975005961073806735733604454495675614232575\n",
762 "5415370496329716522614090203404460358274291162843391748379842930887932241807862544999950011922147613471467208908991351228465151\n",
763 "10830740992659433045228180406808920716548582325686783496759685861775864483615725089999900023844295226942934417817982702456930303\n",
764 "21661481985318866090456360813617841433097164651373566993519371723551728967231450179999800047688590453885868835635965404913860607\n",
765 "43322963970637732180912721627235682866194329302747133987038743447103457934462900359999600095377180907771737671271930809827721215\n",
766 "86645927941275464361825443254471365732388658605494267974077486894206915868925800719999200190754361815543475342543861619655442431\n",
767 "173291855882550928723650886508942731464777317210988535948154973788413831737851601439998400381508723631086950685087723239310884863\n",
768 "346583711765101857447301773017885462929554634421977071896309947576827663475703202879996800763017447262173901370175446478621769727\n",
769 "693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455\n",
770 "1386334847060407429789207092071541851718218537687908287585239790307310653902812811519987203052069789048695605480701785914487078911\n",
771 "2772669694120814859578414184143083703436437075375816575170479580614621307805625623039974406104139578097391210961403571828974157823\n",
772 "5545339388241629719156828368286167406872874150751633150340959161229242615611251246079948812208279156194782421922807143657948315647\n",
773 "11090678776483259438313656736572334813745748301503266300681918322458485231222502492159897624416558312389564843845614287315896631295\n",
774 "22181357552966518876627313473144669627491496603006532601363836644916970462445004984319795248833116624779129687691228574631793262591\n",
775 "44362715105933037753254626946289339254982993206013065202727673289833940924890009968639590497666233249558259375382457149263586525183\n",
776 "88725430211866075506509253892578678509965986412026130405455346579667881849780019937279180995332466499116518750764914298527173050367\n",
777 "177450860423732151013018507785157357019931972824052260810910693159335763699560039874558361990664932998233037501529828597054346100735\n",
778 "354901720847464302026037015570314714039863945648104521621821386318671527399120079749116723981329865996466075003059657194108692201471\n",
779 "709803441694928604052074031140629428079727891296209043243642772637343054798240159498233447962659731992932150006119314388217384402943\n",
780 "1419606883389857208104148062281258856159455782592418086487285545274686109596480318996466895925319463985864300012238628776434768805887\n",
781 "2839213766779714416208296124562517712318911565184836172974571090549372219192960637992933791850638927971728600024477257552869537611775\n",
782 "5678427533559428832416592249125035424637823130369672345949142181098744438385921275985867583701277855943457200048954515105739075223551\n",
783 "11356855067118857664833184498250070849275646260739344691898284362197488876771842551971735167402555711886914400097909030211478150447103\n",
784 "22713710134237715329666368996500141698551292521478689383796568724394977753543685103943470334805111423773828800195818060422956300894207\n",
785 "45427420268475430659332737993000283397102585042957378767593137448789955507087370207886940669610222847547657600391636120845912601788415\n",
786 "90854840536950861318665475986000566794205170085914757535186274897579911014174740415773881339220445695095315200783272241691825203576831\n",
787 "181709681073901722637330951972001133588410340171829515070372549795159822028349480831547762678440891390190630401566544483383650407153663\n",
788 "363419362147803445274661903944002267176820680343659030140745099590319644056698961663095525356881782780381260803133088966767300814307327\n",
789 "726838724295606890549323807888004534353641360687318060281490199180639288113397923326191050713763565560762521606266177933534601628614655\n",
790 "1453677448591213781098647615776009068707282721374636120562980398361278576226795846652382101427527131121525043212532355867069203257229311\n",
791 "2907354897182427562197295231552018137414565442749272241125960796722557152453591693304764202855054262243050086425064711734138406514458623\n",
792 "5814709794364855124394590463104036274829130885498544482251921593445114304907183386609528405710108524486100172850129423468276813028917247\n",
793 "11629419588729710248789180926208072549658261770997088964503843186890228609814366773219056811420217048972200345700258846936553626057834495\n",
794 "23258839177459420497578361852416145099316523541994177929007686373780457219628733546438113622840434097944400691400517693873107252115668991\n",
795 "46517678354918840995156723704832290198633047083988355858015372747560914439257467092876227245680868195888801382801035387746214504231337983\n",
796 "93035356709837681990313447409664580397266094167976711716030745495121828878514934185752454491361736391777602765602070775492429008462675967\n",
797 "186070713419675363980626894819329160794532188335953423432061490990243657757029868371504908982723472783555205531204141550984858016925351935\n",
798 "372141426839350727961253789638658321589064376671906846864122981980487315514059736743009817965446945567110411062408283101969716033850703871\n",
799 "744282853678701455922507579277316643178128753343813693728245963960974631028119473486019635930893891134220822124816566203939432067701407743\n",
800 "1488565707357402911845015158554633286356257506687627387456491927921949262056238946972039271861787782268441644249633132407878864135402815487\n",
801 "2977131414714805823690030317109266572712515013375254774912983855843898524112477893944078543723575564536883288499266264815757728270805630975\n",
802 "5954262829429611647380060634218533145425030026750509549825967711687797048224955787888157087447151129073766576998532529631515456541611261951\n",
803 "11908525658859223294760121268437066290850060053501019099651935423375594096449911575776314174894302258147533153997065059263030913083222523903\n",
804 "23817051317718446589520242536874132581700120107002038199303870846751188192899823151552628349788604516295066307994130118526061826166445047807\n",
805 "47634102635436893179040485073748265163400240214004076398607741693502376385799646303105256699577209032590132615988260237052123652332890095615\n",
806 "95268205270873786358080970147496530326800480428008152797215483387004752771599292606210513399154418065180265231976520474104247304665780191231\n",
807 "190536410541747572716161940294993060653600960856016305594430966774009505543198585212421026798308836130360530463953040948208494609331560382463\n",
808 "381072821083495145432323880589986121307201921712032611188861933548019011086397170424842053596617672260721060927906081896416989218663120764927\n",
809 "762145642166990290864647761179972242614403843424065222377723867096038022172794340849684107193235344521442121855812163792833978437326241529855\n",
810 "1524291284333980581729295522359944485228807686848130444755447734192076044345588681699368214386470689042884243711624327585667956874652483059711\n",
811 "3048582568667961163458591044719888970457615373696260889510895468384152088691177363398736428772941378085768487423248655171335913749304966119423\n",
812 "6097165137335922326917182089439777940915230747392521779021790936768304177382354726797472857545882756171536974846497310342671827498609932238847\n",
813 "12194330274671844653834364178879555881830461494785043558043581873536608354764709453594945715091765512343073949692994620685343654997219864477695\n",
814 "24388660549343689307668728357759111763660922989570087116087163747073216709529418907189891430183531024686147899385989241370687309994439728955391\n",
815 "48777321098687378615337456715518223527321845979140174232174327494146433419058837814379782860367062049372295798771978482741374619988879457910783\n",
816 "97554642197374757230674913431036447054643691958280348464348654988292866838117675628759565720734124098744591597543956965482749239977758915821567\n",
817 "195109284394749514461349826862072894109287383916560696928697309976585733676235351257519131441468248197489183195087913930965498479955517831643135\n",
818 "390218568789499028922699653724145788218574767833121393857394619953171467352470702515038262882936496394978366390175827861930996959911035663286271\n",
819 "780437137578998057845399307448291576437149535666242787714789239906342934704941405030076525765872992789956732780351655723861993919822071326572543\n",
820 "1560874275157996115690798614896583152874299071332485575429578479812685869409882810060153051531745985579913465560703311447723987839644142653145087\n",
821 "3121748550315992231381597229793166305748598142664971150859156959625371738819765620120306103063491971159826931121406622895447975679288285306290175\n",
822 "6243497100631984462763194459586332611497196285329942301718313919250743477639531240240612206126983942319653862242813245790895951358576570612580351\n",
823 "12486994201263968925526388919172665222994392570659884603436627838501486955279062480481224412253967884639307724485626491581791902717153141225160703\n",
824 "24973988402527937851052777838345330445988785141319769206873255677002973910558124960962448824507935769278615448971252983163583805434306282450321407\n",
825 "49947976805055875702105555676690660891977570282639538413746511354005947821116249921924897649015871538557230897942505966327167610868612564900642815\n",
826 "99895953610111751404211111353381321783955140565279076827493022708011895642232499843849795298031743077114461795885011932654335221737225129801285631\n",
827 "199791907220223502808422222706762643567910281130558153654986045416023791284464999687699590596063486154228923591770023865308670443474450259602571263\n",
828 "399583814440447005616844445413525287135820562261116307309972090832047582568929999375399181192126972308457847183540047730617340886948900519205142527\n",
829 "799167628880894011233688890827050574271641124522232614619944181664095165137859998750798362384253944616915694367080095461234681773897801038410285055\n",
830 "1598335257761788022467377781654101148543282249044465229239888363328190330275719997501596724768507889233831388734160190922469363547795602076820570111\n",
831 "3196670515523576044934755563308202297086564498088930458479776726656380660551439995003193449537015778467662777468320381844938727095591204153641140223\n",
832 "6393341031047152089869511126616404594173128996177860916959553453312761321102879990006386899074031556935325554936640763689877454191182408307282280447\n",
833 "12786682062094304179739022253232809188346257992355721833919106906625522642205759980012773798148063113870651109873281527379754908382364816614564560895\n",
834 "25573364124188608359478044506465618376692515984711443667838213813251045284411519960025547596296126227741302219746563054759509816764729633229129121791\n",
835 "51146728248377216718956089012931236753385031969422887335676427626502090568823039920051095192592252455482604439493126109519019633529459266458258243583\n",
836 "102293456496754433437912178025862473506770063938845774671352855253004181137646079840102190385184504910965208878986252219038039267058918532916516487167\n",
837 "204586912993508866875824356051724947013540127877691549342705710506008362275292159680204380770369009821930417757972504438076078534117837065833032974335\n",
838 "409173825987017733751648712103449894027080255755383098685411421012016724550584319360408761540738019643860835515945008876152157068235674131666065948671\n",
839 "818347651974035467503297424206899788054160511510766197370822842024033449101168638720817523081476039287721671031890017752304314136471348263332131897343\n",
840 "1636695303948070935006594848413799576108321023021532394741645684048066898202337277441635046162952078575443342063780035504608628272942696526664263794687\n"
841 ]
842 }
843 ],
844 "prompt_number": 6
845 },
846 {
847 "cell_type": "heading",
848 "level": 2,
849 "metadata": {},
850 "source": [
851 "Capturing output with <tt>%%capture</tt>"
852 ]
853 },
854 {
855 "cell_type": "markdown",
856 "metadata": {},
857 "source": [
858 "IPython has a cell magic, `%%capture`, which captures the stdout/stderr of a cell. With this magic you can discard these streams or store them in a variable."
859 ]
860 },
861 {
862 "cell_type": "code",
863 "collapsed": false,
864 "input": [
865 "import sys"
866 ],
867 "language": "python",
868 "metadata": {},
869 "outputs": [],
870 "prompt_number": 9
871 },
872 {
873 "cell_type": "markdown",
874 "metadata": {},
875 "source": [
876 "By default, `%%capture` discards these streams. This is a simple way to suppress unwanted output."
877 ]
878 },
879 {
880 "cell_type": "code",
881 "collapsed": false,
882 "input": [
883 "%%capture\n",
884 "print 'hi, stdout'\n",
885 "print >> sys.stderr, 'hi, stderr'"
886 ],
887 "language": "python",
888 "metadata": {},
889 "outputs": [],
890 "prompt_number": 10
891 },
892 {
893 "cell_type": "markdown",
894 "metadata": {},
895 "source": [
896 "If you specify a name, then stdout/stderr will be stored in an object in your namespace."
897 ]
898 },
899 {
900 "cell_type": "code",
901 "collapsed": false,
902 "input": [
903 "%%capture captured\n",
904 "print 'hi, stdout'\n",
905 "print >> sys.stderr, 'hi, stderr'"
906 ],
907 "language": "python",
908 "metadata": {},
909 "outputs": [],
910 "prompt_number": 11
911 },
912 {
913 "cell_type": "code",
914 "collapsed": false,
915 "input": [
916 "captured"
917 ],
918 "language": "python",
919 "metadata": {},
920 "outputs": [
921 {
922 "output_type": "pyout",
923 "prompt_number": 12,
924 "text": [
925 "<IPython.utils.io.CapturedIO at 0x107ea2590>"
926 ]
927 }
928 ],
929 "prompt_number": 12
930 },
931 {
932 "cell_type": "markdown",
933 "metadata": {},
934 "source": [
935 "Calling the object writes the output to stdout/stderr as appropriate."
936 ]
937 },
938 {
939 "cell_type": "code",
940 "collapsed": false,
941 "input": [
942 "captured()"
943 ],
944 "language": "python",
945 "metadata": {},
946 "outputs": [
947 {
948 "output_type": "stream",
949 "stream": "stdout",
950 "text": [
951 "hi, stdout\n"
952 ]
953 },
954 {
955 "output_type": "stream",
956 "stream": "stderr",
957 "text": [
958 "hi, stderr\n"
959 ]
960 }
961 ],
962 "prompt_number": 13
963 },
964 {
965 "cell_type": "code",
966 "collapsed": false,
967 "input": [
968 "captured.stdout"
969 ],
970 "language": "python",
971 "metadata": {},
972 "outputs": [
973 {
974 "output_type": "pyout",
975 "prompt_number": 14,
976 "text": [
977 "'hi, stdout\\n'"
978 ]
979 }
980 ],
981 "prompt_number": 14
982 },
983 {
984 "cell_type": "code",
985 "collapsed": false,
986 "input": [
987 "captured.stderr"
988 ],
989 "language": "python",
990 "metadata": {},
991 "outputs": [
992 {
993 "output_type": "pyout",
994 "prompt_number": 15,
995 "text": [
996 "'hi, stderr\\n'"
997 ]
998 }
999 ],
1000 "prompt_number": 15
1001 },
1002 {
1003 "cell_type": "markdown",
1004 "metadata": {},
1005 "source": [
1006 "`%%capture` only captures stdout/stderr, not other output types, so you can still do plots and use IPython's display system inside `%%capture`"
1007 ]
1008 },
1009 {
1010 "cell_type": "code",
1011 "collapsed": false,
1012 "input": [
1013 "%pylab inline"
1014 ],
1015 "language": "python",
1016 "metadata": {},
1017 "outputs": [
1018 {
1019 "output_type": "stream",
1020 "stream": "stdout",
1021 "text": [
1022 "\n",
1023 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
1024 "For more information, type 'help(pylab)'.\n"
1025 ]
1026 }
1027 ],
1028 "prompt_number": 16
1029 },
1030 {
1031 "cell_type": "code",
1032 "collapsed": false,
1033 "input": [
1034 "%%capture wontshutup\n",
1035 "\n",
1036 "print \"setting up X\"\n",
1037 "x = np.linspace(0,5,1000)\n",
1038 "print \"step 2: constructing y-data\"\n",
1039 "y = np.sin(x)\n",
1040 "print \"step 3: display info about y\"\n",
1041 "plt.plot(x,y)\n",
1042 "print \"okay, I'm done now\""
1043 ],
1044 "language": "python",
1045 "metadata": {},
1046 "outputs": [
1047 {
1048 "output_type": "display_data",
1049 "png": "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\nRU5ErkJggg==\n",
1050 "text": [
1051 "<matplotlib.figure.Figure at 0x108356ed0>"
1052 ]
1053 }
1054 ],
1055 "prompt_number": 17
1056 },
1057 {
1058 "cell_type": "code",
1059 "collapsed": false,
1060 "input": [
1061 "wontshutup()"
1062 ],
1063 "language": "python",
1064 "metadata": {},
1065 "outputs": [
1066 {
1067 "output_type": "stream",
1068 "stream": "stdout",
1069 "text": [
1070 "setting up X\n",
1071 "step 2: constructing y-data\n",
1072 "step 3: display info about y\n",
1073 "okay, I'm done now\n"
1074 ]
1075 }
1076 ],
1077 "prompt_number": 18
1078 },
1079 {
1080 "cell_type": "markdown",
1081 "metadata": {},
1082 "source": [
1083 "And you can selectively disable capturing stdout or stderr by passing `--no-stdout/err`."
1084 ]
1085 },
1086 {
1087 "cell_type": "code",
1088 "collapsed": false,
1089 "input": [
1090 "%%capture cap --no-stderr\n",
1091 "print 'hi, stdout'\n",
1092 "print >> sys.stderr, \"hello, stderr\""
1093 ],
1094 "language": "python",
1095 "metadata": {},
1096 "outputs": [
1097 {
1098 "output_type": "stream",
1099 "stream": "stderr",
1100 "text": [
1101 "hello, stderr"
1102 ]
1103 },
1104 {
1105 "output_type": "stream",
1106 "stream": "stderr",
1107 "text": [
1108 "\n"
1109 ]
1110 }
1111 ],
1112 "prompt_number": 19
1113 },
1114 {
1115 "cell_type": "code",
1116 "collapsed": false,
1117 "input": [
1118 "cap.stdout"
1119 ],
1120 "language": "python",
1121 "metadata": {},
1122 "outputs": [
1123 {
1124 "output_type": "pyout",
1125 "prompt_number": 20,
1126 "text": [
1127 "'hi, stdout\\n'"
1128 ]
1129 }
1130 ],
1131 "prompt_number": 20
1132 },
1133 {
1134 "cell_type": "code",
1135 "collapsed": false,
1136 "input": [
1137 "cap.stderr"
1138 ],
1139 "language": "python",
1140 "metadata": {},
1141 "outputs": [
1142 {
1143 "output_type": "pyout",
1144 "prompt_number": 21,
1145 "text": [
1146 "''"
1147 ]
1148 }
1149 ],
1150 "prompt_number": 21
1151 }
1152 ],
1153 "metadata": {}
1154 }
1155 ]
1156 } No newline at end of file
@@ -0,0 +1,206 b''
1 {
2 "metadata": {
3 "name": "Part 3 - Pylab and Matplotlib"
4 },
5 "nbformat": 3,
6 "nbformat_minor": 0,
7 "worksheets": [
8 {
9 "cells": [
10 {
11 "cell_type": "heading",
12 "level": 1,
13 "metadata": {},
14 "source": [
15 "Plotting with Pylab and Matplotlib"
16 ]
17 },
18 {
19 "cell_type": "markdown",
20 "metadata": {},
21 "source": [
22 "IPython works with the [Matplotlib](http://matplotlib.org/) plotting library using the the Pylab mode, which integrates Matplotlib with IPython's display system and event loop handling."
23 ]
24 },
25 {
26 "cell_type": "heading",
27 "level": 2,
28 "metadata": {},
29 "source": [
30 "Pylab mode"
31 ]
32 },
33 {
34 "cell_type": "markdown",
35 "metadata": {},
36 "source": [
37 "To make plots using Matplotlib, you must first enable IPython's Pylab mode. There are two ways of doing this:\n",
38 "\n",
39 "1. You can give the `--pylab` command line argument when starting the IPython Notebook Server, to enable plotting in all Notebooks automatically.\n",
40 "2. You can run the `%pylab` magic command to enable plotting in the current Notebook.\n",
41 "\n",
42 "Both commands take an optional argument that specifies which Matplotlib backend should be used. Most of the time, in the Notebook, you will want to use the `inline` backend, which will embed plots inside the Notebook:"
43 ]
44 },
45 {
46 "cell_type": "code",
47 "collapsed": false,
48 "input": [
49 "%pylab inline"
50 ],
51 "language": "python",
52 "metadata": {},
53 "outputs": [
54 {
55 "output_type": "stream",
56 "stream": "stdout",
57 "text": [
58 "\n",
59 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
60 "For more information, type 'help(pylab)'.\n"
61 ]
62 }
63 ],
64 "prompt_number": 4
65 },
66 {
67 "cell_type": "markdown",
68 "metadata": {},
69 "source": [
70 "The equivalent command line argument would be `--pylab inline`."
71 ]
72 },
73 {
74 "cell_type": "markdown",
75 "metadata": {},
76 "source": [
77 "You can also use Matplotlib GUI backends in the Notebook, such as the Qt backend (`%pylab qt`). This will use Matplotlib's interactive Qt UI in a floating window to the side of your browser. Of course, this only works if your browser is running on the same system as the Notebook Server. You can always call the `display` function to paste figures into the Notebook document."
78 ]
79 },
80 {
81 "cell_type": "heading",
82 "level": 2,
83 "metadata": {},
84 "source": [
85 "Making a simple plot"
86 ]
87 },
88 {
89 "cell_type": "markdown",
90 "metadata": {},
91 "source": [
92 "With Pylab enabled, plotting should just work."
93 ]
94 },
95 {
96 "cell_type": "code",
97 "collapsed": false,
98 "input": [
99 "x = linspace(0, 3*pi, 500)\n",
100 "plot(x, sin(x**2))\n",
101 "title('A simple chirp');"
102 ],
103 "language": "python",
104 "metadata": {},
105 "outputs": [
106 {
107 "output_type": "display_data",
108 "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"
109 }
110 ],
111 "prompt_number": 5
112 },
113 {
114 "cell_type": "markdown",
115 "metadata": {},
116 "source": [
117 "These images can be resized by dragging the handle in the lower right corner. Double clicking will return them to their original size."
118 ]
119 },
120 {
121 "cell_type": "markdown",
122 "metadata": {},
123 "source": [
124 "One thing to be aware of is that by default, the `Figure` object is cleared at the end of each cell, so you will need to issue all plotting commands for a single figure in a single cell."
125 ]
126 },
127 {
128 "cell_type": "heading",
129 "level": 2,
130 "metadata": {},
131 "source": [
132 "Loading Matplotlib demos using %load"
133 ]
134 },
135 {
136 "cell_type": "markdown",
137 "metadata": {},
138 "source": [
139 "IPython's `%load` magic can be used to load any Matplotlib demo by its URL:"
140 ]
141 },
142 {
143 "cell_type": "code",
144 "collapsed": false,
145 "input": [
146 "%load http://matplotlib.sourceforge.net/mpl_examples/pylab_examples/integral_demo.py"
147 ],
148 "language": "python",
149 "metadata": {},
150 "outputs": [],
151 "prompt_number": 15
152 },
153 {
154 "cell_type": "code",
155 "collapsed": false,
156 "input": [
157 "#!/usr/bin/env python\n",
158 "\n",
159 "# implement the example graphs/integral from pyx\n",
160 "from pylab import *\n",
161 "from matplotlib.patches import Polygon\n",
162 "\n",
163 "def func(x):\n",
164 " return (x-3)*(x-5)*(x-7)+85\n",
165 "\n",
166 "ax = subplot(111)\n",
167 "\n",
168 "a, b = 2, 9 # integral area\n",
169 "x = arange(0, 10, 0.01)\n",
170 "y = func(x)\n",
171 "plot(x, y, linewidth=1)\n",
172 "\n",
173 "# make the shaded region\n",
174 "ix = arange(a, b, 0.01)\n",
175 "iy = func(ix)\n",
176 "verts = [(a,0)] + zip(ix,iy) + [(b,0)]\n",
177 "poly = Polygon(verts, facecolor='0.8', edgecolor='k')\n",
178 "ax.add_patch(poly)\n",
179 "\n",
180 "text(0.5 * (a + b), 30,\n",
181 " r\"$\\int_a^b f(x)\\mathrm{d}x$\", horizontalalignment='center',\n",
182 " fontsize=20)\n",
183 "\n",
184 "axis([0,10, 0, 180])\n",
185 "figtext(0.9, 0.05, 'x')\n",
186 "figtext(0.1, 0.9, 'y')\n",
187 "ax.set_xticks((a,b))\n",
188 "ax.set_xticklabels(('a','b'))\n",
189 "ax.set_yticks([])\n",
190 "show()\n"
191 ],
192 "language": "python",
193 "metadata": {},
194 "outputs": [
195 {
196 "output_type": "display_data",
197 "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"
198 }
199 ],
200 "prompt_number": 16
201 }
202 ],
203 "metadata": {}
204 }
205 ]
206 } No newline at end of file
@@ -0,0 +1,218 b''
1 {
2 "metadata": {
3 "name": "Part 4 - Markdown Cells"
4 },
5 "nbformat": 3,
6 "nbformat_minor": 0,
7 "worksheets": [
8 {
9 "cells": [
10 {
11 "cell_type": "heading",
12 "level": 1,
13 "metadata": {},
14 "source": [
15 "Markdown Cells"
16 ]
17 },
18 {
19 "cell_type": "markdown",
20 "metadata": {},
21 "source": [
22 "Text can be added to IPython Notebooks using Markdown cells. Markdown is a popular markup language that is a superset of HTML. Its specification can be found here:\n",
23 "\n",
24 "<http://daringfireball.net/projects/markdown/>"
25 ]
26 },
27 {
28 "cell_type": "heading",
29 "level": 2,
30 "metadata": {},
31 "source": [
32 "Markdown basics"
33 ]
34 },
35 {
36 "cell_type": "markdown",
37 "metadata": {},
38 "source": [
39 "You can make text *italic* or **bold**."
40 ]
41 },
42 {
43 "cell_type": "markdown",
44 "metadata": {},
45 "source": [
46 "You can build nested itemized or enumerated lists:\n",
47 "\n",
48 "* One\n",
49 " - Sublist\n",
50 " - This\n",
51 " - Sublist\n",
52 " - That\n",
53 " - The other thing\n",
54 "* Two\n",
55 " - Sublist\n",
56 "* Three\n",
57 " - Sublist\n",
58 "\n",
59 "Now another list:\n",
60 "\n",
61 "1. Here we go\n",
62 " 1. Sublist\n",
63 " 2. Sublist\n",
64 "2. There we go\n",
65 "3. Now this"
66 ]
67 },
68 {
69 "cell_type": "markdown",
70 "metadata": {},
71 "source": [
72 "You can add horizontal rules:\n",
73 "\n",
74 "---"
75 ]
76 },
77 {
78 "cell_type": "markdown",
79 "metadata": {},
80 "source": [
81 "Here is a blockquote:\n",
82 "\n",
83 "> Beautiful is better than ugly.\n",
84 "> Explicit is better than implicit.\n",
85 "> Simple is better than complex.\n",
86 "> Complex is better than complicated.\n",
87 "> Flat is better than nested.\n",
88 "> Sparse is better than dense.\n",
89 "> Readability counts.\n",
90 "> Special cases aren't special enough to break the rules.\n",
91 "> Although practicality beats purity.\n",
92 "> Errors should never pass silently.\n",
93 "> Unless explicitly silenced.\n",
94 "> In the face of ambiguity, refuse the temptation to guess.\n",
95 "> There should be one-- and preferably only one --obvious way to do it.\n",
96 "> Although that way may not be obvious at first unless you're Dutch.\n",
97 "> Now is better than never.\n",
98 "> Although never is often better than *right* now.\n",
99 "> If the implementation is hard to explain, it's a bad idea.\n",
100 "> If the implementation is easy to explain, it may be a good idea.\n",
101 "> Namespaces are one honking great idea -- let's do more of those!"
102 ]
103 },
104 {
105 "cell_type": "markdown",
106 "metadata": {},
107 "source": [
108 "And shorthand for links:\n",
109 "\n",
110 "[IPython's website](http://ipython.org)"
111 ]
112 },
113 {
114 "cell_type": "heading",
115 "level": 2,
116 "metadata": {},
117 "source": [
118 "Headings"
119 ]
120 },
121 {
122 "cell_type": "markdown",
123 "metadata": {},
124 "source": [
125 "If you want, you can add headings using Markdown's syntax:\n",
126 "\n",
127 "# Heading 1\n",
128 "# Heading 2\n",
129 "## Heading 2.1\n",
130 "## Heading 2.2"
131 ]
132 },
133 {
134 "cell_type": "markdown",
135 "metadata": {},
136 "source": [
137 "**BUT most of the time you should use the Notebook's Heading Cells to organize your Notebook content**, as they provide meaningful structure that can be interpreted by other tools, not just large bold fonts."
138 ]
139 },
140 {
141 "cell_type": "heading",
142 "level": 2,
143 "metadata": {},
144 "source": [
145 "Embedded code"
146 ]
147 },
148 {
149 "cell_type": "markdown",
150 "metadata": {},
151 "source": [
152 "You can embed code meant for illustration instead of execution in Python:\n",
153 "\n",
154 " def f(x):\n",
155 " \"\"\"a docstring\"\"\"\n",
156 " return x**2\n",
157 "\n",
158 "or other languages:\n",
159 "\n",
160 " if (i=0; i<n; i++) {\n",
161 " printf(\"hello %d\\n\", i);\n",
162 " x += 4;\n",
163 " }"
164 ]
165 },
166 {
167 "cell_type": "heading",
168 "level": 2,
169 "metadata": {},
170 "source": [
171 "LaTeX Equations"
172 ]
173 },
174 {
175 "cell_type": "markdown",
176 "metadata": {},
177 "source": [
178 "Courtesy of MathJax, you can include mathematical expressions both inline: \n",
179 "$e^{i\\pi} + 1 = 0$ and displayed:\n",
180 "\n",
181 "$$e^x=\\sum_{i=0}^\\infty \\frac{1}{i!}x^i$$"
182 ]
183 },
184 {
185 "cell_type": "heading",
186 "level": 2,
187 "metadata": {},
188 "source": [
189 "General HTML"
190 ]
191 },
192 {
193 "cell_type": "markdown",
194 "metadata": {},
195 "source": [
196 "Because Markdown is a superset of HTML you can even add things like HTML tables:\n",
197 "\n",
198 "<table>\n",
199 "<tr>\n",
200 "<th>Header 1</th>\n",
201 "<th>Header 2</th>\n",
202 "</tr>\n",
203 "<tr>\n",
204 "<td>row 1, cell 1</td>\n",
205 "<td>row 1, cell 2</td>\n",
206 "</tr>\n",
207 "<tr>\n",
208 "<td>row 2, cell 1</td>\n",
209 "<td>row 2, cell 2</td>\n",
210 "</tr>\n",
211 "</table>"
212 ]
213 }
214 ],
215 "metadata": {}
216 }
217 ]
218 } No newline at end of file
@@ -1,6 +1,6 b''
1 {
1 {
2 "metadata": {
2 "metadata": {
3 "name": "Animations_and_Progress"
3 "name": "Animations Using clear_output"
4 },
4 },
5 "nbformat": 3,
5 "nbformat": 3,
6 "nbformat_minor": 0,
6 "nbformat_minor": 0,
@@ -1,6 +1,6 b''
1 {
1 {
2 "metadata": {
2 "metadata": {
3 "name": "display_protocol"
3 "name": "Custom Display Logic"
4 },
4 },
5 "nbformat": 3,
5 "nbformat": 3,
6 "nbformat_minor": 0,
6 "nbformat_minor": 0,
@@ -1,6 +1,6 b''
1 {
1 {
2 "metadata": {
2 "metadata": {
3 "name": "cython_extension"
3 "name": "Cython Magics"
4 },
4 },
5 "nbformat": 3,
5 "nbformat": 3,
6 "nbformat_minor": 0,
6 "nbformat_minor": 0,
@@ -1,6 +1,6 b''
1 {
1 {
2 "metadata": {
2 "metadata": {
3 "name": "publish_data"
3 "name": "Data Publication API"
4 },
4 },
5 "nbformat": 3,
5 "nbformat": 3,
6 "nbformat_minor": 0,
6 "nbformat_minor": 0,
@@ -1,6 +1,6 b''
1 {
1 {
2 "metadata": {
2 "metadata": {
3 "name": "octavemagic_extension"
3 "name": "Octave Magic"
4 },
4 },
5 "nbformat": 3,
5 "nbformat": 3,
6 "nbformat_minor": 0,
6 "nbformat_minor": 0,
@@ -1,6 +1,6 b''
1 {
1 {
2 "metadata": {
2 "metadata": {
3 "name": "sympy_quantum_computing"
3 "name": "Part 1 - Running Code"
4 },
4 },
5 "nbformat": 3,
5 "nbformat": 3,
6 "nbformat_minor": 0,
6 "nbformat_minor": 0,
@@ -8,433 +8,429 b''
8 {
8 {
9 "cells": [
9 "cells": [
10 {
10 {
11 "cell_type": "heading",
12 "level": 1,
13 "metadata": {},
14 "source": [
15 "Running Code in the IPython Notebook"
16 ]
17 },
18 {
11 "cell_type": "markdown",
19 "cell_type": "markdown",
12 "metadata": {},
20 "metadata": {},
13 "source": [
21 "source": [
14 "# Basic Symbolic Quantum Mechanics with [SymPy](http://sympy.org)\n",
22 "First and foremost, the IPython Notebook is an interactive environment for writing and running Python code."
15 "\n",
23 ]
16 "We first load the IPython extensions that enable LaTeX-based mathematical printing \n",
24 },
17 "of SymPy objects, and then import the quantum computing libraries from SymPy."
25 {
26 "cell_type": "heading",
27 "level": 2,
28 "metadata": {},
29 "source": [
30 "Code cells allow you to enter and run Python code"
31 ]
32 },
33 {
34 "cell_type": "markdown",
35 "metadata": {},
36 "source": [
37 "Run a code cell using `Shift-Enter` or pressing the \"Play\" button in the toolbar above:"
18 ]
38 ]
19 },
39 },
20 {
40 {
21 "cell_type": "code",
41 "cell_type": "code",
22 "collapsed": true,
42 "collapsed": false,
23 "input": [
43 "input": [
24 "%load_ext sympyprinting"
44 "a = 10"
25 ],
45 ],
26 "language": "python",
46 "language": "python",
27 "metadata": {},
47 "metadata": {},
28 "outputs": [],
48 "outputs": [],
29 "prompt_number": 1
49 "prompt_number": 10
30 },
50 },
31 {
51 {
32 "cell_type": "code",
52 "cell_type": "code",
33 "collapsed": true,
53 "collapsed": false,
34 "input": [
54 "input": [
35 "from sympy import sqrt, symbols, Rational\n",
55 "print a"
36 "from sympy import expand, Eq, Symbol, simplify, exp, sin\n",
37 "from sympy.physics.quantum import *\n",
38 "from sympy.physics.quantum.qubit import *\n",
39 "from sympy.physics.quantum.gate import *\n",
40 "from sympy.physics.quantum.grover import *\n",
41 "from sympy.physics.quantum.qft import QFT, IQFT, Fourier\n",
42 "from sympy.physics.quantum.circuitplot import circuit_plot"
43 ],
56 ],
44 "language": "python",
57 "language": "python",
45 "metadata": {},
58 "metadata": {},
46 "outputs": [],
59 "outputs": [
47 "prompt_number": 2
60 {
61 "output_type": "stream",
62 "stream": "stdout",
63 "text": [
64 "10\n"
65 ]
66 }
67 ],
68 "prompt_number": 11
48 },
69 },
49 {
70 {
50 "cell_type": "markdown",
71 "cell_type": "heading",
72 "level": 2,
51 "metadata": {},
73 "metadata": {},
52 "source": [
74 "source": [
53 "<h2>Bras and Kets</h2>"
75 "Managing the IPython Kernel"
54 ]
76 ]
55 },
77 },
56 {
78 {
57 "cell_type": "markdown",
79 "cell_type": "markdown",
58 "metadata": {},
80 "metadata": {},
59 "source": [
81 "source": [
60 "Create symbolic states"
82 "Code is run in a separate process called the IPython Kernel. The Kernel can be interrupted or restarted. Try running the following cell and then hit the \"Stop\" button in the toolbar above."
61 ]
83 ]
62 },
84 },
63 {
85 {
64 "cell_type": "code",
86 "cell_type": "code",
65 "collapsed": true,
87 "collapsed": false,
66 "input": [
88 "input": [
67 "phi, psi = Ket('phi'), Ket('psi')\n",
89 "import time\n",
68 "alpha, beta = symbols('alpha beta', complex=True)"
90 "time.sleep(10)"
69 ],
91 ],
70 "language": "python",
92 "language": "python",
71 "metadata": {},
93 "metadata": {},
72 "outputs": [],
94 "outputs": [
73 "prompt_number": 3
95 {
96 "ename": "KeyboardInterrupt",
97 "evalue": "",
98 "output_type": "pyerr",
99 "traceback": [
100 "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
101 "\u001b[0;32m<ipython-input-16-d7b436e260d5>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msleep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
102 "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
103 ]
104 }
105 ],
106 "prompt_number": 16
74 },
107 },
75 {
108 {
76 "cell_type": "markdown",
109 "cell_type": "markdown",
77 "metadata": {},
110 "metadata": {},
78 "source": [
111 "source": [
79 "Create a superposition"
112 "If the Kernel dies you will be prompted to restart it. Here we call the low-level system libc.time routine with the wrong argument via\n",
113 "ctypes to segfault the Python interpreter:"
80 ]
114 ]
81 },
115 },
82 {
116 {
83 "cell_type": "code",
117 "cell_type": "code",
84 "collapsed": false,
118 "collapsed": false,
85 "input": [
119 "input": [
86 "state = alpha*psi + beta*phi; state"
120 "import sys\n",
121 "from ctypes import CDLL\n",
122 "# This will crash a Linux or Mac system; equivalent calls can be made on Windows\n",
123 "dll = 'dylib' if sys.platform == 'darwin' else '.so.6'\n",
124 "libc = CDLL(\"libc.%s\" % dll) \n",
125 "libc.time(-1) # BOOM!!"
87 ],
126 ],
88 "language": "python",
127 "language": "python",
89 "metadata": {},
128 "metadata": {},
90 "outputs": [
129 "outputs": [],
91 {
130 "prompt_number": "*"
92 "latex": [
131 },
93 "$$\\alpha {\\left|\\psi\\right\\rangle } + \\beta {\\left|\\phi\\right\\rangle }$$"
132 {
94 ],
133 "cell_type": "heading",
95 "output_type": "pyout",
134 "level": 2,
96 "png": "iVBORw0KGgoAAAANSUhEUgAAAF8AAAAXCAYAAABtR5P0AAAABHNCSVQICAgIfAhkiAAABFdJREFU\naIHt2XuIVXUQB/CPq4FZblEpYmZPLMsMUTQhDawo6LVgD4rsj6zQSCORHlD9YfTUrCxTotKUWv8p\nKAusv7YHpURlQg+ioJJ8REVtD3u6/THnsucef+fu3r27W8F+4XLOnfnNnJn5zW9m7rkM4H+L5/5t\nA/oBfeZjU4Pyh9a5flmCtgJDGrSjUYzAcmHfaqxDc8arx8eHErRS/xoNfj04BD8l6G2Y3Y92FDEd\n12EJFmOeCNbyOvWciM8S9DYl/vVn8E/PDCniBVzYoO6JenZ6RqNFBP6HHL0dk+vUNVOd/vVn8Kfh\n7QT9b7yDqQ3oXoQxPZC7BbeiI0cbhFnYXKeu8fgwQS/1rz+Dvx/+KOE9ibn9aAucgI+wt0C/Gvvj\n9jr1dajexDyS/qWO6jG4DEdgJHbjZnEUicwoe8hIUT8nYyU2ZfTD8E12PxhvYgMezmjtoh8cjq9L\ndPc2Zuus6ytwgLB7NCbh227ouBxTxGYdjfUiy1eKjK8g6V8x8yeKuvW+aDwXiWA/m1ub6ugV3IQH\n8QZuy9Hz9b5JNN+zC7KrML+G7t7GUOzJ7r8TCbVZ2DavC9kxeEVMQouxTSTolaK8PJqQqenfcdiJ\nOwr0czPDpoqdy/PbcvcniayHjaLRVHCXyPgKWrAmYcNTGFZmYA2sxVF1rG8WfSKFjdiV+95W4A/D\ne7g+R3tMJCkx9XSIeBZR5V8+85dk1wcKAtuy6zRRt54oMfp7EdBROAetOV6T6mO4SxzPItZhTon+\n3sQMvF7C+0Jk9OAS/r0Zr5LdlaBXSvHu7DohIVvlX6XmN+EsvIxfCgLbs+upmWE7SozamV2vwl94\nMfs+QnUmEaekVRqDSujwNE5J0MeKk5lq6HPxboE2CXeXPON4bFWdLHm06OxVRJDzU86U7Lq1RH4f\n/04WO7e4RKBDnIChBXpbYm0rXst9v1h1wFL1voI1+qfsrC+hjxIbWFZam0UszsvRFooxs4JVOqtF\nEVX+VcrOV5nS3QmBA8U4tgm/lSjNY6/OyYjIjIoxQ3AtXk3IHStOz6/deEYjOEhMOqmavAif474S\n2XZ8ICaiCsbj4+z+NFyKSxKy+/hXCf6P4gVSMSPPxFJsEWNkkzh2tdCKM0SGV9AhJoTHs+ekRtX5\nImv6GjPENLMAw3P0ObhAbMzvNeSX4BqxiU06fyecj/szHZ8k5PbxLz/nXyFeLG0Qdb4Jb2VCE/EI\n7sEzXTj3ktj51SLjp4sauQM3SL/fac4+2xO83sY0EcAvRdPcI2b8HaJe/9yF/POiLy4TjfdInf7N\nkq4OfeJfWxf8BdJdv4gbRVB6irW6X/OX1qm7rQZvIcZ1Q0fSv75+vVCcBFJoEhm3pYHntOtePzpY\n+uT1FOPwaRdrSv1r9D36nzV4xfm3DC06x9KeYmE3180UpbQedMfHWugN/5IYXoM3Qecv3lrozz9T\n7hT1vR6U+ThWlJOu8F/4s2gAAxjAAOAf1RffIDO+Bi8AAAAASUVORK5CYII=\n",
135 "metadata": {},
97 "prompt_number": 4,
136 "source": [
98 "text": [
137 "All of the goodness of IPython works"
99 "\u03b1\u22c5\u2758\u03c8\u27e9 + \u03b2\u22c5\u2758\u03c6\u27e9"
138 ]
100 ]
101 }
102 ],
103 "prompt_number": 4
104 },
139 },
105 {
140 {
106 "cell_type": "markdown",
141 "cell_type": "markdown",
107 "metadata": {},
142 "metadata": {},
108 "source": [
143 "source": [
109 "Dagger the superposition and multiply the original"
144 "Here are two system aliases:"
110 ]
145 ]
111 },
146 },
112 {
147 {
113 "cell_type": "code",
148 "cell_type": "code",
114 "collapsed": false,
149 "collapsed": false,
115 "input": [
150 "input": [
116 "ip = Dagger(state)*state; ip"
151 "pwd"
117 ],
152 ],
118 "language": "python",
153 "language": "python",
119 "metadata": {},
154 "metadata": {},
120 "outputs": [
155 "outputs": [
121 {
156 {
122 "latex": [
123 "$$\\left(\\overline{\\alpha} {\\left\\langle \\psi\\right|} + \\overline{\\beta} {\\left\\langle \\phi\\right|}\\right) \\left(\\alpha {\\left|\\psi\\right\\rangle } + \\beta {\\left|\\phi\\right\\rangle }\\right)$$"
124 ],
125 "output_type": "pyout",
157 "output_type": "pyout",
126 "png": "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\nRK5CYII=\n",
158 "prompt_number": 4,
127 "prompt_number": 5,
128 "text": [
159 "text": [
129 "\n",
160 "u'/Users/bgranger/Documents/Computation/IPython/code/ipython/examples/notebooks'"
130 "\u239b_ _ \u239e \n",
131 "\u239d\u03b1\u22c5\u27e8\u03c8\u2758 + \u03b2\u22c5\u27e8\u03c6\u2758\u23a0\u22c5(\u03b1\u22c5\u2758\u03c8\u27e9 + \u03b2\u22c5\u2758\u03c6\u27e9)"
132 ]
161 ]
133 }
162 }
134 ],
163 ],
135 "prompt_number": 5
164 "prompt_number": 4
136 },
137 {
138 "cell_type": "markdown",
139 "metadata": {},
140 "source": [
141 "Distribute"
142 ]
143 },
165 },
144 {
166 {
145 "cell_type": "code",
167 "cell_type": "code",
146 "collapsed": false,
168 "collapsed": false,
147 "input": [
169 "input": [
148 "qapply(expand(ip))"
170 "ls"
149 ],
171 ],
150 "language": "python",
172 "language": "python",
151 "metadata": {},
173 "metadata": {},
152 "outputs": [
174 "outputs": [
153 {
175 {
154 "latex": [
176 "output_type": "stream",
155 "$$\\alpha \\overline{\\alpha} \\left\\langle \\psi \\right. {\\left|\\psi\\right\\rangle } + \\alpha \\overline{\\beta} \\left\\langle \\phi \\right. {\\left|\\psi\\right\\rangle } + \\beta \\overline{\\alpha} \\left\\langle \\psi \\right. {\\left|\\phi\\right\\rangle } + \\beta \\overline{\\beta} \\left\\langle \\phi \\right. {\\left|\\phi\\right\\rangle }$$"
177 "stream": "stdout",
156 ],
157 "output_type": "pyout",
158 "png": "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\ncOsl0kmXAAAAAElFTkSuQmCC\n",
159 "prompt_number": 6,
160 "text": [
178 "text": [
161 "\n",
179 "01_notebook_introduction.ipynb Octave Magic.ipynb\r\n",
162 " _ _ _ _ \n",
180 "Animations Using clear_output.ipynb PyLab and Matplotlib.ipynb\r\n",
163 "\u03b1\u22c5\u03b1\u22c5\u27e8\u03c8\u2758\u03c8\u27e9 + \u03b1\u22c5\u03b2\u22c5\u27e8\u03c6\u2758\u03c8\u27e9 + \u03b2\u22c5\u03b1\u22c5\u27e8\u03c8\u2758\u03c6\u27e9 + \u03b2\u22c5\u03b2\u22c5\u27e8\u03c6\u2758\u03c6\u27e9"
181 "Basic Output.ipynb R Magics.ipynb\r\n",
182 "Custom Display Logic.ipynb Running Code.ipynb\r\n",
183 "Cython Magics.ipynb Script Magics.ipynb\r\n",
184 "Data Publication API.ipynb SymPy Examples.ipynb\r\n",
185 "Display System.ipynb Trapezoid Rule.ipynb\r\n",
186 "JS Progress Bar.ipynb Typesetting Math Using MathJax.ipynb\r\n",
187 "Local Files.ipynb animation.m4v\r\n",
188 "Markdown Cells.ipynb python-logo.svg\r\n",
189 "Notebook Tour.ipynb\r\n"
164 ]
190 ]
165 }
191 }
166 ],
192 ],
167 "prompt_number": 6
193 "prompt_number": 2
168 },
194 },
169 {
195 {
170 "cell_type": "markdown",
196 "cell_type": "markdown",
171 "metadata": {},
197 "metadata": {},
172 "source": [
198 "source": [
173 "<h2>Operators</h2>"
199 "Any command line program can be run using `!` with string interpolation from Python variables:"
174 ]
200 ]
175 },
201 },
176 {
202 {
203 "cell_type": "code",
204 "collapsed": false,
205 "input": [
206 "message = 'The IPython notebook is great!'\n",
207 "# note: the echo command does not run on Windows, it's a unix command.\n",
208 "!echo $message"
209 ],
210 "language": "python",
211 "metadata": {},
212 "outputs": []
213 },
214 {
177 "cell_type": "markdown",
215 "cell_type": "markdown",
178 "metadata": {},
216 "metadata": {},
179 "source": [
217 "source": [
180 "Create symbolic operators"
218 "Tab completion works:"
181 ]
219 ]
182 },
220 },
183 {
221 {
184 "cell_type": "code",
222 "cell_type": "code",
185 "collapsed": true,
223 "collapsed": false,
186 "input": [
224 "input": [
187 "A = Operator('A')\n",
225 "import numpy\n",
188 "B = Operator('B')\n",
226 "numpy.random."
189 "C = Operator('C')"
190 ],
227 ],
191 "language": "python",
228 "language": "python",
192 "metadata": {},
229 "metadata": {},
193 "outputs": [],
230 "outputs": [],
194 "prompt_number": 7
231 "prompt_number": 9
195 },
232 },
196 {
233 {
197 "cell_type": "markdown",
234 "cell_type": "markdown",
198 "metadata": {},
235 "metadata": {},
199 "source": [
236 "source": [
200 "Test commutativity"
237 "Tab completion after `(` brings up a tooltip with the docstring:"
201 ]
238 ]
202 },
239 },
203 {
240 {
204 "cell_type": "code",
241 "cell_type": "code",
205 "collapsed": false,
242 "collapsed": false,
206 "input": [
243 "input": [
207 "A*B == B*A"
244 "numpy.random.rand("
208 ],
245 ],
209 "language": "python",
246 "language": "python",
210 "metadata": {},
247 "metadata": {},
211 "outputs": [
248 "outputs": []
212 {
213 "output_type": "pyout",
214 "prompt_number": 8,
215 "text": [
216 "False"
217 ]
218 }
219 ],
220 "prompt_number": 8
221 },
249 },
222 {
250 {
223 "cell_type": "markdown",
251 "cell_type": "markdown",
224 "metadata": {},
252 "metadata": {},
225 "source": [
253 "source": [
226 "Distribute A+B squared"
254 "Adding `?` opens the docstring in the pager below:"
227 ]
255 ]
228 },
256 },
229 {
257 {
230 "cell_type": "code",
258 "cell_type": "code",
231 "collapsed": false,
259 "collapsed": false,
232 "input": [
260 "input": [
233 "expand((A+B)**2)"
261 "magic?"
234 ],
262 ],
235 "language": "python",
263 "language": "python",
236 "metadata": {},
264 "metadata": {},
237 "outputs": [
265 "outputs": [],
238 {
266 "prompt_number": 8
239 "latex": [
240 "$$A B + \\left(A\\right)^{2} + B A + \\left(B\\right)^{2}$$"
241 ],
242 "output_type": "pyout",
243 "png": "iVBORw0KGgoAAAANSUhEUgAAAMAAAAAZCAYAAABn7SHgAAAABHNCSVQICAgIfAhkiAAABHpJREFU\neJztml2IVVUUx39OTlQ20xiJpZZDE4gUBn0YJE3Q10MZfZEvUS9ST+lDhgWFPRgRFaRGT9mwI8ge\nKoqoCCqikl6ysg/SfOlBjKxetLCymh7Wvnjnsvc5e62zj1dv+wfDPffsfc5e//Wf/XH2uVAo/I+Z\n1e8AjlMuA64HTgSWAhuAr/oaUSFG8SozpwLPdn1fBRwETutPOIUKilctsAz4F5jw30eBaWBl3yIq\nxChetcAsZFrtLB/PR5K6tG8RFWLUeqV9BngamUI2VNTZClyK9L4/gE+Bv3zZGcBc4GXgUeCQsn0N\nw8BC4IfE+iFt85EYD1Rc9yKwH1inD7ExbeQ6xePcxLzS6BulZa8uAf4BphLqjiM97YlA2Q2+7A1L\nEInMBh4BTkmsH9M2DDzl7xdiNaKxn5sJ4+TLtcbjXNR5NU6avla9GgLe9429nVD/Tl/3mkj5HiTR\nI4ntLyMuLMQ6f00KddpWEE7+SiSpACcjRlnR6usmV661HsfI7ZVGn9qrocQg7wFeAQ4DZybUn0Sm\nqu2BshFgETIV/ZbY/n3+mhRGgMtJ3+qq07YdGGPmzsGVyPLoLX/NLcBZie2F0OjrJVeutR7HyO2V\nRl8rXs1DRoYhYC+wL+Ga3cDHkbL1SI++WxGDI32EvRW4P7FuqrZ7gbX++FxkjTzd8zea2GYIh30G\nyZFri8cxHHm90urL7tUUMrUA7AD+pnrmmO8b2dhzfsyf2w/cpQkAXVK3IL0+hVRt1wEvJd7TgsPW\nAXLlWutxFY58Xln0qbyqW6utAE7gyPTzk/8+zx+HmPSfE8Dj/ngEWYd97++5JzVAA4uAXxLqabTt\nptkavy1y5NricS7qvLLoy+bVbOATZq6XppAeeWHFdc8AfwInBcoeQ6aka5WxONJFvUv9nrxW2xxg\nV2L7Fhw205rm2upxFY58Xln0qbyqmubWAK8DP3ad64wIVQ9Jk8BnyL5tLxsRMc+nBmjgZ+C8mjpa\nbRP+vscaTXNt9TgXdV5Z9Km8ii2BFiAPJ98xc/tpsf+MJWcMuAB4MlJ+GOnRC5Gp7GBP+QuER55z\ngOUceQnSzWpk3dphF7AEeDMSg0XbEl+/KTn0dWiaa6vHHdr2yqovi1fbgKsC529DpscHItfdSPVv\nLa7w5e8p43GkT6sXA89VlFu0PQzclNi+BYd+CdQ011aP63Dk8cqqT+VVaAl0NfAr8EGgbK//jI0O\nkz6o0J7tMPCQP96aGqCBHcDphH/xZ9E2jIxo7+QKMBNNct3E45xUeWXR19iri5A14NxI+YQPaluk\n/Avg68D5xcCrwO/AHYa4HLoRcjmwqeecVduDwO2Kti049DOANddNPa7D0dwrsOkze7UA+Ab56eg0\n8C2yB9vNa8gLkmnkoeQjZM91FBlJvvRlh5CdhQ/9307gc2Azsqaz4ND/g9yMmN1E29nIi5W2caTp\na5LrJnnQ4LB71UTf0fKqLziOzX34XDgGR5/jONJifdt3tDlAeCtsUBgkfYOkpVAoFAqFQqFQKAwY\n/wF5Fp03jGX3sQAAAABJRU5ErkJggg==\n",
244 "prompt_number": 9,
245 "text": [
246 "\n",
247 " 2 2\n",
248 "A\u22c5B + A + B\u22c5A + B "
249 ]
250 }
251 ],
252 "prompt_number": 9
253 },
267 },
254 {
268 {
255 "cell_type": "markdown",
269 "cell_type": "markdown",
256 "metadata": {},
270 "metadata": {},
257 "source": [
271 "source": [
258 "Create a commutator"
272 "Exceptions are formatted nicely:"
259 ]
273 ]
260 },
274 },
261 {
275 {
262 "cell_type": "code",
276 "cell_type": "code",
263 "collapsed": false,
277 "collapsed": false,
264 "input": [
278 "input": [
265 "comm = Commutator(A,B); comm"
279 "x = 1\n",
280 "y = 4\n",
281 "z = y/(1-x)"
266 ],
282 ],
267 "language": "python",
283 "language": "python",
268 "metadata": {},
284 "metadata": {},
269 "outputs": [
285 "outputs": [
270 {
286 {
271 "latex": [
287 "ename": "ZeroDivisionError",
272 "$$\\left[A,B\\right]$$"
288 "evalue": "integer division or modulo by zero",
273 ],
289 "output_type": "pyerr",
274 "output_type": "pyout",
290 "traceback": [
275 "png": "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAWCAYAAAC/kK73AAAABHNCSVQICAgIfAhkiAAAAj5JREFU\nSInt102ITlEYB/CfMUppNFMmDDU0W1EiaZp34SvFQlmKHTtSZKOURjIkSXZjtiwQiykRvTFi4TMk\nHwsLkSmrocEMY3HO5HXn3nHf+84syL/ezrn/55zn+d/7POe59+UvxZTE9RV8wTWczrH/BAZwoEDs\nbizH4hjzDr5F2yw04RwOYRC7sArTsT7prFxF4GX4jp4CokexACM4mmLbEG2XE3wZ6goGrENXHOcU\n9AEdcbyaYuvFa2xEQ5qAItiB8xhSm/CSUB63U2wNmI9+fPqTo3KOYM24Ltz0W7zLqzIFL3Arw7ZP\nKJXtCb6ctjiVTKAH7XF+H8OKZW52FNaZ4Bsj149tWRrrqwzWjql+pfZDvG6O82pQimMbjsR5g1DT\nL2OsV3mdlcex1aMPcyu4HuGpLckboAKn8FVob0kcFtrs2iyN1aR4Jy7hfQU3+pSLHNAS7gk9PIlO\n4YbOZG3OWyot2IvnWFPBt8axWuGNWIRjGfYhIRvzhPIZSC7IK/w4tuJGgt8stMVqhXcI2e7LsK/E\nDKF7jRFNvlJZjY/Giia0Q9KFt4zjsyScjbT+PQ3747w7hz6MPZxLhTpuyljfFgWcTfAr8EP2985D\nPEnhW3EBn7Elp8bfyBY8jcFH8Ezou5W4KLx8RoQDdhProm0h3gh9fhQzhaw9insGhVIpx99jPMBJ\nof6zMK7wicLBCfZHjR9ZeTFp/idT+CbcnSznSeHDwp+J3TX6rRe+13tr9FOJPYK24Qn0+R//Pn4C\niuR3f19QpToAAAAASUVORK5CYII=\n",
291 "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mZeroDivisionError\u001b[0m Traceback (most recent call last)",
276 "prompt_number": 10,
292 "\u001b[0;32m<ipython-input-15-dc39888fd1d2>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mz\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
277 "text": [
293 "\u001b[0;31mZeroDivisionError\u001b[0m: integer division or modulo by zero"
278 "[A,B]"
279 ]
294 ]
280 }
295 }
281 ],
296 ],
282 "prompt_number": 10
297 "prompt_number": 15
283 },
298 },
284 {
299 {
285 "cell_type": "markdown",
300 "cell_type": "heading",
301 "level": 2,
286 "metadata": {},
302 "metadata": {},
287 "source": [
303 "source": [
288 "Carry out the commutator"
304 "Working with external code"
289 ]
305 ]
290 },
306 },
291 {
307 {
292 "cell_type": "code",
308 "cell_type": "markdown",
293 "collapsed": false,
294 "input": [
295 "comm.doit()"
296 ],
297 "language": "python",
298 "metadata": {},
309 "metadata": {},
299 "outputs": [
310 "source": [
300 {
311 "There are a number of ways of getting external code into code cells."
301 "latex": [
312 ]
302 "$$A B - B A$$"
303 ],
304 "output_type": "pyout",
305 "png": "iVBORw0KGgoAAAANSUhEUgAAAE4AAAASCAYAAAD15uiRAAAABHNCSVQICAgIfAhkiAAAAi9JREFU\nWIXt1z1oFEEcBfCfMYIWkQQMahQipPUDRKtgCj8LY2Up2im2gmgh2CgqWojYSUgbCxVsrFTED6zU\nBBXRdBIEA1ZRokaNxQwak9272d1LQLgHx87N+8+89252dvZoohQWFay/jAmcrlEzgK3YiK94iu+R\nW4EOXMdZTBbUr4X50E3JWxdb8BODCbXrMI2LGdzeyN2uYmYBdIvkzUUL7kXhOwn1B2Ptzhx+NJpq\nq2JqHnXr5m1JNHQENzCFVQn1fcI2eZLBtWEtxvE5UT8VjdItmjcTncKv34IxfEgY8xaPcrgTwkoe\nLmtonnXL5M3EIHpj+xl+qH2nrowGz8zqb4994zhU1swC6Cblba0zSS8W+3vrf4zfO2M7C33x2oML\nsd2GfryLc47WtV8cjdAtk3cOWvEYq2f0DQqruqnGuKv4hqUZ3DnheN+VaqIAquqWzTsHx3B8Vt/5\nONGeGuNGZD+cYZnwwH1fxEgiquoWypu3VbviJG/8e7R3x2veSdOO9biUw08Jd8UaYRtNYAOuSX8Z\nH8bRBujORNm8czCE7Rn9+4UVOJkzbl/k+3P4bZG/m2okEVV1C+fNOh134BPuZ3Bj8Zq3An1RKGvL\nLMGp2B7IGV8WVXSr5P2DzcLp0ZHD90SDQzn8C7zM6O/GTXzBgXomSqCsbtW8uvAKv2Lha+G9aCZu\nCS+D08Kf6IfYjeXCag1HblI4nR7Ezwie44rwHGoUquhWydtEE038P/gNdbvExvNu4QsAAAAASUVO\nRK5CYII=\n",
306 "prompt_number": 11,
307 "text": [
308 "A\u22c5B - B\u22c5A"
309 ]
310 }
311 ],
312 "prompt_number": 11
313 },
313 },
314 {
314 {
315 "cell_type": "markdown",
315 "cell_type": "markdown",
316 "metadata": {},
316 "metadata": {},
317 "source": [
317 "source": [
318 "Create a more fancy commutator"
318 "Pasting code with `>>>` prompts works as expected:"
319 ]
319 ]
320 },
320 },
321 {
321 {
322 "cell_type": "code",
322 "cell_type": "code",
323 "collapsed": false,
323 "collapsed": false,
324 "input": [
324 "input": [
325 "comm = Commutator(A*B,B+C); comm"
325 ">>> the_world_is_flat = 1\n",
326 ">>> if the_world_is_flat:\n",
327 "... print \"Be careful not to fall off!\""
326 ],
328 ],
327 "language": "python",
329 "language": "python",
328 "metadata": {},
330 "metadata": {},
329 "outputs": [
331 "outputs": [
330 {
332 {
331 "latex": [
333 "output_type": "stream",
332 "$$\\left[A B,B + C\\right]$$"
334 "stream": "stdout",
333 ],
334 "output_type": "pyout",
335 "png": "iVBORw0KGgoAAAANSUhEUgAAAGAAAAAWCAYAAAA/45nkAAAABHNCSVQICAgIfAhkiAAAA5VJREFU\naIHt2UmIXUUUBuDP2IJZtHSLjdpiRwhGEYkYp0gwggOGGMHgQnACEXEARVEcEISgRNFFBHUhSvtc\nxSwUXaghDlxMRF2oiIpDL4wSlATNwqBG0w6LU49+eX3rvXt7uNn0v7mn6pz6z3lV95yquo8FHFIc\n1tXeiv14G89WGL8J+/BwD5sXcA6WJ+4P8XfSHYNhvIxH8WfVwOeRdzZYhnU4H6P4Hb/gIezEXnyc\nbNeUERQ1nJ2NfzBewfYk/IcnSnSXJ93rNXzPN29dHI4H8BNux8kduhPFvL6Ib1JfkSPKKrqwCO+K\nH/hmBfvrk+0lGf2EWMzBiv7ni3c5BmrGMCaybydOzdisEHE+k9pFjiyr6MKtuE2k/KcV7J/HX1hc\nohsUJeJn00ti07wtkVVVMSBKyvc4vo/tbqxPcpEzyio6MCLe/kXYJdKuH77F9ozuPvF23FyBZ755\nW+otwMbk47oKtjswlOQiZ5RVdGAcq5L8CSbFYuRwrAjyka7+odS3BzdU8NsEb0v1BThTlLev9P79\nbVzdIRdtoW69WyU2nA9Se3dqjyS5DKvTcykeT/KgOC18lzgnasYxn7xVsVZM/FP4t4L9liqkRQ/d\ngEijzlo3Lt7CM3qMe1rU6SNLdBvFMfbSKsE1wNtSPQPeEr/9rJo+mGEJuhv3dvU9loK4rMe4z01l\nTDcW4wB+7DG+Sd6W6guwV5SgsgNAN5Z1tYu2ULUEjYrJ/9rBR74l6XlcZtwQTseTGf0B8RafIMrH\nvorxzJb3JeVZO4ZzTV3oOnGT2PPa+CHZ97vkjeBGPNjHDvkM2IyLSvqvEhlwf2bcFUm/LqO/IOnf\nqRJcA7wt1TNgU/Ix1sdugzgwdKJoC1V274vxK94r0e1Kz1wGrBZBlpWKI8QVnfis0I3RHjHNhneu\nsEVk2TU9bG4Rx/TcAWUaiq72ijR4OGO/VEzE5oz+M3xR0r8Er4hvJdeW6M8TJ4vc96iZ8vZDS717\nwBr8gTscvBecIk5mazPjiraQ2wNGsQ2niVvkDlGCOlfyVaxM8nq8Lz58fYTXcLSos/vT+MlkOyw2\nr+1ior8s8b9HbKArO/qOmgPeucZWXCjO+NtM3bwn8Jy4IddCMYfBzQU2NOyvpV4GzBRFW6iyBxxK\nNB3fbyKzGkPdm3CTuFKUsyZxZ8P+pr1hk6Ku3dV0IF0YEP83vHGI45hr3CPmd7Kf4QIWsIAFNID/\nASen61ooc9yoAAAAAElFTkSuQmCC\n",
336 "prompt_number": 12,
337 "text": [
335 "text": [
338 "[A\u22c5B,B + C]"
336 "Be careful not to fall off!\n"
339 ]
337 ]
340 }
338 }
341 ],
339 ],
342 "prompt_number": 12
340 "prompt_number": 1
343 },
341 },
344 {
342 {
345 "cell_type": "markdown",
343 "cell_type": "markdown",
346 "metadata": {},
344 "metadata": {},
347 "source": [
345 "source": [
348 "Expand the commutator"
346 "The `%load` magic lets you load code from URLs or local files:"
349 ]
347 ]
350 },
348 },
351 {
349 {
352 "cell_type": "code",
350 "cell_type": "code",
353 "collapsed": false,
351 "collapsed": false,
354 "input": [
352 "input": [
355 "comm.expand(commutator=True)"
353 "%load?"
356 ],
354 ],
357 "language": "python",
355 "language": "python",
358 "metadata": {},
356 "metadata": {},
359 "outputs": [
357 "outputs": [],
360 {
358 "prompt_number": 14
361 "latex": [
362 "$$\\left[A,B\\right] B + \\left[A,C\\right] B + A \\left[B,C\\right]$$"
363 ],
364 "output_type": "pyout",
365 "png": "iVBORw0KGgoAAAANSUhEUgAAAN8AAAAWCAYAAABAHklQAAAABHNCSVQICAgIfAhkiAAABNdJREFU\neJztm0mIHUUYx3+OI+hhZEYc1FEnA8EoIhFjXEJwBBcIMYLiIeAGIioIBtHggiCESBA9RFAPgo7P\nUwwu6EENowmFiWjA5eBuDkYJBoN6MC7RjMvhq8d02l6+6vrqvRfp/+W9qa/631/9XndVdVUPtGrV\nqi86Ivf3FuAA8CbwpOL4jcB+4MEG534aOA9Y7M/5LvCnjx0PjAHPAw8BvwNrgEuAo4EVRp4pFMoQ\n4jh2tQhYBSwDJoBfgR+AB4DdwE/ATl93kPlpVMWrin/K9kXzdwEnWwr8BcwEJpnVFPAP8EhB7Aof\nezVX7hJ4WsoF1o/leCRwH/AdcDtwWiZ2qs/nWeALZX5T9Jdfnep4uZrjp7Btnxn/0kBOQ8BWn+jr\nAYnmdYP3uKwkvgsBPZIpcwk8q7QYGFbWhbCbL5bjJNJ77wbOKKmzxPs/oczPmh+EMyyThper8bBs\nXxT/IcUJinQr8CJwEDixoQfANDLsv1MQGwFOAfYBv/TR8y5/TArFcBwGXvDHLWO+Z83rQ6S9W5W+\nKX4TK4YW151V+8z5u7oKwLg3GgL2IMNtU30JbC+J3YP0GLfkyl0Czyp1kKmKVk5ZL5bjBqQt1yvq\n7gBGlflZ84NwhkXS8nI1PlbtM+dfGshoBljuv38AzNFsBD0BSX59rnzUl+0DbgzMsalnlTqkufli\nOJ6DTI0+VR6zWplfCn5gc/NpebkKD6v2mfAPnYcvRx4wu0P29/7vcf89RNP+cyHwsP8+gqwYfeXP\ntWsAPFMoluNK5Ed/DPhbUX+zMq9B5Wd13Vm1Lwl/VxEbRobPkzJlM0hPcrbGPKfHgT+QrYO8NiBL\nyZcH5tjUs0odbEc+C45v+PrnBuTVlauIpeAHcSNfKC9X4WXVPhP+IdPFO4BXgL2Zsm6v0+Thdxp4\nH9lvyWs9AuiZAfC0lgXHC5Ae9zNF3UX61AaSn+V1Z9U+E/7aaecEsBb4nEOXaBf4z1AIo8BZwKMl\n8YNID3UyMi3Y3wPP5yjuSSeB85nfjM3qZuT5Qysrjt/4vOo2gseBm4D7FZ4Wv4k1Q8vrzvKaS8G/\ndMjehLxdktc1yPB7r8Y8oyv9catK4hf5+FsFMZfAs0od7KadVhw3+vqTNfXWIYsMmvxS8YPm084m\nvFyJl2X7TPhrpp2XAj8C2wpie/xnUQ80UeE5jSRftNdyFPJKDsjrQFql8LSUJcfNSC99bcX5bkOW\n47ULEoPGrymvMjVtX6/4/6fXWOIPHiupvxBp0KZceXdOXPZu40fAxwXlC4CXkPfirlPmaOFZpQ7x\nI18KjiuA35BnomMy5acjK3krA/KDdPwgnGFTXmDbvqT8y575JoBZ4Ezk5esdyPCfvYtfBi70368G\n3kZeSJ1F9ku+zcQBjkUenI9DngsOeN85Hx9D9k62I43+pCS3rFJ4WioFx662ABcje0izyPPHXmSp\n/Cnga0V+g8Yvlldese1Lzf8QudADarTO2A/sc6xThzSb7CGy5OgMvbTqEL/JrpVL4JmEf9N3O7VK\n7d8L/Uzx0nQvdbhzHASGMUrC3+JN8zJdBbyX0L9XWtPn8/8fOPabYYyS8c/f0XPIXPbOSN9h5P+u\nXov0yepuJLe5uop9lhVDsOV4uPCLVcu/VatWrVq1atWqVat5/QsIXxOgwN127AAAAABJRU5ErkJg\ngg==\n",
366 "prompt_number": 13,
367 "text": [
368 "[A,B]\u22c5B + [A,C]\u22c5B + A\u22c5[B,C]"
369 ]
370 }
371 ],
372 "prompt_number": 13
373 },
374 {
375 "cell_type": "markdown",
376 "metadata": {},
377 "source": [
378 "Carry out and expand the commutators"
379 ]
380 },
359 },
381 {
360 {
382 "cell_type": "code",
361 "cell_type": "code",
383 "collapsed": false,
362 "collapsed": false,
384 "input": [
363 "input": [
385 "_.doit().expand()"
364 "%pylab inline"
386 ],
365 ],
387 "language": "python",
366 "language": "python",
388 "metadata": {},
367 "metadata": {},
389 "outputs": [
368 "outputs": [
390 {
369 {
391 "latex": [
370 "output_type": "stream",
392 "$$A B C + A \\left(B\\right)^{2} - B A B - C A B$$"
371 "stream": "stdout",
393 ],
394 "output_type": "pyout",
395 "png": "iVBORw0KGgoAAAANSUhEUgAAAO8AAAAZCAYAAADZu3m9AAAABHNCSVQICAgIfAhkiAAABUBJREFU\neJztm1uIVVUYgD9tJrKaaYyGbMzx1JAmXSRNIySD7kxKNyqwC4REFywII43EiMKiAru+VEwnitSH\ngggSpUKyiB4s7YKWD1lIpVQPillZTQ//Osye3Vp7r8u+nIn1weGcvW77/9f+11r/+vc6EIlExiTj\n6hYg4sQ5wCBwODADWAl8XqtEkUgkl6OB5xPX1wH7gWPqEScSidhyJvAPMKCuu4FhYEFtEkUiESvG\nIW5za6tzGjJ4Z9QmUaRWXPe8qxFXbWVGmZeAOchK8TvwMfCnyjsOmAisBR4BDhramIasKOcCfcAB\n4GfgAWAX0ASWAT85yh9Knv6dwGRExjQu/dKN9M2+DFleBfYCS10U8KCI55mmKjsKpSg7rF3fs4G/\ngSGLsg1kVXhck3e5yntLk3cYsBz4AbgTOCWRNwXYBLwM7LCUuUjy9O8AHgSOzGijgV2/dAJPqjZ1\nLFZtVBVwbOD3PHVUYUehFGmHtes7HnhPVX7HovxNquxFhvydiEJdibR+ZLbZBZxqqDdLtfuchQwg\ns5hpALhgo/9Sdb8sXPplHvqHuAAZvAATkAdeNj7PU0cVdhRKkXbYFvreDtyBLOOfWpR/EfgDMa40\nXciy/yMjK0cH8AnwLXBCTtt7gKssZABxaxqWZbPI078LeMOiHdd+eYHR0eTzkYE7SX0WIS5d2bjK\nbaJsOwqlaDusXd9eZPYYD+xGXIk8vgY2G/LuQ2aXWxNpq1TajRZtfwj0WJSDYgavjf5XA/datOXa\nL0uAu9Xvk5F903Dq021x31Bc5dZRhR2FUqQdtoW+Q4gLB7AF+EsJZOJ4dZOHU+k9Km0vcHMi/SzE\nFfgqp90W11uUadEkfPDa6P8Msipm4dovAJcArzvKWzQ+cuso245CKdoOS9c3bz84D9m8f6Su96jr\nXvVbx3z1PQA8pn53IXu1b1SbOxPlBxGlnkLeY+axzqJMUdjqfyIShczCtV9AZuKGh9xF4iN3mirs\nKJQi7bB2fTsQ1yDp+w8hs8PMjHrPIn77EZq8VYjrd3Eibb1qc7atYA408Td+F/03kP++1bVfAI6i\nnsh6Eh+5k1RlR6EUZYdtoe89/Hcf96gS4tKMetsYmXHSTAAOAd8n0n5F3BXdJj3NNIsySZr4D14X\n/V8DFua059ovINFr0x6oKnzkTlKVHYVSlB1Wpq/Jbe5TAmxndNh6qvqeZKjXA5wOPGHIP4TMLpMR\nl2A/8B0Sns978dwL3ALcr8l7Bf2s1g/MZeRld5LFyF5Eh6v+O4DpwNuG9nz6BdXmdkOdLM5AItW2\nUcmtSGQ0ja/cLaq0o1Cdi7DDKvU1sga4QJN+DTKDLDPUW0j2edvzVP67ibTVKq0/SyDgIWRT70IT\nv5XXVf/ZSJjfhE+/AKwArsgTtkR85W5RpR2FUoQdVqqvLvp1IfAL8L4mb7f6Ns0g89VNdMt/J3Ks\nDOQoWIt1yKyyyNAmwG1IqN202S8SH/23AMdi/oePT790Il7D+nyRS8NH7hZV21EooXZYu76zlGAT\nDfkD6iZrDPmfAV9o0qcihxgOADdo8i8DfgPuYvSeYzoSeRvMEjqDJm4rb4j+c5FIpQ6fflkOXJsj\nb9n4Ps+67CgUXzusVd8+4EskRD6MvOtKuwZvIrPOMHJw+gPkPWQ3MttsVXkHkWjbJvXZhpwueRrx\n603MQc7zbgY2IvvYFcBJGXXyaGI3eEP0T3Il8iAhrF+mIAc06iBE7nawo1Bc7PD/oG/b0qT+96SR\nSCnYnCQZy+xDZrtIJBKJRCKRSCQSiUQikcgY4V+hOFAJDK9DFAAAAABJRU5ErkJggg==\n",
396 "prompt_number": 14,
397 "text": [
372 "text": [
398 "\n",
373 "\n",
399 " 2 \n",
374 "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
400 "A\u22c5B\u22c5C + A\u22c5B - B\u22c5A\u22c5B - C\u22c5A\u22c5B"
375 "For more information, type 'help(pylab)'.\n"
401 ]
376 ]
402 }
377 }
403 ],
378 ],
404 "prompt_number": 14
379 "prompt_number": 2
405 },
380 },
406 {
381 {
407 "cell_type": "markdown",
382 "cell_type": "code",
383 "collapsed": false,
384 "input": [
385 "%load http://matplotlib.sourceforge.net/mpl_examples/pylab_examples/integral_demo.py"
386 ],
387 "language": "python",
408 "metadata": {},
388 "metadata": {},
409 "source": [
389 "outputs": [],
410 "Take the dagger"
390 "prompt_number": 3
411 ]
412 },
391 },
413 {
392 {
414 "cell_type": "code",
393 "cell_type": "code",
415 "collapsed": false,
394 "collapsed": false,
416 "input": [
395 "input": [
417 "Dagger(_)"
396 "#!/usr/bin/env python\n",
397 "\n",
398 "# implement the example graphs/integral from pyx\n",
399 "from pylab import *\n",
400 "from matplotlib.patches import Polygon\n",
401 "\n",
402 "def func(x):\n",
403 " return (x-3)*(x-5)*(x-7)+85\n",
404 "\n",
405 "ax = subplot(111)\n",
406 "\n",
407 "a, b = 2, 9 # integral area\n",
408 "x = arange(0, 10, 0.01)\n",
409 "y = func(x)\n",
410 "plot(x, y, linewidth=1)\n",
411 "\n",
412 "# make the shaded region\n",
413 "ix = arange(a, b, 0.01)\n",
414 "iy = func(ix)\n",
415 "verts = [(a,0)] + zip(ix,iy) + [(b,0)]\n",
416 "poly = Polygon(verts, facecolor='0.8', edgecolor='k')\n",
417 "ax.add_patch(poly)\n",
418 "\n",
419 "text(0.5 * (a + b), 30,\n",
420 " r\"$\\int_a^b f(x)\\mathrm{d}x$\", horizontalalignment='center',\n",
421 " fontsize=20)\n",
422 "\n",
423 "axis([0,10, 0, 180])\n",
424 "figtext(0.9, 0.05, 'x')\n",
425 "figtext(0.1, 0.9, 'y')\n",
426 "ax.set_xticks((a,b))\n",
427 "ax.set_xticklabels(('a','b'))\n",
428 "ax.set_yticks([])\n",
429 "show()\n"
418 ],
430 ],
419 "language": "python",
431 "language": "python",
420 "metadata": {},
432 "metadata": {},
421 "outputs": [
433 "outputs": []
422 {
423 "latex": [
424 "$$- B^{\\dagger} A^{\\dagger} B^{\\dagger} - B^{\\dagger} A^{\\dagger} C^{\\dagger} + \\left(B^{\\dagger}\\right)^{2} A^{\\dagger} + C^{\\dagger} B^{\\dagger} A^{\\dagger}$$"
425 ],
426 "output_type": "pyout",
427 "png": "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\n",
428 "prompt_number": 15,
429 "text": [
430 "\n",
431 " 2 \n",
432 " \u2020 \u2020 \u2020 \u2020 \u2020 \u2020 \u239b \u2020\u239e \u2020 \u2020 \u2020 \u2020\n",
433 "- B \u22c5A \u22c5B - B \u22c5A \u22c5C + \u239dB \u23a0 \u22c5A + C \u22c5B \u22c5A "
434 ]
435 }
436 ],
437 "prompt_number": 15
438 }
434 }
439 ],
435 ],
440 "metadata": {}
436 "metadata": {}
1 NO CONTENT: file renamed from examples/notebooks/00_notebook_tour.ipynb to examples/notebooks/Part 5 - Rich Display System.ipynb
NO CONTENT: file renamed from examples/notebooks/00_notebook_tour.ipynb to examples/notebooks/Part 5 - Rich Display System.ipynb
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from examples/notebooks/rmagic_extension.ipynb to examples/notebooks/R Magics.ipynb
NO CONTENT: file renamed from examples/notebooks/rmagic_extension.ipynb to examples/notebooks/R Magics.ipynb
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from examples/notebooks/sympy.ipynb to examples/notebooks/SymPy Examples.ipynb
NO CONTENT: file renamed from examples/notebooks/sympy.ipynb to examples/notebooks/SymPy Examples.ipynb
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from examples/notebooks/trapezoid_rule.ipynb to examples/notebooks/Trapezoid Rule.ipynb
NO CONTENT: file renamed from examples/notebooks/trapezoid_rule.ipynb to examples/notebooks/Trapezoid Rule.ipynb
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
This diff has been collapsed as it changes many lines, (602 lines changed) Show them Hide them
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now