用于将二进制决策图转换为自动机的Python库。

bdd2dfa的Python项目详细描述


bdd2dfa公司

Build StatuscodecovPyPI versionLicense: MIT

一个简单的python包装器,用于解释二进制决策图(bdd) 作为确定性有限自动机(DFAs)。在

包接受来自^{} package的BDD作为输入 并从^{} package返回一个DFA。在

形式上,得到的DFA对象是拟约化bdd(QDDs) 其中all离开self loop,状态的标签是一个元组:(int, str | bool),其中第一个条目决定输入的数量,直到这个节点被激活,第二个条目是节点或BDD的真值赋值的决策变量。在

目录

安装

如果您只需要使用bdd2dfa,您只需运行:

$ pip install bdd2dfa

对于开发人员,请注意,此项目使用 poetrypython包/依赖项 管理工具。请先熟悉一下,然后 运行:

$ poetry install

使用

# Create BDDfromddimportBDDmanager=BDD()manager.declare('x','y','z')x,y,z=map(manager.var,'xyz')bexpr=x&y&z# Convert to DFAfrombdd2dfaimportto_dfaqdd=to_dfa(bexpr)assertlen(qdd.states())==7# End at leaf node.assertqdd.label([1,1,1])==(0,True)assertqdd.label([0,1,1])==(0,False)# End at Non-leaf node.assertqdd.label([1,1])==(0,'z')assertqdd.label([0,1])==(1,False)# leaf nodes are self loops.assertqdd.label([1,1,1,1])==(0,True)assertqdd.label([1,1,1,1,1])==(0,True)

生成的DFA对象的每个状态都有三个属性:

  1. node:对dd给出的内部BDD节点的引用。在
  2. paritydd支持边反BDDs,其中一些边指向 对布尔函数求反的布尔函数 节点将指向标准BDD。奇偶校验值决定 节点是否
  3. debt:在这个节点可以 过渡。必需的,因为BDD边可以跳过不相关的 决定。在

例如

^{pr2}$

BDD与QDD

to_dfa还支持导出BDD,而不是QDD。这就完成了 通过切换qdd标志。在

bdd=to_dfa(bexpr,qdd=False)

DFA使用与QDD相似的状态,但没有 debt属性。当你只想走BDD时很有用。在

note标签字母表也只返回决策变量/真值赋值。在

如果dfa包是用draw选项安装的,我们可以 通过导出到 graphvizdot文件。在

fromdfa.drawimportwrite_dotwrite_dot(qdd,"qdd.dot")write_dot(bdd,"bdd.dot")

使用dot命令进行编译会为qdd.dot生成以下结果

qdd image

以及bdd.dot的以下内容:

bdd image

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

推荐PyPI第三方库


热门话题
java如何在ArrayList<List>中选择我的列表中的哪一列用于排序我的ArrayList?   Java设计模式相当于Smalltalk的:   如何在Java中说stringA>stringB   用Python重写Java代码的Python方式   java如何在Mybatis for Postgresql db中使用like(非IN)编写查询?   java看不到如何禁用AlertDialog对话框   java正常转换,但照明仍然很奇怪?   为什么Java中存在检查和未检查异常   使用Flink的JavaSpringBootGradle项目不起作用   java我可以在最终hashmap中存储函数名以供执行吗?   java无法理解实际应用程序中的枚举   java Hibernate注释执行内部连接   java Jenkins Maven3错误,工件已启用   数组的java打印内容只返回[null,null,null,null]   java对同一实体的多个更新   java将日期从一个时区转换为本地时区   jface tableviewer中的java多行功能或换行文本功能   ArrayList是如何在Java中实现的?   如何将程序的输出像矩阵一样写入文件,Java   java EasyMock和返回泛型类的方法