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.0modelx 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()显式激活该功能。

Bug修复#

  • 修复 Model.write() 方法。

  • 修复了当写入名称是单个字符的空格时出现的错误。