https://github.com/data-exp-lab/inheritance_explorer
https://github.com/data-exp-lab/inheritance_explorer
Last synced: about 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/data-exp-lab/inheritance_explorer
- Owner: data-exp-lab
- License: mit
- Created: 2022-01-20T20:48:44.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2023-07-24T19:46:23.000Z (almost 3 years ago)
- Last Synced: 2024-04-30T15:47:49.493Z (about 2 years ago)
- Language: Python
- Size: 15.2 MB
- Stars: 5
- Watchers: 3
- Forks: 2
- Open Issues: 4
-
Metadata Files:
- Readme: README.rst
- Changelog: HISTORY.rst
- Contributing: CONTRIBUTING.rst
- License: LICENSE
- Authors: AUTHORS.rst
Awesome Lists containing this project
README
====================
inheritance_explorer
====================
.. image:: https://img.shields.io/pypi/v/inheritance_explorer.svg
:target: https://pypi.python.org/pypi/inheritance_explorer
.. image:: https://github.com/data-exp-lab/inheritance_explorer/actions/workflows/run-tests.yml/badge.svg
:target: https://github.com/data-exp-lab/inheritance_explorer/actions/workflows/run-tests.yml
:alt: Testing Status
.. image:: https://readthedocs.org/projects/inheritance-explorer/badge/?version=latest
:target: https://inheritance-explorer.readthedocs.io/en/latest/?version=latest
:alt: Documentation Status
.. image:: https://codecov.io/gh/data-exp-lab/inheritance_explorer/branch/main/graph/badge.svg?token=EvmlPg5X1O
:target: https://codecov.io/gh/data-exp-lab/inheritance_explorer
:alt: Current Coverage
The ``inheritance_explorer`` is an open source python package for inspecting
other packages. In particular, it focuses on class inheritance structures, allowing
you to produce graphs that recursively map out child classes from a given
starting class. There are a number of useful applications: from learning structures
of unfamiliar code bases to identifying duplicate code.
.. image:: https://github.com/data-exp-lab/inheritance_explorer/raw/main/docs/resources/interactive_yt_ds_parse_param.gif
Useful links: `github repository `_, `full documentation `_
Installation
------------
To install the latest release into your current active environment:
.. code-block:: bash
$ pip install inheritance_explorer
If you want to produce static images of any graphs, you'll also need to
install ``graphviz`` following the instructions at
`https://graphviz.org/download/ `_. ``graphviz``
is not needed for the interactive plotting and similarity calculations (see
Quick Start below).
Quick Start
-----------
Basic class mapping
+++++++++++++++++++
The primary function of the ``inheritance_explorer`` is to trace out the class
inheritance starting from a single parent class and recursively traversing all
child classes. To get started, initialize a `ClassGraphTree` with the starting
class:
.. code-block:: python
from matplotlib.axes import Axes
from inheritance_explorer import ClassGraphTree
base_class = Axes # the starting class to map from
cgt = ClassGraphTree(base_class) # traces an inheritance tree
From here, there are a number of ways to visualize the inheritance graph.
From a jupyter notebook, you can construct a ``pyvis`` interactive network graph
with:
.. code-block:: python
graph = cgt.build_interactive_graph(width="1200px",
height="1200px",
bgcolor='#222222',
font_color='white')
graph.show('_tmp.html') # render the pyvis interactive graph
If you have ``graphviz`` installed, you can also render a static graph either to
display in a jupyter notebook or save to file. To display in a notebook:
.. code-block:: python
cgt.show_graph()
To save a file, you can access the underlying `graph` object directly:
.. code-block:: python
cgt.graph.write('matplotlib_Axes.png')
Function tracking
+++++++++++++++++
The ``ClassGraphTree`` can also track a selected function of a class during traversal.
When a child class overrides the function, the source code is stored. To use this
functionality, use the ``funcname`` keyword argument to provide the function name
as a string:
.. code-block:: python
from matplotlib.axes import Axes
from inheritance_explorer import ClassGraphTree
base_class = Axes # the starting class to map from
cgt = ClassGraphTree(base_class, funcname='clear')
By default, after the traversal completes, the different versions of the function
that is tracked will be run through a code-similarity calculation. Cases where the
similarity fraction is above a cutoff value (default of .75), the two nodes will be
connected on the resulting graph:
.. image:: https://github.com/data-exp-lab/inheritance_explorer/raw/main/docs/resources/mpl_axesclear.png
Additionally, you can inspect the source code itself for any of the classes that
define it using ``cgt.get_source_code(class_name)``. If in a jupyter notebook,
you can view it with syntax highlighting with
.. code-block:: python
from IPython.display import Code
Code(cgt.get_source_code('PolarAxes'), language="python")
For a complete description of the code similarity calculation and how to
modify it, check out the full documentation.
Additional Features
+++++++++++++++++++
The following additional features are described in more detail in the
`full documentation `_:
* `command line usage `_
* `code comparison widget for Jupyter `_