StateMachine API
This page details the API for the pse_core.StateMachine class, which is the base class for defining grammars and structures within PSE. While you often configure the StructuringEngine with higher-level schemas (Pydantic, JSON Schema), you can also create or subclass StateMachine directly for advanced control.
class pse_core.StateMachine(
state_graph: StateGraph | None = None,
start_state: StateId = 0,
end_states: list[StateId] | None = None,
is_optional: bool = False,
is_case_sensitive: bool = True,
identifier: str | None = None
)
Defines a grammar as a finite state machine graph.
Parameters:
state_graph(StateGraph | None, optional): A dictionary mapping state IDs (StateId) to lists of transitions (Edge). AnEdgeis a tuple(StateMachine, StateId)representing a transition validated by the nestedStateMachineleading to the targetStateId. Defaults to an empty graph.start_state(StateId, optional): The identifier of the initial state for this machine. Defaults to0.end_states(list[StateId] | None, optional): A list of state IDs that represent valid completion points for this machine. Defaults to["$"].is_optional(bool, optional): IfTrue, this entire state machine can be skipped during traversal. Defaults toFalse.is_case_sensitive(bool, optional): IfTrue, token matching within this machine (e.g., by nestedPhraseStateMachines) is case-sensitive. Defaults toTrue.identifier(str | None, optional): A human-readable identifier for this state machine instance, useful for debugging and stateful output retrieval. Defaults toNone.
Methods
get_new_stepper
get_new_stepper(
state: StateId | None = None
) -> Stepper
Creates a new Stepper instance initialized to traverse this StateMachine.
Parameters:
state(StateId | None, optional): The state ID to start the stepper at. IfNone, uses the machine'sstart_state. Defaults toNone.
Returns:
- (
Stepper): A new stepper instance.
get_steppers
get_steppers(
state: StateId | None = None
) -> list[Stepper]
Creates one or more initial Stepper instances for this machine. Can return multiple steppers if the starting state allows for different initial paths (e.g., via an AnyStateMachine transition).
Parameters:
state(StateId | None, optional): The state ID to start the steppers at. IfNone, uses the machine'sstart_state. Defaults toNone.
Returns:
- (
list[Stepper]): A list of new stepper instances.
get_edges
get_edges(
state: StateId
) -> list[Edge]
Returns the list of outgoing transitions (Edge tuples) from the specified state.
Parameters:
state(StateId): The state ID to query.
Returns:
- (
list[Edge]): A list of(StateMachine, StateId)tuples representing valid transitions.
get_transitions
get_transitions(
stepper: Stepper
) -> list[tuple[Stepper, StateId]]
Gets the possible initial sub-steppers and target states for transitions originating from the given stepper's current state.
Parameters:
stepper(Stepper): The stepper whose current state's transitions are being queried.
Returns:
- (
list[tuple[Stepper, StateId]]): A list where each tuple contains a new sub-stepper (for validating the transition) and the target state ID in the parent machine.
advance_stepper
advance_stepper(
stepper: Stepper,
token: str
) -> list[Stepper]
Advances a given stepper by consuming a token string. This is primarily used internally by Stepper.consume.
Parameters:
stepper(Stepper): The stepper to advance.token(str): The token string to consume.
Returns:
- (
list[Stepper]): A list of new steppers representing the possible states after consuming the token.
branch_stepper
branch_stepper(
stepper: Stepper,
token: str | None = None
) -> list[Stepper]
Creates multiple branched steppers from a given stepper, exploring different possible transitions simultaneously. Used internally by Stepper.branch.
Parameters:
stepper(Stepper): The stepper to branch from.token(str | None, optional): An optional token to consider when determining valid branches. Defaults toNone.
Returns:
- (
list[Stepper]): A list of new steppers representing different branches.
advance_all (Static Method)
@staticmethod
advance_all(
steppers: list[Stepper],
token: str,
vocab: TrieMap | None = None,
token_healing: bool = True
) -> list[StepperDelta]
Advances multiple steppers simultaneously with a single token. Handles token healing if vocab is provided. This is primarily used internally by the StructuringEngine.
Parameters:
steppers(list[Stepper]): The list of active steppers to advance.token(str): The token string to consume.vocab(TrieMap | None, optional): The vocabulary TrieMap for token healing. Defaults toNone.token_healing(bool, optional): Whether to enable token healing. Defaults toTrue.
Returns:
- (
list[StepperDelta]): A list ofStepperDeltaobjects representing the results of the transitions for each input stepper.
advance_all_basic (Static Method)
@staticmethod
advance_all_basic(
steppers: list[Stepper],
token: str
) -> list[Stepper]
A simplified version of advance_all that only returns the resulting steppers, discarding metadata like healing status.
Parameters:
steppers(list[Stepper]): The list of active steppers to advance.token(str): The token string to consume.
Returns:
- (
list[Stepper]): A list of the resulting steppers after consuming the token.
Properties
state_graph(StateGraph): The dictionary defining the state transitions. Read/write.start_state(StateId): The identifier of the starting state. Read/write.end_states(list[StateId]): The list of identifiers for valid end states. Read/write.is_optional(bool): Whether the state machine is optional. Read/write.is_case_sensitive(bool): Whether token matching should be case-sensitive. Read/write.identifier(str | None): The human-readable identifier for this instance. Read/write.