"""Utilities for computing Tait colorings from vertex colorings of the dual graph.""" from typing import Any, cast from sage.all import Graph from lib.edge_for_dual_edge import get_edge_for_dual_edge def get_tait_coloring(planar_dual: Graph, coloring: dict[Any, int]) -> dict[Any, int]: """Return a Tait (edge 3-coloring) from a vertex 4-coloring of the dual graph.""" tait_coloring: dict[Any, int] = {} for dual_edge in cast(list[Any], planar_dual.edges()): # type: ignore edge = get_edge_for_dual_edge(dual_edge) colors = {coloring[edge[0]], coloring[edge[1]]} if colors in ({0, 1}, {2, 3}): tait_coloring[dual_edge] = 0 elif colors in ({1, 2}, {0, 3}): tait_coloring[dual_edge] = 1 else: tait_coloring[dual_edge] = 2 return tait_coloring