Skip to main content

Graph theoretic classes and algorithm helper functions.

Project description

Graphworks

Python package

A Python module for efficient graph theoretic programming

Documentation | Wiki

Quick Start

pip install graphworks
import json
from graphworks.graph import Graph

json_graph = {"label": "my graph", "graph": {"A": ["B"], "B": []}}
graph = Graph(input_graph=json.dumps(json_graph))
print(graph)

Optional extras:

pip install graphworks[matrix]   # numpy adjacency matrix support
pip install graphworks[viz]      # graphviz export
pip install graphworks[docs]     # generate documentation

Development

Requirements

  • Python 3.13+
  • uv (>= 0.10.12)

Setup

uv sync --extra all

Running Tests

# Run all tests (includes coverage; fails under 90%)
uv run pytest

# Run a single test file
uv run pytest tests/test_graph.py

# Run a single test by name
uv run pytest tests/test_graph.py -k "test_method_name"

Linting and Formatting

# Lint
uv run ruff check --fix src/ tests/

# Format
uv run black src/ tests/
uv run isort src/ tests/

# Type checking
uv run ty check

# Code complexity
uv run xenon --max-average=A --max-modules=B --max-absolute=B src/

# Run all pre-commit hooks
prek run --all-files

Publishing

Version is managed automatically via git tags using hatchling-vcs.

  • Tag a commit: git tag -a vX.Y.Z -m 'release message'
  • Push the tag: git push --tags
  • The GitHub Actions workflow will build and publish to PyPI automatically.

Roadmap

Tier 1: Data model

  • Vertex class with name, optional label, and immutable attribute mapping
  • Edge dataclass with source, target, directed flag, optional weight, label, and attributes
  • Both classes are frozen (immutable) with identity-based equality and hashing

Tier 2: Graph refactor

  • Internal storage uses dict[str, Vertex] for vertex lookup
  • Adjacency structure uses dict[str, dict[str, Edge]] for O(1) edge access
  • Edge weights, labels, and attributes survive all operations
  • add_edge supports weight and label keyword arguments
  • edge() lookup method for direct O(1) edge retrieval

Tier 3: Lossless conversions

  • to_adjacency_matrix() / from_adjacency_matrix() round-trips that preserve vertex names via an index mapping
  • Fix get_complement to preserve original vertex names instead of generating UUIDs
  • to_edge_list() / from_edge_list() conversions
  • Parse weighted JSON format (e.g. g4.json dict-as-neighbor style)

Tier 4: Algorithms

  • Dijkstra's shortest path (weighted)
  • Prim's / Kruskal's minimum spanning tree
  • Strongly connected components (Tarjan or Kosaraju)
  • Improved shortest-path implementations leveraging weighted edges

Tier 5: Export and CLI

  • JSON export (save_to_json)
  • Graphviz DOT export (save_to_dot)
  • Rich-based demo script (uv run demo)
  • CLI application for common graph operations
  • Rich rendering integration for interactive graph display

Tier 6: Cross-cutting quality

  • Thread safety (immutable graph views or locking around mutations)
  • Input validation hardening
  • Performance benchmarks

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

graphworks-0.6.2.tar.gz (19.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

graphworks-0.6.2-py3-none-any.whl (26.1 kB view details)

Uploaded Python 3

File details

Details for the file graphworks-0.6.2.tar.gz.

File metadata

  • Download URL: graphworks-0.6.2.tar.gz
  • Upload date:
  • Size: 19.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for graphworks-0.6.2.tar.gz
Algorithm Hash digest
SHA256 1e051f66ff051658effd9ffe97a9a1eb6ca5e4af14713a6a51c67bf1a43162a6
MD5 70a5bc8a42f595a4f4b7fba33f116217
BLAKE2b-256 61fe53bf53b1788ea1e30ad205184bdcb616e7746570fa5c820593c619a238af

See more details on using hashes here.

Provenance

The following attestation bundles were made for graphworks-0.6.2.tar.gz:

Publisher: publish-to-pypi.yml on nathan-gilbert/graphworks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file graphworks-0.6.2-py3-none-any.whl.

File metadata

  • Download URL: graphworks-0.6.2-py3-none-any.whl
  • Upload date:
  • Size: 26.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for graphworks-0.6.2-py3-none-any.whl
Algorithm Hash digest
SHA256 713940e5e44fe7997aa0aa0678dc7a6bd65cc12830040c3faab5a6b31e7e0074
MD5 8b24c0f41a621afa24a1b707bce11dca
BLAKE2b-256 1e10de38a1c7640c3aec0b26d7c5af5795142b25b44cd631d6e842194d2ed22b

See more details on using hashes here.

Provenance

The following attestation bundles were made for graphworks-0.6.2-py3-none-any.whl:

Publisher: publish-to-pypi.yml on nathan-gilbert/graphworks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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