Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/linkdd/easy_fsm
Easy to implement Finite State Machines
https://github.com/linkdd/easy_fsm
easy finite-state-machine python
Last synced: about 1 hour ago
JSON representation
Easy to implement Finite State Machines
- Host: GitHub
- URL: https://github.com/linkdd/easy_fsm
- Owner: linkdd
- License: mit
- Created: 2022-04-16T22:16:29.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2022-04-17T00:10:17.000Z (almost 3 years ago)
- Last Synced: 2025-01-23T09:11:26.581Z (22 days ago)
- Topics: easy, finite-state-machine, python
- Language: Python
- Homepage:
- Size: 15.6 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE.txt
Awesome Lists containing this project
README
easy_fsm
========Easy to implement Finite State Machines.
.. image:: https://img.shields.io/pypi/l/easy_fsm.svg?style=flat-square
:target: https://pypi.python.org/pypi/easy_fsm/
:alt: License.. image:: https://img.shields.io/pypi/status/easy_fsm.svg?style=flat-square
:target: https://pypi.python.org/pypi/easy_fsm/
:alt: Development Status.. image:: https://img.shields.io/pypi/v/easy_fsm.svg?style=flat-square
:target: https://pypi.python.org/pypi/easy_fsm/
:alt: Latest release.. image:: https://img.shields.io/pypi/pyversions/easy_fsm.svg?style=flat-square
:target: https://pypi.python.org/pypi/easy_fsm/
:alt: Supported Python versions.. image:: https://img.shields.io/pypi/implementation/easy_fsm.svg?style=flat-square
:target: https://pypi.python.org/pypi/easy_fsm/
:alt: Supported Python implementations.. image:: https://img.shields.io/pypi/wheel/easy_fsm.svg?style=flat-square
:target: https://pypi.python.org/pypi/easy_fsm
:alt: Download format.. image:: https://img.shields.io/github/workflow/status/linkdd/easy_fsm/run-test-suite?style=flat-square
:target: https://github.com/linkdd/easy_fsm/actions/workflows/test-suite.yml
:alt: Build Status.. image:: https://img.shields.io/pypi/dm/easy_fsm.svg?style=flat-square
:target: https://pypi.python.org/pypi/easy_fsm/
:alt: DownloadsIntroduction
------------**easy_fsm** provides a very simple API to build finite state machines.
The state machine holds a context that is passed to the different states.
Each state returns either the next state to execute or `None` if the execution
is done.This allows you to implement business logic in small, well separated, chunks of
code.Example
-------.. code-block:: python
from typing import Optional
from easy_fsm import StateMachine, State
from dataclasses import dataclass, field@dataclass
class Stats:
altitude: int = 0
fly_time: int = 0
suite: list[int] = field(default_factory=list)class ComputeSyracuse(State[Stats]):
def __init__(self, n: int):
self.n = ndef run(self, context: Stats) -> Optional[State[Stats]]:
context.altitude = max(context.altitude, self.n)
context.fly_time += 1
context.suite.append(self.n)if self.n == 1:
return Noneelif self.n % 2 == 0:
return ComputeSyracuse(self.n // 2)else:
return ComputeSyracuse(3 * self.n + 1)class Syracuse(StateMachine[Stats]):
def __init__(self):
super().__init__(Stats())def compute(self, n: int) -> None:
self.run_from(ComputeSyracuse(n))def test_fsm():
fsm = Syracuse()
fsm.compute(5)assert fsm.context.altitude == 16
assert fsm.context.fly_time == 6
assert fsm.context.suite == [5, 16, 8, 4, 2, 1]License
-------This project is released under the terms of the `MIT License`_.
.. _MIT License: https://github.com/linkdd/easy_fsm/blob/main/LICENSE.txt