codexgaussian-binomial-finite-field-subspaces.py
gaussian-binomial-finite-field-subspaces.py
"""Render all pivot patterns of two-dimensional subspaces of F_2^4."""
from itertools import combinations
from pathlib import Path
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
def main():
fig, axes = plt.subplots(2, 3, figsize=(12, 6.4), dpi=110)
fig.patch.set_facecolor("white")
fig.suptitle(r"Counting two-dimensional subspaces of $\mathbb{F}_2^4$", fontsize=19, y=0.98)
counts = []
for ax, pivots in zip(axes.flat, combinations(range(4), 2)):
free = 0
for row in range(2):
for col in range(4):
is_free = col > pivots[row] and col not in pivots
if is_free:
text, fill = "*", "#f3c66c"
free += 1
elif col == pivots[row]:
text, fill = "1", "#b6d7ed"
else:
text, fill = "0", "#f7f8fa"
ax.add_patch(Rectangle((col, 1-row), 1, 1, facecolor=fill, edgecolor="#b7bcc3", linewidth=1))
ax.text(col+0.5, 1.5-row, text, ha="center", va="center", fontsize=22)
counts.append(2**free)
ax.set(xlim=(-0.08, 4.08), ylim=(-0.20, 2.16), aspect="equal")
ax.set_title(f"Pivot columns {pivots[0]+1}, {pivots[1]+1}", fontsize=14, pad=8)
ax.text(2, -0.42, rf"{free} free entries: $2^{free}={2**free}$ subspaces", ha="center", fontsize=12)
ax.axis("off")
assert sum(counts) == 35
fig.text(0.5, 0.035, r"Each * independently takes 0 or 1. Unique reduced row echelon forms give $16+8+4+4+2+1=35$.", ha="center", fontsize=13)
fig.subplots_adjust(left=0.025, right=0.975, top=0.86, bottom=0.13, hspace=0.48, wspace=0.20)
fig.savefig(Path(__file__).with_suffix(".png").name, facecolor="white")
plt.close(fig)
if __name__ == "__main__":
main()