tutormagic

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.

MIT License

Downloads
1.3K
Stars
31
Committers
6

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
Package Rankings
Top 9.04% on Pypi.org