Skip to content

Commit 44c71b8

Browse files
authored
Merge branch 'main' into 2279_Developer_Documentation_on_System_Testing
2 parents e8e9da6 + a7fce84 commit 44c71b8

31 files changed

+230
-318
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2320: Enhance System Tests for Spectrum Viewer
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#2330: The PySide6 module is now excluded when building via PyInstaller due to hook clashes
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#2281 : TestGuiSystemReconstruction test_correlate should check COR and tilt

mantidimaging/core/data/dataset.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def remove_nones(image_stacks: list[ImageStack | None]) -> list[ImageStack]:
2222
return [image_stack for image_stack in image_stacks if image_stack is not None]
2323

2424

25-
class BaseDataset:
25+
class Dataset:
2626

2727
def __init__(
2828
self,
@@ -185,15 +185,15 @@ def is_processed(self) -> bool:
185185
return False
186186

187187

188-
class MixedDataset(BaseDataset):
188+
class MixedDataset(Dataset):
189189
pass
190190

191191

192-
class StrictDataset(BaseDataset):
192+
class StrictDataset(Dataset):
193193
pass
194194

195195

196-
def _get_stack_data_type(stack_id: uuid.UUID, dataset: BaseDataset) -> str:
196+
def _get_stack_data_type(stack_id: uuid.UUID, dataset: Dataset) -> str:
197197
"""
198198
Find the data type as a string of a stack.
199199
:param stack_id: The ID of the stack.

mantidimaging/core/data/test/dataset_test.py

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import numpy as np
1010

1111
from mantidimaging.core.data import ImageStack
12-
from mantidimaging.core.data.dataset import BaseDataset, _get_stack_data_type
12+
from mantidimaging.core.data.dataset import Dataset, _get_stack_data_type
1313
from mantidimaging.core.utility.data_containers import ProjectionAngles, FILE_TYPES
1414
from mantidimaging.test_helpers.unit_test_helper import generate_images
1515

@@ -19,11 +19,11 @@ def _make_standard_dataset(shape=(2, 5, 5)):
1919
image_stacks = [generate_images(shape) for _ in range(6)]
2020
image_stacks[0].name = "samplename"
2121

22-
ds = BaseDataset(sample=image_stacks[0],
23-
flat_before=image_stacks[1],
24-
flat_after=image_stacks[2],
25-
dark_before=image_stacks[3],
26-
dark_after=image_stacks[4])
22+
ds = Dataset(sample=image_stacks[0],
23+
flat_before=image_stacks[1],
24+
flat_after=image_stacks[2],
25+
dark_before=image_stacks[3],
26+
dark_after=image_stacks[4])
2727
ds.proj180deg = image_stacks[5]
2828
return ds, image_stacks
2929

@@ -41,19 +41,19 @@ def _set_fake_projection_angles(image_stack: ImageStack):
4141
class DatasetTest(unittest.TestCase):
4242

4343
def test_create_dataset(self):
44-
ds = BaseDataset()
44+
ds = Dataset()
4545
self.assertIsInstance(ds.id, uuid.UUID)
4646
self.assertEqual(ds.name, "")
4747

4848
def test_prevent_positional_parameters(self):
49-
self.assertRaises(TypeError, BaseDataset, mock.Mock())
49+
self.assertRaises(TypeError, Dataset, mock.Mock())
5050

5151
def test_dataset_name(self):
52-
ds = BaseDataset(name="a_dataset")
52+
ds = Dataset(name="a_dataset")
5353
self.assertEqual(ds.name, "a_dataset")
5454

5555
def test_add_recon(self):
56-
ds = BaseDataset()
56+
ds = Dataset()
5757
recons = [generate_images() for _ in range(3)]
5858
[ds.add_recon(r) for r in recons]
5959

@@ -62,7 +62,7 @@ def test_add_recon(self):
6262
self.assertEqual(3, len(ds.recons))
6363

6464
def test_delete_recon(self):
65-
ds = BaseDataset()
65+
ds = Dataset()
6666
recons = [generate_images() for _ in range(3)]
6767
[ds.add_recon(r) for r in recons]
6868

@@ -71,36 +71,36 @@ def test_delete_recon(self):
7171
self.assertNotIn(recons[-1], ds.all)
7272

7373
def test_delete_failure(self):
74-
ds = BaseDataset()
74+
ds = Dataset()
7575
with self.assertRaises(KeyError):
7676
ds.delete_stack("nonexistent-id")
7777

7878
def test_delete_all_recons(self):
79-
ds = BaseDataset()
79+
ds = Dataset()
8080
recons = [generate_images() for _ in range(3)]
8181
[ds.add_recon(r) for r in recons]
8282
ds.delete_recons()
8383
self.assertListEqual(ds.recons.stacks, [])
8484

8585
def test_sinograms(self):
86-
ds = BaseDataset()
86+
ds = Dataset()
8787
ds.sinograms = sinograms = generate_images()
8888
self.assertIs(ds.sinograms, sinograms)
8989

9090
def test_delete_sinograms(self):
91-
ds = BaseDataset()
91+
ds = Dataset()
9292
ds.sinograms = sinograms = generate_images()
9393
ds.delete_stack(sinograms.id)
9494
self.assertIsNone(ds.sinograms)
9595

9696
def test_stacks_in_all(self):
9797
image_stacks = [mock.Mock() for _ in range(3)]
98-
ds = BaseDataset(stacks=image_stacks)
98+
ds = Dataset(stacks=image_stacks)
9999
self.assertListEqual(ds.all, image_stacks)
100100

101101
def test_sample_in_all(self):
102102
image_sample = mock.Mock(proj180deg=None)
103-
ds = BaseDataset(sample=image_sample)
103+
ds = Dataset(sample=image_sample)
104104
self.assertCountEqual(ds.all, [image_sample])
105105

106106
def test_all_for_full_dataset(self):
@@ -111,27 +111,27 @@ def test_all_for_full_dataset(self):
111111

112112
def test_delete_stack_from_stacks_list(self):
113113
image_stacks = [mock.Mock() for _ in range(3)]
114-
ds = BaseDataset(stacks=image_stacks)
114+
ds = Dataset(stacks=image_stacks)
115115
prev_stacks = image_stacks.copy()
116116
ds.delete_stack(image_stacks[-1].id)
117117
self.assertListEqual(ds.all, prev_stacks[:-1])
118118

119119
def test_get_stack_data_type_returns_recon(self):
120120
recon = generate_images()
121121
recon_id = recon.id
122-
dataset = BaseDataset()
122+
dataset = Dataset()
123123
dataset.recons.append(recon)
124124
self.assertEqual(_get_stack_data_type(recon_id, dataset), "Recon")
125125

126126
def test_get_stack_data_type_returns_images(self):
127127
images = generate_images()
128128
images_id = images.id
129-
dataset = BaseDataset(stacks=[images])
129+
dataset = Dataset(stacks=[images])
130130
self.assertEqual(_get_stack_data_type(images_id, dataset), "Images")
131131

132132
def test_attribute_not_set_returns_none(self):
133133
sample = mock.Mock()
134-
dataset = BaseDataset(sample=sample)
134+
dataset = Dataset(sample=sample)
135135

136136
self.assertIsNone(dataset.flat_before)
137137
self.assertIsNone(dataset.flat_after)
@@ -140,7 +140,7 @@ def test_attribute_not_set_returns_none(self):
140140

141141
def test_set_flat_before(self):
142142
sample = mock.Mock()
143-
dataset = BaseDataset(sample=sample)
143+
dataset = Dataset(sample=sample)
144144
flat_before = mock.Mock(id="1234")
145145
dataset.flat_before = flat_before
146146
self.assertIs(flat_before, dataset.flat_before)
@@ -258,21 +258,21 @@ def test_delete_dark_after(self):
258258
self.assertIsNone(ds.dark_after)
259259

260260
def test_set_stack_by_type_sample(self):
261-
ds = BaseDataset()
261+
ds = Dataset()
262262
sample = mock.Mock()
263263
ds.set_stack(FILE_TYPES.SAMPLE, sample)
264264

265265
self.assertEqual(ds.sample, sample)
266266

267267
def test_set_stack_by_type_flat_before(self):
268-
ds = BaseDataset()
268+
ds = Dataset()
269269
stack = mock.Mock()
270270
ds.set_stack(FILE_TYPES.FLAT_BEFORE, stack)
271271

272272
self.assertEqual(ds.flat_before, stack)
273273

274274
def test_set_stack_by_type_180(self):
275-
ds = BaseDataset()
275+
ds = Dataset()
276276
sample = mock.Mock()
277277
stack = mock.Mock()
278278
ds.set_stack(FILE_TYPES.SAMPLE, sample)
@@ -281,10 +281,10 @@ def test_set_stack_by_type_180(self):
281281
self.assertEqual(ds.proj180deg, stack)
282282

283283
def test_processed_is_true(self):
284-
ds = BaseDataset(sample=generate_images())
284+
ds = Dataset(sample=generate_images())
285285
ds.sample.record_operation("", "")
286286
self.assertTrue(ds.is_processed)
287287

288288
def test_processed_is_false(self):
289-
ds = BaseDataset(sample=generate_images())
289+
ds = Dataset(sample=generate_images())
290290
self.assertFalse(ds.is_processed)

mantidimaging/core/io/saver.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from ..utility.version_check import CheckVersion
2323

2424
if TYPE_CHECKING:
25-
from ..data.dataset import StrictDataset
25+
from ..data.dataset import Dataset
2626
from ..data.imagestack import ImageStack
2727
from ..utility.data_containers import Indices
2828

@@ -180,7 +180,7 @@ def image_save(images: ImageStack,
180180
return names
181181

182182

183-
def nexus_save(dataset: StrictDataset, path: str, sample_name: str, save_as_float: bool) -> None:
183+
def nexus_save(dataset: Dataset, path: str, sample_name: str, save_as_float: bool) -> None:
184184
"""
185185
Uses information from a StrictDataset to create a NeXus file.
186186
:param dataset: The dataset to save as a NeXus file.
@@ -202,7 +202,7 @@ def nexus_save(dataset: StrictDataset, path: str, sample_name: str, save_as_floa
202202
nexus_file.close()
203203

204204

205-
def _nexus_save(nexus_file: h5py.File, dataset: StrictDataset, sample_name: str, save_as_float: bool) -> None:
205+
def _nexus_save(nexus_file: h5py.File, dataset: Dataset, sample_name: str, save_as_float: bool) -> None:
206206
"""
207207
Takes a NeXus file and writes the StrictDataset information to it.
208208
:param nexus_file: The NeXus file.
@@ -255,7 +255,7 @@ def _nexus_save(nexus_file: h5py.File, dataset: StrictDataset, sample_name: str,
255255
_save_recon_to_nexus(nexus_file, recon, dataset.sample.filenames[0])
256256

257257

258-
def _save_processed_data_to_nexus(nexus_file: h5py.File, dataset: StrictDataset, rotation_angle: h5py.Dataset,
258+
def _save_processed_data_to_nexus(nexus_file: h5py.File, dataset: Dataset, rotation_angle: h5py.Dataset,
259259
image_key: h5py.Dataset, save_as_float: bool) -> None:
260260
data = nexus_file.create_group(NEXUS_PROCESSED_DATA_PATH)
261261
data["rotation_angle"] = rotation_angle
@@ -270,7 +270,7 @@ def _save_processed_data_to_nexus(nexus_file: h5py.File, dataset: StrictDataset,
270270
process.create_dataset("version", data=np.bytes_(package_version))
271271

272272

273-
def _save_image_stacks_to_nexus(dataset: StrictDataset, data_group: h5py.Group, save_as_float: bool) -> None:
273+
def _save_image_stacks_to_nexus(dataset: Dataset, data_group: h5py.Group, save_as_float: bool) -> None:
274274
combined_data_shape = (sum([len(arr) for arr in dataset.nexus_arrays]), ) + dataset.nexus_arrays[0].shape[1:]
275275

276276
index = 0

mantidimaging/eyes_tests/base_eyes.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from PyQt5.QtWidgets import QMainWindow, QMenu, QWidget, QApplication
1414

1515
from mantidimaging.core.data import ImageStack
16-
from mantidimaging.core.data.dataset import StrictDataset, MixedDataset
16+
from mantidimaging.core.data.dataset import StrictDataset, Dataset
1717
from mantidimaging.core.io.loader import loader
1818
from mantidimaging.core.utility.data_containers import Indices
1919
from mantidimaging.eyes_tests.eyes_manager import EyesManager
@@ -118,16 +118,15 @@ def _load_strict_data_set(self, set_180: bool = False):
118118

119119
return vis
120120

121-
def _create_mixed_dataset(self) -> MixedDataset:
122-
mixed_dataset = MixedDataset(stacks=[generate_images()], name="a-mixed-dataset")
123-
124-
self.imaging.presenter.model.add_dataset_to_model(mixed_dataset)
125-
self.imaging.presenter.create_mixed_dataset_tree_view_items(mixed_dataset)
126-
self.imaging.presenter.create_mixed_dataset_stack_windows(mixed_dataset)
121+
def _create_new_dataset(self) -> Dataset:
122+
new_dataset = Dataset(sample=generate_images(), name="new")
123+
self.imaging.presenter.create_strict_dataset_stack_windows(new_dataset)
124+
self.imaging.presenter.create_strict_dataset_tree_view_items(new_dataset)
125+
self.imaging.presenter.model.add_dataset_to_model(new_dataset)
127126

128127
QApplication.sendPostedEvents()
129128

130-
return mixed_dataset
129+
return new_dataset
131130

132131
def _get_top_level_widget(cls, widget_type):
133132
for widget in cls.app.topLevelWidgets():

mantidimaging/eyes_tests/main_window_test.py

Lines changed: 5 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -87,56 +87,26 @@ def test_show_add_stack_to_existing_dataset_dialog_for_strict_dataset(self):
8787

8888
self.check_target(widget=self.imaging.add_to_dataset_dialog)
8989

90-
def test_show_add_stack_to_existing_dataset_dialog_for_mixed_dataset(self):
91-
self._create_mixed_dataset()
92-
self.imaging.show_add_stack_to_existing_dataset_dialog(list(self.imaging.presenter.all_dataset_ids)[0])
93-
self.check_target(widget=self.imaging.add_to_dataset_dialog)
94-
9590
def test_clicking_tab_changes_tree_view_selection(self):
9691
self._load_strict_data_set()
9792
sample_vis = self._load_strict_data_set()
9893
sample_vis.raise_()
9994

10095
self.check_target()
10196

102-
def test_move_stack_dialog_when_both_strict(self):
97+
def test_move_within_dataset(self):
10398
sample_vis = self._load_strict_data_set()
104-
self._load_strict_data_set()
105-
10699
self.imaging.presenter._set_tree_view_selection_with_id(sample_vis.id)
107-
108100
self.imaging._move_stack()
109-
self.check_target(self.imaging.move_stack_dialog)
110-
111-
def test_move_stack_dialog_strict_to_mixed(self):
112-
sample_vis = self._load_strict_data_set()
113-
mixed_ds = self._create_mixed_dataset()
114101

115-
self.imaging.presenter._set_tree_view_selection_with_id(sample_vis.id)
116-
117-
self.imaging._move_stack()
118-
self.imaging.move_stack_dialog.datasetSelector.setCurrentText(mixed_ds.name)
119102
self.check_target(self.imaging.move_stack_dialog)
120103

121-
def test_move_stack_dialog_mixed_to_strict(self):
122-
mixed_ds = self._create_mixed_dataset()
104+
def test_move_to_another_dataset(self):
123105
sample_vis = self._load_strict_data_set()
124-
strict_ds_id = self.imaging.presenter.model.get_parent_dataset(sample_vis.id)
125-
strict_ds = self.imaging.get_dataset(strict_ds_id)
126-
127-
self.imaging.presenter._set_tree_view_selection_with_id(mixed_ds.all[0].id)
106+
new_dataset = self._create_new_dataset()
128107

108+
self.imaging.presenter._set_tree_view_selection_with_id(sample_vis.id)
129109
self.imaging._move_stack()
130-
self.imaging.move_stack_dialog.datasetSelector.setCurrentText(strict_ds.name)
131-
self.check_target(self.imaging.move_stack_dialog)
132-
133-
def test_move_stack_dialog_both_mixed(self):
134-
mixed_ds_1 = self._create_mixed_dataset()
135-
mixed_ds_2 = self._create_mixed_dataset()
136-
mixed_ds_2.name = "other-mixed-ds-name"
110+
self.imaging.move_stack_dialog.datasetSelector.setCurrentText(new_dataset.name)
137111

138-
self.imaging.presenter._set_tree_view_selection_with_id(mixed_ds_1.all[0].id)
139-
140-
self.imaging._move_stack()
141-
self.imaging.move_stack_dialog.datasetSelector.setCurrentText(mixed_ds_2.name)
142112
self.check_target(self.imaging.move_stack_dialog)

mantidimaging/eyes_tests/nexus_save_dialog_test.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,18 @@
22
# SPDX - License - Identifier: GPL-3.0-or-later
33
from __future__ import annotations
44

5-
from typing import NamedTuple
65
from unittest import mock
7-
from uuid import UUID, uuid4
86

7+
from mantidimaging.core.data.dataset import Dataset
98
from mantidimaging.eyes_tests.base_eyes import BaseEyesTest
109

1110

1211
class NexusSaveDialogTest(BaseEyesTest):
1312

1413
def test_save_dialog_opens_with_dataset(self):
15-
TestTuple = NamedTuple('TestTuple', [('id', UUID), ('name', str)])
16-
dataset_list = [TestTuple(uuid4(), 'Test Dataset')]
17-
with mock.patch("mantidimaging.gui.windows.main.MainWindowView.strict_dataset_list",
18-
new_callable=mock.PropertyMock) as mock_dataset_list:
19-
mock_dataset_list.return_value = dataset_list
14+
with mock.patch("mantidimaging.gui.windows.main.MainWindowPresenter.datasets",
15+
new_callable=mock.PropertyMock) as mock_datasets:
16+
mock_datasets.return_value = [Dataset(name='Test Dataset')]
2017
self.imaging.actionSaveNeXusFile.trigger()
2118

2219
self.check_target(widget=self.imaging.nexus_save_dialog)

0 commit comments

Comments
 (0)