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 X.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.8.0.tar.gz (22.3 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.8.0-py3-none-any.whl (28.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for graphworks-0.8.0.tar.gz
Algorithm Hash digest
SHA256 4852e98e29e66b97f1a70f7a6e6ec9c5d3cd65d246fd27f21e073cce0d9f1000
MD5 00239522f061dbbfb355625abc88f55c
BLAKE2b-256 bd4554754cd85fd0a1a016d3b40cbdde4e0a2b28cc8565d5f9f6a0afe3ed60ee

See more details on using hashes here.

Provenance

The following attestation bundles were made for graphworks-0.8.0.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.8.0-py3-none-any.whl.

File metadata

  • Download URL: graphworks-0.8.0-py3-none-any.whl
  • Upload date:
  • Size: 28.8 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.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 534d60b016064b6515d04b308062e17e1ad35e900961182a48a5f4f683002be8
MD5 5a766b7981e8afd8a9ef44d35f8c3746
BLAKE2b-256 23a147e057d6f953be12c7949f56ab99ccbfe9683c893304eb7c959239f63a08

See more details on using hashes here.

Provenance

The following attestation bundles were made for graphworks-0.8.0-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