Skip to main content

Root system explorer via the combinatorial mutation game on graphs

Project description

Mutation Game

PyPI Documentation

A Python library for exploring root systems through the combinatorial mutation game on graphs.

Given a graph (or a Dynkin diagram name like A3, D5, E8), the library computes the full root system via iterated mutations and visualizes the mutation graph.

Installation

pip install mutation-game

Or for development:

git clone git@github.com:andreacortis/mutation_game.git
cd mutation_game
uv sync
from mutation_game import MutationGame

game = MutationGame.from_dynkin("A3")
roots = game.calculate_roots()
print(f"A3 has {len(roots)} roots")  # 12

fig = game.plot_root_orbits()
fig.savefig("a3_positive.png", bbox_inches="tight", dpi=150)

A3 positive roots

Features

  • Dynkin diagram support -- create games from A_n, D_n, E_6, E_7, E_8 by name
  • Matrix-based mutations -- each mutation is a precomputed matrix multiply (v' = M_k @ v)
  • Cartan matrix analysis -- eigenvalues, eigenvectors, and automatic finite-type detection via positive definiteness
  • Root system computation -- full BFS enumeration with verified root counts for all ADE types
  • Mutation path finding -- shortest path between any two roots via BFS on the mutation graph
  • Path tables -- all-pairs shortest mutation paths in a formatted table
  • Visualization -- side-by-side Dynkin diagram and mutation graph with color-coded simple roots

Finite-type detection

The library checks whether the Cartan matrix C = 2I - A is positive definite before attempting to enumerate roots. Infinite-type graphs are rejected early with a clear error:

cycle = MutationGame([[0,1,1],[1,0,1],[1,1,0]])
cycle.is_finite_type()  # False
cycle.calculate_roots()  # RuntimeError: Cartan matrix is not positive definite

Mutation path table

game = MutationGame.from_dynkin("A3")
game.print_mutation_path_table()
Source     Target     Mutations         Len
-------------------------------------------
(0, 0, 1)  (0, 1, 0)  1 -> 2            2
(0, 0, 1)  (0, 1, 1)  1                 1
(0, 0, 1)  (1, 0, 0)  1 -> 2 -> 0 -> 1  4
(0, 0, 1)  (1, 1, 0)  1 -> 2 -> 0       3
(0, 0, 1)  (1, 1, 1)  1 -> 0            2
...

Each path is reversible: to go from B back to A, apply the same mutations in reverse order.

Tests

uv run pytest test_mutation.py -v

43 tests covering Dynkin construction, mutation rule, root counts for all ADE types, Cartan matrix properties, mutation paths, and plotting.

Documentation

Full documentation with mathematical background is available at mutation-game.readthedocs.io

To build locally:

cd docs
uv run sphinx-build -b html . _build/html

Dependencies

  • numpy -- linear algebra and matrix operations
  • networkx -- graph construction and layout
  • matplotlib -- visualization

License

See LICENSE.

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

mutation_game-0.1.3.tar.gz (2.7 MB view details)

Uploaded Source

Built Distribution

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

mutation_game-0.1.3-py3-none-any.whl (13.7 kB view details)

Uploaded Python 3

File details

Details for the file mutation_game-0.1.3.tar.gz.

File metadata

  • Download URL: mutation_game-0.1.3.tar.gz
  • Upload date:
  • Size: 2.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Pop!_OS","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for mutation_game-0.1.3.tar.gz
Algorithm Hash digest
SHA256 a78b038c2f41f3182ed3ebf48496b2c63ab5ae359aa6909f4250cadb1d07b1fb
MD5 eaf2aba235fded75e3465d22343d3d0a
BLAKE2b-256 3bd1085e5ac24f2d4147dcda58183a5fffa8b0ece0a72b499278da2e3bf66458

See more details on using hashes here.

File details

Details for the file mutation_game-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: mutation_game-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 13.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Pop!_OS","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for mutation_game-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9887f0998581cf8fad060802c3cbb8c60dc57385e2c91b20855e536077b41267
MD5 28dc2c874a1abf3d43bf081863f7d962
BLAKE2b-256 4238e9ae76668a5c0a209e1c281a528d139e8116e559f3fa8d17675561b2d7c4

See more details on using hashes here.

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