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.9.0.tar.gz (32.4 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.9.0-py3-none-any.whl (41.3 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for graphworks-0.9.0.tar.gz
Algorithm Hash digest
SHA256 2b5ddc414690c46cd3f919225b56d6642aff624cec851570d01747697c9d98bc
MD5 a5d16d5c1c72b9b39d5bc901d483aea6
BLAKE2b-256 ff8e7525656c347530d8c9fa8741484a2fa60ac4809091c15a74ab68816ce0cd

See more details on using hashes here.

Provenance

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

File metadata

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

File hashes

Hashes for graphworks-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 75bb4eba31f51c3d5a92dd405073d964878fb6f753962b0e74667bd7344a16af
MD5 bbf8ba5e20dad2ed5c3f81383f50abcd
BLAKE2b-256 e69654240b094256632ac621397bc84a718e5218f8d7abe75df0292e89c6a6a4

See more details on using hashes here.

Provenance

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