def test_group_updateorder(): f = Frame() f.addfield("x", 1.) f.addfield("y", 2.) with pytest.raises(RuntimeError): f.updateorder = ["x", "y"] assert f.updateorder == None with pytest.raises(ValueError): f.updater = ["x", None] with pytest.raises(RuntimeError): f.updater = ["x", "z"] f.updater = ["y", "x"] assert f.updateorder == ["y", "x"] def upd_x(f): return f.x * f.y def upd_y(f): return f.x + f.y f.x.updater = upd_x f.y.updater = upd_y f.update() assert f.x == 3. assert f.y == 3. def upd(f): f.y.update() f.x.update() f.updater = Heartbeat(upd) f.update() assert f.x == 18. assert f.y == 6.
def test_heartbeat_order(): f = Frame() f.addfield("x", 1.) f.addfield("y", 2.) f.addfield("z", 3.) def sys(f): f.x = f.y * f.z def upd(f): f.y = f.z * f.x def dia(f): f.z = f.x * f.y f.updater = Heartbeat(updater=upd, systole=sys, diastole=dia) f.update() assert f.x == 6. assert f.y == 18. assert f.z == 108.