一个简单的代理驱动的DAG合成和执行框架

factum的Python项目详细描述


Factum公司

如果每个函数都记住自己的输出,并且知道何时何地获取自己的输入,会怎么样?

Factum是一个简单的基于agent的框架,用于计算DAG的合成和执行。在

理论

面向对象编程(OOP)最初被认为是串行计算环境中分布式函数编程的参与者模型的抽象。在

Factum代表着一种简单的回归。它是一个由面向对象的实现促进的功能范式。在

这个想法的核心是Fact对象:一个定义inputsfunctionoutput的类。输入是可以改变的,但它们不是故意的。因此Factum代表了特定上下文中的功能:事实-它总是代表相同的信息。在

它基本上是一个负责收集自己的输入并缓存其输出的函数(因此其他函数对象可以有效地收集自己的输入)。在

这些Fact对象被连接起来,要求彼此输入,并且通常形成一个有向无环图,尽管没有强制DAG结构的机制。在

使用

from factum import Fact

def a_node():
    print('A running!')
    return 1

def b_node():
    print('B running!')
    return 2

def c_node(*args):
    print('C running!')
    return args[0] + args[1]

def d_node(self, **kwargs):
    return self._transformation(**kwargs)

def _transformation(self, cthing):
    print('D running!')
    return cthing + 1

# Fact(function, inputs, name)

a = Fact(a_node)
b = Fact(b_node, None, 'Beta')
c = Fact(c_node)
a > c
b > c
d = Fact(d_node, {'cthing': c})
d.add_method(_transformation)

d.run()
>>> A running!
>>> B running!
>>> C running!
>>> D running!
>>> 4

# cached
d.run()  
>>> 4

b.run(-1)
>>> B running!
>>> 2

# re-runs downstream of change
d.run()
>>> C running!
>>> D running!
>>> 4

d.visualize()

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

推荐PyPI第三方库


热门话题
java的单元测试测试用例库。util。列出实现   java通过超类进行序列化/反序列化   java Android获取设备语言ISO字符串   java如何打开广告的行动。移动   Eclipse IDE for(嵌入式C/C++)开发者202012:经典的深色主题深黑色背景和菜单中的文本   java使用不同的内容动态创建TableView(JavaFX)   java JAXB将多个同名节点解组   java ClassDefNotFoundException,即使类由类加载器加载(服务器上安装了多个应用程序)   java有没有办法关闭在后端生成的MqttClient线程?   html如何在网站上的java小程序中包含图像?   java无法访问已分配给超类引用的子类实例变量   java在TableViewer中双击打开对话框   列出如何创建ListNode。JAVA   java如何从文本中输出的数组中放入随机图像