Skip to main content

An extension for IPython to embed a pythontutor iframe that can illustrate the code in the current cell.

Project description

jupytext: cell_metadata_filter: all,-hidden,-heading_collapsed formats: md:myst notebook_metadata_filter: all,-language_info,-toc,-jupytext.text_representation.jupytext_version,-jupytext.text_representation.format_version text_representation: extension: .md format_name: myst kernelspec: display_name: Python 3 language: python name: python3

Licence CC BY-NC-ND - Thierry Parmentelat


Embedding illustrations in Jupyter

this notebook is stored in text (markdown) format using jupytext, make sure to have this tool installed if you want to open it locally



$ pip3 install ipythontutor



As github won't render iframes embedded in a ipynb, here's a screenshot


Basic Usage

# required to load the extension
%load_ext ipythontutor

In its simplest form, the code in the cell is handed over (as python3) to the excellent

original = reference = [1, 2]
original[0] = 'boom'

Setting sizes

%%ipythontutor height=400 width=850
def fact(n):
    return 1 if n <= 1 else n * fact(n-1)
original = [fact(3), fact(4)]
reference = original[:]
original[0] = 'boom'


If your page is smaller than what pythontutor can reasonably work with, you can specify a scaling ratio.

%%ipythontutor width=600 height=200 ratio=0.7
import copy
original = [1, [2, 3]]
reference = copy.deepcopy(original)
original[1][0] = 'boom'

Add a button to open pythontutor in a new tab

%%ipythontutor linkButton=true
def fact(n):
    return 1 if n <= 1 else n * fact(n-1)
original = [fact(3), fact(4)]
reference = original[:]
original[0] = 'boom'

Other settings

The following list shows the settings that can be tweaked on the magic line. See also this page about embedding pythontutor for more details on these settings:

from ipythontutor import Magics
for var, default in Magics.defaults.items():
    print(f"{var:>20} - defaults to - {default:<}")

Note on proto

The default is to use https to reach pythontutor, as this is exepcted to work in most cases. If that's not working for you, instead of setting proto=http on each magic cell, you can change this globally - like any other default btw - this way:

from ipythontutor import Magics
Magics.defaults['proto'] = 'http'

Using python2

%%ipythontutor py=2
print "Hey"
original = [1, 2]
copy = original[:]
original[0] = 'boom'

See also

Check out another pure approach, that does not rely on pythontutor, at the nbtutor project.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ipythontutor-0.2.0.tar.gz (105.1 kB view hashes)

Uploaded source

Built Distribution

ipythontutor-0.2.0-py3-none-any.whl (4.4 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page