def test_concat_generator(): size1, size2 = 10, 20 t_min, t_max = 0.5, 1.5 generator1 = Generator1D(size1, t_min=t_min, t_max=t_max) generator2 = Generator1D(size2, t_min=t_min, t_max=t_max) concat_generator = ConcatGenerator(generator1, generator2) x = concat_generator.get_examples() assert _check_shape_and_grad(concat_generator, size1 + size2, x) grid1 = (4, 4, 4) size1, size2, size3 = grid1[0] * grid1[1] * grid1[2], 100, 200 generator1 = Generator3D(grid=grid1) generator2 = GeneratorSpherical(size2) generator3 = GeneratorSpherical(size3) concat_generator = ConcatGenerator(generator1, generator2, generator3) r, theta, phi = concat_generator.get_examples() assert _check_shape_and_grad(concat_generator, size1 + size2 + size3, r, theta, phi) added_generator = generator1 + generator2 + generator3 r, theta, phi = added_generator.get_examples() assert _check_shape_and_grad(added_generator, size1 + size2 + size3, r, theta, phi) str(concat_generator) repr(concat_generator)
def x(): g = EnsembleGenerator( Generator1D(GRID[0], R_MIN, R_MAX, method='uniform'), Generator1D(GRID[1], 0, np.pi * 2, method='uniform'), Generator1D(GRID[2], Z_MIN, Z_MAX, method='uniform'), ) return SamplerGenerator(g).get_examples()
def generators(): return dict( train=Generator1D(64, t_min=T_MIN, t_max=T_MAX, method='uniform'), valid=Generator1D(64, t_min=T_MIN, t_max=T_MAX, method='equally-spaced'), )
def __init__( self, ode_system, conditions, t_min, t_max, nets=None, train_generator=None, valid_generator=None, analytic_solutions=None, optimizer=None, criterion=None, n_batches_train=1, n_batches_valid=4, metrics=None, n_output_units=1, # deprecated arguments are listed below batch_size=None, shuffle=None): if train_generator is None or valid_generator is None: if t_min is None or t_max is None: raise ValueError( f"Either generator is not provided, t_min and t_max should be both provided: \n" f"got t_min={t_min}, t_max={t_max}, " f"train_generator={train_generator}, valid_generator={valid_generator}" ) if train_generator is None: train_generator = Generator1D(32, t_min=t_min, t_max=t_max, method='equally-spaced-noisy') if valid_generator is None: valid_generator = Generator1D(32, t_min=t_min, t_max=t_max, method='equally-spaced') self.t_min, self.t_max = t_min, t_max super(Solver1D, self).__init__( diff_eqs=ode_system, conditions=conditions, nets=nets, train_generator=train_generator, valid_generator=valid_generator, analytic_solutions=analytic_solutions, optimizer=optimizer, criterion=criterion, n_batches_train=n_batches_train, n_batches_valid=n_batches_valid, metrics=metrics, n_input_units=1, n_output_units=n_output_units, shuffle=shuffle, batch_size=batch_size, )
def test_generator1d_log_spaced_input(method): size = 32 with pytest.raises(ValueError): Generator1D(size=size, t_min=0.0, t_max=1.0, method=method) with pytest.raises(ValueError): Generator1D(size=size, t_min=1.0, t_max=0.0, method=method) with pytest.raises(ValueError): Generator1D(size=size, t_min=-1.0, t_max=1.0, method=method) with pytest.raises(ValueError): Generator1D(size=size, t_min=1.0, t_max=-1.0, method=method)
def test_ensemble_generator(): size = 100 generator1 = Generator1D(size) ensemble_generator = EnsembleGenerator(generator1) x = ensemble_generator.get_examples() assert _check_shape_and_grad(ensemble_generator, size, x) old_x = torch.rand(size) old_y = torch.rand(size) old_z = torch.rand(size) generator1 = PredefinedGenerator(old_x) generator2 = PredefinedGenerator(old_y) generator3 = PredefinedGenerator(old_z) ensemble_generator = EnsembleGenerator(generator1, generator2, generator3) x, y, z = ensemble_generator.get_examples() assert _check_shape_and_grad(ensemble_generator, size, x, y, z) assert _check_iterable_equal(old_x, x) assert _check_iterable_equal(old_y, y) assert _check_iterable_equal(old_z, z) old_x = torch.rand(size) old_y = torch.rand(size) generator1 = PredefinedGenerator(old_x) generator2 = PredefinedGenerator(old_y) product_generator = generator1 * generator2 x, y = product_generator.get_examples() assert _check_shape_and_grad(product_generator, size, x, y) assert _check_iterable_equal(old_x, x) assert _check_iterable_equal(old_y, y) str(ensemble_generator) repr(ensemble_generator)
def test_generator1d(): size = 32 generator = Generator1D(size=size, t_min=0.0, t_max=2.0, method='uniform') x = generator.getter() assert _check_shape_and_grad(generator, size, x) generator = Generator1D(size=size, t_min=0.0, t_max=2.0, method='equally-spaced') x = generator.getter() assert _check_shape_and_grad(generator, size, x) generator = Generator1D(size=size, t_min=0.0, t_max=2.0, method='equally-spaced-noisy') x = generator.getter() assert _check_shape_and_grad(generator, size, x) generator = Generator1D(size=size, t_min=np.log10(0.1), t_max=np.log10(2.0), method='log-spaced') x = generator.getter() assert _check_shape_and_grad(generator, size, x) generator = Generator1D(size=size, t_min=np.log10(0.1), t_max=np.log10(2.0), method='log-spaced-noisy') x = generator.getter() assert _check_shape_and_grad(generator, size, x) generator = Generator1D(size=size, t_min=np.log10(0.1), t_max=np.log10(2.0), method='log-spaced-noisy', noise_std=0.01) x = generator.getter() assert _check_shape_and_grad(generator, size, x) with raises(ValueError): generator = Generator1D(size=size, t_min=0.0, t_max=2.0, method='magic') print('ExampleGenerator test passed.')
def test_sampler_geneartor(): size = 10 generator = Generator1D(size) sampler_generator = SamplerGenerator(generator) x = sampler_generator.get_examples() assert isinstance(x, (list, tuple)) x, = x assert x.shape == (size, 1) print('testing generator name: ', sampler_generator)
def test_sampler_geneartor(): size = 10 generator = Generator1D(size) sampler_generator = SamplerGenerator(generator) x = sampler_generator.get_examples() assert isinstance(x, (list, tuple)) x, = x assert x.shape == (size, 1) str(sampler_generator) repr(sampler_generator)
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.')
def test_static_generator(): size = 100 generator = Generator1D(size) static_generator = StaticGenerator(generator) x1 = static_generator.get_examples() x2 = static_generator.get_examples() assert _check_shape_and_grad(generator, size) assert _check_shape_and_grad(static_generator, size, x1, x2) assert (x1 == x2).all() size = 100 generator = GeneratorSpherical(size) static_generator = StaticGenerator(generator) r1, theta1, phi1 = static_generator.get_examples() r2, theta2, phi2 = static_generator.get_examples() assert _check_shape_and_grad(generator, size) assert _check_shape_and_grad(static_generator, size, r1, theta1, phi1, r2, theta2, phi2) assert (r1 == r2).all() and (theta1 == theta2).all() and (phi1 == phi2).all()
def test_mesh_generator(): size = 10 x_min, x_max = 0.0, 1.0 y_min, y_max = 1.0, 2.0 z_min, z_max = 2.0, 3.0 generator1 = Generator1D(size) mesh_generator = MeshGenerator(generator1) x = mesh_generator.get_examples() assert _check_shape_and_grad(mesh_generator, size, x) mesh_generator = MeshGenerator(generator1, generator1, generator1) m1, m2, m3 = mesh_generator.get_examples() assert _check_shape_and_grad(mesh_generator, (size**3), m1, m2, m3) generator1x = Generator1D(size, x_min, x_max, method="equally-spaced") generator1y = Generator1D(size, y_min, y_max, method="equally-spaced") generator1z = Generator1D(size, z_min, z_max, method="equally-spaced") generator3 = Generator3D((size, size, size), (x_min, y_min, z_min), (x_max, y_max, z_max), method="equally-spaced") mesh_generator = MeshGenerator(generator1x, generator1y, generator1z) m1, m2, m3 = mesh_generator.get_examples() g1, g2, g3 = generator3.get_examples() assert _check_shape_and_grad(mesh_generator, (size**3), m1, m2, m3) assert _check_iterable_equal(g1, m1) assert _check_iterable_equal(g2, m2) assert _check_iterable_equal(g3, m3) generator1x = Generator1D(size, x_min, x_max, method="equally-spaced") generator1y = Generator1D(size, y_min, y_max, method="equally-spaced") generator1z = Generator1D(size, z_min, z_max, method="equally-spaced") generator3 = Generator3D((size, size, size), (x_min, y_min, z_min), (x_max, y_max, z_max), method="equally-spaced") xor_generator = generator1x ^ generator1y ^ generator1z m1, m2, m3 = xor_generator.get_examples() g1, g2, g3 = generator3.get_examples() assert _check_shape_and_grad(xor_generator, (size**3), m1, m2, m3) assert _check_iterable_equal(g1, m1) assert _check_iterable_equal(g2, m2) assert _check_iterable_equal(g3, m3) str(mesh_generator) repr(mesh_generator)
def test_generator1d(): size = 32 generator = Generator1D(size=size, t_min=0.0, t_max=2.0, method='uniform') x = generator.getter() assert _check_shape_and_grad(generator, size, x) generator = Generator1D(size=size, t_min=0.0, t_max=2.0, method='equally-spaced') x = generator.getter() assert _check_shape_and_grad(generator, size, x) generator = Generator1D(size=size, t_min=0.0, t_max=2.0, method='equally-spaced-noisy') x = generator.getter() assert _check_shape_and_grad(generator, size, x) generator = Generator1D(size=size, t_min=0.1, t_max=2.0, method='log-spaced') x = generator.getter() assert _check_shape_and_grad(generator, size, x) generator = Generator1D(size=size, t_min=0.1, t_max=2.0, method='log-spaced-noisy') x = generator.getter() assert _check_shape_and_grad(generator, size, x) generator = Generator1D(size=size, t_min=0.1, t_max=2.0, method='log-spaced-noisy', noise_std=0.01) x = generator.getter() assert _check_shape_and_grad(generator, size, x) generator = Generator1D(size=size, t_min=0.1, t_max=2.0, method='chebyshev') x = generator.getter() assert _check_shape_and_grad(generator, size, x) generator = Generator1D(size=size, t_min=0.1, t_max=2.0, method='chebyshev1') x = generator.getter() assert _check_shape_and_grad(generator, size, x) generator = Generator1D(size=size, t_min=0.1, t_max=2.0, method='chebyshev2') x = generator.getter() assert _check_shape_and_grad(generator, size, x) with raises(ValueError): generator = Generator1D(size=size, t_min=0.0, t_max=2.0, method='magic') str(generator) repr(generator)