modelx v0.2.0 (2020年1月13日)#
本次发布包含了对模型读写功能的增强,以及一些规范变更。
功能增强#
增强的模型序列化器
API函数 write_model() 和 read_model() 基于更新改进后的序列化器。
分配给引用的动态空间也会被write_model()序列化,
并通过read_model()反序列化(GH25),
动态空间中单元格的输入值(如果有的话)也同样处理:
import modelx as mx
m = mx.new_model()
SpaceA = m.new_space('SpaceA', formula=lambda t: None)
@mx.defcells
def foo(x):
return x
m.new_space('SpaceB', refs={'RefA': m.SpaceA[0]})
SpaceA[1].foo[2] = 3
mx.write_model(m, "testdir")
m2 = mx.read_model("testdir")
m2.SpaceB.RefA is m2.SpaceA[0] # => True
m2.SpaceA[1].foo[2] # => 3
由modelx v0.1.0或modelx v0.0.25编写的模型仍可被此版本读取。
简化的序列化
之前的序列化器将pickle引用的对象ID存储在单独的文件中。更新后的序列化器直接将对象ID写入父空间的输出文件。
激活依赖单元格重新计算的选项
由于用户请求(GH24),在modelx启动时默认停用了modelx v0.1.0中引入的依赖单元格重计算功能。作为替代方案,新增了两个API函数set_recalc()和get_recalc(),供用户显式设置和获取重计算模式。
CellNode repr中的双引号字符串
CellNode的repr中的字符串,无论是作为参数还是值,都用双引号括起来,例如m.s.a(name="World")="Hello World" (GH27)。
向后不兼容的变更#
根据Enhancements章节(GH24)的说明,启动时已停用依赖单元格的重新计算功能。用户需要通过
set_recalc()显式激活该功能。
static_spaces()已更名为named_spaces()。static_spaces()仍保留用于向后兼容,但现已弃用并将在未来版本中移除。用户空间直接子级的动态空间现在属于
RootDynamicSpace类型,这是DynamicSpace类型的子类。
Bug修复#
修复
Model.write()方法。修复了当写入名称是单个字符的空格时出现的错误。