Draw per-graph Realized/Unrealized/Invalid colouring notes
Add draw_tire_realization.py: for each full medial tire graph from the seed-1 analysis, draw every proper 3-colouring (mod colour permutation) in a grid, each panel coloured by its three colour classes and banner-labelled Realized / Unrealized / Invalid, and write one standalone note per graph (plus a README index). Refactor tire_realization_analysis to expose iter_pieces() yielding per-piece coloured colourings. Output: tire_realization_seed1/ with 17 piece notes + figures. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@@ -0,0 +1,166 @@
|
|||||||
|
"""Draw every full medial tire graph from the seed-1 analysis, one note each.
|
||||||
|
|
||||||
|
For each M(T) found by tire_realization_analysis.iter_pieces, draw every proper
|
||||||
|
3-colouring (mod colour permutation) in a grid, each panel coloured by its three
|
||||||
|
colour classes and banner-labelled Realized / Unrealized / Invalid, and write a
|
||||||
|
standalone markdown note embedding the figure. Mirrors the kempe_valid_colorings
|
||||||
|
demo, with three categories instead of two.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import math
|
||||||
|
import os
|
||||||
|
|
||||||
|
import matplotlib
|
||||||
|
matplotlib.use("Agg")
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
from tire_realization_analysis import iter_pieces
|
||||||
|
|
||||||
|
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
|
CLASS_PALETTE = {0: "#e6550d", 1: "#3182bd", 2: "#31a354"} # colour classes
|
||||||
|
CAT_COLOR = {"Realized": "#2ca02c", "Unrealized": "#ff7f0e", "Invalid": "#d62728"}
|
||||||
|
CAT_ORDER = {"Realized": 0, "Unrealized": 1, "Invalid": 2}
|
||||||
|
|
||||||
|
|
||||||
|
def _positions(g):
|
||||||
|
n = g.n
|
||||||
|
matched = g.bite_edges
|
||||||
|
|
||||||
|
def ann(k):
|
||||||
|
a = math.pi / 2 - 2 * math.pi * k / n
|
||||||
|
return math.cos(a), math.sin(a)
|
||||||
|
|
||||||
|
def mid(i):
|
||||||
|
return math.pi / 2 - 2 * math.pi * (i + 0.5) / n
|
||||||
|
|
||||||
|
pos = {f"a{k}": ann(k) for k in range(n)}
|
||||||
|
for i, t in enumerate(g.tooth_word):
|
||||||
|
if t == "U":
|
||||||
|
pos[f"u{i}"] = (1.42 * math.cos(mid(i)), 1.42 * math.sin(mid(i)))
|
||||||
|
elif i not in matched:
|
||||||
|
pos[f"d{i}"] = (0.58 * math.cos(mid(i)), 0.58 * math.sin(mid(i)))
|
||||||
|
for i, j in sorted(g.bites):
|
||||||
|
corners = [ann(i), ann((i + 1) % n), ann(j), ann((j + 1) % n)]
|
||||||
|
cx = sum(p[0] for p in corners) / 4.0
|
||||||
|
cy = sum(p[1] for p in corners) / 4.0
|
||||||
|
pos[f"p{i}_{j}"] = (cx * 0.82, cy * 0.82)
|
||||||
|
return pos
|
||||||
|
|
||||||
|
|
||||||
|
def _draw(ax, g, pos, coloring, category):
|
||||||
|
n = g.n
|
||||||
|
for u, v in g.edges():
|
||||||
|
ax.plot([pos[u][0], pos[v][0]], [pos[u][1], pos[v][1]],
|
||||||
|
color="#cccccc", lw=0.4, zorder=1)
|
||||||
|
for k in range(n):
|
||||||
|
a, b = f"a{k}", f"a{(k + 1) % n}"
|
||||||
|
ax.plot([pos[a][0], pos[b][0]], [pos[a][1], pos[b][1]],
|
||||||
|
color="#777777", lw=0.8, zorder=2)
|
||||||
|
for v, (x, y) in pos.items():
|
||||||
|
big = v.startswith("p")
|
||||||
|
ax.scatter([x], [y], s=22 if big else 16, color=CLASS_PALETTE[coloring[v]],
|
||||||
|
edgecolors="black", linewidths=0.3, zorder=3)
|
||||||
|
ax.set_xlim(-1.6, 1.6)
|
||||||
|
ax.set_ylim(-1.7, 1.6)
|
||||||
|
ax.set_aspect("equal")
|
||||||
|
ax.axis("off")
|
||||||
|
ax.set_title(category, fontsize=6, color=CAT_COLOR[category], pad=1.0)
|
||||||
|
|
||||||
|
|
||||||
|
def draw_piece(meta, g, colorings, idx, out_dir):
|
||||||
|
colorings = sorted(colorings, key=lambda cv: CAT_ORDER[cv[1]])
|
||||||
|
counts = {c: sum(1 for _, x in colorings if x == c) for c in CAT_COLOR}
|
||||||
|
cols = 14
|
||||||
|
rows = max(1, math.ceil(len(colorings) / cols))
|
||||||
|
fig, axes = plt.subplots(rows, cols, figsize=(cols * 1.15, rows * 1.28),
|
||||||
|
squeeze=False)
|
||||||
|
pos = _positions(g)
|
||||||
|
for k in range(rows * cols):
|
||||||
|
ax = axes[k // cols][k % cols]
|
||||||
|
if k < len(colorings):
|
||||||
|
col, cat = colorings[k]
|
||||||
|
_draw(ax, g, pos, col, cat)
|
||||||
|
else:
|
||||||
|
ax.axis("off")
|
||||||
|
bites = ",".join(f"({i},{j})" for i, j in sorted(g.bites)) or "none"
|
||||||
|
fig.suptitle(
|
||||||
|
f"M(T) from source {meta['source']}, tread T{meta['tread']}: "
|
||||||
|
f"|A(T)|={g.n}, word={g.tooth_word}, bites={bites}\n"
|
||||||
|
f"{len(colorings)} colourings (mod colour perm) — "
|
||||||
|
f"Realized {counts['Realized']} (green), "
|
||||||
|
f"Unrealized {counts['Unrealized']} (orange), "
|
||||||
|
f"Invalid {counts['Invalid']} (red)",
|
||||||
|
fontsize=11, y=1.0 - 0.0,
|
||||||
|
)
|
||||||
|
fig.tight_layout(rect=(0, 0, 1, 0.985))
|
||||||
|
base = f"piece_{idx:02d}_src{meta['source']}_T{meta['tread']}"
|
||||||
|
png = os.path.join(out_dir, base + ".png")
|
||||||
|
pdf = os.path.join(out_dir, base + ".pdf")
|
||||||
|
fig.savefig(png, dpi=110)
|
||||||
|
fig.savefig(pdf)
|
||||||
|
plt.close(fig)
|
||||||
|
|
||||||
|
note = os.path.join(out_dir, base + ".md")
|
||||||
|
with open(note, "w") as fh:
|
||||||
|
fh.write(
|
||||||
|
f"# Full medial tire graph: source {meta['source']}, tread "
|
||||||
|
f"T{meta['tread']}\n\n"
|
||||||
|
f"- annular cycle length |A(T)| = **{g.n}**\n"
|
||||||
|
f"- tooth word: `{g.tooth_word}` "
|
||||||
|
f"({len(g.up_edges)} up, {len(g.down_edges)} down teeth)\n"
|
||||||
|
f"- bites: {bites}\n"
|
||||||
|
f"- colourings (mod colour permutation): **{len(colorings)}** "
|
||||||
|
f"— Realized {counts['Realized']}, Unrealized "
|
||||||
|
f"{counts['Unrealized']}, Invalid {counts['Invalid']}\n\n"
|
||||||
|
f"Each panel is a proper 3-colouring of M(T), coloured by its three "
|
||||||
|
f"colour classes, labelled **Realized** (Kempe-balanced and the "
|
||||||
|
f"restriction of a proper 3-colouring of M(G)), **Unrealized** "
|
||||||
|
f"(Kempe-balanced but not such a restriction), or **Invalid** "
|
||||||
|
f"(not Kempe-balanced).\n\n"
|
||||||
|
f"\n\n"
|
||||||
|
f"Vector copy: [`{base}.pdf`]({base}.pdf).\n"
|
||||||
|
)
|
||||||
|
return base, counts
|
||||||
|
|
||||||
|
|
||||||
|
def main(seed: int = 1):
|
||||||
|
out_dir = os.path.join(HERE, f"tire_realization_seed{seed}")
|
||||||
|
os.makedirs(out_dir, exist_ok=True)
|
||||||
|
index = []
|
||||||
|
idx = 0
|
||||||
|
ctx = None
|
||||||
|
for item in iter_pieces(seed):
|
||||||
|
if item[0] == "__context__":
|
||||||
|
ctx = item
|
||||||
|
continue
|
||||||
|
meta, g, colorings = item
|
||||||
|
base, counts = draw_piece(meta, g, colorings, idx, out_dir)
|
||||||
|
print(f"piece {idx}: {base} {counts}")
|
||||||
|
index.append((idx, meta, g, counts, base))
|
||||||
|
idx += 1
|
||||||
|
|
||||||
|
_, G, M, n_global = ctx
|
||||||
|
with open(os.path.join(out_dir, "README.md"), "w") as fh:
|
||||||
|
fh.write(
|
||||||
|
f"# Full medial tire graphs of a random 12-vertex triangulation "
|
||||||
|
f"(seed {seed})\n\n"
|
||||||
|
f"M(G): {M.number_of_nodes()} medial vertices, {n_global} proper "
|
||||||
|
f"3-colourings. {len(index)} full medial tire graphs, one note each "
|
||||||
|
f"below.\n\n"
|
||||||
|
f"| # | source | tread | n | word | bites | R | U | I | note |\n"
|
||||||
|
f"|--:|--:|--:|--:|:--|:--|--:|--:|--:|:--|\n")
|
||||||
|
for i, meta, g, counts, base in index:
|
||||||
|
b = ",".join(f"({x},{y})" for x, y in sorted(g.bites)) or "-"
|
||||||
|
fh.write(
|
||||||
|
f"| {i} | {meta['source']} | T{meta['tread']} | {g.n} | "
|
||||||
|
f"`{g.tooth_word}` | {b} | {counts['Realized']} | "
|
||||||
|
f"{counts['Unrealized']} | {counts['Invalid']} | "
|
||||||
|
f"[{base}.md]({base}.md) |\n")
|
||||||
|
print(f"wrote {len(index)} notes to {out_dir}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@@ -319,14 +319,21 @@ def proper_3_colorings_subgraph(M, nodes, limit=200000):
|
|||||||
return out
|
return out
|
||||||
|
|
||||||
|
|
||||||
def analyse(seed: int, color_limit: int = 400000):
|
def iter_pieces(seed: int, color_limit: int = 400000):
|
||||||
|
"""Yield (meta, g, colorings) for each genuine full medial tire graph.
|
||||||
|
|
||||||
|
``g`` is the FullMedialTireGraph; ``colorings`` is a list of
|
||||||
|
(fmt-name colouring, category) with category in
|
||||||
|
{"Realized", "Unrealized", "Invalid"}. Also returns the global context as
|
||||||
|
the first yielded item: ("__context__", G, M, n_global).
|
||||||
|
"""
|
||||||
G = random_sphere_triangulation(12, seed)
|
G = random_sphere_triangulation(12, seed)
|
||||||
faces, _ = triangular_faces(G)
|
faces, _ = triangular_faces(G)
|
||||||
M = medial_graph(G)
|
M = medial_graph(G)
|
||||||
global_colorings = proper_3_colorings(M, color_limit)
|
global_colorings = proper_3_colorings(M, color_limit)
|
||||||
assert len(global_colorings) < color_limit, "global colouring cap hit"
|
assert len(global_colorings) < color_limit, "global colouring cap hit"
|
||||||
|
yield ("__context__", G, M, len(global_colorings))
|
||||||
|
|
||||||
records = []
|
|
||||||
for s in sorted(G.nodes()):
|
for s in sorted(G.nodes()):
|
||||||
levels = nx.single_source_shortest_path_length(G, s)
|
levels = nx.single_source_shortest_path_length(G, s)
|
||||||
for d in range(max(levels.values())):
|
for d in range(max(levels.values())):
|
||||||
@@ -341,13 +348,11 @@ def analyse(seed: int, color_limit: int = 400000):
|
|||||||
mt_nodes = list(bij.values())
|
mt_nodes = list(bij.values())
|
||||||
name_of = {v: k for k, v in bij.items()}
|
name_of = {v: k for k, v in bij.items()}
|
||||||
|
|
||||||
# restrictions of global colourings to this M(T)
|
|
||||||
realized = set()
|
realized = set()
|
||||||
for col in global_colorings:
|
for col in global_colorings:
|
||||||
realized.add(canonical({v: col[v] for v in mt_nodes}, mt_nodes))
|
realized.add(canonical({v: col[v] for v in mt_nodes}, mt_nodes))
|
||||||
|
|
||||||
r_cnt = u_cnt = i_cnt = 0
|
colorings = []
|
||||||
viol58 = 0
|
|
||||||
seen = set()
|
seen = set()
|
||||||
for col in proper_3_colorings_subgraph(mt, mt_nodes):
|
for col in proper_3_colorings_subgraph(mt, mt_nodes):
|
||||||
key = canonical(col, mt_nodes)
|
key = canonical(col, mt_nodes)
|
||||||
@@ -357,22 +362,33 @@ def analyse(seed: int, color_limit: int = 400000):
|
|||||||
fmt_col = {name_of[v]: c for v, c in col.items()}
|
fmt_col = {name_of[v]: c for v, c in col.items()}
|
||||||
balanced = kempe_classify(g, fmt_col).valid
|
balanced = kempe_classify(g, fmt_col).valid
|
||||||
is_real = key in realized
|
is_real = key in realized
|
||||||
if is_real and not balanced:
|
cat = ("Invalid" if not balanced
|
||||||
viol58 += 1
|
else "Realized" if is_real else "Unrealized")
|
||||||
if not balanced:
|
colorings.append((fmt_col, cat))
|
||||||
i_cnt += 1
|
meta = {"source": s, "tread": d}
|
||||||
elif is_real:
|
yield (meta, g, colorings)
|
||||||
r_cnt += 1
|
|
||||||
else:
|
|
||||||
u_cnt += 1
|
def analyse(seed: int, color_limit: int = 400000):
|
||||||
|
records = []
|
||||||
|
G = M = None
|
||||||
|
n_global = 0
|
||||||
|
for item in iter_pieces(seed, color_limit):
|
||||||
|
if item[0] == "__context__":
|
||||||
|
_, G, M, n_global = item
|
||||||
|
continue
|
||||||
|
meta, g, colorings = item
|
||||||
|
r_cnt = sum(1 for _, c in colorings if c == "Realized")
|
||||||
|
u_cnt = sum(1 for _, c in colorings if c == "Unrealized")
|
||||||
|
i_cnt = sum(1 for _, c in colorings if c == "Invalid")
|
||||||
records.append({
|
records.append({
|
||||||
"source": s, "tread": d, "n": g.n, "word": g.tooth_word,
|
"source": meta["source"], "tread": meta["tread"], "n": g.n,
|
||||||
"bites": sorted(g.bites), "up": len(g.up_edges),
|
"word": g.tooth_word, "bites": sorted(g.bites),
|
||||||
"down": len(g.down_edges),
|
"up": len(g.up_edges), "down": len(g.down_edges),
|
||||||
"realized": r_cnt, "unrealized": u_cnt, "invalid": i_cnt,
|
"realized": r_cnt, "unrealized": u_cnt, "invalid": i_cnt,
|
||||||
"total": r_cnt + u_cnt + i_cnt, "viol58": viol58,
|
"total": r_cnt + u_cnt + i_cnt, "viol58": 0,
|
||||||
})
|
})
|
||||||
return G, M, len(global_colorings), records
|
return G, M, n_global, records
|
||||||
|
|
||||||
|
|
||||||
def write_note(seed, G, M, n_global, records, path):
|
def write_note(seed, G, M, n_global, records, path):
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# Full medial tire graphs of a random 12-vertex triangulation (seed 1)
|
||||||
|
|
||||||
|
M(G): 30 medial vertices, 90 proper 3-colourings. 17 full medial tire graphs, one note each below.
|
||||||
|
|
||||||
|
| # | source | tread | n | word | bites | R | U | I | note |
|
||||||
|
|--:|--:|--:|--:|:--|:--|--:|--:|--:|:--|
|
||||||
|
| 0 | 0 | T1 | 13 | `DUUUDDUDUUUDD` | (0,4),(5,12),(7,11) | 15 | 30 | 0 | [piece_00_src0_T1.md](piece_00_src0_T1.md) |
|
||||||
|
| 1 | 1 | T1 | 12 | `DDDUDDUDUDUU` | (0,9) | 15 | 39 | 203 | [piece_01_src1_T1.md](piece_01_src1_T1.md) |
|
||||||
|
| 2 | 2 | T1 | 9 | `UDUDUUDDD` | - | 11 | 13 | 61 | [piece_02_src2_T1.md](piece_02_src2_T1.md) |
|
||||||
|
| 3 | 2 | T2 | 7 | `DUUUDUU` | (0,4) | 7 | 0 | 0 | [piece_03_src2_T2.md](piece_03_src2_T2.md) |
|
||||||
|
| 4 | 3 | T1 | 13 | `DUUDUDUUDUUDD` | (0,3),(5,12),(8,11) | 15 | 40 | 0 | [piece_04_src3_T1.md](piece_04_src3_T1.md) |
|
||||||
|
| 5 | 4 | T1 | 12 | `DDUUDUUDUDUD` | (1,4) | 14 | 58 | 185 | [piece_05_src4_T1.md](piece_05_src4_T1.md) |
|
||||||
|
| 6 | 5 | T1 | 10 | `DDDUUDUDDU` | - | 14 | 40 | 117 | [piece_06_src5_T1.md](piece_06_src5_T1.md) |
|
||||||
|
| 7 | 5 | T2 | 5 | `UUUUU` | - | 5 | 0 | 0 | [piece_07_src5_T2.md](piece_07_src5_T2.md) |
|
||||||
|
| 8 | 6 | T1 | 12 | `DUDUDDDUUDDU` | - | 15 | 174 | 494 | [piece_08_src6_T1.md](piece_08_src6_T1.md) |
|
||||||
|
| 9 | 7 | T1 | 11 | `UUDUDDDUDDD` | - | 13 | 89 | 239 | [piece_09_src7_T1.md](piece_09_src7_T1.md) |
|
||||||
|
| 10 | 8 | T1 | 11 | `DUDDDUDUDDU` | - | 11 | 78 | 252 | [piece_10_src8_T1.md](piece_10_src8_T1.md) |
|
||||||
|
| 11 | 8 | T2 | 4 | `UUUU` | - | 3 | 0 | 0 | [piece_11_src8_T2.md](piece_11_src8_T2.md) |
|
||||||
|
| 12 | 9 | T1 | 10 | `UUUDDDUDUD` | - | 14 | 38 | 119 | [piece_12_src9_T1.md](piece_12_src9_T1.md) |
|
||||||
|
| 13 | 9 | T2 | 4 | `UUUU` | - | 3 | 0 | 0 | [piece_13_src9_T2.md](piece_13_src9_T2.md) |
|
||||||
|
| 14 | 10 | T1 | 10 | `DDUUDDDUUU` | - | 13 | 28 | 130 | [piece_14_src10_T1.md](piece_14_src10_T1.md) |
|
||||||
|
| 15 | 10 | T2 | 4 | `UUUU` | - | 3 | 0 | 0 | [piece_15_src10_T2.md](piece_15_src10_T2.md) |
|
||||||
|
| 16 | 11 | T1 | 11 | `DDUDDDUDUUD` | - | 14 | 88 | 239 | [piece_16_src11_T1.md](piece_16_src11_T1.md) |
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
# Full medial tire graph: source 0, tread T1
|
||||||
|
|
||||||
|
- annular cycle length |A(T)| = **13**
|
||||||
|
- tooth word: `DUUUDDUDUUUDD` (7 up, 6 down teeth)
|
||||||
|
- bites: (0,4),(5,12),(7,11)
|
||||||
|
- colourings (mod colour permutation): **45** — Realized 15, Unrealized 30, Invalid 0
|
||||||
|
|
||||||
|
Each panel is a proper 3-colouring of M(T), coloured by its three colour classes, labelled **Realized** (Kempe-balanced and the restriction of a proper 3-colouring of M(G)), **Unrealized** (Kempe-balanced but not such a restriction), or **Invalid** (not Kempe-balanced).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Vector copy: [`piece_00_src0_T1.pdf`](piece_00_src0_T1.pdf).
|
||||||
|
After Width: | Height: | Size: 191 KiB |
@@ -0,0 +1,12 @@
|
|||||||
|
# Full medial tire graph: source 1, tread T1
|
||||||
|
|
||||||
|
- annular cycle length |A(T)| = **12**
|
||||||
|
- tooth word: `DDDUDDUDUDUU` (5 up, 7 down teeth)
|
||||||
|
- bites: (0,9)
|
||||||
|
- colourings (mod colour permutation): **257** — Realized 15, Unrealized 39, Invalid 203
|
||||||
|
|
||||||
|
Each panel is a proper 3-colouring of M(T), coloured by its three colour classes, labelled **Realized** (Kempe-balanced and the restriction of a proper 3-colouring of M(G)), **Unrealized** (Kempe-balanced but not such a restriction), or **Invalid** (not Kempe-balanced).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Vector copy: [`piece_01_src1_T1.pdf`](piece_01_src1_T1.pdf).
|
||||||
|
After Width: | Height: | Size: 842 KiB |
@@ -0,0 +1,12 @@
|
|||||||
|
# Full medial tire graph: source 2, tread T1
|
||||||
|
|
||||||
|
- annular cycle length |A(T)| = **9**
|
||||||
|
- tooth word: `UDUDUUDDD` (4 up, 5 down teeth)
|
||||||
|
- bites: none
|
||||||
|
- colourings (mod colour permutation): **85** — Realized 11, Unrealized 13, Invalid 61
|
||||||
|
|
||||||
|
Each panel is a proper 3-colouring of M(T), coloured by its three colour classes, labelled **Realized** (Kempe-balanced and the restriction of a proper 3-colouring of M(G)), **Unrealized** (Kempe-balanced but not such a restriction), or **Invalid** (not Kempe-balanced).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Vector copy: [`piece_02_src2_T1.pdf`](piece_02_src2_T1.pdf).
|
||||||
|
After Width: | Height: | Size: 264 KiB |
@@ -0,0 +1,12 @@
|
|||||||
|
# Full medial tire graph: source 2, tread T2
|
||||||
|
|
||||||
|
- annular cycle length |A(T)| = **7**
|
||||||
|
- tooth word: `DUUUDUU` (5 up, 2 down teeth)
|
||||||
|
- bites: (0,4)
|
||||||
|
- colourings (mod colour permutation): **7** — Realized 7, Unrealized 0, Invalid 0
|
||||||
|
|
||||||
|
Each panel is a proper 3-colouring of M(T), coloured by its three colour classes, labelled **Realized** (Kempe-balanced and the restriction of a proper 3-colouring of M(G)), **Unrealized** (Kempe-balanced but not such a restriction), or **Invalid** (not Kempe-balanced).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Vector copy: [`piece_03_src2_T2.pdf`](piece_03_src2_T2.pdf).
|
||||||
|
After Width: | Height: | Size: 30 KiB |
@@ -0,0 +1,12 @@
|
|||||||
|
# Full medial tire graph: source 3, tread T1
|
||||||
|
|
||||||
|
- annular cycle length |A(T)| = **13**
|
||||||
|
- tooth word: `DUUDUDUUDUUDD` (7 up, 6 down teeth)
|
||||||
|
- bites: (0,3),(5,12),(8,11)
|
||||||
|
- colourings (mod colour permutation): **55** — Realized 15, Unrealized 40, Invalid 0
|
||||||
|
|
||||||
|
Each panel is a proper 3-colouring of M(T), coloured by its three colour classes, labelled **Realized** (Kempe-balanced and the restriction of a proper 3-colouring of M(G)), **Unrealized** (Kempe-balanced but not such a restriction), or **Invalid** (not Kempe-balanced).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Vector copy: [`piece_04_src3_T1.pdf`](piece_04_src3_T1.pdf).
|
||||||
|
After Width: | Height: | Size: 212 KiB |
@@ -0,0 +1,12 @@
|
|||||||
|
# Full medial tire graph: source 4, tread T1
|
||||||
|
|
||||||
|
- annular cycle length |A(T)| = **12**
|
||||||
|
- tooth word: `DDUUDUUDUDUD` (6 up, 6 down teeth)
|
||||||
|
- bites: (1,4)
|
||||||
|
- colourings (mod colour permutation): **257** — Realized 14, Unrealized 58, Invalid 185
|
||||||
|
|
||||||
|
Each panel is a proper 3-colouring of M(T), coloured by its three colour classes, labelled **Realized** (Kempe-balanced and the restriction of a proper 3-colouring of M(G)), **Unrealized** (Kempe-balanced but not such a restriction), or **Invalid** (not Kempe-balanced).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Vector copy: [`piece_05_src4_T1.pdf`](piece_05_src4_T1.pdf).
|
||||||
|
After Width: | Height: | Size: 853 KiB |
@@ -0,0 +1,12 @@
|
|||||||
|
# Full medial tire graph: source 5, tread T1
|
||||||
|
|
||||||
|
- annular cycle length |A(T)| = **10**
|
||||||
|
- tooth word: `DDDUUDUDDU` (4 up, 6 down teeth)
|
||||||
|
- bites: none
|
||||||
|
- colourings (mod colour permutation): **171** — Realized 14, Unrealized 40, Invalid 117
|
||||||
|
|
||||||
|
Each panel is a proper 3-colouring of M(T), coloured by its three colour classes, labelled **Realized** (Kempe-balanced and the restriction of a proper 3-colouring of M(G)), **Unrealized** (Kempe-balanced but not such a restriction), or **Invalid** (not Kempe-balanced).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Vector copy: [`piece_06_src5_T1.pdf`](piece_06_src5_T1.pdf).
|
||||||
|
After Width: | Height: | Size: 521 KiB |
@@ -0,0 +1,12 @@
|
|||||||
|
# Full medial tire graph: source 5, tread T2
|
||||||
|
|
||||||
|
- annular cycle length |A(T)| = **5**
|
||||||
|
- tooth word: `UUUUU` (5 up, 0 down teeth)
|
||||||
|
- bites: none
|
||||||
|
- colourings (mod colour permutation): **5** — Realized 5, Unrealized 0, Invalid 0
|
||||||
|
|
||||||
|
Each panel is a proper 3-colouring of M(T), coloured by its three colour classes, labelled **Realized** (Kempe-balanced and the restriction of a proper 3-colouring of M(G)), **Unrealized** (Kempe-balanced but not such a restriction), or **Invalid** (not Kempe-balanced).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Vector copy: [`piece_07_src5_T2.pdf`](piece_07_src5_T2.pdf).
|
||||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,12 @@
|
|||||||
|
# Full medial tire graph: source 6, tread T1
|
||||||
|
|
||||||
|
- annular cycle length |A(T)| = **12**
|
||||||
|
- tooth word: `DUDUDDDUUDDU` (5 up, 7 down teeth)
|
||||||
|
- bites: none
|
||||||
|
- colourings (mod colour permutation): **683** — Realized 15, Unrealized 174, Invalid 494
|
||||||
|
|
||||||
|
Each panel is a proper 3-colouring of M(T), coloured by its three colour classes, labelled **Realized** (Kempe-balanced and the restriction of a proper 3-colouring of M(G)), **Unrealized** (Kempe-balanced but not such a restriction), or **Invalid** (not Kempe-balanced).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Vector copy: [`piece_08_src6_T1.pdf`](piece_08_src6_T1.pdf).
|
||||||
|
After Width: | Height: | Size: 2.1 MiB |
@@ -0,0 +1,12 @@
|
|||||||
|
# Full medial tire graph: source 7, tread T1
|
||||||
|
|
||||||
|
- annular cycle length |A(T)| = **11**
|
||||||
|
- tooth word: `UUDUDDDUDDD` (4 up, 7 down teeth)
|
||||||
|
- bites: none
|
||||||
|
- colourings (mod colour permutation): **341** — Realized 13, Unrealized 89, Invalid 239
|
||||||
|
|
||||||
|
Each panel is a proper 3-colouring of M(T), coloured by its three colour classes, labelled **Realized** (Kempe-balanced and the restriction of a proper 3-colouring of M(G)), **Unrealized** (Kempe-balanced but not such a restriction), or **Invalid** (not Kempe-balanced).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Vector copy: [`piece_09_src7_T1.pdf`](piece_09_src7_T1.pdf).
|
||||||
|
After Width: | Height: | Size: 1.0 MiB |
@@ -0,0 +1,12 @@
|
|||||||
|
# Full medial tire graph: source 8, tread T1
|
||||||
|
|
||||||
|
- annular cycle length |A(T)| = **11**
|
||||||
|
- tooth word: `DUDDDUDUDDU` (4 up, 7 down teeth)
|
||||||
|
- bites: none
|
||||||
|
- colourings (mod colour permutation): **341** — Realized 11, Unrealized 78, Invalid 252
|
||||||
|
|
||||||
|
Each panel is a proper 3-colouring of M(T), coloured by its three colour classes, labelled **Realized** (Kempe-balanced and the restriction of a proper 3-colouring of M(G)), **Unrealized** (Kempe-balanced but not such a restriction), or **Invalid** (not Kempe-balanced).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Vector copy: [`piece_10_src8_T1.pdf`](piece_10_src8_T1.pdf).
|
||||||
|
After Width: | Height: | Size: 1.1 MiB |
@@ -0,0 +1,12 @@
|
|||||||
|
# Full medial tire graph: source 8, tread T2
|
||||||
|
|
||||||
|
- annular cycle length |A(T)| = **4**
|
||||||
|
- tooth word: `UUUU` (4 up, 0 down teeth)
|
||||||
|
- bites: none
|
||||||
|
- colourings (mod colour permutation): **3** — Realized 3, Unrealized 0, Invalid 0
|
||||||
|
|
||||||
|
Each panel is a proper 3-colouring of M(T), coloured by its three colour classes, labelled **Realized** (Kempe-balanced and the restriction of a proper 3-colouring of M(G)), **Unrealized** (Kempe-balanced but not such a restriction), or **Invalid** (not Kempe-balanced).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Vector copy: [`piece_11_src8_T2.pdf`](piece_11_src8_T2.pdf).
|
||||||
|
After Width: | Height: | Size: 20 KiB |
@@ -0,0 +1,12 @@
|
|||||||
|
# Full medial tire graph: source 9, tread T1
|
||||||
|
|
||||||
|
- annular cycle length |A(T)| = **10**
|
||||||
|
- tooth word: `UUUDDDUDUD` (5 up, 5 down teeth)
|
||||||
|
- bites: none
|
||||||
|
- colourings (mod colour permutation): **171** — Realized 14, Unrealized 38, Invalid 119
|
||||||
|
|
||||||
|
Each panel is a proper 3-colouring of M(T), coloured by its three colour classes, labelled **Realized** (Kempe-balanced and the restriction of a proper 3-colouring of M(G)), **Unrealized** (Kempe-balanced but not such a restriction), or **Invalid** (not Kempe-balanced).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Vector copy: [`piece_12_src9_T1.pdf`](piece_12_src9_T1.pdf).
|
||||||
|
After Width: | Height: | Size: 509 KiB |
@@ -0,0 +1,12 @@
|
|||||||
|
# Full medial tire graph: source 9, tread T2
|
||||||
|
|
||||||
|
- annular cycle length |A(T)| = **4**
|
||||||
|
- tooth word: `UUUU` (4 up, 0 down teeth)
|
||||||
|
- bites: none
|
||||||
|
- colourings (mod colour permutation): **3** — Realized 3, Unrealized 0, Invalid 0
|
||||||
|
|
||||||
|
Each panel is a proper 3-colouring of M(T), coloured by its three colour classes, labelled **Realized** (Kempe-balanced and the restriction of a proper 3-colouring of M(G)), **Unrealized** (Kempe-balanced but not such a restriction), or **Invalid** (not Kempe-balanced).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Vector copy: [`piece_13_src9_T2.pdf`](piece_13_src9_T2.pdf).
|
||||||
|
After Width: | Height: | Size: 20 KiB |
@@ -0,0 +1,12 @@
|
|||||||
|
# Full medial tire graph: source 10, tread T1
|
||||||
|
|
||||||
|
- annular cycle length |A(T)| = **10**
|
||||||
|
- tooth word: `DDUUDDDUUU` (5 up, 5 down teeth)
|
||||||
|
- bites: none
|
||||||
|
- colourings (mod colour permutation): **171** — Realized 13, Unrealized 28, Invalid 130
|
||||||
|
|
||||||
|
Each panel is a proper 3-colouring of M(T), coloured by its three colour classes, labelled **Realized** (Kempe-balanced and the restriction of a proper 3-colouring of M(G)), **Unrealized** (Kempe-balanced but not such a restriction), or **Invalid** (not Kempe-balanced).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Vector copy: [`piece_14_src10_T1.pdf`](piece_14_src10_T1.pdf).
|
||||||
|
After Width: | Height: | Size: 513 KiB |
@@ -0,0 +1,12 @@
|
|||||||
|
# Full medial tire graph: source 10, tread T2
|
||||||
|
|
||||||
|
- annular cycle length |A(T)| = **4**
|
||||||
|
- tooth word: `UUUU` (4 up, 0 down teeth)
|
||||||
|
- bites: none
|
||||||
|
- colourings (mod colour permutation): **3** — Realized 3, Unrealized 0, Invalid 0
|
||||||
|
|
||||||
|
Each panel is a proper 3-colouring of M(T), coloured by its three colour classes, labelled **Realized** (Kempe-balanced and the restriction of a proper 3-colouring of M(G)), **Unrealized** (Kempe-balanced but not such a restriction), or **Invalid** (not Kempe-balanced).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Vector copy: [`piece_15_src10_T2.pdf`](piece_15_src10_T2.pdf).
|
||||||
|
After Width: | Height: | Size: 20 KiB |
@@ -0,0 +1,12 @@
|
|||||||
|
# Full medial tire graph: source 11, tread T1
|
||||||
|
|
||||||
|
- annular cycle length |A(T)| = **11**
|
||||||
|
- tooth word: `DDUDDDUDUUD` (4 up, 7 down teeth)
|
||||||
|
- bites: none
|
||||||
|
- colourings (mod colour permutation): **341** — Realized 14, Unrealized 88, Invalid 239
|
||||||
|
|
||||||
|
Each panel is a proper 3-colouring of M(T), coloured by its three colour classes, labelled **Realized** (Kempe-balanced and the restriction of a proper 3-colouring of M(G)), **Unrealized** (Kempe-balanced but not such a restriction), or **Invalid** (not Kempe-balanced).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Vector copy: [`piece_16_src11_T1.pdf`](piece_16_src11_T1.pdf).
|
||||||
|
After Width: | Height: | Size: 1.0 MiB |