def test_monitor(): exponential = lambda u, t: diff(u, t) - u init_val_ex = IVP(t_0=0.0, u_0=1.0) solution_ex, _ = solve(ode=exponential, condition=init_val_ex, t_min=0.0, t_max=2.0, max_epochs=3, monitor=Monitor1D(t_min=0.0, t_max=2.0, check_every=1)) with warns(DeprecationWarning): solution_ex, _ = solve(ode=exponential, condition=init_val_ex, t_min=0.0, t_max=2.0, max_epochs=3, monitor=Monitor(t_min=0.0, t_max=2.0, check_every=1))
def test_monitor(): exponential = lambda x, t: diff(x, t) - x init_val_ex = IVP(t_0=0.0, x_0=1.0) solution_ex, _ = solve(ode=exponential, condition=init_val_ex, t_min=0.0, t_max=2.0, max_epochs=3, monitor=Monitor(t_min=0.0, t_max=2.0, check_every=1)) print('Monitor test passed.')
def test_ode_bvp(): oscillator = lambda x, t: diff(x, t, order=2) + x bound_val_ho = DirichletBVP(t_0=0.0, x_0=0.0, t_1=1.5*np.pi, x_1=-1.0) solution_ho, _ = solve(ode=oscillator, condition=bound_val_ho, max_epochs=3000, t_min=0.0, t_max=1.5*np.pi) ts = np.linspace(0, 1.5*np.pi, 100) x_net = solution_ho(ts, as_type='np') x_ana = np.sin(ts) assert isclose(x_net, x_ana, atol=0.1).all() print('BVP basic test passed.')
def test_ode_ivp(): oscillator = lambda x, t: diff(x, t, order=2) + x init_val_ho = IVP(t_0=0.0, x_0=0.0, x_0_prime=1.0) solution_ho, _ = solve(ode=oscillator, condition=init_val_ho, max_epochs=3000, t_min=0.0, t_max=2*np.pi) ts = np.linspace(0, 2*np.pi, 100) x_net = solution_ho(ts, as_type='np') x_ana = np.sin(ts) assert isclose(x_net, x_ana, atol=0.1).all() print('IVP basic test passed.')
def test_ode(): def mse(x, t): true_x = torch.sin(t) return torch.mean((x - true_x) ** 2) exponential = lambda x, t: diff(x, t) - x init_val_ex = IVP(t_0=0.0, x_0=1.0) solution_ex, _ = solve(ode=exponential, condition=init_val_ex, t_min=0.0, t_max=2.0, shuffle=False, max_epochs=2000, return_best=True, metrics={'mse': mse}) ts = np.linspace(0, 2.0, 100) x_net = solution_ex(ts, as_type='np') x_ana = np.exp(ts) assert isclose(x_net, x_ana, atol=0.1).all() print('solve basic test passed.')
def test_ode(): def mse(u, t): true_u = torch.sin(t) return torch.mean((u - true_u) ** 2) exponential = lambda u, t: diff(u, t) - u init_val_ex = IVP(t_0=0.0, u_0=1.0) solution_ex, loss_history = solve(ode=exponential, condition=init_val_ex, t_min=0.0, t_max=2.0, shuffle=False, max_epochs=10, return_best=True, metrics={'mse': mse}) assert isinstance(solution_ex, Solution1D) assert isinstance(loss_history, dict) keys = ['train_loss', 'valid_loss'] for key in keys: assert key in loss_history assert isinstance(loss_history[key], list) assert len(loss_history[keys[0]]) == len(loss_history[keys[1]])
def test_train_generator(): exponential = lambda x, t: diff(x, t) - x init_val_ex = IVP(t_0=0.0, x_0=1.0) train_gen = Generator1D(size=32, t_min=0.0, t_max=2.0, method='uniform') solution_ex, _ = solve(ode=exponential, condition=init_val_ex, t_min=0.0, t_max=2.0, train_generator=train_gen, max_epochs=3) train_gen = Generator1D(size=32, t_min=0.0, t_max=2.0, method='equally-spaced') solution_ex, _ = solve(ode=exponential, condition=init_val_ex, t_min=0.0, t_max=2.0, train_generator=train_gen, max_epochs=3) train_gen = Generator1D(size=32, t_min=0.0, t_max=2.0, method='equally-spaced-noisy') solution_ex, _ = solve(ode=exponential, condition=init_val_ex, t_min=0.0, t_max=2.0, train_generator=train_gen, max_epochs=3) train_gen = Generator1D(size=32, t_min=0.0, t_max=2.0, method='equally-spaced-noisy', noise_std=0.01) solution_ex, _ = solve(ode=exponential, condition=init_val_ex, t_min=0.0, t_max=2.0, train_generator=train_gen, max_epochs=3) train_gen = Generator1D(size=32, t_min=np.log10(0.1), t_max=np.log10(2.0), method='log-spaced') solution_ex, _ = solve(ode=exponential, condition=init_val_ex, t_min=0.1, t_max=2.0, train_generator=train_gen, max_epochs=3) train_gen = Generator1D(size=32, t_min=np.log10(0.1), t_max=np.log10(2.0), method='log-spaced-noisy') solution_ex, _ = solve(ode=exponential, condition=init_val_ex, t_min=0.1, t_max=2.0, train_generator=train_gen, max_epochs=3) train_gen = Generator1D(size=32, t_min=np.log10(0.1), t_max=np.log10(2.0), method='log-spaced-noisy', noise_std=0.01) solution_ex, _ = solve(ode=exponential, condition=init_val_ex, t_min=0.1, t_max=2.0, train_generator=train_gen, max_epochs=3) with raises(ValueError): train_gen = Generator1D(size=32, t_min=0.0, t_max=2.0, method='magic') print('ExampleGenerator test passed.')