Rename Step/Op to ReduceOperation and steps/step to op_sequence/op
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -217,17 +217,17 @@ def squish(g: Graph, coloring: VertexColoring, v0: Any) -> tuple[Graph, VertexCo
|
|||||||
return g_prime, coloring_prime, v1, v2
|
return g_prime, coloring_prime, v1, v2
|
||||||
|
|
||||||
|
|
||||||
Step = SquishOperation | PluckOperation
|
ReduceOperation = SquishOperation | PluckOperation
|
||||||
|
|
||||||
def reduce(
|
def reduce(
|
||||||
g: Graph,
|
g: Graph,
|
||||||
coloring: VertexColoring,
|
coloring: VertexColoring,
|
||||||
before_cid: ColoredGraphId,
|
before_cid: ColoredGraphId,
|
||||||
steps: list[Step] | None = None,
|
op_sequence: list[ReduceOperation] | None = None,
|
||||||
) -> list[Step]:
|
) -> list[ReduceOperation]:
|
||||||
"""Repeatedly apply pluck/squish reductions until no candidates remain."""
|
"""Repeatedly apply pluck/squish reductions until no candidates remain."""
|
||||||
if steps is None:
|
if op_sequence is None:
|
||||||
steps = []
|
op_sequence = []
|
||||||
|
|
||||||
print(f"Coloring: {coloring}")
|
print(f"Coloring: {coloring}")
|
||||||
|
|
||||||
@@ -239,8 +239,8 @@ def reduce(
|
|||||||
g_prime, coloring_prime = pluck(g, coloring, v)
|
g_prime, coloring_prime = pluck(g, coloring, v)
|
||||||
print(f"\nG' (after pluck v0={v}): {g_prime.order()} vertices, {g_prime.size()} edges")
|
print(f"\nG' (after pluck v0={v}): {g_prime.order()} vertices, {g_prime.size()} edges")
|
||||||
_, _, after_cid = save_colored_graph(g_prime, coloring_prime)
|
_, _, after_cid = save_colored_graph(g_prime, coloring_prime)
|
||||||
steps.append(PluckOperation(name='pluck', meta=PluckMeta(v0=v), g=g, g_prime=g_prime, coloring_prime=coloring_prime, before=before_cid, after=after_cid))
|
op_sequence.append(PluckOperation(name='pluck', meta=PluckMeta(v0=v), g=g, g_prime=g_prime, coloring_prime=coloring_prime, before=before_cid, after=after_cid))
|
||||||
return reduce(g_prime, coloring_prime, after_cid, steps)
|
return reduce(g_prime, coloring_prime, after_cid, op_sequence)
|
||||||
if g.degree(v) == 4 and _neighbors_form_cycle(g, v):
|
if g.degree(v) == 4 and _neighbors_form_cycle(g, v):
|
||||||
degree_4_candidates.append(v)
|
degree_4_candidates.append(v)
|
||||||
elif g.degree(v) == 5 and _neighbors_form_cycle(g, v):
|
elif g.degree(v) == 5 and _neighbors_form_cycle(g, v):
|
||||||
@@ -252,8 +252,8 @@ def reduce(
|
|||||||
print(f"Shared-color neighbors: v1={v1}, v2={v2} (color {coloring[v1]})")
|
print(f"Shared-color neighbors: v1={v1}, v2={v2} (color {coloring[v1]})")
|
||||||
print(f"\nG' (after squish v0={v0}): {g_prime.order()} vertices, {g_prime.size()} edges")
|
print(f"\nG' (after squish v0={v0}): {g_prime.order()} vertices, {g_prime.size()} edges")
|
||||||
_, _, after_cid = save_colored_graph(g_prime, coloring_prime)
|
_, _, after_cid = save_colored_graph(g_prime, coloring_prime)
|
||||||
steps.append(SquishOperation(name='squish', meta=SquishMeta(v0=v0, v_merged=[v1, v2]), g=g, g_prime=g_prime, coloring_prime=coloring_prime, before=before_cid, after=after_cid))
|
op_sequence.append(SquishOperation(name='squish', meta=SquishMeta(v0=v0, v_merged=[v1, v2]), g=g, g_prime=g_prime, coloring_prime=coloring_prime, before=before_cid, after=after_cid))
|
||||||
return reduce(g_prime, coloring_prime, after_cid, steps)
|
return reduce(g_prime, coloring_prime, after_cid, op_sequence)
|
||||||
|
|
||||||
if degree_5_candidates:
|
if degree_5_candidates:
|
||||||
v0 = degree_5_candidates[0]
|
v0 = degree_5_candidates[0]
|
||||||
@@ -261,11 +261,11 @@ def reduce(
|
|||||||
print(f"Shared-color neighbors: v1={v1}, v2={v2} (color {coloring[v1]})")
|
print(f"Shared-color neighbors: v1={v1}, v2={v2} (color {coloring[v1]})")
|
||||||
print(f"\nG' (after squish v0={v0}): {g_prime.order()} vertices, {g_prime.size()} edges")
|
print(f"\nG' (after squish v0={v0}): {g_prime.order()} vertices, {g_prime.size()} edges")
|
||||||
_, _, after_cid = save_colored_graph(g_prime, coloring_prime)
|
_, _, after_cid = save_colored_graph(g_prime, coloring_prime)
|
||||||
steps.append(SquishOperation(name='squish', meta=SquishMeta(v0=v0, v_merged=[v1, v2]), g=g, g_prime=g_prime, coloring_prime=coloring_prime, before=before_cid, after=after_cid))
|
op_sequence.append(SquishOperation(name='squish', meta=SquishMeta(v0=v0, v_merged=[v1, v2]), g=g, g_prime=g_prime, coloring_prime=coloring_prime, before=before_cid, after=after_cid))
|
||||||
return reduce(g_prime, coloring_prime, after_cid, steps)
|
return reduce(g_prime, coloring_prime, after_cid, op_sequence)
|
||||||
|
|
||||||
print("DONE")
|
print("DONE")
|
||||||
return steps
|
return op_sequence
|
||||||
|
|
||||||
|
|
||||||
G = next(graphs.planar_graphs(20, minimum_degree=5))
|
G = next(graphs.planar_graphs(20, minimum_degree=5))
|
||||||
@@ -296,20 +296,20 @@ def plot_to_data_uri(g: Graph, coloring: VertexColoring) -> str:
|
|||||||
png_bytes = Path(f.name).read_bytes()
|
png_bytes = Path(f.name).read_bytes()
|
||||||
return f"data:image/png;base64,{base64.b64encode(png_bytes).decode()}"
|
return f"data:image/png;base64,{base64.b64encode(png_bytes).decode()}"
|
||||||
|
|
||||||
def save_operation_sequence(steps: list[Step], g: Graph, coloring: VertexColoring) -> str:
|
def save_operation_sequence(op_sequence: list[ReduceOperation], g: Graph, coloring: VertexColoring) -> str:
|
||||||
"""Save steps as JSON and Markdown under data/operations/<seq_id>. Returns the sequence id."""
|
"""Save op_sequence as JSON and Markdown under data/operations/<seq_id>. Returns the sequence id."""
|
||||||
op_seq_id = operation_sequence_id(steps)
|
op_seq_id = operation_sequence_id(op_sequence)
|
||||||
op_dir = DIR / "data" / "operations" / op_seq_id
|
op_dir = DIR / "data" / "operations" / op_seq_id
|
||||||
op_dir.mkdir(parents=True, exist_ok=True)
|
op_dir.mkdir(parents=True, exist_ok=True)
|
||||||
(op_dir / "colored_pentagon_contractions.json").write_text(json.dumps(strip_graphs(steps), indent=2))
|
(op_dir / "colored_pentagon_contractions.json").write_text(json.dumps(strip_graphs(op_sequence), indent=2))
|
||||||
md_lines = [f"## start\n\n})"]
|
md_lines = [f"## start\n\n})"]
|
||||||
for step in steps:
|
for op in op_sequence:
|
||||||
meta_json = json.dumps(step['meta'])
|
meta_json = json.dumps(op['meta'])
|
||||||
md_lines.append(f"## {step['name']} {meta_json}\n\n})")
|
md_lines.append(f"## {op['name']} {meta_json}\n\n})")
|
||||||
(op_dir / "colored_pentagon_contractions.md").write_text("\n".join(md_lines) + "\n")
|
(op_dir / "colored_pentagon_contractions.md").write_text("\n".join(md_lines) + "\n")
|
||||||
return op_seq_id
|
return op_seq_id
|
||||||
|
|
||||||
steps = reduce(G, starting_coloring, initial_cid)
|
op_sequence = reduce(G, starting_coloring, initial_cid)
|
||||||
print("\nSteps:")
|
print("\nOp sequence:")
|
||||||
print(json.dumps(strip_graphs(steps), indent=2))
|
print(json.dumps(strip_graphs(op_sequence), indent=2))
|
||||||
save_operation_sequence(steps, G, starting_coloring)
|
save_operation_sequence(op_sequence, G, starting_coloring)
|
||||||
|
|||||||
Reference in New Issue
Block a user