Skip to main content

A Python package for computation in combinatorial mathematics

Project description

GraphCalc

Documentation Status PyPI version License: MIT DOI DOI

Overview

GraphCalc is a Python library for computing a broad range of graph-theoretic invariants, purpose-built to support research in combinatorics, network science, and automated reasoning. It offers exact implementations of over 100 functions, spanning classical invariants (e.g., independence number, chromatic number, spectral radius) and a wide array of lesser-known parameters central to contemporary graph theory.

Originally developed as the invariant engine for the automated conjecturing system TxGraffiti, GraphCalc has since matured into a general-purpose research tool that facilitates the large-scale construction of structured, high-resolution invariant datasets. These datasets, often organized into tabular “knowledge tables,” form the basis for symbolic pattern mining, hypothesis generation, and downstream machine reasoning. For example,

>>> import graphcalc.graphs as gc
>>> from graphcalc.graphs.polytopes.generators import cube_graph, octahedron_graph
>>> graphs = [cube_graph(), octahedron_graph()]
>>> functions = ["order", "size", "spectral_radius", "independence_number"]
>>> gc.compute_knowledge_table(functions, graphs)
   order  size  spectral_radius  independence_number
0      8    12              3.0                    4
1      6    12              4.0                    2

Features

  • Maximum Clique: Finds the maximum clique in a given graph.
  • Chromatic Number: Computes the minimum number of colors required for graph coloring.
  • Vertex and Edge Cover: Determines vertex and edge covers.
  • Matching and Independence: Calculates maximum matching and independent sets.
  • Domination Number and its Variants: Calculates the domination number, total domination number, and many other domination variants.
  • Degree Sequence Invariants: Calculates the residue, annihilaiton number, the slater number and more!
  • Zero Forcing: Calculates the zero forcing number, the total zero forcing number, the positive semidefinite zero forcing number, and the power domination number.

Installation

To install graphcalc, make sure you have Python 3.7 or higher, then install it:

pip install graphcalc

Linear and Integer Programming Solvers

Many of the NP-hard graph invariant computations of GraphCalc depend on third-party solvers.At least one of the following is required if you intend to use solver-based functions (e.g., gc.maximum_independent_set(G)):

  • CBC (recommended):
brew install cbc      # macOS
sudo apt install coinor-cbc  # Debian/Ubuntu

GraphCalc will attempt to automatically detect the solver if it is installed. You can also manually specify the solver in API calls.

Example Graph Usage

from graphcalc import (
    independence_number,
    domination_number,
    zero_forcing_number,
)
from graphcalc.graphs.generators import petersen_graph

# Calculate and print the independence number of the Petersen graph.
G = petersen_graph()
print(f"Petersen graph independence number = {independence_number(G)}")

# Calculate and print the domination number of the Petersen graph.
print(f"Petersen graph domination number = {domination_number(G)}")

# Calculate and print the zero forcing number of the Petersen graph.
print(f"Petersen graph zero forcing number = {zero_forcing_number(G)}")

Example Polytope Usage

import graphcalc.graphs as gc
from graphcalc.graphs.polytopes.generators import (
    cube_graph,
    octahedron_graph,
    dodecahedron_graph,
    tetrahedron_graph,
    icosahedron_graph,
    convex_polytopes_text_example,
)

# Generate polytope graphs (cubes, octahedra, etc.)
G1 = cube_graph()
G2 = octahedron_graph()
G3 = dodecahedron_graph()
G4 = tetrahedron_graph()
G5 = icosahedron_graph()
G6 = convex_polytopes_text_example(1)
G7 = convex_polytopes_text_example(2)


# Function names to compute
function_names = [
    "order", # number of vertices
    "size", # number of edges
    "p_vector",
    "independence_number",
    "vertex_cover_number",
    "maximum_degree",
    "average_degree",
    "minimum_degree",
    "spectral_radius",
    "diameter",
    "radius",
    "girth",
    "algebraic_connectivity",
    "largest_laplacian_eigenvalue",
    "second_largest_adjacency_eigenvalue",
    "smallest_adjacency_eigenvalue",
    "fullerene",
    ]

# Compute properties for multiple polytopes
graphs = [G1, G2, G3, G4, G5, G6, G7]
df = gc.compute_knowledge_table(function_names, graphs)

Creating Simple Graphs, Polytope Graphs, and Simple Polytope Graphs

import graphcalc.graphs as gc

# Draw a simple graph
G = gc.SimpleGraph(name="Example Graph")
G.add_edges_from([(0, 1), (1, 2), (2, 3)])
G.draw()

Author

Randy Davila, PhD Email: rrd6@rice.edu

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

graphcalc-2.0.0.tar.gz (193.9 kB view details)

Uploaded Source

Built Distribution

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

graphcalc-2.0.0-py3-none-any.whl (228.1 kB view details)

Uploaded Python 3

File details

Details for the file graphcalc-2.0.0.tar.gz.

File metadata

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

File hashes

Hashes for graphcalc-2.0.0.tar.gz
Algorithm Hash digest
SHA256 9a98a35b8a1a4cfa8192c034b9ab8b6befef2177e44c4dd1e8fbbfbb635a7e9d
MD5 c3cd1512c9915ebf614c057087b9458e
BLAKE2b-256 d9a48c1e30169e5a65065b3af26c0d816a6b53e26a78913dbe933274a963dd2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for graphcalc-2.0.0.tar.gz:

Publisher: release.yml on RandyRDavila/GraphCalc

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

File details

Details for the file graphcalc-2.0.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for graphcalc-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 23f1629983ea36ab4cb1757a15d2fc0f5ae27334a55f1957d93c4b5b48ee93a0
MD5 03a199f1fec9394b64e7e51b7c086bca
BLAKE2b-256 47e13bfeb8b5d3509af3c149095cfb5a2721c3a5e59ff53e43b7ddea689c2d33

See more details on using hashes here.

Provenance

The following attestation bundles were made for graphcalc-2.0.0-py3-none-any.whl:

Publisher: release.yml on RandyRDavila/GraphCalc

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