def METHOD_NAME(grapher, file_name, output_dir, run_name):
    local_output_dir = os.path.abspath(os.path.join(output_dir, run_name, file_name))
    print(f">> {run_name}")
    if not RENDER:
        return
    os.makedirs(local_output_dir, exist_ok=True)
    for i, graph in enumerate(grapher._graphs):
        dot_name = os.path.join(local_output_dir, f"{i}.dot")
        hash_dotfile_before = None
        if os.path.exists(dot_name):
            with open(dot_name, "r") as f:
                hash_dotfile_before = hashlib.md5(f.read().encode("utf-8")).hexdigest()
        with open(dot_name, "w") as f:
            graph.write_dot(f)
        with open(dot_name, "r") as f:
            hash_dotfile_same = (
                hashlib.md5(f.read().encode("utf-8")).hexdigest() == hash_dotfile_before
            )
        unconnected_vertices = []
        if not hash_dotfile_same:
            print("Writing svg for " + dot_name)
            try:
                os.remove(os.path.join(local_output_dir, f"{i}.dot.svg"))
            except FileNotFoundError:
                pass
            os.chdir(local_output_dir)
            os.system(f"dot -Tsvg -O {i}.dot")
            print("done.")
        for v in graph.vs:
            if len(list(v.all_edges())) < 1 and v["name"] != 0:
                unconnected_vertices.append(v["label"])
        if len(unconnected_vertices) > 0:
            warnings.warn(
                f"[{file_name}] Routine {i} has unconnected ops: {unconnected_vertices}"
            )