"""Original missing-observation counterexample. Python 3.14; NumPy/Matplotlib.""" from pathlib import Path import numpy as np import matplotlib matplotlib.use("Agg") import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap from matplotlib.patches import Rectangle connected = np.zeros((3, 5), dtype=np.uint8) connected[:, 2] = 1 separated = connected.copy() separated[1, 2] = 0 observed = [0, 2] assert np.array_equal(connected[observed], separated[observed]) assert not np.array_equal(connected, separated) fig, axes = plt.subplots(1, 2, figsize=(7.8, 3.4), layout="constrained", facecolor="white") for ax, values, title in zip(axes, [connected, separated], ["A: one connected column", "B: two separated parts"]): ax.imshow(values, origin="lower", cmap=ListedColormap(["white", "#246785"]), vmin=0, vmax=1, interpolation="nearest") ax.add_patch(Rectangle((-.5, .5), 5, 1, facecolor="#b3a16c", alpha=.18)) ax.add_patch(Rectangle((-.5, .5), 5, 1, fill=False, edgecolor="#867643", linestyle="--", lw=1.7)) ax.set_yticks([0, 1, 2], ["Recorded", "Missing", "Recorded"]) ax.set_xticks([]) ax.set_xticks(np.arange(-.5, 5, 1), minor=True) ax.set_yticks(np.arange(-.5, 3, 1), minor=True) ax.grid(which="minor", color="#b0b0b0", linewidth=.6) ax.tick_params(which="both", length=0) ax.set_title(title, fontsize=11) ax.set_xlabel("Same first and last recorded rows", fontsize=10) fig.suptitle("Two possible specimens; identical retained observations", fontsize=12) fig.savefig(Path("missing-section-ambiguity.png"), dpi=140, facecolor="white")