Extract save_operation_sequence function from main script body

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-21 12:13:19 -04:00
parent 737db34109
commit 357cd74bed
+17 -14
View File
@@ -276,7 +276,6 @@ starting_coloring = {v: i for i, cls in enumerate(starting_coloring_classes) for
_, _, initial_cid = save_colored_graph(G, starting_coloring)
G.is_planar(set_embedding=True, set_pos=True)
steps = reduce(G, starting_coloring, initial_cid)
def strip_graphs(obj: Any) -> Any:
if isinstance(obj, dict):
return {k: strip_graphs(v) for k, v in obj.items() if not isinstance(v, Graph)}
@@ -284,14 +283,6 @@ def strip_graphs(obj: Any) -> Any:
return [strip_graphs(v) for v in obj]
return obj
print("\nSteps:")
print(json.dumps(strip_graphs(steps), indent=2))
op_seq_id = operation_sequence_id(steps)
op_dir = DIR / "data" / "operations" / op_seq_id
op_dir.mkdir(parents=True, exist_ok=True)
(op_dir / "colored_pentagon_contractions.json").write_text(json.dumps(strip_graphs(steps), indent=2))
def plot_to_data_uri(g: Graph, coloring: VertexColoring) -> str:
import tempfile
vertex_colors: defaultdict[str, list[Any]] = defaultdict(list)
@@ -305,8 +296,20 @@ def plot_to_data_uri(g: Graph, coloring: VertexColoring) -> str:
png_bytes = Path(f.name).read_bytes()
return f"data:image/png;base64,{base64.b64encode(png_bytes).decode()}"
md_lines = [f"## start\n\n![start]({plot_to_data_uri(G, starting_coloring)})"]
for step in steps:
meta_json = json.dumps(step['meta'])
md_lines.append(f"## {step['name']} {meta_json}\n\n![b]({plot_to_data_uri(step['g_prime'], step['coloring_prime'])})")
(op_dir / "colored_pentagon_contractions.md").write_text("\n".join(md_lines) + "\n")
def save_operation_sequence(steps: list[Step], g: Graph, coloring: VertexColoring) -> str:
"""Save steps as JSON and Markdown under data/operations/<seq_id>. Returns the sequence id."""
op_seq_id = operation_sequence_id(steps)
op_dir = DIR / "data" / "operations" / op_seq_id
op_dir.mkdir(parents=True, exist_ok=True)
(op_dir / "colored_pentagon_contractions.json").write_text(json.dumps(strip_graphs(steps), indent=2))
md_lines = [f"## start\n\n![start]({plot_to_data_uri(g, coloring)})"]
for step in steps:
meta_json = json.dumps(step['meta'])
md_lines.append(f"## {step['name']} {meta_json}\n\n![b]({plot_to_data_uri(step['g_prime'], step['coloring_prime'])})")
(op_dir / "colored_pentagon_contractions.md").write_text("\n".join(md_lines) + "\n")
return op_seq_id
steps = reduce(G, starting_coloring, initial_cid)
print("\nSteps:")
print(json.dumps(strip_graphs(steps), indent=2))
save_operation_sequence(steps, G, starting_coloring)