Note
Go to the end to download the full example code.
Quantum Baker’s Map#
The quantum baker’s map is the quantization of physicskit.chaos’s classical
BakersMap,
\(T(x,y)=(x/\alpha,\ \alpha y)\) for \(x<\alpha\) and
\(T(x,y)=((x-\alpha)/(1-\alpha),\ \alpha+(1-\alpha)y)\) for
\(x\ge\alpha\). It is built (following Balazs-Voros/Saraceno) as a
one-period unitary Floquet operator that applies the discrete Fourier
transform separately to the \(q < \alpha\) and \(q \ge \alpha\)
halves of the (finite, dim-dimensional) position-basis Hilbert space,
then transforms the result back to the full position representation – the
quantum-mechanical echo of the classical map’s “stretch, cut, and stack”
mechanism. It is one of the simplest exactly-solvable models of quantum
chaos: the underlying classical map is uniformly hyperbolic everywhere (see
Baker’s Map: Stretch, Cut, and Stack), with none of the mixed
regular/chaotic phase space the kicked rotor has.
import matplotlib.pyplot as plt
from physicskit.chaos.quantum import QuantumBakersMap
from physicskit.chaos.visualizers import animate_husimi_evolution, plot_husimi, plot_quantum_spectrum
qbm = QuantumBakersMap(dim=120, alpha=0.5)
The Floquet spectrum#
As for the kicked rotor, one map iteration is a unitary Floquet operator whose eigenvalues live on the unit circle.
fig, ax = plot_quantum_spectrum(qbm.eigenphases())
ax.set_title(f"Quantum baker's map (dim={qbm.dim}) Floquet eigenphases")
plt.show()

Animation: a wavepacket mixing across the unit square#
Start a minimum-uncertainty wavepacket in a corner of phase space and iterate the map: the same stretch/cut/stack mechanism that mixes the classical baker’s map (see the classical example’s stripe-thinning figure) mixes the wavepacket’s Husimi distribution, which spreads across the whole unit square within just a few iterations – there is no room for it to settle onto a regular island, because the classical map has none.
To save the animation to a file instead of (or in addition to) displaying it interactively, use e.g.:
anim.save("quantum_bakers_map_animation.gif", writer="pillow", fps=3)
A single iteration, up close#
Before mixing takes over, a single iteration already shows the map’s
signature move: the coherent state’s phase-space cell – initially a small
round blob – gets stretched along q and squeezed along p, then cut
and stacked, in exact correspondence with the classical map’s action.
fig2, axes = plt.subplots(1, 2, figsize=(12, 5.5))
q_grid, p_grid, husimi0 = qbm.husimi(states[0], resolution=100)
plot_husimi(q_grid, p_grid, husimi0, ax=axes[0], title="Before (iteration 0)")
q_grid, p_grid, husimi1 = qbm.husimi(states[1], resolution=100)
plot_husimi(q_grid, p_grid, husimi1, ax=axes[1], title="After (iteration 1)")
fig2.suptitle("Quantum baker's map: one iteration's stretch-cut-stack, in Husimi phase space")
fig2.tight_layout()
plt.show()

Total running time of the script: (0 minutes 7.473 seconds)