Source code for ewokstomo.tests.online.test_preprocessing

import numpy as np
import h5py
from unittest.mock import MagicMock, patch

from ewokstomo.tasks.online.preprocessing import (
    FlatFieldCorrection,
    apply_phase_retrieval,
)


[docs] def test_apply_flat_field_correction_calls_normalize(): projections = np.ones((3, 4, 5), dtype=np.float32) indices = np.array([0, 1, 2]) ffc = FlatFieldCorrection() ffc.reduced_darks = {0: np.zeros((4, 5))} ffc.reduced_flats = {1: np.ones((4, 5))} with patch("ewokstomo.tasks.online.preprocessing.FlatField") as MockFlatField: mock_instance = MagicMock() MockFlatField.return_value = mock_instance result = ffc.apply_correction(projections, indices) # Ensure FlatField was constructed correctly MockFlatField.assert_called_once() mock_instance.normalize_radios.assert_called_once_with(projections) # The operation is in-place assert result is projections
[docs] def test_load_reduced_data_from_hdf5(tmp_path): file_path = tmp_path / "reduced_dark.h5" with h5py.File(file_path, "w") as h5f: grp = h5f.create_group("entry0000") data = np.ones((4, 5), dtype=np.float32) grp.create_dataset("darks", data=data) ffc = FlatFieldCorrection() reduced = ffc._load_reduced_data( file_path=str(file_path), data_type="dark", idx=0, ) assert isinstance(reduced, dict) assert 0 in reduced assert np.array_equal(reduced[0], data)
[docs] def test_apply_phase_retrieval_basic_flow(): projections = np.ones((3, 4, 5), dtype=np.float32) with patch( "ewokstomo.tasks.online.preprocessing.PaganinPhaseRetrieval" ) as MockPaganin: mock_instance = MagicMock() MockPaganin.return_value = mock_instance result = apply_phase_retrieval( projections=projections, distance_m=0.1, energy_keV=20.0, pixel_size_m=1e-6, delta_beta=100.0, ) # Called once per projection assert mock_instance.retrieve_phase.call_count == projections.shape[0] # Shape preserved assert result.shape == projections.shape