def test1(): from ctrl import Controller controller = Controller() Ts = 0.01 clock = Clock(period = Ts) controller.add_source('clock',clock,['clock']) a = -1 b = 1 def f(t, x, u, a, b): return a * x + b * u t0 = 0 uk = 1 x0 = np.array([0]) sys = ODE(f, x0 = x0, t0 = t0, pars = (a,b)) controller.add_signals('input','output') controller.add_filter('condition', Condition(lambda x: x < 1), ['clock'], ['is_running']) controller.add_filter('ode',TimeVarying(sys),['clock','input'],['output']) controller.add_sink('logger',Logger(),['clock','output']) print(controller.info('all')) controller.set_filter('ode', reset = True) controller.set_source('clock', reset = True) controller.set_sink('logger', reset = True) controller.set_signal('input',uk) controller.run() log = controller.read_sink('logger') t0 = log[0,0] tk = log[-1,0] yk = log[-1,1] yyk = uk * (1 - math.exp(a*(tk-t0))) + x0 * math.exp(a*(tk-t0)) #print(t0, tk, yk, yyk) #print(log) assert np.abs(yk - np.array([yyk])) < 1e-2 uk = 0 x0 = sys.state controller.set_source('clock', reset = True) controller.set_sink('logger', reset = True) controller.set_signal('input',uk) controller.run() log = controller.read_sink('logger') t0 = log[0,0] tk = log[-1,0] yk = log[-1,1] yyk = uk * (1 - math.exp(a*(tk-t0))) + x0 * math.exp(a*(tk-t0)) #print(t0, tk, yk, yyk) #print(log) assert np.abs(yk - np.array([yyk])) < 1e-2 uk = -1 x0 = sys.state controller.set_source('clock', reset = True) controller.set_sink('logger', reset = True) controller.set_signal('input',uk) controller.run() log = controller.read_sink('logger') t0 = log[0,0] tk = log[-1,0] yk = log[-1,1] yyk = uk * (1 - math.exp(a*(tk-t0))) + x0 * math.exp(a*(tk-t0)) #print(t0, tk, yk, yyk) assert np.abs(yk - np.array([yyk])) < 1e-2 clock.set_enabled(False)