Skip to main content

Spectral lattice-fermion encoder for 2D and 4D chess (D4 / B4 symmetry, graph-Laplacian eigenbasis, 640-dim / 45 056-dim HDC)

Project description

chess_spectral (Python)

Python reference implementation of the 640-dim (2D) and 45 056-dim (4D) spectral chess encoders, sibling of the C17 port in ../src/. Use this for REPL / LLM / notebook analysis; use the C binary for batch throughput.

Install

From PyPI (recommended):

pip install chess-spectral

The base install pulls only numpy and scipy. If you need PGN ingest via chess_spectral.corpus, request the [corpus] extra to add python-chess:

pip install "chess-spectral[corpus]"

Package page: https://pypi.org/project/chess-spectral/

From source

Editable install from a local checkout:

pip install -e docs/chess-maths/chess-spectral/python/

From a git URL (pin a commit in production):

pip install "git+https://github.com/lemonforest/mlehaptics.git@COMMIT#subdirectory=docs/chess-maths/chess-spectral/python"

After install, two console scripts are on your $PATH:

chess-spectral --help            # 2D CLI (formerly `python spectral_py.py`)
chess-spectral-4d --help         # 4D CLI

Both packages also expose __version__:

>>> import chess_spectral, chess_spectral_4d
>>> chess_spectral.__version__, chess_spectral_4d.__version__
('1.1.3', '1.1.3')

In-place (no install)

The legacy workflow still works: every test and analysis script uses sys.path.insert to bootstrap off the python/ directory, so pytest docs/chess-maths/chess-spectral/python/tests/ runs without any install.

Output is byte-identical to the C CLI — the spectral csv command here produces the same bytes as the C spectral csv does on the same input file. The Python CLI (chess-spectral, entry point chess_spectral.cli:main) mirrors the C CLI subcommand-for-subcommand.

Layout

chess_spectral/
  encoder.py             # encode_640(pos) → np.ndarray(640,)
  frame.py               # v2 .spectral[z] binary I/O + transparent gzip
  csv_export.py          # dist_prev / cos_prev / energies CSV
  cli.py                 # `chess-spectral csv file.spectralz` (2D CLI)
  phase_operators/       # §11 phase-space move generator + is_check (1.2.0+)
chess_spectral_4d/
  cli.py                 # `chess-spectral-4d tables-verify --phase all`
pyproject.toml           # PEP 621 packaging metadata
tests/
  test_parity.py         # Python output == C output (5 tests)
  phase_operators/       # §11 validation suite (92 tests; 1.2.0+)

Quick start

>>> from chess_spectral import (
...     encode_640, channel_energies, read_encodings, fen_to_pos,
... )

>>> pos = fen_to_pos("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1")
>>> enc = encode_640(pos)
>>> enc.shape
(640,)

>>> channel_energies(enc)
{'A1': 0.0, 'A2': 19.845, 'B1': 45.2825, 'B2': 45.2825,
 'E': 322.57, 'F1': 88.77, 'F2': 1851.01, 'F3': 1507.65,
 'FA': 19.92, 'FD': 0.0}

# Read a whole game that was encoded by either C or Python
>>> hdr, arr = read_encodings("game.spectralz")  # transparent gzip
>>> arr.shape
(161, 640)

CLI

python spectral_py.py csv        game.spectralz -o game.csv
python spectral_py.py encode     -i game.ndjson -o game.spectralz -z
python spectral_py.py encode-fen --fen "..."   -o single.spectral
python spectral_py.py version

Phase operators (§11)

chess_spectral ships a phase-space move generator and check detector as the chess_spectral.phase_operators subpackage (added in 1.2.0). The primitives compute all moves and check relationships as modular arithmetic on a single integer per square — phi(r, c) = r·67 + c·7 mod 640 — rather than geometric coordinates. They are a drop-in equivalent to python-chess's pseudo_legal_moves + is_check, validated at 100% on the reference corpus, and compose naturally with the spectral encoder's coprime phase structure.

import chess
from chess_spectral.phase_operators import (
    occupation_aware_moves_c,   # pseudo-legal dests from a square
    available_castles,          # legal castles for side-to-move
    phasecast_is_check,         # is the mover's king attacked?
    move_leaves_king_in_check,  # would this move expose our king?
)

board = chess.Board()

# Pseudo-legal destinations for the knight on b1 (the 1,2 indexed
# from bottom-left: row 0, col 1). mover_charge is +1 for white.
dests = occupation_aware_moves_c(board, "N", 0, 1, +1)
# -> frozenset({(2, 0), (2, 2)})   (a3 and c3)

# Check detection
phasecast_is_check(board)  # False on the starting position

Validation coverage (see PHASE_OPERATOR_SUPPLEMENT.md for the full research record):

  • Empty-board pseudo-legal destinations for every piece type at every square — 416 / 416 pairs (§11.3).
  • Occupation-aware pseudo-legal moves including en passant and castling — 1153 / 1153 at n=100 positions (§11.4).
  • is_check on arbitrary pseudo-legal transitions — 3393 / 3393 (§11.5 path 1).

When to use phase operators vs python-chess

Both give you the same answers. The phase-space formulation is faster than python-chess's pseudo_legal_moves in pure Python (~7 µs/piece for the fastest solution vs ~15–20 µs for python-chess's equivalent), and slower than python-chess's bitboard is_check (phasecast_is_check runs ~138 µs vs ~22 µs for python-chess). The subpackage exists because the phase-space formulation is the substrate the §11/§12 spectral research is built on — not because it universally out-performs python-chess. If you're writing a search engine hot loop, python-chess's bitboards are the right choice. If you're doing phase-space research (similarity, partition detection, encoder composition) or need the operators as primitives in C via a future codegen port, the subpackage is the right choice.

Parity with C

The encoder uses the same tables (PAWN_ANTI_FIBER, DIAG_DEV) as the codegen that feeds the C side. Tables are rebuilt at import time from encoder_512 primitives plus the directed pawn adjacency from chess_pawn_laplacian — so both implementations can be verified from first principles.

Run the parity suite:

python tests/test_parity.py

The critical test is test_csv_matches_c_byte_for_byte — reads the C- produced .spectral file, runs the Python CSV exporter, asserts the output equals the C CSV bit-for-bit.

Why two implementations

C Python
Throughput µs/encode ms/encode
REPL / notebooks
LLM-pasteable binary code
Scipy / numpy exploration
Embeds in mobile / web
Exact numerical reference tables baked at build rebuilt from primitives

Develop new channels in Python first (faster iteration, scipy.linalg at hand, no rebuild loop). Once the math is frozen, port to C and verify parity via the test suite.

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

chess_spectral-1.2.5.tar.gz (1.8 MB view details)

Uploaded Source

Built Distributions

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

chess_spectral-1.2.5-cp313-cp313-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.13Windows x86-64

chess_spectral-1.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

chess_spectral-1.2.5-cp313-cp313-macosx_11_0_arm64.whl (3.3 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

chess_spectral-1.2.5-cp312-cp312-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.12Windows x86-64

chess_spectral-1.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

chess_spectral-1.2.5-cp312-cp312-macosx_11_0_arm64.whl (3.3 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

chess_spectral-1.2.5-cp311-cp311-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.11Windows x86-64

chess_spectral-1.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

chess_spectral-1.2.5-cp311-cp311-macosx_11_0_arm64.whl (3.3 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

chess_spectral-1.2.5-cp310-cp310-win_amd64.whl (3.2 MB view details)

Uploaded CPython 3.10Windows x86-64

chess_spectral-1.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

chess_spectral-1.2.5-cp310-cp310-macosx_11_0_arm64.whl (3.3 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file chess_spectral-1.2.5.tar.gz.

File metadata

  • Download URL: chess_spectral-1.2.5.tar.gz
  • Upload date:
  • Size: 1.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for chess_spectral-1.2.5.tar.gz
Algorithm Hash digest
SHA256 6fc41679b0895e6ecd209fc89ad6814a24c9fa4b7d451599e2eea96495126eb6
MD5 dcd2350d8ad526f61fe1197c65586904
BLAKE2b-256 cb4f89f552cffe8a25d456c509ac15c875f41cc0d96d3ac7b413ccc5e65da02d

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.2.5.tar.gz:

Publisher: chess-spectral-publish.yml on lemonforest/mlehaptics

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

File details

Details for the file chess_spectral-1.2.5-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.2.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 605ba2da72861652e41b730bea9ab9b3f7aad98a3f38629a187888e25992d102
MD5 4348c042fea734d1e8bb33ebcd0e68c9
BLAKE2b-256 2152a52179ec2a97d474aaa733396404063abc555977300fd6a6660bb2b2fbc6

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.2.5-cp313-cp313-win_amd64.whl:

Publisher: chess-spectral-publish.yml on lemonforest/mlehaptics

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

File details

Details for the file chess_spectral-1.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4bddb37b37871f345485cc7b5dc6447267eeb3acb6812b5e88842099f64234ff
MD5 e9a29c63463d875cc217ff7a6e3a32af
BLAKE2b-256 a50b259d20f2bc88c7f9de205069c3f6bd71a1684b1be278e80408cde27ab66d

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl:

Publisher: chess-spectral-publish.yml on lemonforest/mlehaptics

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

File details

Details for the file chess_spectral-1.2.5-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.2.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e1eab664907fe648895792d5e6ff0cf58158c96c61308b7e8d7b9a6e121a27d8
MD5 d7a830c8d0f8831a69b8faad40de3cd7
BLAKE2b-256 aeb9408167a8a3e492caa334cffbe66292cddb1896a4542cd3fc1c67badcb022

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.2.5-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: chess-spectral-publish.yml on lemonforest/mlehaptics

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

File details

Details for the file chess_spectral-1.2.5-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.2.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f5b7d312f9f119f74f76f6b558824f745537cc7fbaf00c8672c0ad08186a71b4
MD5 d75743814b15faafca573d81651b4d65
BLAKE2b-256 9f320736342f040893fdbd97a151e883d805682140a5eb899b6c46cf1b717be8

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.2.5-cp312-cp312-win_amd64.whl:

Publisher: chess-spectral-publish.yml on lemonforest/mlehaptics

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

File details

Details for the file chess_spectral-1.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d0e7cdb913478bfaa725c3044383092516c14c4a7dbd672b72c04420e3e18719
MD5 83f940afbea91460e50598ae074dd25b
BLAKE2b-256 c542eebeaeb63870c27a8054c5e9a508af1e768fe5b12a41e2d1180fb8f5f85f

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl:

Publisher: chess-spectral-publish.yml on lemonforest/mlehaptics

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

File details

Details for the file chess_spectral-1.2.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.2.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 abd53ec940c177e73e5e5f7327e5d0652b15b7c371244a57ba02890014f52e3e
MD5 5504794026b00900dae65a7f5acd331c
BLAKE2b-256 a92dbb3e6c63805b9f50fb8b3ad3e93e9e1e3153b6053baef5d57394a31efd87

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.2.5-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: chess-spectral-publish.yml on lemonforest/mlehaptics

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

File details

Details for the file chess_spectral-1.2.5-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.2.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8aebb1cf9c5df85bdde6a72726f7f596832beb9dae3d5e95c7090990d1ef30ac
MD5 f12c4cd21287cab4c76f88537fdc259d
BLAKE2b-256 e9e70138570a10cb54740971ed6af50270cb685dce567d61289f7a758820801d

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.2.5-cp311-cp311-win_amd64.whl:

Publisher: chess-spectral-publish.yml on lemonforest/mlehaptics

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

File details

Details for the file chess_spectral-1.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 101af10906531b0a9304978b247d174908aeee5daea20cc93bb0dbe5626bce6d
MD5 af975104fb9abfc29276c2ce92678a82
BLAKE2b-256 73136c3b6b3a089ef16c4fb094a97089e50ef21c0aab71d30d6aa2a20f2d7b35

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl:

Publisher: chess-spectral-publish.yml on lemonforest/mlehaptics

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

File details

Details for the file chess_spectral-1.2.5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.2.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6e7b689216dafd61f1817cd5065c50b5ba21f1558ae7211b56ddf56c4afbf3ff
MD5 e983e8ae983a72bd5877a83d36d8fa6b
BLAKE2b-256 694b68f627fe911c7141fd7d8162ff5dab84c80e533022c0a91a7d806fd75409

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.2.5-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: chess-spectral-publish.yml on lemonforest/mlehaptics

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

File details

Details for the file chess_spectral-1.2.5-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.2.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4b8f5afbe4309f70797bbbc036aee28fc0825c20703e01d0595791d5f40e0c1a
MD5 76e972c68c91a23afc662e58b5778580
BLAKE2b-256 f5633a065f17d6a15e4734af9be2a9c77e6956824bf859529a3beb90bc3f8710

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.2.5-cp310-cp310-win_amd64.whl:

Publisher: chess-spectral-publish.yml on lemonforest/mlehaptics

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

File details

Details for the file chess_spectral-1.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ee946db5a24fe62f197e712af640a85c43e53d07defefb44521419b93f4ab27f
MD5 77fc4cd6dec7975c473b1da917c95d5c
BLAKE2b-256 a4c2bf9c54034eb0c18997d20e17304119e012e6bfc64fdc4610d8b777077c55

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl:

Publisher: chess-spectral-publish.yml on lemonforest/mlehaptics

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

File details

Details for the file chess_spectral-1.2.5-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.2.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a84157039b20ace1f04ba7ac789a822972bc527f00e82ca306cfd6c5463d1a44
MD5 ac37c41553cc8fa5223db34458a01bd2
BLAKE2b-256 955ed3059436e171deeac6a15ebd76f62e40b85237e431432c06b6cd4349a504

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.2.5-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: chess-spectral-publish.yml on lemonforest/mlehaptics

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