##// END OF EJS Templates
Work on IPython Kernel notebooks.
Brian E. Granger -
Show More

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

This diff has been collapsed as it changes many lines, (1613 lines changed) Show them Hide them
@@ -0,0 +1,1613 b''
1 {
2 "metadata": {
3 "name": "",
4 "signature": "sha256:31071a05d0ecd75ed72fe3f0de0ad447a6f85cffe382c26efa5e68db1fee54ee"
5 },
6 "nbformat": 3,
7 "nbformat_minor": 0,
8 "worksheets": [
9 {
10 "cells": [
11 {
12 "cell_type": "heading",
13 "level": 1,
14 "metadata": {
15 "slideshow": {
16 "slide_type": "slide"
17 }
18 },
19 "source": [
20 "IPython: beyond plain Python"
21 ]
22 },
23 {
24 "cell_type": "markdown",
25 "metadata": {},
26 "source": [
27 "When executing code in IPython, all valid Python syntax works as-is, but IPython provides a number of features designed to make the interactive experience more fluid and efficient."
28 ]
29 },
30 {
31 "cell_type": "heading",
32 "level": 2,
33 "metadata": {
34 "slideshow": {
35 "slide_type": "slide"
36 }
37 },
38 "source": [
39 "First things first: running code, getting help"
40 ]
41 },
42 {
43 "cell_type": "markdown",
44 "metadata": {},
45 "source": [
46 "In the notebook, to run a cell of code, hit `Shift-Enter`. This executes the cell and puts the cursor in the next cell below, or makes a new one if you are at the end. Alternately, you can use:\n",
47 " \n",
48 "- `Alt-Enter` to force the creation of a new cell unconditionally (useful when inserting new content in the middle of an existing notebook).\n",
49 "- `Control-Enter` executes the cell and keeps the cursor in the same cell, useful for quick experimentation of snippets that you don't need to keep permanently."
50 ]
51 },
52 {
53 "cell_type": "code",
54 "collapsed": false,
55 "input": [
56 "print \"Hi\""
57 ],
58 "language": "python",
59 "metadata": {},
60 "outputs": [
61 {
62 "output_type": "stream",
63 "stream": "stdout",
64 "text": [
65 "Hi\n"
66 ]
67 }
68 ],
69 "prompt_number": 1
70 },
71 {
72 "cell_type": "markdown",
73 "metadata": {
74 "slideshow": {
75 "slide_type": "slide"
76 }
77 },
78 "source": [
79 "Getting help:"
80 ]
81 },
82 {
83 "cell_type": "code",
84 "collapsed": false,
85 "input": [
86 "?"
87 ],
88 "language": "python",
89 "metadata": {},
90 "outputs": [],
91 "prompt_number": 2
92 },
93 {
94 "cell_type": "markdown",
95 "metadata": {
96 "slideshow": {
97 "slide_type": "slide"
98 }
99 },
100 "source": [
101 "Typing `object_name?` will print all sorts of details about any object, including docstrings, function definition lines (for call arguments) and constructor details for classes."
102 ]
103 },
104 {
105 "cell_type": "code",
106 "collapsed": false,
107 "input": [
108 "import collections\n",
109 "collections.namedtuple?"
110 ],
111 "language": "python",
112 "metadata": {},
113 "outputs": [],
114 "prompt_number": 3
115 },
116 {
117 "cell_type": "code",
118 "collapsed": false,
119 "input": [
120 "collections.Counter??"
121 ],
122 "language": "python",
123 "metadata": {},
124 "outputs": [],
125 "prompt_number": 4
126 },
127 {
128 "cell_type": "code",
129 "collapsed": false,
130 "input": [
131 "*int*?"
132 ],
133 "language": "python",
134 "metadata": {},
135 "outputs": [],
136 "prompt_number": 5
137 },
138 {
139 "cell_type": "markdown",
140 "metadata": {
141 "slideshow": {
142 "slide_type": "slide"
143 }
144 },
145 "source": [
146 "An IPython quick reference card:"
147 ]
148 },
149 {
150 "cell_type": "code",
151 "collapsed": false,
152 "input": [
153 "%quickref"
154 ],
155 "language": "python",
156 "metadata": {},
157 "outputs": [],
158 "prompt_number": 6
159 },
160 {
161 "cell_type": "heading",
162 "level": 2,
163 "metadata": {
164 "slideshow": {
165 "slide_type": "slide"
166 }
167 },
168 "source": [
169 "Tab completion"
170 ]
171 },
172 {
173 "cell_type": "markdown",
174 "metadata": {},
175 "source": [
176 "Tab completion, especially for attributes, is a convenient way to explore the structure of any object you\u2019re dealing with. Simply type `object_name.<TAB>` to view the object\u2019s attributes. Besides Python objects and keywords, tab completion also works on file and directory names."
177 ]
178 },
179 {
180 "cell_type": "code",
181 "collapsed": false,
182 "input": [
183 "collections."
184 ],
185 "language": "python",
186 "metadata": {},
187 "outputs": [],
188 "prompt_number": 8
189 },
190 {
191 "cell_type": "heading",
192 "level": 2,
193 "metadata": {
194 "slideshow": {
195 "slide_type": "slide"
196 }
197 },
198 "source": [
199 "The interactive workflow: input, output, history"
200 ]
201 },
202 {
203 "cell_type": "code",
204 "collapsed": false,
205 "input": [
206 "2+10"
207 ],
208 "language": "python",
209 "metadata": {},
210 "outputs": [
211 {
212 "metadata": {},
213 "output_type": "pyout",
214 "prompt_number": 7,
215 "text": [
216 "12"
217 ]
218 }
219 ],
220 "prompt_number": 7
221 },
222 {
223 "cell_type": "code",
224 "collapsed": false,
225 "input": [
226 "_+10"
227 ],
228 "language": "python",
229 "metadata": {},
230 "outputs": [
231 {
232 "metadata": {},
233 "output_type": "pyout",
234 "prompt_number": 8,
235 "text": [
236 "22"
237 ]
238 }
239 ],
240 "prompt_number": 8
241 },
242 {
243 "cell_type": "markdown",
244 "metadata": {
245 "slideshow": {
246 "slide_type": "slide"
247 }
248 },
249 "source": [
250 "You can suppress the storage and rendering of output if you append `;` to the last cell (this comes in handy when plotting with matplotlib, for example):"
251 ]
252 },
253 {
254 "cell_type": "code",
255 "collapsed": false,
256 "input": [
257 "10+20;"
258 ],
259 "language": "python",
260 "metadata": {},
261 "outputs": [],
262 "prompt_number": 9
263 },
264 {
265 "cell_type": "code",
266 "collapsed": false,
267 "input": [
268 "_"
269 ],
270 "language": "python",
271 "metadata": {},
272 "outputs": [
273 {
274 "metadata": {},
275 "output_type": "pyout",
276 "prompt_number": 10,
277 "text": [
278 "22"
279 ]
280 }
281 ],
282 "prompt_number": 10
283 },
284 {
285 "cell_type": "markdown",
286 "metadata": {
287 "slideshow": {
288 "slide_type": "slide"
289 }
290 },
291 "source": [
292 "The output is stored in `_N` and `Out[N]` variables:"
293 ]
294 },
295 {
296 "cell_type": "code",
297 "collapsed": false,
298 "input": [
299 "_10 == Out[10]"
300 ],
301 "language": "python",
302 "metadata": {},
303 "outputs": [
304 {
305 "metadata": {},
306 "output_type": "pyout",
307 "prompt_number": 11,
308 "text": [
309 "True"
310 ]
311 }
312 ],
313 "prompt_number": 11
314 },
315 {
316 "cell_type": "markdown",
317 "metadata": {
318 "slideshow": {
319 "slide_type": "slide"
320 }
321 },
322 "source": [
323 "And the last three have shorthands for convenience:"
324 ]
325 },
326 {
327 "cell_type": "code",
328 "collapsed": false,
329 "input": [
330 "print 'last output:', _\n",
331 "print 'next one :', __\n",
332 "print 'and next :', ___"
333 ],
334 "language": "python",
335 "metadata": {},
336 "outputs": [
337 {
338 "output_type": "stream",
339 "stream": "stdout",
340 "text": [
341 "last output: True\n",
342 "next one : 22\n",
343 "and next : 22\n"
344 ]
345 }
346 ],
347 "prompt_number": 12
348 },
349 {
350 "cell_type": "code",
351 "collapsed": false,
352 "input": [
353 "In[11]"
354 ],
355 "language": "python",
356 "metadata": {
357 "slideshow": {
358 "slide_type": "-"
359 }
360 },
361 "outputs": [
362 {
363 "metadata": {},
364 "output_type": "pyout",
365 "prompt_number": 13,
366 "text": [
367 "u'_10 == Out[10]'"
368 ]
369 }
370 ],
371 "prompt_number": 13
372 },
373 {
374 "cell_type": "code",
375 "collapsed": false,
376 "input": [
377 "_i"
378 ],
379 "language": "python",
380 "metadata": {},
381 "outputs": [
382 {
383 "metadata": {},
384 "output_type": "pyout",
385 "prompt_number": 14,
386 "text": [
387 "u'In[11]'"
388 ]
389 }
390 ],
391 "prompt_number": 14
392 },
393 {
394 "cell_type": "code",
395 "collapsed": false,
396 "input": [
397 "_ii"
398 ],
399 "language": "python",
400 "metadata": {},
401 "outputs": [
402 {
403 "metadata": {},
404 "output_type": "pyout",
405 "prompt_number": 15,
406 "text": [
407 "u'In[11]'"
408 ]
409 }
410 ],
411 "prompt_number": 15
412 },
413 {
414 "cell_type": "code",
415 "collapsed": false,
416 "input": [
417 "print 'last input:', _i\n",
418 "print 'next one :', _ii\n",
419 "print 'and next :', _iii"
420 ],
421 "language": "python",
422 "metadata": {
423 "slideshow": {
424 "slide_type": "subslide"
425 }
426 },
427 "outputs": [
428 {
429 "output_type": "stream",
430 "stream": "stdout",
431 "text": [
432 "last input: _ii\n",
433 "next one : _i\n",
434 "and next : In[11]\n"
435 ]
436 }
437 ],
438 "prompt_number": 16
439 },
440 {
441 "cell_type": "code",
442 "collapsed": false,
443 "input": [
444 "%history -n 1-5"
445 ],
446 "language": "python",
447 "metadata": {},
448 "outputs": [
449 {
450 "output_type": "stream",
451 "stream": "stdout",
452 "text": [
453 " 1: print \"Hi\"\n",
454 " 2: ?\n",
455 " 3:\n",
456 "import collections\n",
457 "collections.namedtuple?\n",
458 " 4: collections.Counter??\n",
459 " 5: *int*?\n"
460 ]
461 }
462 ],
463 "prompt_number": 17
464 },
465 {
466 "cell_type": "markdown",
467 "metadata": {
468 "slideshow": {
469 "slide_type": "subslide"
470 }
471 },
472 "source": [
473 "**Exercise**\n",
474 "\n",
475 "Write the last 10 lines of history to a file named `log.py`."
476 ]
477 },
478 {
479 "cell_type": "heading",
480 "level": 2,
481 "metadata": {
482 "slideshow": {
483 "slide_type": "slide"
484 }
485 },
486 "source": [
487 "Accessing the underlying operating system"
488 ]
489 },
490 {
491 "cell_type": "code",
492 "collapsed": false,
493 "input": [
494 "!pwd"
495 ],
496 "language": "python",
497 "metadata": {},
498 "outputs": [
499 {
500 "output_type": "stream",
501 "stream": "stdout",
502 "text": [
503 "/home/fperez/ipython/tutorial/notebooks\r\n"
504 ]
505 }
506 ],
507 "prompt_number": 18
508 },
509 {
510 "cell_type": "code",
511 "collapsed": false,
512 "input": [
513 "files = !ls\n",
514 "print \"My current directory's files:\"\n",
515 "print files"
516 ],
517 "language": "python",
518 "metadata": {},
519 "outputs": [
520 {
521 "output_type": "stream",
522 "stream": "stdout",
523 "text": [
524 "My current directory's files:\n",
525 "['BackgroundJobs.ipynb', 'Custom Display Logic.ipynb', 'Customizing IPython - Condensed.ipynb', 'Customizing IPython - Config.ipynb', 'Customizing IPython - Extensions.ipynb', 'Customizing IPython - Magics.ipynb', 'data', 'figs', 'flare.json', 'Index.ipynb', 'Interactive Widgets.ipynb', 'IPython - beyond plain Python.ipynb', 'kernel-embedding', 'Markdown Cells.ipynb', 'myscript.py', 'nbconvert_arch.png', 'NbConvert from command line.ipynb', 'NbConvert Python library.ipynb', 'Notebook and javascript extension.ipynb', 'Notebook Basics.ipynb', 'Overview of IPython.parallel.ipynb', 'parallel', 'Rich Display System.ipynb', 'Running a Secure Public Notebook.ipynb', 'Running Code.ipynb', 'Sample.ipynb', 'soln', 'Terminal usage.ipynb', 'text_analysis.py', 'Typesetting Math Using MathJax.ipynb']\n"
526 ]
527 }
528 ],
529 "prompt_number": 19
530 },
531 {
532 "cell_type": "code",
533 "collapsed": false,
534 "input": [
535 "!echo $files"
536 ],
537 "language": "python",
538 "metadata": {},
539 "outputs": [
540 {
541 "output_type": "stream",
542 "stream": "stdout",
543 "text": [
544 "[BackgroundJobs.ipynb, Custom Display Logic.ipynb, Customizing IPython - Condensed.ipynb, Customizing IPython - Config.ipynb, Customizing IPython - Extensions.ipynb, Customizing IPython - Magics.ipynb, data, figs, flare.json, Index.ipynb, Interactive Widgets.ipynb, IPython - beyond plain Python.ipynb, kernel-embedding, Markdown Cells.ipynb, myscript.py, nbconvert_arch.png, NbConvert from command line.ipynb, NbConvert Python library.ipynb, Notebook and javascript extension.ipynb, Notebook Basics.ipynb, Overview of IPython.parallel.ipynb, parallel, Rich Display System.ipynb, Running a Secure Public Notebook.ipynb, Running Code.ipynb, Sample.ipynb, soln, Terminal usage.ipynb, text_analysis.py, Typesetting Math Using MathJax.ipynb]\r\n"
545 ]
546 }
547 ],
548 "prompt_number": 20
549 },
550 {
551 "cell_type": "code",
552 "collapsed": false,
553 "input": [
554 "!echo {files[0].upper()}"
555 ],
556 "language": "python",
557 "metadata": {},
558 "outputs": [
559 {
560 "output_type": "stream",
561 "stream": "stdout",
562 "text": [
563 "BACKGROUNDJOBS.IPYNB\r\n"
564 ]
565 }
566 ],
567 "prompt_number": 21
568 },
569 {
570 "cell_type": "markdown",
571 "metadata": {},
572 "source": [
573 "Note that all this is available even in multiline blocks:"
574 ]
575 },
576 {
577 "cell_type": "code",
578 "collapsed": false,
579 "input": [
580 "import os\n",
581 "for i,f in enumerate(files):\n",
582 " if f.endswith('ipynb'):\n",
583 " !echo {\"%02d\" % i} - \"{os.path.splitext(f)[0]}\"\n",
584 " else:\n",
585 " print '--'"
586 ],
587 "language": "python",
588 "metadata": {},
589 "outputs": [
590 {
591 "output_type": "stream",
592 "stream": "stdout",
593 "text": [
594 "00 - BackgroundJobs\r\n"
595 ]
596 },
597 {
598 "output_type": "stream",
599 "stream": "stdout",
600 "text": [
601 "01 - Custom Display Logic\r\n"
602 ]
603 },
604 {
605 "output_type": "stream",
606 "stream": "stdout",
607 "text": [
608 "02 - Customizing IPython - Condensed\r\n"
609 ]
610 },
611 {
612 "output_type": "stream",
613 "stream": "stdout",
614 "text": [
615 "03 - Customizing IPython - Config\r\n"
616 ]
617 },
618 {
619 "output_type": "stream",
620 "stream": "stdout",
621 "text": [
622 "04 - Customizing IPython - Extensions\r\n"
623 ]
624 },
625 {
626 "output_type": "stream",
627 "stream": "stdout",
628 "text": [
629 "05 - Customizing IPython - Magics\r\n"
630 ]
631 },
632 {
633 "output_type": "stream",
634 "stream": "stdout",
635 "text": [
636 "--\n",
637 "--\n",
638 "--\n",
639 "09 - Index\r\n"
640 ]
641 },
642 {
643 "output_type": "stream",
644 "stream": "stdout",
645 "text": [
646 "10 - Interactive Widgets\r\n"
647 ]
648 },
649 {
650 "output_type": "stream",
651 "stream": "stdout",
652 "text": [
653 "11 - IPython - beyond plain Python\r\n"
654 ]
655 },
656 {
657 "output_type": "stream",
658 "stream": "stdout",
659 "text": [
660 "--\n",
661 "13 - Markdown Cells\r\n"
662 ]
663 },
664 {
665 "output_type": "stream",
666 "stream": "stdout",
667 "text": [
668 "--\n",
669 "--\n",
670 "16 - NbConvert from command line\r\n"
671 ]
672 },
673 {
674 "output_type": "stream",
675 "stream": "stdout",
676 "text": [
677 "17 - NbConvert Python library\r\n"
678 ]
679 },
680 {
681 "output_type": "stream",
682 "stream": "stdout",
683 "text": [
684 "18 - Notebook and javascript extension\r\n"
685 ]
686 },
687 {
688 "output_type": "stream",
689 "stream": "stdout",
690 "text": [
691 "19 - Notebook Basics\r\n"
692 ]
693 },
694 {
695 "output_type": "stream",
696 "stream": "stdout",
697 "text": [
698 "20 - Overview of IPython.parallel\r\n"
699 ]
700 },
701 {
702 "output_type": "stream",
703 "stream": "stdout",
704 "text": [
705 "--\n",
706 "22 - Rich Display System\r\n"
707 ]
708 },
709 {
710 "output_type": "stream",
711 "stream": "stdout",
712 "text": [
713 "23 - Running a Secure Public Notebook\r\n"
714 ]
715 },
716 {
717 "output_type": "stream",
718 "stream": "stdout",
719 "text": [
720 "24 - Running Code\r\n"
721 ]
722 },
723 {
724 "output_type": "stream",
725 "stream": "stdout",
726 "text": [
727 "25 - Sample\r\n"
728 ]
729 },
730 {
731 "output_type": "stream",
732 "stream": "stdout",
733 "text": [
734 "--\n",
735 "27 - Terminal usage\r\n"
736 ]
737 },
738 {
739 "output_type": "stream",
740 "stream": "stdout",
741 "text": [
742 "--\n",
743 "29 - Typesetting Math Using MathJax\r\n"
744 ]
745 }
746 ],
747 "prompt_number": 27
748 },
749 {
750 "cell_type": "heading",
751 "level": 2,
752 "metadata": {},
753 "source": [
754 "Beyond Python: magic functions"
755 ]
756 },
757 {
758 "cell_type": "markdown",
759 "metadata": {},
760 "source": [
761 "The IPyhton 'magic' functions are a set of commands, invoked by prepending one or two `%` signs to their name, that live in a namespace separate from your normal Python variables and provide a more command-like interface. They take flags with `--` and arguments without quotes, parentheses or commas. The motivation behind this system is two-fold:\n",
762 " \n",
763 "- To provide an orthogonal namespace for controlling IPython itself and exposing other system-oriented functionality.\n",
764 "\n",
765 "- To expose a calling mode that requires minimal verbosity and typing while working interactively. Thus the inspiration taken from the classic Unix shell style for commands."
766 ]
767 },
768 {
769 "cell_type": "code",
770 "collapsed": false,
771 "input": [
772 "%magic"
773 ],
774 "language": "python",
775 "metadata": {},
776 "outputs": [],
777 "prompt_number": 28
778 },
779 {
780 "cell_type": "markdown",
781 "metadata": {},
782 "source": [
783 "Line vs cell magics:"
784 ]
785 },
786 {
787 "cell_type": "code",
788 "collapsed": false,
789 "input": [
790 "%timeit range(10)"
791 ],
792 "language": "python",
793 "metadata": {},
794 "outputs": [
795 {
796 "output_type": "stream",
797 "stream": "stdout",
798 "text": [
799 "10000000 loops, best of 3: 190 ns per loop\n"
800 ]
801 }
802 ],
803 "prompt_number": 29
804 },
805 {
806 "cell_type": "code",
807 "collapsed": false,
808 "input": [
809 "%%timeit\n",
810 "range(10)\n",
811 "range(100)"
812 ],
813 "language": "python",
814 "metadata": {},
815 "outputs": [
816 {
817 "output_type": "stream",
818 "stream": "stdout",
819 "text": [
820 "1000000 loops, best of 3: 888 ns per loop\n"
821 ]
822 }
823 ],
824 "prompt_number": 30
825 },
826 {
827 "cell_type": "markdown",
828 "metadata": {},
829 "source": [
830 "Line magics can be used even inside code blocks:"
831 ]
832 },
833 {
834 "cell_type": "code",
835 "collapsed": false,
836 "input": [
837 "for i in range(5):\n",
838 " size = i*100\n",
839 " print 'size:',size, \n",
840 " %timeit range(size)"
841 ],
842 "language": "python",
843 "metadata": {},
844 "outputs": [
845 {
846 "output_type": "stream",
847 "stream": "stdout",
848 "text": [
849 "size: 010000000 loops, best of 3: 129 ns per loop"
850 ]
851 },
852 {
853 "output_type": "stream",
854 "stream": "stdout",
855 "text": [
856 "\n",
857 " size: 1001000000 loops, best of 3: 649 ns per loop"
858 ]
859 },
860 {
861 "output_type": "stream",
862 "stream": "stdout",
863 "text": [
864 "\n",
865 " size: 2001000000 loops, best of 3: 1.09 \u00b5s per loop"
866 ]
867 },
868 {
869 "output_type": "stream",
870 "stream": "stdout",
871 "text": [
872 "\n",
873 " size: 3001000000 loops, best of 3: 1.74 \u00b5s per loop"
874 ]
875 },
876 {
877 "output_type": "stream",
878 "stream": "stdout",
879 "text": [
880 "\n",
881 " size: 400100000 loops, best of 3: 2.72 \u00b5s per loop"
882 ]
883 },
884 {
885 "output_type": "stream",
886 "stream": "stdout",
887 "text": [
888 "\n",
889 "\n"
890 ]
891 }
892 ],
893 "prompt_number": 31
894 },
895 {
896 "cell_type": "markdown",
897 "metadata": {},
898 "source": [
899 "Magics can do anything they want with their input, so it doesn't have to be valid Python:"
900 ]
901 },
902 {
903 "cell_type": "code",
904 "collapsed": false,
905 "input": [
906 "%%bash\n",
907 "echo \"My shell is:\" $SHELL\n",
908 "echo \"My memory status is:\"\n",
909 "free"
910 ],
911 "language": "python",
912 "metadata": {},
913 "outputs": [
914 {
915 "output_type": "stream",
916 "stream": "stdout",
917 "text": [
918 "My shell is: /bin/bash\n",
919 "My memory status is:\n",
920 " total used free shared buffers cached\n",
921 "Mem: 7870888 6389328 1481560 0 662860 2505172\n",
922 "-/+ buffers/cache: 3221296 4649592\n",
923 "Swap: 3905532 4852 3900680\n"
924 ]
925 }
926 ],
927 "prompt_number": 32
928 },
929 {
930 "cell_type": "markdown",
931 "metadata": {},
932 "source": [
933 "Another interesting cell magic: create any file you want locally from the notebook:"
934 ]
935 },
936 {
937 "cell_type": "code",
938 "collapsed": false,
939 "input": [
940 "%%writefile test.txt\n",
941 "This is a test file!\n",
942 "It can contain anything I want...\n",
943 "\n",
944 "And more..."
945 ],
946 "language": "python",
947 "metadata": {},
948 "outputs": [
949 {
950 "output_type": "stream",
951 "stream": "stdout",
952 "text": [
953 "Writing test.txt\n"
954 ]
955 }
956 ],
957 "prompt_number": 33
958 },
959 {
960 "cell_type": "code",
961 "collapsed": false,
962 "input": [
963 "!cat test.txt"
964 ],
965 "language": "python",
966 "metadata": {},
967 "outputs": [
968 {
969 "output_type": "stream",
970 "stream": "stdout",
971 "text": [
972 "This is a test file!\r\n",
973 "It can contain anything I want...\r\n",
974 "\r\n",
975 "And more..."
976 ]
977 }
978 ],
979 "prompt_number": 34
980 },
981 {
982 "cell_type": "markdown",
983 "metadata": {},
984 "source": [
985 "Let's see what other magics are currently defined in the system:"
986 ]
987 },
988 {
989 "cell_type": "code",
990 "collapsed": false,
991 "input": [
992 "%lsmagic"
993 ],
994 "language": "python",
995 "metadata": {},
996 "outputs": [
997 {
998 "json": [
999 "{\"cell\": {\"prun\": \"ExecutionMagics\", \"file\": \"Other\", \"!\": \"OSMagics\", \"capture\": \"ExecutionMagics\", \"timeit\": \"ExecutionMagics\", \"script\": \"ScriptMagics\", \"pypy\": \"Other\", \"system\": \"OSMagics\", \"perl\": \"Other\", \"HTML\": \"Other\", \"bash\": \"Other\", \"python\": \"Other\", \"SVG\": \"Other\", \"javascript\": \"DisplayMagics\", \"writefile\": \"OSMagics\", \"ruby\": \"Other\", \"python3\": \"Other\", \"python2\": \"Other\", \"latex\": \"DisplayMagics\", \"sx\": \"OSMagics\", \"svg\": \"DisplayMagics\", \"html\": \"DisplayMagics\", \"sh\": \"Other\", \"time\": \"ExecutionMagics\", \"debug\": \"ExecutionMagics\"}, \"line\": {\"psource\": \"NamespaceMagics\", \"logstart\": \"LoggingMagics\", \"popd\": \"OSMagics\", \"loadpy\": \"CodeMagics\", \"install_ext\": \"ExtensionMagics\", \"colors\": \"BasicMagics\", \"who_ls\": \"NamespaceMagics\", \"lf\": \"Other\", \"install_profiles\": \"DeprecatedMagics\", \"clk\": \"Other\", \"ll\": \"Other\", \"pprint\": \"BasicMagics\", \"lk\": \"Other\", \"ls\": \"Other\", \"save\": \"CodeMagics\", \"tb\": \"ExecutionMagics\", \"lx\": \"Other\", \"dl\": \"Other\", \"pylab\": \"PylabMagics\", \"dd\": \"Other\", \"quickref\": \"BasicMagics\", \"dx\": \"Other\", \"d\": \"Other\", \"magic\": \"BasicMagics\", \"dhist\": \"OSMagics\", \"edit\": \"KernelMagics\", \"logstop\": \"LoggingMagics\", \"gui\": \"BasicMagics\", \"alias_magic\": \"BasicMagics\", \"debug\": \"ExecutionMagics\", \"page\": \"BasicMagics\", \"logstate\": \"LoggingMagics\", \"ed\": \"Other\", \"pushd\": \"OSMagics\", \"timeit\": \"ExecutionMagics\", \"rehashx\": \"OSMagics\", \"hist\": \"Other\", \"qtconsole\": \"KernelMagics\", \"rm\": \"Other\", \"dirs\": \"OSMagics\", \"run\": \"ExecutionMagics\", \"reset_selective\": \"NamespaceMagics\", \"rep\": \"Other\", \"pinfo2\": \"NamespaceMagics\", \"matplotlib\": \"PylabMagics\", \"automagic\": \"AutoMagics\", \"doctest_mode\": \"KernelMagics\", \"logoff\": \"LoggingMagics\", \"reload_ext\": \"ExtensionMagics\", \"pdb\": \"ExecutionMagics\", \"load\": \"CodeMagics\", \"lsmagic\": \"BasicMagics\", \"cl\": \"Other\", \"autosave\": \"KernelMagics\", \"cd\": \"OSMagics\", \"pastebin\": \"CodeMagics\", \"prun\": \"ExecutionMagics\", \"cp\": \"Other\", \"autocall\": \"AutoMagics\", \"bookmark\": \"OSMagics\", \"connect_info\": \"KernelMagics\", \"mkdir\": \"Other\", \"system\": \"OSMagics\", \"whos\": \"NamespaceMagics\", \"rmdir\": \"Other\", \"unload_ext\": \"ExtensionMagics\", \"store\": \"StoreMagics\", \"more\": \"KernelMagics\", \"pdef\": \"NamespaceMagics\", \"precision\": \"BasicMagics\", \"pinfo\": \"NamespaceMagics\", \"pwd\": \"OSMagics\", \"psearch\": \"NamespaceMagics\", \"reset\": \"NamespaceMagics\", \"recall\": \"HistoryMagics\", \"xdel\": \"NamespaceMagics\", \"xmode\": \"BasicMagics\", \"cat\": \"Other\", \"mv\": \"Other\", \"rerun\": \"HistoryMagics\", \"logon\": \"LoggingMagics\", \"history\": \"HistoryMagics\", \"pycat\": \"OSMagics\", \"unalias\": \"OSMagics\", \"install_default_config\": \"DeprecatedMagics\", \"env\": \"OSMagics\", \"load_ext\": \"ExtensionMagics\", \"config\": \"ConfigMagics\", \"killbgscripts\": \"ScriptMagics\", \"profile\": \"BasicMagics\", \"pfile\": \"NamespaceMagics\", \"less\": \"KernelMagics\", \"who\": \"NamespaceMagics\", \"notebook\": \"BasicMagics\", \"man\": \"KernelMagics\", \"sx\": \"OSMagics\", \"macro\": \"ExecutionMagics\", \"clear\": \"KernelMagics\", \"alias\": \"OSMagics\", \"time\": \"ExecutionMagics\", \"sc\": \"OSMagics\", \"ldir\": \"Other\", \"pdoc\": \"NamespaceMagics\"}}"
1000 ],
1001 "metadata": {},
1002 "output_type": "pyout",
1003 "prompt_number": 35,
1004 "text": [
1005 "Available line magics:\n",
1006 "%alias %alias_magic %autocall %automagic %autosave %bookmark %cat %cd %cl %clear %clk %colors %config %connect_info %cp %d %dd %debug %dhist %dirs %dl %doctest_mode %dx %ed %edit %env %gui %hist %history %install_default_config %install_ext %install_profiles %killbgscripts %ldir %less %lf %lk %ll %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %ls %lsmagic %lx %macro %magic %man %matplotlib %mkdir %more %mv %notebook %page %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %popd %pprint %precision %profile %prun %psearch %psource %pushd %pwd %pycat %pylab %qtconsole %quickref %recall %rehashx %reload_ext %rep %rerun %reset %reset_selective %rm %rmdir %run %save %sc %store %sx %system %tb %time %timeit %unalias %unload_ext %who %who_ls %whos %xdel %xmode\n",
1007 "\n",
1008 "Available cell magics:\n",
1009 "%%! %%HTML %%SVG %%bash %%capture %%debug %%file %%html %%javascript %%latex %%perl %%prun %%pypy %%python %%python2 %%python3 %%ruby %%script %%sh %%svg %%sx %%system %%time %%timeit %%writefile\n",
1010 "\n",
1011 "Automagic is ON, % prefix IS NOT needed for line magics."
1012 ]
1013 }
1014 ],
1015 "prompt_number": 35
1016 },
1017 {
1018 "cell_type": "heading",
1019 "level": 2,
1020 "metadata": {},
1021 "source": [
1022 "Running normal Python code: execution and errors"
1023 ]
1024 },
1025 {
1026 "cell_type": "markdown",
1027 "metadata": {},
1028 "source": [
1029 "Not only can you input normal Python code, you can even paste straight from a Python or IPython shell session:"
1030 ]
1031 },
1032 {
1033 "cell_type": "code",
1034 "collapsed": false,
1035 "input": [
1036 ">>> # Fibonacci series:\n",
1037 "... # the sum of two elements defines the next\n",
1038 "... a, b = 0, 1\n",
1039 ">>> while b < 10:\n",
1040 "... print b\n",
1041 "... a, b = b, a+b"
1042 ],
1043 "language": "python",
1044 "metadata": {},
1045 "outputs": [
1046 {
1047 "output_type": "stream",
1048 "stream": "stdout",
1049 "text": [
1050 "1\n",
1051 "1\n",
1052 "2\n",
1053 "3\n",
1054 "5\n",
1055 "8\n"
1056 ]
1057 }
1058 ],
1059 "prompt_number": 36
1060 },
1061 {
1062 "cell_type": "code",
1063 "collapsed": false,
1064 "input": [
1065 "In [1]: for i in range(10):\n",
1066 " ...: print i,\n",
1067 " ...: "
1068 ],
1069 "language": "python",
1070 "metadata": {},
1071 "outputs": [
1072 {
1073 "output_type": "stream",
1074 "stream": "stdout",
1075 "text": [
1076 "0 1 2 3 4 5 6 7 8 9\n"
1077 ]
1078 }
1079 ],
1080 "prompt_number": 37
1081 },
1082 {
1083 "cell_type": "markdown",
1084 "metadata": {},
1085 "source": [
1086 "And when your code produces errors, you can control how they are displayed with the `%xmode` magic:"
1087 ]
1088 },
1089 {
1090 "cell_type": "code",
1091 "collapsed": false,
1092 "input": [
1093 "%%writefile mod.py\n",
1094 "\n",
1095 "def f(x):\n",
1096 " return 1.0/(x-1)\n",
1097 "\n",
1098 "def g(y):\n",
1099 " return f(y+1)"
1100 ],
1101 "language": "python",
1102 "metadata": {},
1103 "outputs": [
1104 {
1105 "output_type": "stream",
1106 "stream": "stdout",
1107 "text": [
1108 "Writing mod.py\n"
1109 ]
1110 }
1111 ],
1112 "prompt_number": 38
1113 },
1114 {
1115 "cell_type": "markdown",
1116 "metadata": {},
1117 "source": [
1118 "Now let's call the function `g` with an argument that would produce an error:"
1119 ]
1120 },
1121 {
1122 "cell_type": "code",
1123 "collapsed": false,
1124 "input": [
1125 "import mod\n",
1126 "mod.g(0)"
1127 ],
1128 "language": "python",
1129 "metadata": {},
1130 "outputs": [
1131 {
1132 "ename": "ZeroDivisionError",
1133 "evalue": "float division by zero",
1134 "output_type": "pyerr",
1135 "traceback": [
1136 "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)",
1137 "\u001b[1;32m<ipython-input-39-a54c5799f57e>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmod\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mmod\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mg\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
1138 "\u001b[1;32m/home/fperez/ipython/tutorial/notebooks/mod.py\u001b[0m in \u001b[0;36mg\u001b[1;34m(y)\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mg\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 6\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m+\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
1139 "\u001b[1;32m/home/fperez/ipython/tutorial/notebooks/mod.py\u001b[0m in \u001b[0;36mf\u001b[1;34m(x)\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[1;36m1.0\u001b[0m\u001b[1;33m/\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mg\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
1140 "\u001b[1;31mZeroDivisionError\u001b[0m: float division by zero"
1141 ]
1142 }
1143 ],
1144 "prompt_number": 39
1145 },
1146 {
1147 "cell_type": "code",
1148 "collapsed": false,
1149 "input": [
1150 "%xmode plain\n",
1151 "mod.g(0)"
1152 ],
1153 "language": "python",
1154 "metadata": {},
1155 "outputs": [
1156 {
1157 "output_type": "stream",
1158 "stream": "stdout",
1159 "text": [
1160 "Exception reporting mode: Plain\n"
1161 ]
1162 },
1163 {
1164 "ename": "ZeroDivisionError",
1165 "evalue": "float division by zero",
1166 "output_type": "pyerr",
1167 "traceback": [
1168 "Traceback \u001b[1;36m(most recent call last)\u001b[0m:\n",
1169 " File \u001b[0;32m\"<ipython-input-40-5a5bcec1553f>\"\u001b[0m, line \u001b[0;32m2\u001b[0m, in \u001b[0;35m<module>\u001b[0m\n mod.g(0)\n",
1170 " File \u001b[0;32m\"mod.py\"\u001b[0m, line \u001b[0;32m6\u001b[0m, in \u001b[0;35mg\u001b[0m\n return f(y+1)\n",
1171 "\u001b[1;36m File \u001b[1;32m\"mod.py\"\u001b[1;36m, line \u001b[1;32m3\u001b[1;36m, in \u001b[1;35mf\u001b[1;36m\u001b[0m\n\u001b[1;33m return 1.0/(x-1)\u001b[0m\n",
1172 "\u001b[1;31mZeroDivisionError\u001b[0m\u001b[1;31m:\u001b[0m float division by zero\n"
1173 ]
1174 }
1175 ],
1176 "prompt_number": 40
1177 },
1178 {
1179 "cell_type": "code",
1180 "collapsed": false,
1181 "input": [
1182 "%xmode verbose\n",
1183 "mod.g(0)"
1184 ],
1185 "language": "python",
1186 "metadata": {},
1187 "outputs": [
1188 {
1189 "output_type": "stream",
1190 "stream": "stdout",
1191 "text": [
1192 "Exception reporting mode: Verbose\n"
1193 ]
1194 },
1195 {
1196 "ename": "ZeroDivisionError",
1197 "evalue": "float division by zero",
1198 "output_type": "pyerr",
1199 "traceback": [
1200 "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)",
1201 "\u001b[1;32m<ipython-input-41-81967cfaa0c3>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmagic\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mu'xmode verbose'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mmod\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mg\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m \u001b[1;36mglobal\u001b[0m \u001b[0;36mmod.g\u001b[0m \u001b[1;34m= <function g at 0x237fc08>\u001b[0m\n",
1202 "\u001b[1;32m/home/fperez/ipython/tutorial/notebooks/mod.py\u001b[0m in \u001b[0;36mg\u001b[1;34m(y=0)\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mg\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 6\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m+\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m \u001b[1;36mglobal\u001b[0m \u001b[0;36mf\u001b[0m \u001b[1;34m= <function f at 0x2367c08>\u001b[0m\u001b[1;34m\n \u001b[0m\u001b[0;36my\u001b[0m \u001b[1;34m= 0\u001b[0m\n",
1203 "\u001b[1;32m/home/fperez/ipython/tutorial/notebooks/mod.py\u001b[0m in \u001b[0;36mf\u001b[1;34m(x=1)\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[1;36m1.0\u001b[0m\u001b[1;33m/\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m \u001b[0;36mx\u001b[0m \u001b[1;34m= 1\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mg\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
1204 "\u001b[1;31mZeroDivisionError\u001b[0m: float division by zero"
1205 ]
1206 }
1207 ],
1208 "prompt_number": 41
1209 },
1210 {
1211 "cell_type": "markdown",
1212 "metadata": {},
1213 "source": [
1214 "The default `%xmode` is \"context\", which shows additional context but not all local variables. Let's restore that one for the rest of our session."
1215 ]
1216 },
1217 {
1218 "cell_type": "code",
1219 "collapsed": false,
1220 "input": [
1221 "%xmode context"
1222 ],
1223 "language": "python",
1224 "metadata": {},
1225 "outputs": [
1226 {
1227 "output_type": "stream",
1228 "stream": "stdout",
1229 "text": [
1230 "Exception reporting mode: Context\n"
1231 ]
1232 }
1233 ],
1234 "prompt_number": 42
1235 },
1236 {
1237 "cell_type": "heading",
1238 "level": 2,
1239 "metadata": {},
1240 "source": [
1241 "Running code in other languages with special `%%` magics"
1242 ]
1243 },
1244 {
1245 "cell_type": "code",
1246 "collapsed": false,
1247 "input": [
1248 "%%perl\n",
1249 "@months = (\"July\", \"August\", \"September\");\n",
1250 "print $months[0];"
1251 ],
1252 "language": "python",
1253 "metadata": {},
1254 "outputs": [
1255 {
1256 "output_type": "stream",
1257 "stream": "stdout",
1258 "text": [
1259 "July"
1260 ]
1261 }
1262 ],
1263 "prompt_number": 43
1264 },
1265 {
1266 "cell_type": "code",
1267 "collapsed": false,
1268 "input": [
1269 "%%ruby\n",
1270 "name = \"world\"\n",
1271 "puts \"Hello #{name.capitalize}!\""
1272 ],
1273 "language": "python",
1274 "metadata": {},
1275 "outputs": [
1276 {
1277 "output_type": "stream",
1278 "stream": "stdout",
1279 "text": [
1280 "Hello World!\n"
1281 ]
1282 }
1283 ],
1284 "prompt_number": 44
1285 },
1286 {
1287 "cell_type": "heading",
1288 "level": 3,
1289 "metadata": {},
1290 "source": [
1291 "Exercise"
1292 ]
1293 },
1294 {
1295 "cell_type": "markdown",
1296 "metadata": {},
1297 "source": [
1298 "Write a cell that executes in Bash and prints your current working directory as well as the date.\n",
1299 "\n",
1300 "Apologies to Windows users who may not have Bash available, not sure how to obtain the equivalent result with `cmd.exe` or Powershell."
1301 ]
1302 },
1303 {
1304 "cell_type": "code",
1305 "collapsed": false,
1306 "input": [
1307 "%load soln/bash-script"
1308 ],
1309 "language": "python",
1310 "metadata": {},
1311 "outputs": []
1312 },
1313 {
1314 "cell_type": "heading",
1315 "level": 2,
1316 "metadata": {},
1317 "source": [
1318 "Raw Input in the notebook"
1319 ]
1320 },
1321 {
1322 "cell_type": "markdown",
1323 "metadata": {},
1324 "source": [
1325 "Since 1.0 the IPython notebook web application support `raw_input` which for example allow us to invoke the `%debug` magic in the notebook:"
1326 ]
1327 },
1328 {
1329 "cell_type": "code",
1330 "collapsed": false,
1331 "input": [
1332 "mod.g(0)"
1333 ],
1334 "language": "python",
1335 "metadata": {},
1336 "outputs": [
1337 {
1338 "ename": "ZeroDivisionError",
1339 "evalue": "float division by zero",
1340 "output_type": "pyerr",
1341 "traceback": [
1342 "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)",
1343 "\u001b[1;32m<ipython-input-45-5e708f13c839>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mmod\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mg\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
1344 "\u001b[1;32m/home/fperez/ipython/tutorial/notebooks/mod.py\u001b[0m in \u001b[0;36mg\u001b[1;34m(y)\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mg\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 6\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m+\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
1345 "\u001b[1;32m/home/fperez/ipython/tutorial/notebooks/mod.py\u001b[0m in \u001b[0;36mf\u001b[1;34m(x)\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[1;36m1.0\u001b[0m\u001b[1;33m/\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mg\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
1346 "\u001b[1;31mZeroDivisionError\u001b[0m: float division by zero"
1347 ]
1348 }
1349 ],
1350 "prompt_number": 45
1351 },
1352 {
1353 "cell_type": "code",
1354 "collapsed": false,
1355 "input": [
1356 "%debug"
1357 ],
1358 "language": "python",
1359 "metadata": {},
1360 "outputs": [
1361 {
1362 "output_type": "stream",
1363 "stream": "stdout",
1364 "text": [
1365 "> \u001b[0;32m/Users/bussonniermatthias/ipython-in-depth/notebooks/mod.py\u001b[0m(3)\u001b[0;36mf\u001b[0;34m()\u001b[0m\n",
1366 "\u001b[0;32m 2 \u001b[0;31m\u001b[0;32mdef\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
1367 "\u001b[0m\u001b[0;32m----> 3 \u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1.0\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
1368 "\u001b[0m\u001b[0;32m 4 \u001b[0;31m\u001b[0;34m\u001b[0m\u001b[0m\n",
1369 "\u001b[0m\n"
1370 ]
1371 },
1372 {
1373 "name": "stdout",
1374 "output_type": "stream",
1375 "stream": "stdout",
1376 "text": [
1377 "ipdb> x\n"
1378 ]
1379 },
1380 {
1381 "output_type": "stream",
1382 "stream": "stdout",
1383 "text": [
1384 "1\n"
1385 ]
1386 },
1387 {
1388 "name": "stdout",
1389 "output_type": "stream",
1390 "stream": "stdout",
1391 "text": [
1392 "ipdb> up\n"
1393 ]
1394 },
1395 {
1396 "output_type": "stream",
1397 "stream": "stdout",
1398 "text": [
1399 "> \u001b[0;32m/Users/bussonniermatthias/ipython-in-depth/notebooks/mod.py\u001b[0m(6)\u001b[0;36mg\u001b[0;34m()\u001b[0m\n",
1400 "\u001b[0;32m 4 \u001b[0;31m\u001b[0;34m\u001b[0m\u001b[0m\n",
1401 "\u001b[0m\u001b[0;32m 5 \u001b[0;31m\u001b[0;32mdef\u001b[0m \u001b[0mg\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
1402 "\u001b[0m\u001b[0;32m----> 6 \u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
1403 "\u001b[0m\n"
1404 ]
1405 },
1406 {
1407 "name": "stdout",
1408 "output_type": "stream",
1409 "stream": "stdout",
1410 "text": [
1411 "ipdb> y\n"
1412 ]
1413 },
1414 {
1415 "output_type": "stream",
1416 "stream": "stdout",
1417 "text": [
1418 "0\n"
1419 ]
1420 },
1421 {
1422 "name": "stdout",
1423 "output_type": "stream",
1424 "stream": "stdout",
1425 "text": [
1426 "ipdb> up\n"
1427 ]
1428 },
1429 {
1430 "output_type": "stream",
1431 "stream": "stdout",
1432 "text": [
1433 "> \u001b[0;32m<ipython-input-37-5e708f13c839>\u001b[0m(1)\u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n",
1434 "\u001b[0;32m----> 1 \u001b[0;31m\u001b[0mmod\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mg\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
1435 "\u001b[0m\n"
1436 ]
1437 },
1438 {
1439 "name": "stdout",
1440 "output_type": "stream",
1441 "stream": "stdout",
1442 "text": [
1443 "ipdb> exit\n"
1444 ]
1445 }
1446 ],
1447 "prompt_number": 38
1448 },
1449 {
1450 "cell_type": "markdown",
1451 "metadata": {},
1452 "source": [
1453 "Don't foget to exit your debugging session. Raw input can of course be use to ask for user input:"
1454 ]
1455 },
1456 {
1457 "cell_type": "code",
1458 "collapsed": false,
1459 "input": [
1460 "enjoy = raw_input('Are you enjoying this tutorial ?')\n",
1461 "print 'enjoy is :', enjoy"
1462 ],
1463 "language": "python",
1464 "metadata": {},
1465 "outputs": [
1466 {
1467 "name": "stdout",
1468 "output_type": "stream",
1469 "stream": "stdout",
1470 "text": [
1471 "Are you enjoying this tutorial ?Yes !\n"
1472 ]
1473 },
1474 {
1475 "output_type": "stream",
1476 "stream": "stdout",
1477 "text": [
1478 "enjoy is : Yes !\n"
1479 ]
1480 }
1481 ],
1482 "prompt_number": 39
1483 },
1484 {
1485 "cell_type": "heading",
1486 "level": 2,
1487 "metadata": {},
1488 "source": [
1489 "Plotting in the notebook"
1490 ]
1491 },
1492 {
1493 "cell_type": "markdown",
1494 "metadata": {},
1495 "source": [
1496 "This magic configures matplotlib to render its figures inline:"
1497 ]
1498 },
1499 {
1500 "cell_type": "code",
1501 "collapsed": false,
1502 "input": [
1503 "%matplotlib inline"
1504 ],
1505 "language": "python",
1506 "metadata": {},
1507 "outputs": [],
1508 "prompt_number": 46
1509 },
1510 {
1511 "cell_type": "code",
1512 "collapsed": false,
1513 "input": [
1514 "import numpy as np\n",
1515 "import matplotlib.pyplot as plt"
1516 ],
1517 "language": "python",
1518 "metadata": {},
1519 "outputs": [],
1520 "prompt_number": 47
1521 },
1522 {
1523 "cell_type": "code",
1524 "collapsed": false,
1525 "input": [
1526 "x = np.linspace(0, 2*np.pi, 300)\n",
1527 "y = np.sin(x**2)\n",
1528 "plt.plot(x, y)\n",
1529 "plt.title(\"A little chirp\")\n",
1530 "fig = plt.gcf() # let's keep the figure object around for later..."
1531 ],
1532 "language": "python",
1533 "metadata": {},
1534 "outputs": [
1535 {
1536 "metadata": {},
1537 "output_type": "display_data",
1538 "png": "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\n",
1539 "text": [
1540 "<matplotlib.figure.Figure at 0x3436950>"
1541 ]
1542 }
1543 ],
1544 "prompt_number": 48
1545 },
1546 {
1547 "cell_type": "heading",
1548 "level": 2,
1549 "metadata": {},
1550 "source": [
1551 "The IPython kernel/client model"
1552 ]
1553 },
1554 {
1555 "cell_type": "code",
1556 "collapsed": false,
1557 "input": [
1558 "%connect_info"
1559 ],
1560 "language": "python",
1561 "metadata": {},
1562 "outputs": [
1563 {
1564 "output_type": "stream",
1565 "stream": "stdout",
1566 "text": [
1567 "{\n",
1568 " \"stdin_port\": 50023, \n",
1569 " \"ip\": \"127.0.0.1\", \n",
1570 " \"control_port\": 50024, \n",
1571 " \"hb_port\": 50025, \n",
1572 " \"signature_scheme\": \"hmac-sha256\", \n",
1573 " \"key\": \"b54b8859-d64d-48bb-814a-909f9beb3316\", \n",
1574 " \"shell_port\": 50021, \n",
1575 " \"transport\": \"tcp\", \n",
1576 " \"iopub_port\": 50022\n",
1577 "}\n",
1578 "\n",
1579 "Paste the above JSON into a file, and connect with:\n",
1580 " $> ipython <app> --existing <file>\n",
1581 "or, if you are local, you can connect with just:\n",
1582 " $> ipython <app> --existing kernel-30f00f4a-230c-4e64-bea5-0e5f6a52cb40.json \n",
1583 "or even just:\n",
1584 " $> ipython <app> --existing \n",
1585 "if this is the most recent IPython session you have started.\n"
1586 ]
1587 }
1588 ],
1589 "prompt_number": 43
1590 },
1591 {
1592 "cell_type": "markdown",
1593 "metadata": {},
1594 "source": [
1595 "We can connect automatically a Qt Console to the currently running kernel with the `%qtconsole` magic, or by typing `ipython console --existing <kernel-UUID>` in any terminal:"
1596 ]
1597 },
1598 {
1599 "cell_type": "code",
1600 "collapsed": false,
1601 "input": [
1602 "%qtconsole"
1603 ],
1604 "language": "python",
1605 "metadata": {},
1606 "outputs": [],
1607 "prompt_number": 83
1608 }
1609 ],
1610 "metadata": {}
1611 }
1612 ]
1613 } No newline at end of file
@@ -0,0 +1,275 b''
1 {
2 "metadata": {
3 "name": "",
4 "signature": "sha256:993106eecfd7abe1920e1dbe670c4518189c26e7b29dcc541835f7dcf6fffbb2"
5 },
6 "nbformat": 3,
7 "nbformat_minor": 0,
8 "worksheets": [
9 {
10 "cells": [
11 {
12 "cell_type": "heading",
13 "level": 1,
14 "metadata": {},
15 "source": [
16 "A few things that work best/only at the IPython terminal or Qt console clients"
17 ]
18 },
19 {
20 "cell_type": "markdown",
21 "metadata": {},
22 "source": [
23 "## Running code with `%run`"
24 ]
25 },
26 {
27 "cell_type": "code",
28 "collapsed": false,
29 "input": [
30 "%%writefile script.py\n",
31 "x = 10\n",
32 "y = 20\n",
33 "z = x+y\n",
34 "print 'z is:', z"
35 ],
36 "language": "python",
37 "metadata": {},
38 "outputs": [
39 {
40 "output_type": "stream",
41 "stream": "stdout",
42 "text": [
43 "Writing script.py\n"
44 ]
45 }
46 ],
47 "prompt_number": 1
48 },
49 {
50 "cell_type": "code",
51 "collapsed": false,
52 "input": [
53 "%run script"
54 ],
55 "language": "python",
56 "metadata": {},
57 "outputs": [
58 {
59 "output_type": "stream",
60 "stream": "stdout",
61 "text": [
62 "z is: 30\n"
63 ]
64 }
65 ],
66 "prompt_number": 2
67 },
68 {
69 "cell_type": "code",
70 "collapsed": false,
71 "input": [
72 "x"
73 ],
74 "language": "python",
75 "metadata": {},
76 "outputs": [
77 {
78 "metadata": {},
79 "output_type": "pyout",
80 "prompt_number": 3,
81 "text": [
82 "10"
83 ]
84 }
85 ],
86 "prompt_number": 3
87 },
88 {
89 "cell_type": "heading",
90 "level": 2,
91 "metadata": {},
92 "source": [
93 "Event loop and GUI integration"
94 ]
95 },
96 {
97 "cell_type": "markdown",
98 "metadata": {},
99 "source": [
100 "The `%gui` magic enables the integration of GUI event loops with the interactive execution loop, allowing you to run GUI code without blocking IPython.\n",
101 "\n",
102 "Consider for example the execution of Qt-based code. Once we enable the Qt gui support:"
103 ]
104 },
105 {
106 "cell_type": "code",
107 "collapsed": false,
108 "input": [
109 "%gui qt"
110 ],
111 "language": "python",
112 "metadata": {},
113 "outputs": [],
114 "prompt_number": 4
115 },
116 {
117 "cell_type": "markdown",
118 "metadata": {},
119 "source": [
120 "We can define a simple Qt application class (simplified version from [this Qt tutorial](http://zetcode.com/tutorials/pyqt4/firstprograms)):"
121 ]
122 },
123 {
124 "cell_type": "code",
125 "collapsed": false,
126 "input": [
127 "import sys\n",
128 "from PyQt4 import QtGui, QtCore\n",
129 "\n",
130 "class SimpleWindow(QtGui.QWidget):\n",
131 " def __init__(self, parent=None):\n",
132 " QtGui.QWidget.__init__(self, parent)\n",
133 "\n",
134 " self.setGeometry(300, 300, 200, 80)\n",
135 " self.setWindowTitle('Hello World')\n",
136 "\n",
137 " quit = QtGui.QPushButton('Close', self)\n",
138 " quit.setGeometry(10, 10, 60, 35)\n",
139 "\n",
140 " self.connect(quit, QtCore.SIGNAL('clicked()'),\n",
141 " self, QtCore.SLOT('close()'))"
142 ],
143 "language": "python",
144 "metadata": {},
145 "outputs": [],
146 "prompt_number": 5
147 },
148 {
149 "cell_type": "markdown",
150 "metadata": {},
151 "source": [
152 "And now we can instantiate it:"
153 ]
154 },
155 {
156 "cell_type": "code",
157 "collapsed": false,
158 "input": [
159 "app = QtCore.QCoreApplication.instance()\n",
160 "if app is None:\n",
161 " app = QtGui.QApplication([])\n",
162 "\n",
163 "sw = SimpleWindow()\n",
164 "sw.show()\n",
165 "\n",
166 "from IPython.lib.guisupport import start_event_loop_qt4\n",
167 "start_event_loop_qt4(app)"
168 ],
169 "language": "python",
170 "metadata": {},
171 "outputs": [],
172 "prompt_number": 6
173 },
174 {
175 "cell_type": "markdown",
176 "metadata": {},
177 "source": [
178 "But IPython still remains responsive:"
179 ]
180 },
181 {
182 "cell_type": "code",
183 "collapsed": false,
184 "input": [
185 "10+2"
186 ],
187 "language": "python",
188 "metadata": {},
189 "outputs": [
190 {
191 "metadata": {},
192 "output_type": "pyout",
193 "prompt_number": 7,
194 "text": [
195 "12"
196 ]
197 }
198 ],
199 "prompt_number": 7
200 },
201 {
202 "cell_type": "markdown",
203 "metadata": {},
204 "source": [
205 "The `%gui` magic can be similarly used to control Wx, Tk, glut and pyglet applications, [as can be seen in our examples](https://github.com/ipython/ipython/tree/master/examples/lib)."
206 ]
207 },
208 {
209 "cell_type": "heading",
210 "level": 2,
211 "metadata": {},
212 "source": [
213 "Embedding IPython in a terminal application"
214 ]
215 },
216 {
217 "cell_type": "code",
218 "collapsed": false,
219 "input": [
220 "%%writefile simple-embed.py\n",
221 "# This shows how to use the new top-level embed function. It is a simpler\n",
222 "# API that manages the creation of the embedded shell.\n",
223 "\n",
224 "from IPython import embed\n",
225 "\n",
226 "a = 10\n",
227 "b = 20\n",
228 "\n",
229 "embed(header='First time', banner1='')\n",
230 "\n",
231 "c = 30\n",
232 "d = 40\n",
233 "\n",
234 "embed(header='The second time')"
235 ],
236 "language": "python",
237 "metadata": {},
238 "outputs": [
239 {
240 "output_type": "stream",
241 "stream": "stdout",
242 "text": [
243 "Writing simple-embed.py\n"
244 ]
245 }
246 ],
247 "prompt_number": 12
248 },
249 {
250 "cell_type": "markdown",
251 "metadata": {},
252 "source": [
253 "The example in kernel-embedding shows how to embed a full kernel into an application and how to connect to this kernel from an external process."
254 ]
255 },
256 {
257 "cell_type": "heading",
258 "level": 2,
259 "metadata": {},
260 "source": [
261 "Logging terminal sessions and transitioning to a notebook"
262 ]
263 },
264 {
265 "cell_type": "markdown",
266 "metadata": {},
267 "source": [
268 "The `%logstart` magic lets you log a terminal session with various degrees of control, and the `%notebook` one will convert an interactive console session into a notebook with all input cells already created for you (but no output)."
269 ]
270 }
271 ],
272 "metadata": {}
273 }
274 ]
275 } No newline at end of file
@@ -0,0 +1,380 b''
1 {
2 "name": "flare",
3 "children": [
4 {
5 "name": "analytics",
6 "children": [
7 {
8 "name": "cluster",
9 "children": [
10 {"name": "AgglomerativeCluster", "size": 3938},
11 {"name": "CommunityStructure", "size": 3812},
12 {"name": "HierarchicalCluster", "size": 6714},
13 {"name": "MergeEdge", "size": 743}
14 ]
15 },
16 {
17 "name": "graph",
18 "children": [
19 {"name": "BetweennessCentrality", "size": 3534},
20 {"name": "LinkDistance", "size": 5731},
21 {"name": "MaxFlowMinCut", "size": 7840},
22 {"name": "ShortestPaths", "size": 5914},
23 {"name": "SpanningTree", "size": 3416}
24 ]
25 },
26 {
27 "name": "optimization",
28 "children": [
29 {"name": "AspectRatioBanker", "size": 7074}
30 ]
31 }
32 ]
33 },
34 {
35 "name": "animate",
36 "children": [
37 {"name": "Easing", "size": 17010},
38 {"name": "FunctionSequence", "size": 5842},
39 {
40 "name": "interpolate",
41 "children": [
42 {"name": "ArrayInterpolator", "size": 1983},
43 {"name": "ColorInterpolator", "size": 2047},
44 {"name": "DateInterpolator", "size": 1375},
45 {"name": "Interpolator", "size": 8746},
46 {"name": "MatrixInterpolator", "size": 2202},
47 {"name": "NumberInterpolator", "size": 1382},
48 {"name": "ObjectInterpolator", "size": 1629},
49 {"name": "PointInterpolator", "size": 1675},
50 {"name": "RectangleInterpolator", "size": 2042}
51 ]
52 },
53 {"name": "ISchedulable", "size": 1041},
54 {"name": "Parallel", "size": 5176},
55 {"name": "Pause", "size": 449},
56 {"name": "Scheduler", "size": 5593},
57 {"name": "Sequence", "size": 5534},
58 {"name": "Transition", "size": 9201},
59 {"name": "Transitioner", "size": 19975},
60 {"name": "TransitionEvent", "size": 1116},
61 {"name": "Tween", "size": 6006}
62 ]
63 },
64 {
65 "name": "data",
66 "children": [
67 {
68 "name": "converters",
69 "children": [
70 {"name": "Converters", "size": 721},
71 {"name": "DelimitedTextConverter", "size": 4294},
72 {"name": "GraphMLConverter", "size": 9800},
73 {"name": "IDataConverter", "size": 1314},
74 {"name": "JSONConverter", "size": 2220}
75 ]
76 },
77 {"name": "DataField", "size": 1759},
78 {"name": "DataSchema", "size": 2165},
79 {"name": "DataSet", "size": 586},
80 {"name": "DataSource", "size": 3331},
81 {"name": "DataTable", "size": 772},
82 {"name": "DataUtil", "size": 3322}
83 ]
84 },
85 {
86 "name": "display",
87 "children": [
88 {"name": "DirtySprite", "size": 8833},
89 {"name": "LineSprite", "size": 1732},
90 {"name": "RectSprite", "size": 3623},
91 {"name": "TextSprite", "size": 10066}
92 ]
93 },
94 {
95 "name": "flex",
96 "children": [
97 {"name": "FlareVis", "size": 4116}
98 ]
99 },
100 {
101 "name": "physics",
102 "children": [
103 {"name": "DragForce", "size": 1082},
104 {"name": "GravityForce", "size": 1336},
105 {"name": "IForce", "size": 319},
106 {"name": "NBodyForce", "size": 10498},
107 {"name": "Particle", "size": 2822},
108 {"name": "Simulation", "size": 9983},
109 {"name": "Spring", "size": 2213},
110 {"name": "SpringForce", "size": 1681}
111 ]
112 },
113 {
114 "name": "query",
115 "children": [
116 {"name": "AggregateExpression", "size": 1616},
117 {"name": "And", "size": 1027},
118 {"name": "Arithmetic", "size": 3891},
119 {"name": "Average", "size": 891},
120 {"name": "BinaryExpression", "size": 2893},
121 {"name": "Comparison", "size": 5103},
122 {"name": "CompositeExpression", "size": 3677},
123 {"name": "Count", "size": 781},
124 {"name": "DateUtil", "size": 4141},
125 {"name": "Distinct", "size": 933},
126 {"name": "Expression", "size": 5130},
127 {"name": "ExpressionIterator", "size": 3617},
128 {"name": "Fn", "size": 3240},
129 {"name": "If", "size": 2732},
130 {"name": "IsA", "size": 2039},
131 {"name": "Literal", "size": 1214},
132 {"name": "Match", "size": 3748},
133 {"name": "Maximum", "size": 843},
134 {
135 "name": "methods",
136 "children": [
137 {"name": "add", "size": 593},
138 {"name": "and", "size": 330},
139 {"name": "average", "size": 287},
140 {"name": "count", "size": 277},
141 {"name": "distinct", "size": 292},
142 {"name": "div", "size": 595},
143 {"name": "eq", "size": 594},
144 {"name": "fn", "size": 460},
145 {"name": "gt", "size": 603},
146 {"name": "gte", "size": 625},
147 {"name": "iff", "size": 748},
148 {"name": "isa", "size": 461},
149 {"name": "lt", "size": 597},
150 {"name": "lte", "size": 619},
151 {"name": "max", "size": 283},
152 {"name": "min", "size": 283},
153 {"name": "mod", "size": 591},
154 {"name": "mul", "size": 603},
155 {"name": "neq", "size": 599},
156 {"name": "not", "size": 386},
157 {"name": "or", "size": 323},
158 {"name": "orderby", "size": 307},
159 {"name": "range", "size": 772},
160 {"name": "select", "size": 296},
161 {"name": "stddev", "size": 363},
162 {"name": "sub", "size": 600},
163 {"name": "sum", "size": 280},
164 {"name": "update", "size": 307},
165 {"name": "variance", "size": 335},
166 {"name": "where", "size": 299},
167 {"name": "xor", "size": 354},
168 {"name": "_", "size": 264}
169 ]
170 },
171 {"name": "Minimum", "size": 843},
172 {"name": "Not", "size": 1554},
173 {"name": "Or", "size": 970},
174 {"name": "Query", "size": 13896},
175 {"name": "Range", "size": 1594},
176 {"name": "StringUtil", "size": 4130},
177 {"name": "Sum", "size": 791},
178 {"name": "Variable", "size": 1124},
179 {"name": "Variance", "size": 1876},
180 {"name": "Xor", "size": 1101}
181 ]
182 },
183 {
184 "name": "scale",
185 "children": [
186 {"name": "IScaleMap", "size": 2105},
187 {"name": "LinearScale", "size": 1316},
188 {"name": "LogScale", "size": 3151},
189 {"name": "OrdinalScale", "size": 3770},
190 {"name": "QuantileScale", "size": 2435},
191 {"name": "QuantitativeScale", "size": 4839},
192 {"name": "RootScale", "size": 1756},
193 {"name": "Scale", "size": 4268},
194 {"name": "ScaleType", "size": 1821},
195 {"name": "TimeScale", "size": 5833}
196 ]
197 },
198 {
199 "name": "util",
200 "children": [
201 {"name": "Arrays", "size": 8258},
202 {"name": "Colors", "size": 10001},
203 {"name": "Dates", "size": 8217},
204 {"name": "Displays", "size": 12555},
205 {"name": "Filter", "size": 2324},
206 {"name": "Geometry", "size": 10993},
207 {
208 "name": "heap",
209 "children": [
210 {"name": "FibonacciHeap", "size": 9354},
211 {"name": "HeapNode", "size": 1233}
212 ]
213 },
214 {"name": "IEvaluable", "size": 335},
215 {"name": "IPredicate", "size": 383},
216 {"name": "IValueProxy", "size": 874},
217 {
218 "name": "math",
219 "children": [
220 {"name": "DenseMatrix", "size": 3165},
221 {"name": "IMatrix", "size": 2815},
222 {"name": "SparseMatrix", "size": 3366}
223 ]
224 },
225 {"name": "Maths", "size": 17705},
226 {"name": "Orientation", "size": 1486},
227 {
228 "name": "palette",
229 "children": [
230 {"name": "ColorPalette", "size": 6367},
231 {"name": "Palette", "size": 1229},
232 {"name": "ShapePalette", "size": 2059},
233 {"name": "SizePalette", "size": 2291}
234 ]
235 },
236 {"name": "Property", "size": 5559},
237 {"name": "Shapes", "size": 19118},
238 {"name": "Sort", "size": 6887},
239 {"name": "Stats", "size": 6557},
240 {"name": "Strings", "size": 22026}
241 ]
242 },
243 {
244 "name": "vis",
245 "children": [
246 {
247 "name": "axis",
248 "children": [
249 {"name": "Axes", "size": 1302},
250 {"name": "Axis", "size": 24593},
251 {"name": "AxisGridLine", "size": 652},
252 {"name": "AxisLabel", "size": 636},
253 {"name": "CartesianAxes", "size": 6703}
254 ]
255 },
256 {
257 "name": "controls",
258 "children": [
259 {"name": "AnchorControl", "size": 2138},
260 {"name": "ClickControl", "size": 3824},
261 {"name": "Control", "size": 1353},
262 {"name": "ControlList", "size": 4665},
263 {"name": "DragControl", "size": 2649},
264 {"name": "ExpandControl", "size": 2832},
265 {"name": "HoverControl", "size": 4896},
266 {"name": "IControl", "size": 763},
267 {"name": "PanZoomControl", "size": 5222},
268 {"name": "SelectionControl", "size": 7862},
269 {"name": "TooltipControl", "size": 8435}
270 ]
271 },
272 {
273 "name": "data",
274 "children": [
275 {"name": "Data", "size": 20544},
276 {"name": "DataList", "size": 19788},
277 {"name": "DataSprite", "size": 10349},
278 {"name": "EdgeSprite", "size": 3301},
279 {"name": "NodeSprite", "size": 19382},
280 {
281 "name": "render",
282 "children": [
283 {"name": "ArrowType", "size": 698},
284 {"name": "EdgeRenderer", "size": 5569},
285 {"name": "IRenderer", "size": 353},
286 {"name": "ShapeRenderer", "size": 2247}
287 ]
288 },
289 {"name": "ScaleBinding", "size": 11275},
290 {"name": "Tree", "size": 7147},
291 {"name": "TreeBuilder", "size": 9930}
292 ]
293 },
294 {
295 "name": "events",
296 "children": [
297 {"name": "DataEvent", "size": 2313},
298 {"name": "SelectionEvent", "size": 1880},
299 {"name": "TooltipEvent", "size": 1701},
300 {"name": "VisualizationEvent", "size": 1117}
301 ]
302 },
303 {
304 "name": "legend",
305 "children": [
306 {"name": "Legend", "size": 20859},
307 {"name": "LegendItem", "size": 4614},
308 {"name": "LegendRange", "size": 10530}
309 ]
310 },
311 {
312 "name": "operator",
313 "children": [
314 {
315 "name": "distortion",
316 "children": [
317 {"name": "BifocalDistortion", "size": 4461},
318 {"name": "Distortion", "size": 6314},
319 {"name": "FisheyeDistortion", "size": 3444}
320 ]
321 },
322 {
323 "name": "encoder",
324 "children": [
325 {"name": "ColorEncoder", "size": 3179},
326 {"name": "Encoder", "size": 4060},
327 {"name": "PropertyEncoder", "size": 4138},
328 {"name": "ShapeEncoder", "size": 1690},
329 {"name": "SizeEncoder", "size": 1830}
330 ]
331 },
332 {
333 "name": "filter",
334 "children": [
335 {"name": "FisheyeTreeFilter", "size": 5219},
336 {"name": "GraphDistanceFilter", "size": 3165},
337 {"name": "VisibilityFilter", "size": 3509}
338 ]
339 },
340 {"name": "IOperator", "size": 1286},
341 {
342 "name": "label",
343 "children": [
344 {"name": "Labeler", "size": 9956},
345 {"name": "RadialLabeler", "size": 3899},
346 {"name": "StackedAreaLabeler", "size": 3202}
347 ]
348 },
349 {
350 "name": "layout",
351 "children": [
352 {"name": "AxisLayout", "size": 6725},
353 {"name": "BundledEdgeRouter", "size": 3727},
354 {"name": "CircleLayout", "size": 9317},
355 {"name": "CirclePackingLayout", "size": 12003},
356 {"name": "DendrogramLayout", "size": 4853},
357 {"name": "ForceDirectedLayout", "size": 8411},
358 {"name": "IcicleTreeLayout", "size": 4864},
359 {"name": "IndentedTreeLayout", "size": 3174},
360 {"name": "Layout", "size": 7881},
361 {"name": "NodeLinkTreeLayout", "size": 12870},
362 {"name": "PieLayout", "size": 2728},
363 {"name": "RadialTreeLayout", "size": 12348},
364 {"name": "RandomLayout", "size": 870},
365 {"name": "StackedAreaLayout", "size": 9121},
366 {"name": "TreeMapLayout", "size": 9191}
367 ]
368 },
369 {"name": "Operator", "size": 2490},
370 {"name": "OperatorList", "size": 5248},
371 {"name": "OperatorSequence", "size": 4190},
372 {"name": "OperatorSwitch", "size": 2581},
373 {"name": "SortOperator", "size": 2023}
374 ]
375 },
376 {"name": "Visualization", "size": 16540}
377 ]
378 }
379 ]
380 }
1 NO CONTENT: modified file
NO CONTENT: modified file
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