tutormagic icon indicating copy to clipboard operation
tutormagic copied to clipboard

Jupyter notebook magics to embed pythontutor.com within an IFrame in the Jupyter (classic or Lab) notebook using the code from a Jupyter code cell.

tutormagic extension for the Jupyter notebook

Recommendation

Have a look to nbtutor <https://github.com/lgpage/nbtutor>_, a more polished and better solution.


Jupyter notebook magics to embed http://www.pythontutor.com within an IFrame in the Jupyter notebook or to open a new tab in the browser using the code from a notebook code cell (using the IPython kernel).

Install

.. code:: python

pip install tutormagic

or with conda

.. code:: python

conda install -c kikocorreoso tutormagic

or (for the development version)

.. code:: python

pip install git+https://github.com/kikocorreoso/tutormagic.git

Tested on Python 2.7.x/3.4.x/3.5.x/3.6.x/3.7.x/3.8.x/3.9.x and Jupyter 3.x/4.x/5.x/6.x.

Usage

First, load the extension:

.. code:: python

%load_ext tutormagic

Once loaded, in a code cell in the notebook type the following:

.. code:: python

%%tutor --lang python3
# some python code
# ...

to create an IFrame within the notebook with the http://www.pythontutor.com page with the code included in the Jupyter code cell or:

.. code:: python

%%tutor --lang python3 --tab
# some python code
# ...

to open http://www.pythontutor.com page in a new browser tab with the code included in the Jupyter code cell.

Options

--lang or -l: it allows you to choose one of the available languages supported by pythontutor <http://www.pythontutor.com>__. If this option is not used then it will consider the code in the cell as Python3 code.

  • %%tutor --lang python3 or %%tutor -l python3 or %%tutor to show a pythontutor IFrame with python3 code.
  • %%tutor --lang python2 or %%tutor -l python2 to show a pythontutor IFrame with python2 code.
  • %%tutor --lang py3anaconda or %%tutor -l py3anaconda to show a pythontutor IFrame with py3anaconda code. This option allows you to import libs like numpy. This is experimental.
  • %%tutor --lang java or %%tutor -l java to show a pythontutor IFrame with java code.
  • %%tutor --lang javascript or %%tutor -l javascript to show a pythontutor IFrame with javascript code.
  • %%tutor --lang typescript or %%tutor -l typescript to show a pythontutor IFrame with typescript code.
  • %%tutor --lang ruby or %%tutor -l ruby to show a pythontutor IFrame with ruby code.
  • %%tutor --lang c or %%tutor -l c to show a pythontutor IFrame with c code.
  • %%tutor --lang c++ or %%tutor -l c++ to show a pythontutor IFrame with c++ code.

.. image:: https://raw.githubusercontent.com/kikocorreoso/tutormagic/master/imgs/normal.png :width: 500 px

--height or -h: it changes the height of the output area display in pixels. It is used to define the height of the IFrame used to embed http://pythontutor.com within the notebook. If the --tab option is used this option will be ignored.

.. image:: https://raw.githubusercontent.com/kikocorreoso/tutormagic/master/imgs/height.png :width: 500 px

--tab or -t: it will open http://pythontutor.com in a new tab instead of within an IFrame within the notebook.

--secure or -s: it will use HTTPS to open PythonTutor.com. This is useful when being used in a notebook that uses SSL.

--link or -k: it will display a link to PythonTutor, not via an iFrame.

.. image:: https://raw.githubusercontent.com/kikocorreoso/tutormagic/master/imgs/link1.png :width: 500 px

--run or -r: Use this option if you also want to run the code in the cell in the notebook.

.. image:: https://raw.githubusercontent.com/kikocorreoso/tutormagic/master/imgs/run1.png :width: 500 px

You can customize how PythonTutor is rendered via the options available below in the URL params. The following options are available:

  • Use the --cumulative option to tell PythonTutor to the cumulative to True

.. image:: https://raw.githubusercontent.com/kikocorreoso/tutormagic/master/imgs/cumulative1.png :width: 500 px

  • Use the --heapPrimitives option to tell PythonTutor to render objects on the heap

.. image:: https://raw.githubusercontent.com/kikocorreoso/tutormagic/master/imgs/test_heap1.png :width: 500 px

  • Use the --textReferences option to tell PythonTutor to use text labels for references
  • Use the --curInstr followed by a number to start the visualisation at the defined step

.. image:: https://raw.githubusercontent.com/kikocorreoso/tutormagic/master/imgs/current1.png :width: 500 px

  • Use the --verticalStack to set visualization to stack atop one another.

.. image:: https://raw.githubusercontent.com/kikocorreoso/tutormagic/master/imgs/vertical1.png :width: 500 px

Examples

Example notebook included in the repository <http://nbviewer.jupyter.org/github/kikocorreoso/tutormagic/blob/master/examples/Examples.ipynb>__.

Example (in spanish) notebook <http://nbviewer.ipython.org/github/Pybonacci/notebooks/blob/master/tutormagic.ipynb>__.

Name of the extension

The name of the extension was suggested by Doug S. Blank (@dsblank <https://github.com/dsblank>__).

Changelog

Version 0.3.1

  • Added option --lang py3anaconda (thanks to @naereen <https://github.com/naereen>__).

Version 0.3.0


- Added options ``--secure``, ``--link``, ``--cumulative``, ``--heapPrimitives`` and ``--textReferences`` (thanks to James Quacinella (`@jquacinella <https://github.com/jquacinella>`__)).
- Added options ``--run``, ``--curInstr`` and ``--verticalStack``.

Version 0.2.0
  • Added new --tab option (thanks to Holger Karl (@hkarl <https://github.com/hkarl>__)).
  • Added new --height option (thanks to Tom Simonart(@tomsimonart <https://github.com/tomsimonart>__)).
  • Added new languages available on http://pythontutor.com (Typescript, Ruby, C and C++).

Version 0.1.0


-  Initial version