Skip to main content

A Python library for simulating finite automata

Project description

Automathon

Created by: Robin Hafid Quintero Lopez

Build Status

A Python library for simulating finite automata

Links

Installation

PyPI

pip install automathon

Upgrade

PyPI

pip install automathon --upgrade

Basic Example

Deterministic Finite Automata

Self-made, Public domain, via Wikimedia Commons

Representing the previous automata

from automathon import DFA
Q = {'q0', 'q1', 'q2'}
sigma = {'0', '1'}
delta = { 'q0' : {'0' : 'q0', '1' : 'q1'},
          'q1' : {'0' : 'q2', '1' : 'q0'},
          'q2' : {'0' : 'q1', '1' : 'q2'}
        }
initialState = 'q0'
F = {'q0'}

automata1 = DFA(Q, sigma, delta, initialState, F)
## This is an example about creating a DFA with the library

Verify if the automata is valid

automata1.isValid()   #True

Verify if the automata accept a string

automata1.accept("001001")   #True
automata1.accept("00100")    #False

Get the complement of the automata

notautomata1 = automata1.complement()
notautomata1.accept("00100")    #True

Non-Deterministic Finite Automata

Image taken from: http://www.r9paul.org/blog/2008/nondeterministic-finite-state-machine/

Representing the previous automata

from automathon import NFA

## Epsilon Transition is denoted by '' -> Empty string
Q = {'q1', 'q2', 'q3', 'q4'}
sigma = {'0', '1'}
delta = {
          'q1' : {
                  '0' : ['q1'],
                  '1' : ['q1', 'q2']
                  },
          'q2' : {
                  '0' : ['q3'],
                  '' : ['q3']
                  },
          'q3' : {
                  '1' : ['q4'],
                  },
          'q4' : {
                  '0' : ['q4'],
                  '1' : ['q4'],
                  },
        }
initialState = 'q1'
F = {'q4'}

automata2 = NFA(Q, sigma, delta, initialState, F)
## This is an example about creating a NFA with the library

Verify if the automata is valid

automata2.isValid()   #True

Verify if the automata accept a string

automata2.accept("0000011")   #True
automata2.accept("000001")    #False

Get the complement of the automata

notautomata2 = automata1.complement()
notautomata2.accept("000001")    #True

Errors

Errors that can be returned during the execution and the cases that can appear.

  • SigmaError:

    • The automata contains a initial state or a final state that's not defined on Q.
    • The automata contains a delta transition that's not defined on Q or in Sigma.
  • InputError:

    • The automata is trying to consume an letter that's not defined in sigma.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

automathon-0.0.5.tar.gz (6.2 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page