Primitives and utilities for manipulating deterministic finite automata (DFA) represented using the dfa library.
Table of Contents
Installation
If you just need to use dfa_mutate
, you can just run:
$ pip install dfa_mutate
For developers, note that this project uses the poetry python package/dependency management tool. Please familarize yourself with it and then run:
$ poetry install
Example Usage:
from dfa import DFA
import dfa_mutate
dfa1 = DFA(
start=0,
inputs={0, 1},
label=lambda s: (s % 4) == 3,
transition=lambda s, c: (s + c) % 4,
)
# Pick a specific mutation.
dfa2 = dfa_mutate.add_state(dfa1)
dfa3 = dfa_mutate.change_start(dfa1)
dfa4 = dfa_mutate.change_transition(dfa1)
dfa5 = dfa_mutate.relabel_state(dfa1)
# Infinite Generator mutations round-robin (will repeat).
dfas = dfa_mutate.generate_mutations(orig)
# Sample DFA using softmax over a scoring function (default constant).
# Uses first n dfas generated by above generator.
# NOTE: requires the optional numpy dependency.
dfa6 = dfa_mutate.sample_mutation(dfa1, n=20, score=lambda d: len(d.states()))
# All functions support passing in random number generator.
import random
dfa7 = dfa_mutate.relabel_state(dfa1, random.Random(0))