Qiskit EigenLight
Turn a quantum system's eigenvalues into light instead of sound.
There's a well-worn idea in the ecosystem of sonifying quantum state evolution — mapping amplitudes and phases to pitch, timbre, rhythm. qiskit-eigenlight takes the same underlying object (a Hamiltonian's eigenspectrum, probed by a continuous-time evolution) and asks what it looks like instead of what it sounds like: rendered as an emission spectrum, with spectral lines positioned at true eigenvalue gaps and colored/intensity-scaled from the actual coherence structure of the evolving state.
It is not a music-to-image converter. There is no audio anywhere in this package. The physics is the same substrate a sonification would use — this is just the other rendering of it.
What it actually computes
Given a Hamiltonian H (real symmetric, e.g. the adjacency matrix of a graph) and an initial state:
- Diagonalize
H = V Λ V^T(vianumpy.linalg.eigh). - Evolve under the free Hamiltonian:
|ψ(t)⟩ = V exp(-iΛt) V^T |ψ(0)⟩. - Decompose
⟨T(t)⟩for a probe operatorTinto its Fourier components — each component sits at a frequencyω_kl = |λ_k − λ_l|, with amplitude|c_k c_l ⟨k|T|l⟩|. - Render those components as spectral lines: position = true energy gap, height/color = true coherence amplitude.
This is the actual linear-response decomposition of an observable's dynamics — not a stylized approximation of one. The one deliberate simplification: T defaults to a uniform all-pairs coupling (every eigenstate pair is treated as equally "dipole-allowed") rather than something derived from the physical transition operator of a real atom. That's a real limitation if you're trying to reproduce an actual physical spectrum, and it's stated here rather than buried — pass your own T if you have one that means something.
The package also supports continuous-time quantum walks (CTQW) directly: build H as the adjacency matrix of Cay(G, S) for a finite group G and generating set S, and the same machinery gives you the walk's mixing/return-probability dynamics on one panel and its emission spectrum on the other. Girth and spectral gap are computed exactly (BFS-based cycle detection, not estimated).
Install
pip install qiskit-eigenlight
or from source:
git clone https://github.com/RexRowan/qiskit-eigenlight
cd qiskit-eigenlight
pip install -e .
Quick start
from qiskit_eigenlight import build_cayley_adjacency, spectral_lines, ctqw_populations
from qiskit_eigenlight import plot_emission_spectrum, plot_ctqw_populations
# Cay(Z_12, {1, 5}) -- a circulant graph
A = build_cayley_adjacency(n=12, generators={1, 5})
lines = spectral_lines(A, start_vertex=0)
fig = plot_emission_spectrum(lines)
fig.savefig("emission_spectrum.png", dpi=150)
times, pops = ctqw_populations(A, start_vertex=0)
fig2 = plot_ctqw_populations(times, pops)
Current scope
- Adjacency construction: cyclic groups
Z_nonly, viabuild_cayley_adjacency. Products of cyclic groups (Z_n1 x Z_n2 x ...) are not yet supported — that's the natural next step for tying this to non-F_2^nabelian group work, and is tracked as an open item rather than silently assumed to work. - No dissipation. Everything here is unitary evolution; spectral lines are infinitely sharp. If you want linewidth broadening from a real decoherence model, that's a layer to add on top, not something this package currently does.
- Girth is graph girth, not the "non-backtracking zero-sumfree" variant under investigation elsewhere — it's a useful number to watch change as you vary
S, but the package doesn't (yet) compute anything about non-backtracking walks specifically. Don't over-read the girth readout as answering a distance-bound question it isn't wired to answer.
Relationship to other packages in this portfolio
This package is intentionally standalone for now — no dependency on qiskit-stateviz, qiskit-graph-walks, or anything else. An integration layer that lets qiskit-stateviz call into this package's rendering directly lives in qiskit_eigenlight.integrations.stateviz, documented separately, and is opt-in: importing qiskit_eigenlight on its own pulls in only numpy and matplotlib.
If you're looking for the CTQW mixing-signature analysis this shares math with, see qiskit-graph-walks. If you're looking for the SU(2)/spinor visual work this shares an aesthetic lineage with, see Spinor-Topology.
License
Apache 2.0.
Metadata
Release files for qiskit-eigenlight 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| qiskit_eigenlight-0.1.0.tar.gz | 11.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| qiskit_eigenlight-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.2 kB
Release files / qiskit_eigenlight-0.1.0.tar.gz
| Download URL | qiskit_eigenlight-0.1.0.tar.gz |
|---|---|
| Size | 11.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0ef111749d0ccf7d466108cc12603f596f8fc2be7f98c35e8cbcc9bf9b3516b3
|
|
BLAKE2b-256 checksum How to use checksums |
bbaa10d82e8f15688f1fd42642a04c327dec81662677dfd9f01d79c0f7515ddf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.1
|
Release files / qiskit_eigenlight-0.1.0-py3-none-any.whl
| Download URL | qiskit_eigenlight-0.1.0-py3-none-any.whl |
|---|---|
| Size | 10.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fcfc50ebd0d4f4835a1f44eda7c249204795d2b49ca297c51eb04f6f51486f6f
|
|
BLAKE2b-256 checksum How to use checksums |
6a2bb7f7c66e14e15a04402505ba9e1b1d2ee2e0b0c4b06e34180856d88ff288
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.1
|