import queue import threading import simpy.rt from processes import input_thread, node, render_process, user_input_process from tern import Tern def initial_values(edges) -> dict[str, Tern]: return {x: Tern.U for triple in edges for x in triple} def main(): from graph_view import active_edges, render_graph_process edges = active_edges() values = initial_values(edges) commands: queue.Queue[tuple[str, Tern]] = queue.Queue() env = simpy.rt.RealtimeEnvironment(factor=1.0, strict=False) threading.Thread( target=input_thread, args=(commands,), daemon=True, ).start() for n in edges: _ = env.process(node(env, n, values)) _ = env.process(user_input_process(env, values, commands)) _ = env.process(render_process(env, values)) _ = env.process(render_graph_process(env, values)) _ = env.run(until=float("inf")) if __name__ == "__main__": main()