This package defines decorators and IPython magic to display a dynamic call graph.
Project description
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.
Jupyter / IPython Usage
$ pip install callgraph
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.
Decorator Usage
$ pip install callgraph
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.
Development
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:
flit install --symlink
Acknowledgements
Callgraph uses the Python graphviz package. Python graphviz uses the Graphviz package.
License
MIT
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
Built Distribution
File details
Details for the file callgraph-1.0.0.tar.gz
.
File metadata
- Download URL: callgraph-1.0.0.tar.gz
- Upload date:
- Size: 55.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7bf40a314734a5deff4cb6a1ad71b164dccf66b049dafe69536bea9d80fd4d07 |
|
MD5 | e2ff727b8305d8f4df7036c4e440901c |
|
BLAKE2b-256 | 178c19aa947e7bfe9020c59b07e3ba3a3b39e1f16c54fd32c4bdf2f12d3d6b40 |
File details
Details for the file callgraph-1.0.0-py3-none-any.whl
.
File metadata
- Download URL: callgraph-1.0.0-py3-none-any.whl
- Upload date:
- Size: 15.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 24db0ffa82a1eb037d90d030dacaa9494002a88bb06f4daf81266ebfa564eb2a |
|
MD5 | d36c500f1eee88dc3f48bb20f755fc89 |
|
BLAKE2b-256 | 6a6cbcd23ace79b168d8a6c2436d92c1321704e2fbb2165ef78119c9895d1db7 |