"""Draw exact dyadic brackets for 2/3; write the PNG in the working directory.""" from fractions import Fraction from pathlib import Path import matplotlib matplotlib.use("Agg") import matplotlib.pyplot as plt from matplotlib.patches import Rectangle def main(): value = Fraction(2, 3) fig, ax = plt.subplots(figsize=(7.8, 3.3), dpi=120, facecolor="white") fig.subplots_adjust(left=0.22, right=0.97, top=0.83, bottom=0.16) labels = [] for n in range(7): scale = 2**n numerator = (value.numerator * scale) // value.denominator left = Fraction(numerator, scale) right = left + Fraction(1, scale) prefix = format(numerator, f"0{n}b") if n else "" labels.append(f"n={n} 0.{prefix}") color = plt.cm.Blues(0.40 + 0.065 * n) ax.add_patch( Rectangle( (float(left), n - 0.22), float(right - left), 0.44, facecolor=color, edgecolor="none", ) ) ax.plot(float(left), n, "o", ms=4.2, color="#16476b", zorder=4) ax.plot( float(right), n, "o", ms=4.2, markerfacecolor="white", markeredgecolor="#16476b", zorder=4, ) ax.axvline(float(value), color="#b13737", lw=1.5, ls="--", zorder=5) ax.text( float(value), -0.70, r"$x=2/3$", ha="center", va="center", fontsize=11, color="#a12b2b", ) ax.set_xlim(-0.015, 1.025) ax.set_ylim(6.65, -0.45) ax.set_yticks(range(7), labels, fontfamily="DejaVu Sans Mono", fontsize=9) ax.set_xticks([0, 0.25, 0.5, 0.75, 1], ["0", "1/4", "1/2", "3/4", "1"]) ax.set_xlabel("Value on the number line", fontsize=10) ax.tick_params(axis="y", length=0, pad=10) ax.tick_params(axis="x", labelsize=9) ax.grid(axis="x", color="#dedede", lw=0.6, zorder=0) for side in ["top", "right", "left"]: ax.spines[side].set_visible(False) ax.spines["bottom"].set_color("#999999") fig.suptitle("Each binary digit halves the remaining interval", fontsize=13, y=0.97) fig.text( 0.22, 0.885, r"After $n$ digits: $s_n\leq x