modelx v0.15.0 (2021年5月19日)#
本次发布修复了以下错误并引入了以下增强功能。
功能增强#
追踪引用值的先例方法介绍#
新增了一个方法precedents()。
现有的preds()方法会返回指定节点计算其值时所依赖的节点列表。
preds()仅列出Cells和Spaces的节点。
新引入的precedents()方法对preds()进行了增强。
除了preds()返回的Cells和Spaces节点外,
precedents()还包含指定节点计算所使用的Reference值的节点。
下面是一个示例。
import modelx as mx
space = mx.new_space()
space.new_space('Child')
space.Child.new_space('GrandChild')
space.x = 1
space.Child.y = 2
space.Child.GrandChild.z = 3
@mx.defcells(space=space)
def foo(t):
return t
@mx.defcells(space=space)
def bar(t):
return foo(t) + x + Child.y + Child.GrandChild.z
bar 单元格依赖于一个单元格 foo,以及3个引用:x、Child.y 和 Child.GrandChild.z。下方代码中,bar.preds(3) 返回一个包含 foo(3) 的列表,这是 bar(3) 唯一依赖的单元格元素:
>>> bar(3)
9
>>> bar.preds(3)
[Model1.Space1.foo(t=3)=3]
precedents() 方法返回的列表不仅包含 Cells 元素,还包括该 Cells 在计算其值时依赖的 References:
>>> bar.precedents(3)
[Model1.Space1.foo(t=3)=3,
Model1.Space1.x=1,
Model1.Space1.Child.GrandChild.z=3,
Model1.Space1.Child.y=2]
类似于Cells.precedents,
Space.precedents
也被引入,它以同样的方式扩展了
Space.preds的功能。
改进节点的多行显示#
由precedents()、succs()和preds()返回的列表元素是Node对象,它们的值可以是numpy数组和pandas DataFrame。这些值具有多行表示字符串(repr)。为了美观地打印这些repr,在=和值的repr之间会插入换行符:
Model1.Space1.Cells1()=
array([[1, 2],
[3, 4]])
向后不兼容的变更#
Element已更名为ItemNode。
Bug修复#
MacOS 不兼容#
最新版本的MacOS似乎不允许在运行时更改堆栈大小。 为了避免在调用modelx时更改堆栈大小出现错误, modelx进行了重构,在Linux和MacOS的主线程中使用执行器。 由于这一变更,MacOS上的最大递归次数 显著低于Linux和Windows系统。