Files
math-research/lib/dual_graph.py
T
2026-04-15 20:23:44 -04:00

30 lines
1.1 KiB
Python

"""Utilities for working with planar dual graphs."""
from typing import Any
from sage.all import Graph
def find_vertex_for_dual_face(dual_face: Any) -> Any | None:
"""Return the primal vertex shared by all faces in the dual face, or None."""
shared_vertices = None
for dual_edge in dual_face:
vertices = set(map(lambda e: e[0], dual_edge[0]))
if shared_vertices:
shared_vertices.intersection_update(vertices)
else:
shared_vertices = vertices
if len(shared_vertices) == 1:
return shared_vertices.pop()
return None
def _dual_edge_has_vertex(dual_edge: Any, vertex: Any) -> bool:
return any(vertex in edge for dual_vertex in dual_edge for edge in dual_vertex)
def find_dual_face_for_removed_vertex(planar_dual: Graph, vertex: Any) -> Any | None:
"""Return the dual face of length 5 whose every dual edge contains the given vertex."""
for dual_face in list[Any](planar_dual.faces()): # type: ignore[call-arg]
if len(dual_face) == 5 and all(_dual_edge_has_vertex(de, vertex) for de in dual_face):
return dual_face
return None