https://github.com/goodmami/minigraph
Small Python module for small graph structures
https://github.com/goodmami/minigraph
graph graph-library unmaintained
Last synced: 10 months ago
JSON representation
Small Python module for small graph structures
- Host: GitHub
- URL: https://github.com/goodmami/minigraph
- Owner: goodmami
- License: mit
- Archived: true
- Created: 2015-05-12T10:20:35.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2015-05-15T09:35:57.000Z (about 11 years ago)
- Last Synced: 2025-06-11T03:17:03.801Z (about 1 year ago)
- Topics: graph, graph-library, unmaintained
- Language: Python
- Size: 145 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# minigraph
Small Python module for small graph structures
### Motivation
I [work with](https://github.com/goodmami/pydelphin) small graphs. I
build them programatically from other representations. I don't work with
huge graphs with millions of nodes and edges, but usually those with
less than 100. I want this in a graphing library:
- it is fast to build graphs and make subgraphs
- it is easy to query for basic properties, like size
- it is fast to determine if a graph is connected or not
- it is easy to do pathfinding
- one graph type handles directed edges, undirected edges,
labeled edges, and overlapping edges (multigraphs)
- ideally it is a single file, so I can just copy it into other
projects instead of making a dependency, which means...
- it has a permissive open-source license
Consider some of the existing Python libraries for graphs:
- [NetworkX][] is featureful, but slow
- [graph-tool][] is fast, but GPL'd (it's based on the
[Boost Graph Library][], which has a permissive license, but the
author of graph-tool [seems uninterested in changing
graph-tool's license](https://git.skewed.de/count0/graph-tool/issues/194))
- [NetworKit][] is supposedly fast (though its hard to find any
benchmarks to support this claim), and there's little documentation
for building graphs programatically.
### Benchmarks
I compared MiniGraph to NetworkX. It's not directly comparable, because
the single MiniGraph class can be like NetworkXs Graph, DiGraph,
MultiGraph, and MultiDiGraph classes. Because of this, I compare it to
all of them. Here's the current state (times are in seconds):
Building a chain of 100 nodes 10000 times:
MiniGraph (regular ) : 2.078411
MiniGraph (fast_init ) : 1.903894
NetworkX Graph : 2.422691
NetworkX DiGraph : 3.009594
NetworkX MultiGraph : 4.788977
NetworkX MultiDiGraph : 5.369203
Building a fully-connected 10-node graph 10000 times:
MiniGraph (regular ) : 1.174832
MiniGraph (fast_init ) : 1.014850
NetworkX Graph : 1.749765
NetworkX DiGraph : 1.912611
NetworkX MultiGraph: 4.029920
NetworkX MultiDiGraph: 4.320380
Building a 4x-connected 5x5-node graph 10000 times:
MiniGraph (regular ) : 1.068538
MiniGraph (fast_init ) : 0.902589
NetworkX MultiGraph: 3.878337
NetworkX MultiDiGraph: 4.003757
A good start, but there's more work to do.
[NetworkX]: https://networkx.github.io/
[graph-tool]: https://graph-tool.skewed.de/
[Boost Graph Library]: http://www.boost.org/doc/libs/release/libs/graph
[NetworKit]: https://networkit.iti.kit.edu/