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.3.0.tar.gz (1.9 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.3.0-cp313-cp313-win_amd64.whl (3.3 MB view details)

Uploaded CPython 3.13Windows x86-64

chess_spectral-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

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

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

Uploaded CPython 3.13macOS 11.0+ ARM64

chess_spectral-1.3.0-cp312-cp312-win_amd64.whl (3.3 MB view details)

Uploaded CPython 3.12Windows x86-64

chess_spectral-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

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

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

Uploaded CPython 3.12macOS 11.0+ ARM64

chess_spectral-1.3.0-cp311-cp311-win_amd64.whl (3.3 MB view details)

Uploaded CPython 3.11Windows x86-64

chess_spectral-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

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

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

Uploaded CPython 3.11macOS 11.0+ ARM64

chess_spectral-1.3.0-cp310-cp310-win_amd64.whl (3.3 MB view details)

Uploaded CPython 3.10Windows x86-64

chess_spectral-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl (3.3 MB view details)

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

chess_spectral-1.3.0-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.3.0.tar.gz.

File metadata

  • Download URL: chess_spectral-1.3.0.tar.gz
  • Upload date:
  • Size: 1.9 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.3.0.tar.gz
Algorithm Hash digest
SHA256 f67c06be6cee9da69864ec2d88e6ed7fedb4d44e0fa9254d1de293d9a4678ef2
MD5 cfdaac0e808b75e6bc3f0f6b5e3c81df
BLAKE2b-256 eb2b3831afd920553adc673688941ea86b9016b76fcd203a12c0e41c155bfdd3

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.3.0.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.3.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.3.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 07e35d095aa9ecbaed0310915d16d55d78ed089e1a84e3c569ebd0bdf546b958
MD5 7f2d5587e17a54c9971b996f4a519076
BLAKE2b-256 02af0b200e019d4b10043c6d91655c16164b2eeec63c9b772a1525c94fce1c7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.3.0-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.3.0-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.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b6462bc3eab1710c603e6636271332909d16cd0a3e9770021407fe0fdd7daf04
MD5 9a8df1186c52eb2f5f5da9edc394f549
BLAKE2b-256 21afb7ca55416b24632bd592f500274eed95ae41508daa06461250828798ae29

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.3.0-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.3.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.3.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1e65986b11c2d913c0e1b5f7488238901038634d4cfe0ffb01c3484940d502c3
MD5 6d873064676593ad921c752b7834aa11
BLAKE2b-256 671f5795c594ef7f8c3b7596b18080aea856c50f2da81033a95d9a1e5a319565

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.3.0-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.3.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.3.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 727eea64f64e9e714ea75a62cbc79ee7f053058319a1d18cdbfd4ba5e702baea
MD5 99241737e6f012ec28e94f0fb04884e8
BLAKE2b-256 3a02c3ed83832660f37ab384b6f2570d6f1e90486d357dd8c62815221f7f776d

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.3.0-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.3.0-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.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5c5beedce21580e252731ece54035839b1c3e72170585f4fb89c9ad6c7cda63b
MD5 e95a95ec833170021e19f61d09f028d0
BLAKE2b-256 f4ccc58100c213005d8703ed930f72f00894baa968ae9464e195d2706a583044

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.3.0-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.3.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.3.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9d90c03a32b8d3897cd33b60b072b4dcb3b3fd4cd28d3ba92914eaeb51b29199
MD5 340bb624df1665774ea17e4b818b50cb
BLAKE2b-256 cab0125510aa68d69bf3d98eff5f756255bc8c0b801f4ee1cc1c9867bdee4c18

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.3.0-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.3.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.3.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0a30bf254f50dcf2f9e2d1b36e5db3447258b0d3c127d64b21322fea85006df5
MD5 39d1b8de857e9e6b7a6ba13d133dc2f6
BLAKE2b-256 05d6ab1dcba6774fb76b2a4c77c474cfc36c89f153c58d4e347a4546360907b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.3.0-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.3.0-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.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a8ec674e5a698d054219b49c968dea3dfcfacc3a508ea7271ceaad6d5db672f5
MD5 97e407ffcc109075e160a930396ed1ea
BLAKE2b-256 bd0b207932135e8a71cc0f202db456e17add824121ea9fe326a28003aca4440c

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.3.0-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.3.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.3.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dac118c030b9b6713d2c2ad643b3080c5c0765d9d67968bc0b5a31d58ca9a23a
MD5 de1f0916a844bc15887156e1e3f79629
BLAKE2b-256 ab38b428fd3eb42f65f6514b63daf79de39a6ddf58fec9cec6f3abb801e35673

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.3.0-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.3.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.3.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7fd076240de1f387633411475dc61dd975f299d69645d78a072e688e087c4557
MD5 5ef0b049bd6fb5e147cc9ae0b318de92
BLAKE2b-256 f9fefc1222fb5b187adfd3f4b7a3e9f5a2de0817e03a57859bf2b104dba6caf2

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.3.0-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.3.0-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.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3f0f4d177eb8d7de35513a0eb466c87f3956435b4c4491f21458ae398c5482b6
MD5 a0ccc8b99a7e35c2b8c5ddbb8fbe2086
BLAKE2b-256 76b40d9de8ec28f1455864700dbdf9196b73ddd40b14f9f977ede130977c0d50

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.3.0-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.3.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for chess_spectral-1.3.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bbd7ca74bdf5d62ead1bfebb50bdf4312293107950d670d6c443ed0a66060a65
MD5 95153de681e16fba9a468399504513d8
BLAKE2b-256 4d9e0e528eacc06b42f2c5acaddc4299befd8285aaac890457ea7ffd72973d8c

See more details on using hashes here.

Provenance

The following attestation bundles were made for chess_spectral-1.3.0-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