{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# IPython: beyond plain Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## First things first: running code, getting help" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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", " \n", "- `Alt-Enter` to force the creation of a new cell unconditionally (useful when inserting new content in the middle of an existing notebook).\n", "- `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." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hi\n" ] } ], "source": [ "print(\"Hi\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Getting help:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "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." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import collections\n", "collections.namedtuple?" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "collections.Counter??" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "*int*?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "An IPython quick reference card:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "%quickref" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Tab completion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tab completion, especially for attributes, is a convenient way to explore the structure of any object you’re dealing with. Simply type `object_name.` to view the object’s attributes. Besides Python objects and keywords, tab completion also works on file and directory names." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "collections." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## The interactive workflow: input, output, history" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "12" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "2+10" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "22" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "_+10" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "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):" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "10+20;" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "22" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "_" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "The output is stored in `_N` and `Out[N]` variables:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "_10 == Out[10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Previous inputs are available, too:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "'_10 == Out[10]'" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "In[11]" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'In[11]'" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "_i" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 1: print(\"Hi\")\n", " 2: ?\n", " 3:\n", "import collections\n", "collections.namedtuple?\n", " 4: collections.Counter??\n", " 5: *int*?\n" ] } ], "source": [ "%history -n 1-5" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "**Exercise**\n", "\n", "Write the last 10 lines of history to a file named `log.py`." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Accessing the underlying operating system" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/Users/minrk/dev/ip/mine/examples/IPython Kernel\r\n" ] } ], "source": [ "!pwd" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "My current directory's files:\n", "['Animations Using clear_output.ipynb', 'Background Jobs.ipynb', 'Beyond Plain Python.ipynb', 'Capturing Output.ipynb', 'Cell Magics.ipynb', 'Custom Display Logic.ipynb', 'Index.ipynb', 'Old Custom Display Logic.ipynb', 'Plotting in the Notebook.ipynb', 'Raw Input in the Notebook.ipynb', 'Rich Output.ipynb', 'Script Magics.ipynb', 'SymPy.ipynb', 'Terminal Usage.ipynb', 'Third Party Rich Output.ipynb', 'Trapezoid Rule.ipynb', 'Working With External Code.ipynb', '__pycache__', 'data', 'example-demo.py', 'gui', 'ipython-completion.bash', 'ipython-get-history.py', 'ipython-qtconsole.desktop', 'ipython.desktop', 'mod.py', 'test.txt']\n" ] } ], "source": [ "files = !ls\n", "print(\"My current directory's files:\")\n", "print(files)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Animations Using clear_output.ipynb, Background Jobs.ipynb, Beyond Plain Python.ipynb, Capturing Output.ipynb, Cell Magics.ipynb, Custom Display Logic.ipynb, Index.ipynb, Old Custom Display Logic.ipynb, Plotting in the Notebook.ipynb, Raw Input in the Notebook.ipynb, Rich Output.ipynb, Script Magics.ipynb, SymPy.ipynb, Terminal Usage.ipynb, Third Party Rich Output.ipynb, Trapezoid Rule.ipynb, Working With External Code.ipynb, __pycache__, data, example-demo.py, gui, ipython-completion.bash, ipython-get-history.py, ipython-qtconsole.desktop, ipython.desktop, mod.py, test.txt]\r\n" ] } ], "source": [ "!echo $files" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ANIMATIONS USING CLEAR_OUTPUT.IPYNB\r\n" ] } ], "source": [ "!echo {files[0].upper()}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that all this is available even in multiline blocks:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "00 - Animations Using clear_output\n", "01 - Background Jobs\n", "02 - Beyond Plain Python\n", "03 - Capturing Output\n", "04 - Cell Magics\n", "05 - Custom Display Logic\n", "06 - Index\n", "07 - Old Custom Display Logic\n", "08 - Plotting in the Notebook\n", "09 - Raw Input in the Notebook\n", "10 - Rich Output\n", "11 - Script Magics\n", "12 - SymPy\n", "13 - Terminal Usage\n", "14 - Third Party Rich Output\n", "15 - Trapezoid Rule\n", "16 - Working With External Code\n", "--\n", "--\n", "--\n", "--\n", "--\n", "--\n", "--\n", "--\n", "--\n", "--\n" ] } ], "source": [ "import os\n", "for i,f in enumerate(files):\n", " if f.endswith('ipynb'):\n", " !echo {\"%02d\" % i} - \"{os.path.splitext(f)[0]}\"\n", " else:\n", " print('--')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Beyond Python: magic functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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", " \n", "- To provide an orthogonal namespace for controlling IPython itself and exposing other system-oriented functionality.\n", "\n", "- 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." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "%magic" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Line vs cell magics:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10000 loops, best of 3: 19.3 µs per loop\n" ] } ], "source": [ "%timeit list(range(1000))" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100000 loops, best of 3: 2.78 µs per loop\n" ] } ], "source": [ "%%timeit\n", "list(range(10))\n", "list(range(100))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Line magics can be used even inside code blocks:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "size: 100 100000 loops, best of 3: 1.86 µs per loop\n", "size: 200 100000 loops, best of 3: 2.49 µs per loop\n", "size: 300 100000 loops, best of 3: 4.04 µs per loop\n", "size: 400 100000 loops, best of 3: 6.21 µs per loop\n" ] } ], "source": [ "for i in range(1, 5):\n", " size = i*100\n", " print('size:', size, end=' ')\n", " %timeit list(range(size))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Magics can do anything they want with their input, so it doesn't have to be valid Python:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "My shell is: /usr/local/bin/bash\n", "My disk usage is:\n", "Filesystem Size Used Avail Capacity iused ifree %iused Mounted on\n", "/dev/disk1 233Gi 216Gi 16Gi 94% 56788108 4190706 93% /\n", "devfs 190Ki 190Ki 0Bi 100% 656 0 100% /dev\n", "map -hosts 0Bi 0Bi 0Bi 100% 0 0 100% /net\n", "map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /home\n" ] } ], "source": [ "%%bash\n", "echo \"My shell is:\" $SHELL\n", "echo \"My disk usage is:\"\n", "df -h" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Another interesting cell magic: create any file you want locally from the notebook:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Overwriting test.txt\n" ] } ], "source": [ "%%writefile test.txt\n", "This is a test file!\n", "It can contain anything I want...\n", "\n", "And more..." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "This is a test file!\r\n", "It can contain anything I want...\r\n", "\r\n", "And more..." ] } ], "source": [ "!cat test.txt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see what other magics are currently defined in the system:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "application/json": { "cell": { "!": "OSMagics", "HTML": "Other", "SVG": "Other", "bash": "Other", "capture": "ExecutionMagics", "debug": "ExecutionMagics", "file": "Other", "html": "DisplayMagics", "javascript": "DisplayMagics", "latex": "DisplayMagics", "perl": "Other", "prun": "ExecutionMagics", "pypy": "Other", "python": "Other", "python2": "Other", "python3": "Other", "ruby": "Other", "script": "ScriptMagics", "sh": "Other", "svg": "DisplayMagics", "sx": "OSMagics", "system": "OSMagics", "time": "ExecutionMagics", "timeit": "ExecutionMagics", "writefile": "OSMagics" }, "line": { "alias": "OSMagics", "alias_magic": "BasicMagics", "autocall": "AutoMagics", "automagic": "AutoMagics", "autosave": "KernelMagics", "bookmark": "OSMagics", "cat": "Other", "cd": "OSMagics", "clear": "KernelMagics", "colors": "BasicMagics", "config": "ConfigMagics", "connect_info": "KernelMagics", "cp": "Other", "debug": "ExecutionMagics", "dhist": "OSMagics", "dirs": "OSMagics", "doctest_mode": "BasicMagics", "ed": "Other", "edit": "KernelMagics", "env": "OSMagics", "gui": "BasicMagics", "hist": "Other", "history": "HistoryMagics", "install_default_config": "DeprecatedMagics", "install_profiles": "DeprecatedMagics", "killbgscripts": "ScriptMagics", "ldir": "Other", "less": "KernelMagics", "lf": "Other", "lk": "Other", "ll": "Other", "load": "CodeMagics", "load_ext": "ExtensionMagics", "loadpy": "CodeMagics", "logoff": "LoggingMagics", "logon": "LoggingMagics", "logstart": "LoggingMagics", "logstate": "LoggingMagics", "logstop": "LoggingMagics", "ls": "Other", "lsmagic": "BasicMagics", "lx": "Other", "macro": "ExecutionMagics", "magic": "BasicMagics", "man": "KernelMagics", "matplotlib": "PylabMagics", "mkdir": "Other", "more": "KernelMagics", "mv": "Other", "namespace": "Other", "notebook": "BasicMagics", "page": "BasicMagics", "pastebin": "CodeMagics", "pdb": "ExecutionMagics", "pdef": "NamespaceMagics", "pdoc": "NamespaceMagics", "pfile": "NamespaceMagics", "pinfo": "NamespaceMagics", "pinfo2": "NamespaceMagics", "popd": "OSMagics", "pprint": "BasicMagics", "precision": "BasicMagics", "profile": "BasicMagics", "prun": "ExecutionMagics", "psearch": "NamespaceMagics", "psource": "NamespaceMagics", "pushd": "OSMagics", "pwd": "OSMagics", "pycat": "OSMagics", "pylab": "PylabMagics", "qtconsole": "KernelMagics", "quickref": "BasicMagics", "recall": "HistoryMagics", "rehashx": "OSMagics", "reload_ext": "ExtensionMagics", "rep": "Other", "rerun": "HistoryMagics", "reset": "NamespaceMagics", "reset_selective": "NamespaceMagics", "rm": "Other", "rmdir": "Other", "run": "ExecutionMagics", "save": "CodeMagics", "sc": "OSMagics", "set_env": "OSMagics", "store": "StoreMagics", "sx": "OSMagics", "system": "OSMagics", "tb": "ExecutionMagics", "tic": "TimerMagics", "time": "ExecutionMagics", "timeit": "ExecutionMagics", "toc": "TimerMagics", "unalias": "OSMagics", "unload_ext": "ExtensionMagics", "who": "NamespaceMagics", "who_ls": "NamespaceMagics", "whos": "NamespaceMagics", "xdel": "NamespaceMagics", "xmode": "BasicMagics" } }, "text/plain": [ "Available line magics:\n", "%alias %alias_magic %autocall %automagic %autosave %bookmark %cat %cd %clear %colors %config %connect_info %cp %debug %dhist %dirs %doctest_mode %ed %edit %env %gui %hist %history %install_default_config %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 %namespace %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 %set_env %store %sx %system %tb %tic %time %timeit %toc %unalias %unload_ext %who %who_ls %whos %xdel %xmode\n", "\n", "Available cell magics:\n", "%%! %%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", "\n", "Automagic is ON, % prefix IS NOT needed for line magics." ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%lsmagic" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Running normal Python code: execution and errors" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Not only can you input normal Python code, you can even paste straight from a Python or IPython shell session:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "1\n", "2\n", "3\n", "5\n", "8\n" ] } ], "source": [ ">>> # Fibonacci series:\n", "... # the sum of two elements defines the next\n", "... a, b = 0, 1\n", ">>> while b < 10:\n", "... print(b)\n", "... a, b = b, a+b" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 1 2 3 4 5 6 7 8 9 " ] } ], "source": [ "In [1]: for i in range(10):\n", " ...: print(i, end=' ')\n", " ...: " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And when your code produces errors, you can control how they are displayed with the `%xmode` magic:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Overwriting mod.py\n" ] } ], "source": [ "%%writefile mod.py\n", "\n", "def f(x):\n", " return 1.0/(x-1)\n", "\n", "def g(y):\n", " return f(y+1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's call the function `g` with an argument that would produce an error:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "ename": "ZeroDivisionError", "evalue": "float division by zero", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\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", "\u001b[1;32m/Users/minrk/dev/ip/mine/examples/IPython Kernel/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", "\u001b[1;32m/Users/minrk/dev/ip/mine/examples/IPython Kernel/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", "\u001b[1;31mZeroDivisionError\u001b[0m: float division by zero" ] } ], "source": [ "import mod\n", "mod.g(0)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Exception reporting mode: Plain\n" ] }, { "ename": "ZeroDivisionError", "evalue": "float division by zero", "output_type": "error", "traceback": [ "Traceback \u001b[1;36m(most recent call last)\u001b[0m:\n", " File \u001b[0;32m\"\"\u001b[0m, line \u001b[0;32m2\u001b[0m, in \u001b[0;35m\u001b[0m\n mod.g(0)\n", " File \u001b[0;32m\"/Users/minrk/dev/ip/mine/examples/IPython Kernel/mod.py\"\u001b[0m, line \u001b[0;32m6\u001b[0m, in \u001b[0;35mg\u001b[0m\n return f(y+1)\n", "\u001b[1;36m File \u001b[1;32m\"/Users/minrk/dev/ip/mine/examples/IPython Kernel/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", "\u001b[1;31mZeroDivisionError\u001b[0m\u001b[1;31m:\u001b[0m float division by zero\n" ] } ], "source": [ "%xmode plain\n", "mod.g(0)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Exception reporting mode: Verbose\n" ] }, { "ename": "ZeroDivisionError", "evalue": "float division by zero", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\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;34m'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= \u001b[0m\n", "\u001b[1;32m/Users/minrk/dev/ip/mine/examples/IPython Kernel/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= \u001b[0m\u001b[1;34m\n \u001b[0m\u001b[0;36my\u001b[0m \u001b[1;34m= 0\u001b[0m\n", "\u001b[1;32m/Users/minrk/dev/ip/mine/examples/IPython Kernel/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", "\u001b[1;31mZeroDivisionError\u001b[0m: float division by zero" ] } ], "source": [ "%xmode verbose\n", "mod.g(0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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." ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Exception reporting mode: Context\n" ] } ], "source": [ "%xmode context" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Running code in other languages with special `%%` magics" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "July" ] } ], "source": [ "%%perl\n", "@months = (\"July\", \"August\", \"September\");\n", "print $months[0];" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello World!\n" ] } ], "source": [ "%%ruby\n", "name = \"world\"\n", "puts \"Hello #{name.capitalize}!\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Raw Input in the notebook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since 1.0 the IPython notebook web application support `raw_input` which for example allow us to invoke the `%debug` magic in the notebook:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "ename": "ZeroDivisionError", "evalue": "float division by zero", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\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", "\u001b[1;32m/Users/minrk/dev/ip/mine/examples/IPython Kernel/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", "\u001b[1;32m/Users/minrk/dev/ip/mine/examples/IPython Kernel/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", "\u001b[1;31mZeroDivisionError\u001b[0m: float division by zero" ] } ], "source": [ "mod.g(0)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "> \u001b[1;32m/Users/minrk/dev/ip/mine/examples/IPython Kernel/mod.py\u001b[0m(3)\u001b[0;36mf\u001b[1;34m()\u001b[0m\n", "\u001b[1;32m 2 \u001b[1;33m\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[0m\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[1;32m 4 \u001b[1;33m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[0m\n", "ipdb> up\n", "> \u001b[1;32m/Users/minrk/dev/ip/mine/examples/IPython Kernel/mod.py\u001b[0m(6)\u001b[0;36mg\u001b[1;34m()\u001b[0m\n", "\u001b[1;32m 4 \u001b[1;33m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[0m\u001b[1;32m 5 \u001b[1;33m\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[0m\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\n", "ipdb> down\n", "> \u001b[1;32m/Users/minrk/dev/ip/mine/examples/IPython Kernel/mod.py\u001b[0m(3)\u001b[0;36mf\u001b[1;34m()\u001b[0m\n", "\u001b[1;32m 2 \u001b[1;33m\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[0m\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[1;32m 4 \u001b[1;33m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[0m\n", "ipdb> bt\n", " \u001b[1;32m\u001b[0m(1)\u001b[0;36m\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\n", " \u001b[1;32m/Users/minrk/dev/ip/mine/examples/IPython Kernel/mod.py\u001b[0m(6)\u001b[0;36mg\u001b[1;34m()\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[0;32m 3 \u001b[0m \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[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\n", "> \u001b[1;32m/Users/minrk/dev/ip/mine/examples/IPython Kernel/mod.py\u001b[0m(3)\u001b[0;36mf\u001b[1;34m()\u001b[0m\n", "\u001b[1;32m 1 \u001b[1;33m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[0m\u001b[1;32m 2 \u001b[1;33m\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[0m\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[1;32m 4 \u001b[1;33m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[0m\u001b[1;32m 5 \u001b[1;33m\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[0m\n", "ipdb> exit\n" ] } ], "source": [ "%debug" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Don't foget to exit your debugging session. Raw input can of course be use to ask for user input:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Are you enjoying this tutorial? yes\n", "enjoy is: yes\n" ] } ], "source": [ "enjoy = input('Are you enjoying this tutorial? ')\n", "print('enjoy is:', enjoy)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plotting in the notebook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This magic configures matplotlib to render its figures inline:" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nB1klwDpgS4UPbXg1W8psHTS8Ktmgm+xlsb3vyGHnjiH/vjmnbDxWXpWrqJlXhrJqJMMrSRLMWOtg\np9dfhZVXKkYdrYOGV7OlzPAqD00Nr8pV9ND24+PxuoKu1xZTV17Fv//5/Q2v7s22Qc01wytJEsze\n0Pb7kb0IuRUDAE3H8EorycMr2wZnV17xc+zQs0aXh47OKhtPEZVXG4G1wF2DbnL39EuaK4ZXmmuG\nV5IkmL3wamFYe5xJI03K8EoryWde2TY4u/IKqeOHnjWCTq+/kSxA2UE2T0ujK2LmlfOuljftzKv8\nfs68UiMZXkmSYLFt8MdmZGi7865UlDrCqxPi0fBqNjjzavYVOXQ/r7q6zjdPxlZE5ZUtg8ubduaV\nlVdqtFl4gSJJKtmgm1xP9kJ6I/CgmpczCuddqSiVhlexauM4YBfOy5kVtg3OvsIqr/a7hi2D4yui\n8iqfW2bl1X3ZNqi5ZnglScrNUuug4ZWKUnXl1cn54w66yZ6KHlPTsfJq9pVSeVXAtdrGyqtyLbQN\nxsH243K3QTWa4ZUkKTcT4VWn198APBjYC3yr5uVo9l0J7ANO6PT6ayt4vFPi8T8reCwVY6Fqp8i2\n6vjiMh8gbnhVLiuvmmFh18cp/i1ZebWMOMB+J3AwsGGCS+SVV868UiMZXkmScvncq0fWuoqVnU72\n9+t7g26yo+7FaLYNuskuspbZg1icRVUmw6sZE3/P3Aysobjd6iB7obgW2O6uaaWz8qoB4u/b24DV\nTD5U3Mqr4aaZe2XboBrN8EqSlNt/aPvqWlcynC2DKlqVrYOGV7OpjLlXecugFTzls/KqOaade2Xl\n1XATzb2KlXCb40130VQjGV5JkgAYdJMbgSuAQ4DTal7OMIZXKprhlVZSxtyrvILHlsHy/QDYARwW\nN02YRh5eWXk1mWnnXll5NdzC3Ksx77cJWEVWCXpPsUuSimF4JUnaXz736tG1rmI4wysVzfBKK8nb\nzooMr06Mx6sKvKaWMOgm+yiu+ioPHa28moyVV+WadMdBWwbVeIZXkqT9fSEeH1frKpYRBxwbXqlo\nlYRXnV5/DXAS2YD4y1c4Xc1SRuXVSfF4RYHX1PKKmntl5dV0pg2vrLwabtKZV4ZXajzDK0nS/j4X\nj40Mr4D7k5XC34wvHFScqiqvTiQbVHyNmw3MnDJmXhleVWvqyqsYQB9DFkDfUMSiWmjatkErr4ab\n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\ngUJ07DcuELgAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": { "image/png": { "height": 392, "width": 599 } }, "output_type": "display_data" } ], "source": [ "x = np.linspace(0, 2*np.pi, 300)\n", "y = np.sin(x**2)\n", "plt.plot(x, y)\n", "plt.title(\"A little chirp\")\n", "fig = plt.gcf() # let's keep the figure object around for later..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The IPython kernel/client model" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{\n", " \"stdin_port\": 62401,\n", " \"key\": \"64c935a7-64e8-4ab7-ab22-6e0f3ff84e02\",\n", " \"hb_port\": 62403,\n", " \"transport\": \"tcp\",\n", " \"signature_scheme\": \"hmac-sha256\",\n", " \"shell_port\": 62399,\n", " \"control_port\": 62402,\n", " \"ip\": \"127.0.0.1\",\n", " \"iopub_port\": 62400\n", "}\n", "\n", "Paste the above JSON into a file, and connect with:\n", " $> ipython --existing \n", "or, if you are local, you can connect with just:\n", " $> ipython --existing kernel-25383540-ce7f-4529-900a-ded0e510d5d8.json \n", "or even just:\n", " $> ipython --existing \n", "if this is the most recent IPython session you have started.\n" ] } ], "source": [ "%connect_info" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can connect automatically a Qt Console to the currently running kernel with the `%qtconsole` magic, or by typing `ipython console --existing ` in any terminal:" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [], "source": [ "%qtconsole" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" } }, "nbformat": 4, "nbformat_minor": 1 }