Skip to main content

Decorators and Jupyter IPython magic to display a dynamic call graph.

Project description

Latest PyPI Version License Supported Python Versions

Callgraph is a Python package that uses GraphViz 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")

image0

It also provides a Python decorator callgraph.decorator, that instruments a function to collect call graph information and render the result.

Jupyter Usage

$ pip install callgraph

In a Jupyter 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)

See https://github.com/osteele/callgraph/blob/master/examples/callgraph-magic-examples.ipynb for additional instructions and 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 https://github.com/osteele/callgraph/blob/master/examples/callgraph-decorator-examples.ipynb for additional instructions and examples.

Development

Install dev tools, and set up a Jupyter kernel for the current python enviromnent:

$ pip install flit
$ pip install ipykernel
$ 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

callgraph-0.1.4.tar.gz (38.0 kB view hashes)

Uploaded Source

Built Distribution

callgraph-0.1.4-py3-none-any.whl (12.5 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page