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
|
||||
|
||||
|
||||
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)
|
||||
faces, _ = triangular_faces(G)
|
||||
M = medial_graph(G)
|
||||
global_colorings = proper_3_colorings(M, color_limit)
|
||||
assert len(global_colorings) < color_limit, "global colouring cap hit"
|
||||
yield ("__context__", G, M, len(global_colorings))
|
||||
|
||||
records = []
|
||||
for s in sorted(G.nodes()):
|
||||
levels = nx.single_source_shortest_path_length(G, s)
|
||||
for d in range(max(levels.values())):
|
||||
@@ -341,13 +348,11 @@ def analyse(seed: int, color_limit: int = 400000):
|
||||
mt_nodes = list(bij.values())
|
||||
name_of = {v: k for k, v in bij.items()}
|
||||
|
||||
# restrictions of global colourings to this M(T)
|
||||
realized = set()
|
||||
for col in global_colorings:
|
||||
realized.add(canonical({v: col[v] for v in mt_nodes}, mt_nodes))
|
||||
|
||||
r_cnt = u_cnt = i_cnt = 0
|
||||
viol58 = 0
|
||||
colorings = []
|
||||
seen = set()
|
||||
for col in proper_3_colorings_subgraph(mt, 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()}
|
||||
balanced = kempe_classify(g, fmt_col).valid
|
||||
is_real = key in realized
|
||||
if is_real and not balanced:
|
||||
viol58 += 1
|
||||
if not balanced:
|
||||
i_cnt += 1
|
||||
elif is_real:
|
||||
r_cnt += 1
|
||||
else:
|
||||
u_cnt += 1
|
||||
records.append({
|
||||
"source": s, "tread": d, "n": g.n, "word": g.tooth_word,
|
||||
"bites": sorted(g.bites), "up": len(g.up_edges),
|
||||
"down": len(g.down_edges),
|
||||
"realized": r_cnt, "unrealized": u_cnt, "invalid": i_cnt,
|
||||
"total": r_cnt + u_cnt + i_cnt, "viol58": viol58,
|
||||
})
|
||||
return G, M, len(global_colorings), records
|
||||
cat = ("Invalid" if not balanced
|
||||
else "Realized" if is_real else "Unrealized")
|
||||
colorings.append((fmt_col, cat))
|
||||
meta = {"source": s, "tread": d}
|
||||
yield (meta, g, colorings)
|
||||
|
||||
|
||||
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({
|
||||
"source": meta["source"], "tread": meta["tread"], "n": g.n,
|
||||
"word": g.tooth_word, "bites": sorted(g.bites),
|
||||
"up": len(g.up_edges), "down": len(g.down_edges),
|
||||
"realized": r_cnt, "unrealized": u_cnt, "invalid": i_cnt,
|
||||
"total": r_cnt + u_cnt + i_cnt, "viol58": 0,
|
||||
})
|
||||
return G, M, n_global, records
|
||||
|
||||
|
||||
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 |