A clean and reusable graph algorithms toolkit
Project description
graphkit
graphkit is a clean, reusable Python library providing standard graph algorithms with a unified and intuitive API.
It is designed for:
- Learning and revision of graph algorithms
- Interview and competitive programming preparation
- Real-world projects requiring graph processing
- Avoiding repeated reimplementation of well-known algorithms
✨ Features
- Simple
Graphabstraction - Object-oriented API
- Readable and canonical implementations
- Fully tested with CI
- No external runtime dependencies
Algorithms included
Shortest Path
- Dijkstra’s Algorithm
- Bellman–Ford Algorithm
Minimum Spanning Tree
- Kruskal’s Algorithm
- Prim’s Algorithm
Traversals
- Breadth-First Search (BFS)
- Depth-First Search (DFS)
📦 Installation
pip install pygraphkit
For development:
pip install -e .
🚀 Quick Start
from graphkit import Graph
g = Graph()
g.add_edge(1, 2, 4)
g.add_edge(1, 3, 1)
g.add_edge(3, 2, 2)
print(g.dijkstra(1))
Output
{1: 0, 2: 3, 3: 1}
🧠 Core Concept
Graph Abstraction
All algorithms operate on a single Graph class.
Graph(directed=False)
directed=False→ undirected graphdirected=True→ directed graph
Adding edges
g.add_edge(u, v, weight)
- Default weight is
1 - For undirected graphs, edges are added both ways
Removing edges
Edges can be removed dynamically using remove_edge.
g.remove_edge(u, v)
Remove a specific weighted edge
g.remove_edge(u, v, weight)
Behavior
- For undirected graphs, both directions are removed
- For directed graphs, only
u → vis removed - If the edge does not exist, the operation is a no-op
📐 API Reference
Dijkstra’s Algorithm
Finds shortest paths from a source node (non-negative weights).
g.dijkstra(source)
Returns:
{node: shortest_distance}
Bellman–Ford Algorithm
Supports negative edge weights and detects negative cycles.
g.bellman_ford(source)
Raises:
ValueError: Negative cycle detected
Kruskal’s Algorithm
Computes the Minimum Spanning Tree (undirected graphs only).
mst, total_weight = g.kruskal()
Returns:
mst: list of edges(u, v, w)total_weight: sum of MST edge weights
Prim’s Algorithm
Computes the Minimum Spanning Tree starting from a given node.
mst, total_weight = g.prim(start)
- Works on undirected graphs
- Uses a greedy priority-queue approach
Topological Sort
Returns a topological ordering of a directed acyclic graph (DAG).
order = g.topological_sort()
- Works only on directed graphs
- Raises ValueError if the graph contains a cycle
Breadth-First Search (BFS)
g.bfs(source)
Returns traversal order as a list.
Depth-First Search (DFS)
g.dfs(source)
Returns traversal order as a list.
🧪 Testing
graphkit uses pytest for testing all core algorithms.
The test suite covers:
- Shortest path correctness
- Negative edge weights
- Negative cycle detection
- Disconnected graphs
- Error handling for invalid usage
Run tests locally:
pip install -e .
pytest -v
All tests must pass before a release is published.
📁 Project Structure
graphkit/
├── graphkit/
│ ├── graph.py
│ ├── algorithms/
│ ├── utils/
│ └── __init__.py
│
├── tests/
│ └── test_*.py
│
├── README.md
├── pyproject.toml
└── LICENSE
🎯 Design Philosophy
- One canonical implementation per algorithm
- Code clarity over cleverness
- No premature optimization
- Easy to rewrite during competitive programming
- Reusable in real-world systems
🛣️ Roadmap
Planned additions:
- Floyd–Warshall Algorithm
- Topological Sort
- Strongly Connected Components (Kosaraju / Tarjan)
- Maximum Flow algorithms (Edmonds–Karp, Dinic)
- Benchmarking utilities
🤝 Contributing
Contributions are welcome.
You can help by:
- Adding algorithms
- Improving test coverage
- Enhancing documentation
Please keep implementations:
- Clean
- Readable
- Well-tested
📜 License
MIT License
Project details
Release history Release notifications | RSS feed
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pygraphkit-0.4.0.tar.gz.
File metadata
- Download URL: pygraphkit-0.4.0.tar.gz
- Upload date:
- Size: 8.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b3deca734e4d3527ea2c9cb6bb1659e44cbebf5a7b59a228fa312466e13c79f7
|
|
| MD5 |
e18dbaf6384bbd62e0262ca797f65793
|
|
| BLAKE2b-256 |
ce0de28da8e1b23049096e6cae96829f07a76eafc2d3ec42284d0036cf335d41
|
File details
Details for the file pygraphkit-0.4.0-py3-none-any.whl.
File metadata
- Download URL: pygraphkit-0.4.0-py3-none-any.whl
- Upload date:
- Size: 8.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a42dcdfd6f09c767081fb23d0bd34371c2fc0e65266a0c5ec596c8fe4ae83451
|
|
| MD5 |
bedd474040357addfb00df18e6de80ec
|
|
| BLAKE2b-256 |
e1e1a5f8516b62eab138e8e5a0b424480e50bec0d31095a104884266b06ee399
|