State Machines

May 30, 2026 | 5 min read

Simple State Machine

class StateMachine:
    def __init__(self):
        self.state = 'idle'
        self.transitions = {
            'idle': {'start': 'running'},
            'running': {'pause': 'paused', 'stop': 'idle'},
            'paused': {'resume': 'running', 'stop': 'idle'},
        }

    def handle(self, event: str):
        next_state = self.transitions.get(self.state, {}).get(event)
        if next_state:
            self.state = next_state
        return self.state

Table-Driven FSM

def run_fsm(states: dict, initial: str, events: list[str]) -> str:
    state = initial
    for event in events:
        state = states.get(state, {}).get(event, state)
    return state

Compiled State Machine

pyvorin run fsm.py --function run_fsm