又一个有限状态自动机

finite的Python项目详细描述


又一个python的有限状态自动机。

简介

重点在于简单易读的配置:

automata1:
  start: Occupied
  states:
    Occupied: {}
    Alarmed: {}
  transitions:
    Occupied->Alarmed:
      when: house.presence.empty
    Occupied->Alarmed:
      when: house.presence.occupied

它特别适合家庭自动化(我的用例)。

示例

有关在家庭自动化中使用finite的示例,请参见:test/test1.dfa。

配置

配置格式为yaml。

每个自动机都有一个开始状态、一组状态和一组转换:

automata1:
    start: Occupied
    states:
        Occupied:
            {}
        Alarmed:
            {}
    transitions:
        Occupied->Alarmed:
            when: house.presence.empty
        Occupied->Alarmed:
            when: house.presence.occupied

转换可能有关联的操作:

Occupied->Alarmed:
    when: house.presence.empty
    actions:
    - speak('Alarm activated')

这些回调是在make-world时传递的“callback”对象上调用的。

一个yaml文件可以列出多个自动机:

automata1:
    start: State1
    states: ...
    transitions: ...

automata2:
    start: State2
    states: ...
    transitions: ...

代码

示例:

from finite import dfa

# create a callback
class Callback(object):
    def speak(self, msg):
        # do some speaking
        pass
callback = Callback()

# create automaton
worlds = dfa.Worlds()
automatons = dfa.Loader.load_file('my.dfa')
for aut in automatons:
    world = aut.make_world(callback)
    self.worlds.add(world)

# trigger a state change
ev = dfa.Event('house.presence.empty', True)
worlds.process(ev)

更改日志

0.1.0

  • 首次发布

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java搜索文本中的字符串模式   SecurityManager引发异常的java Mockito模拟   java(仅限Netbeans)未找到适合jdbc的驱动程序:mysql://localhost   java计算给定字符串所有前缀的哈希值的子字符串的哈希值   java如何避免每次访问REST认证API以使用实际服务   用于HTML的java Jsoup选择器组合   可以复制或引用的java构造函数   Java中的HashMap。搞砸containsKey返回意外值   java数组平均值计算   java是检查字符串是否包含特定字符的最有效方法   java反序列化对象类已更改   java典型的EJB3/JPA/JSF中的事务范围是什么?   Install4j的java错误代码20   java:compileJava在本地项目()依赖项上的多模块项目上持续失败“错误:包x.y.z不存在”   java有一种生成Suppression的方法。现有代码库中checkstyle的xml文件?