def test_storage_persistence(compression, tmp_path): """ test writing to persistent trackers """ dim = 5 grid = UnitGrid([dim]) field = ScalarField(grid) path = tmp_path / f"test_storage_persistence_{compression}.hdf5" # write some data for write_mode in ["append", "truncate_once", "truncate"]: storage = FileStorage(path, info={"a": 1}, write_mode=write_mode, compression=compression) # first batch storage.start_writing(field, info={"b": 2}) storage.append(field.copy(data=np.arange(dim)), 0) storage.append(field.copy(data=np.arange(dim, 2 * dim))) storage.end_writing() # read first batch np.testing.assert_array_equal(storage.times, np.arange(2)) np.testing.assert_array_equal(np.ravel(storage.data), np.arange(10)) assert {"a": 1, "b": 2}.items() <= storage.info.items() # second batch storage.start_writing(field, info={"c": 3}) storage.append(field.copy(data=np.arange(2 * dim, 3 * dim)), 2) storage.end_writing() storage.close() # read the data storage = FileStorage(path) if write_mode == "truncate": np.testing.assert_array_equal(storage.times, np.array([2])) np.testing.assert_array_equal(np.ravel(storage.data), np.arange(10, 15)) assert storage.shape == (1, 5) info = {"c": 3} assert info.items() <= storage.info.items() else: np.testing.assert_array_equal(storage.times, np.arange(0, 3)) np.testing.assert_array_equal(np.ravel(storage.data), np.arange(0, 15)) assert storage.shape == (3, 5) info = {"a": 1, "b": 2, "c": 3} assert info.items() <= storage.info.items()
def test_pde_spatial_args(): """ test ScalarFieldExpression without extra dependence """ eq = PDE({"a": "x"}) field = ScalarField(grids.UnitGrid([2])) rhs = eq.evolution_rate(field) assert rhs == field.copy(data=[0.5, 1.5]) rhs = eq.make_pde_rhs(field, backend="numba") np.testing.assert_allclose(rhs(field.data, 0.0), np.array([0.5, 1.5])) eq = PDE({"a": "x + y"}) with pytest.raises(RuntimeError): eq.evolution_rate(field)