Skip to main content

Root system explorer via the combinatorial mutation game on graphs

Project description

Mutation Game

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.

Quick start

git clone git@github.com:andreacortis/mutation_game.git
cd mutation_game
uv sync
from mutation 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 Sphinx documentation with mathematical background:

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

Then open docs/_build/html/index.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.0.tar.gz (638.2 kB 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.0-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mutation_game-0.1.0.tar.gz
  • Upload date:
  • Size: 638.2 kB
  • 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.0.tar.gz
Algorithm Hash digest
SHA256 bb4bd62a59f95761bf15d2e92ba06da28d6dbaa1ece7aea2b7094cc892254270
MD5 51de571ff9d3678fbfc2423abcf4a0c5
BLAKE2b-256 2f024d2e7e899ee644822754bdf5bb06407af67779a4c4638c3864cd61883a3c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mutation_game-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.3 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2e8b9c78b8f77ae1e5006eb96ba419bb59afcf3fdef094124314458de703609e
MD5 746225fb8f7625b7a8501b38e9ef7b0c
BLAKE2b-256 075d442a9bcf1bcf9c2d4a585fe70a7c0337d37e69f4a25843502a41672d0ad9

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