|
1 | 1 | import os |
| 2 | +import tempfile |
2 | 3 | from pathlib import Path |
3 | 4 |
|
4 | 5 | import pytest |
|
23 | 24 |
|
24 | 25 | @pytest.mark.skipif(IN_GITHUB_ACTIONS, reason="Test doesn't work in Github Actions.") |
25 | 26 | def test_vtk(solver_output_path: Path, solver_output_simid_jobid: tuple[int, int], zarr_path: Path) -> None: |
26 | | - sim_id, job_id = solver_output_simid_jobid |
27 | | - result = Result(solver_output_dir=solver_output_path, sim_id=sim_id, job_id=job_id, zarr_dir=zarr_path) |
28 | | - mesh: CartesianMesh = result.mesh |
29 | | - domain_names: list[str] = mesh.get_volume_domain_names() |
30 | | - assert domain_names == ["Nucleus", "cytosol", "ec"] |
31 | | - channel_names = [c.label for c in result.channel_data] |
32 | | - assert channel_names == ["region_mask", "t", "x", "y", "z", "C_cyt", "Ran_cyt", "RanC_cyt", "RanC_nuc", "J_r0"] |
33 | | - times: list[float] = result.time_points |
34 | | - assert times == [0.0, 0.25, 0.5, 0.75, 1.0] |
| 27 | + with tempfile.TemporaryDirectory() as tmpdirname, Path(tmpdirname) as tmp_dir: |
| 28 | + sim_id, job_id = solver_output_simid_jobid |
| 29 | + result = Result(solver_output_dir=solver_output_path, sim_id=sim_id, job_id=job_id, zarr_dir=tmp_dir) |
| 30 | + mesh: CartesianMesh = result.mesh |
| 31 | + domain_names: list[str] = mesh.get_volume_domain_names() |
| 32 | + assert domain_names == ["Nucleus", "cytosol", "ec"] |
| 33 | + channel_names = [c.label for c in result.channel_data] |
| 34 | + assert channel_names == ["region_mask", "t", "x", "y", "z", "C_cyt", "Ran_cyt", "RanC_cyt", "RanC_nuc", "J_r0"] |
| 35 | + times: list[float] = result.time_points |
| 36 | + assert times == [0.0, 0.25, 0.5, 0.75, 1.0] |
35 | 37 |
|
36 | | - domain_name = domain_names[0] |
| 38 | + domain_name = domain_names[0] |
37 | 39 |
|
38 | | - vis_mesh: VisMesh = from_mesh_data(cartesian_mesh=mesh, domain_name=domain_name, b_volume=True) |
| 40 | + vis_mesh: VisMesh = from_mesh_data(cartesian_mesh=mesh, domain_name=domain_name, b_volume=True) |
39 | 41 |
|
40 | | - assert vis_mesh.visVoxels is not None |
41 | | - finite_volume_indices: list[FiniteVolumeIndex] = [ |
42 | | - vox.finiteVolumeIndex for vox in vis_mesh.visVoxels if vox.finiteVolumeIndex is not None |
43 | | - ] |
44 | | - finite_volume_index_data: FiniteVolumeIndexData = FiniteVolumeIndexData( |
45 | | - domainName=domain_name, finiteVolumeIndices=finite_volume_indices |
46 | | - ) |
47 | | - empty_mesh_file: Path = Path(f"empty_mesh_{domain_name}.vtu") |
48 | | - index_file: Path = Path(f"index_file_{domain_name}.json") |
49 | | - assert empty_mesh_file.name == "empty_mesh_Nucleus.vtu" |
50 | | - assert index_file.name == "index_file_Nucleus.json" |
51 | | - write_finite_volume_index_data( |
52 | | - finite_volume_index_file=index_file, finite_volume_index_data=finite_volume_index_data |
53 | | - ) |
| 42 | + assert vis_mesh.visVoxels is not None |
| 43 | + finite_volume_indices: list[FiniteVolumeIndex] = [ |
| 44 | + vox.finiteVolumeIndex for vox in vis_mesh.visVoxels if vox.finiteVolumeIndex is not None |
| 45 | + ] |
| 46 | + finite_volume_index_data: FiniteVolumeIndexData = FiniteVolumeIndexData( |
| 47 | + domainName=domain_name, finiteVolumeIndices=finite_volume_indices |
| 48 | + ) |
| 49 | + empty_mesh_file = tmp_dir / f"empty_mesh_{domain_name}.vtu" |
| 50 | + index_file = tmp_dir / f"index_file_{domain_name}.json" |
| 51 | + assert empty_mesh_file.name == "empty_mesh_Nucleus.vtu" |
| 52 | + assert index_file.name == "index_file_Nucleus.json" |
| 53 | + write_finite_volume_index_data( |
| 54 | + finite_volume_index_file=index_file, finite_volume_index_data=finite_volume_index_data |
| 55 | + ) |
54 | 56 |
|
55 | | - write_finite_volume_smoothed_vtk_grid_and_index_data( |
56 | | - vis_mesh=vis_mesh, domain_name=domain_name, vtu_file=empty_mesh_file, index_file=index_file |
57 | | - ) |
| 57 | + write_finite_volume_smoothed_vtk_grid_and_index_data( |
| 58 | + vis_mesh=vis_mesh, domain_name=domain_name, vtu_file=empty_mesh_file, index_file=index_file |
| 59 | + ) |
58 | 60 |
|
59 | | - var_name = "Nucleus::RanC_nuc" |
60 | | - simple_var_name = var_name.split("::")[-1] |
61 | | - time: float = times[0] |
62 | | - data_array: NDArray1D = result.pde_dataset.get_data(var_name, time) |
63 | | - new_mesh_file: Path = Path(f"mesh_{domain_name}_{simple_var_name}_{time}.vtu") |
64 | | - assert new_mesh_file.name == "mesh_Nucleus_RanC_nuc_0.0.vtu" |
65 | | - write_data_array_to_new_vtk_file( |
66 | | - empty_mesh_file=empty_mesh_file, var_name=var_name, data=data_array, new_mesh_file=new_mesh_file |
67 | | - ) |
| 61 | + var_name = "Nucleus::RanC_nuc" |
| 62 | + simple_var_name = var_name.split("::")[-1] |
| 63 | + time: float = times[0] |
| 64 | + data_array: NDArray1D = result.pde_dataset.get_data(var_name, time) |
| 65 | + new_mesh_file = tmp_dir / f"mesh_{domain_name}_{simple_var_name}_{time}.vtu" |
| 66 | + assert new_mesh_file.name == "mesh_Nucleus_RanC_nuc_0.0.vtu" |
| 67 | + write_data_array_to_new_vtk_file( |
| 68 | + empty_mesh_file=empty_mesh_file, var_name=var_name, data=data_array, new_mesh_file=new_mesh_file |
| 69 | + ) |
68 | 70 |
|
69 | | - # plot with pyvista |
70 | | - pyvista_mesh = pyvista.read(str(new_mesh_file)) |
71 | | - # pyvista_mesh.plot() |
72 | | - plotter = pyvista.Plotter(off_screen=True) |
73 | | - plotter.add_mesh(pyvista_mesh) |
74 | | - plotter.screenshot(f"mesh_{domain_name}_{simple_var_name}_{time}.png") |
75 | | - plotter.close() |
| 71 | + # plot with pyvista |
| 72 | + pyvista_mesh = pyvista.read(str(new_mesh_file)) |
| 73 | + # pyvista_mesh.plot() |
| 74 | + plotter = pyvista.Plotter(off_screen=True) |
| 75 | + plotter.add_mesh(pyvista_mesh) |
| 76 | + plotter.screenshot(tmp_dir / f"mesh_{domain_name}_{simple_var_name}_{time}.png") |
| 77 | + plotter.close() |
0 commit comments