autonomy.analyse.abci.app_spec
Generates the specification for a given ABCI app in YAML/JSON/Mermaid format.
validate_fsm_spec
def validate_fsm_spec(data: Dict) -> None
Validate FSM specificaiton file.
DFASpecificationError Objects
class DFASpecificationError(Exception)
Simple class to raise errors when parsing a DFA.
FSMSpecificationLoader Objects
class FSMSpecificationLoader()
FSM specification loader utilities.
OutputFormats Objects
class OutputFormats()
Output formats.
from_yaml
@staticmethod
def from_yaml(file: Path) -> Dict
Load from yaml.
from_json
@staticmethod
def from_json(file: Path) -> Dict
Load from json.
load
@classmethod
def load(cls, file: Path, spec_format: str = OutputFormats.YAML) -> Dict
Load FSM specification.
dump_json
@staticmethod
def dump_json(dfa: "DFA", file: Path) -> None
Dump to a json file.
dump_yaml
@staticmethod
def dump_yaml(dfa: "DFA", file: Path) -> None
Dump to a yaml file.
dump_mermaid
@staticmethod
def dump_mermaid(dfa: "DFA", file: Path) -> None
Dumps this DFA spec. to a file in Mermaid format.
dump
@classmethod
def dump(cls,
dfa: "DFA",
file: Path,
spec_format: str = OutputFormats.YAML) -> None
Dumps this DFA spec. to a file in YAML/JSON/Mermaid format.
DFA Objects
class DFA()
Simple specification of a deterministic finite automaton (DFA).
__init__
def __init__(label: str, states: Set[str], default_start_state: str,
start_states: Set[str], final_states: Set[str],
alphabet_in: Set[str], transition_func: Dict[Tuple[str, str],
str])
Initialize DFA object.
validate_naming_conventions
def validate_naming_conventions() -> None
Validate state names to see if they follow the naming conventions below
- A round name should end with
Round - ABCI app class name should end with
AbciApp
is_transition_func_total
def is_transition_func_total() -> bool
Outputs True if the transition function of the DFA is total.
A transition function is total when it explicitly defines all the transitions for all the possible pairs (state, input_symbol). By convention, when a transition (state, input_symbol) is not defined for a certain input_symbol, it will be automatically regarded as a self-transition to the same state.
Returns:
True if the transition function is total. False otherwise.
get_transitions
def get_transitions(input_sequence: List[str]) -> List[str]
Runs the DFA given the input sequence of symbols, and outputs the list of state transitions.
parse_transition_func
def parse_transition_func() -> Dict[str, Dict[str, str]]
Parse the transition function from the spec to a nested dictionary.
__eq__
def __eq__(other: object) -> bool
Compares two DFAs
generate
def generate() -> Dict[str, Any]
Retrieves an exportable representation for YAML/JSON dump of this DFA.
load
@classmethod
def load(
cls,
file: Path,
spec_format: str = FSMSpecificationLoader.OutputFormats.YAML) -> "DFA"
Loads a DFA JSON specification from file.
abci_to_dfa
@classmethod
def abci_to_dfa(cls, abci_app_cls: Any, label: str = "") -> "DFA"
Translates an AbciApp class into a DFA.
check_unreferenced_events
def check_unreferenced_events(abci_app_cls: Any) -> List[str]
Checks for unreferenced events in the AbciApp.
Checks that events defined in the AbciApp transition function are referenced in the source code of the corresponding rounds or their superclasses. Note that the function simply checks references in the "raw" source code of the rounds and their (non builtin) superclasses. Therefore, it does not do any kind of static analysis on the source code, nor checks for actual reachability of a return statement returning such events.
Arguments:
abci_app_cls: AbciApp to check unreferenced events.
Returns:
List of error strings