Callgraph is a Python package that defines a decorator, and Jupyter magic, to draw dynamic call graphs of Python function calls.
It’s intended for classroom use, but may also be useful for self-guided exploration.
The package defines a Jupyter IPython magic, %callgraph
, that displays a call graph within a Jupyter cell:
from functools import lru_cache @lru_cache() def lev(a, b): if "" in (a, b): return len(a) + len(b) candidates = [] if a[0] == b[0]: candidates.append(lev(a[1:], b[1:])) else: candidates.append(lev(a[1:], b[1:]) + 1) candidates.append(lev(a, b[1:]) + 1) candidates.append(lev(a[1:], b) + 1) return min(candidates) %callgraph -w10 lev("big", "dog"); lev("dig", "dog")
It also provides a Python decorator, callgraph.decorator
, that instruments a function to collect call graph information and render the result.
In a Jupyter IPython notebook:
%load_ext callgraph def nchoosek(n, k): if k == 0: return 1 if n == k: return 1 return nchoosek(n - 1, k - 1) + nchoosek(n - 1, k) %callgraph nchoosek(4, 2)
As an alternative to including %load_ext callgraph
in each notebook that uses %callgraph
, you can add the extension to the Notebook configuration file in your IPython profile.
Your configuration file is probably called ~/.ipython/profile_default/ipython_config.py
. (You can run ipython profile locate
to find it.) Edit this file to include the following line:
c.InteractiveShellApp.extensions = ["callgraph.extension"]
(If your configuration file already includes an uncommented statement c.InteractiveShellApp.extensions = […]
, edit the list of extensions in that line to include "callgraph.extension"
.
See extension example notebook for additional examples.
from functools import lru_cache import callgraph.decorator as callgraph @callgraph() @lru_cache() def nchoosek(n, k): if k == 0: return 1 if n == k: return 1 return nchoosek(n - 1, k - 1) + nchoosek(n - 1, k) nchoosek(5, 2) nchoosek.__callgraph__.view()
See the API documentation for additional documentation.
See the decorator example notebook for additional instructions and examples.
Install dev tools, and set up a Jupyter kernel for the current python enviromnent:
$ pip install -r requirements-dev.txt $ python -m ipykernel install --user
Install locally:
Callgraph uses the Python graphviz package. Python graphviz uses the Graphviz package.
MIT
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4