Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 13 additions & 6 deletions nion/data/Core.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ def calculate_data() -> _ImageDataType:
scaling = numpy.sqrt(data_shape[1] * data_shape[0])
return scipy.fft.ifft2(scipy.fft.ifftshift(data_copy) * scaling) # type: ignore
else:
raise NotImplementedError()
raise NotImplementedError(f"Inverse FFT: unsupported data shape {data_shape}")

src_dimensional_calibrations = data_and_metadata.dimensional_calibrations

Expand Down Expand Up @@ -723,7 +723,7 @@ def function_fourier_mask(data_and_metadata_in: _DataAndMetadataIndeterminateSiz
shape = DataAndMetadata.determine_shape(data_and_metadata_c, mask_data_and_metadata_c)

if shape is None:
raise ValueError("Fourier mask: data and ask shapes do not match or are indeterminate")
raise ValueError("Fourier mask: data and mask shapes do not match or are indeterminate")

data_and_metadata = DataAndMetadata.promote_constant(data_and_metadata_c, shape)
mask_data_and_metadata = DataAndMetadata.promote_constant(mask_data_and_metadata_c, shape)
Expand Down Expand Up @@ -1168,7 +1168,7 @@ def calculate_data() -> _ImageDataType:
slice_start = max(slice_start, 0)
slice_end = slice_start + slice_width
slice_end = min(shape[signal_index], slice_end)
return typing.cast(_ImageDataType, numpy.sum(data[..., slice_start:slice_end], signal_index))
return numpy.sum(data[..., slice_start:slice_end], signal_index)

dimensional_calibrations = data_and_metadata.dimensional_calibrations

Expand Down Expand Up @@ -1373,7 +1373,11 @@ def calculate_data() -> _ImageDataType:
rgba_image[:, 3] = numpy.average(data[..., 3], axis)
return rgba_image
else:
return typing.cast(_ImageDataType, numpy.sum(data, typing.cast(typing.Any, axis), keepdims=keepdims))
# this bit of gymnastics is necessary to work around a seeming type checking bug in numpy 2.5
if keepdims:
return numpy.sum(data, axis, keepdims=True)
else:
return numpy.sum(data, axis, keepdims=False)

if not Image.is_data_valid(data_and_metadata.data):
raise ValueError("Sum: invalid data")
Expand Down Expand Up @@ -1421,7 +1425,10 @@ def calculate_data() -> _ImageDataType:
rgba_image[:, 3] = numpy.average(data[..., 3], axis)
return rgba_image
else:
return typing.cast(_ImageDataType, numpy.mean(data, axis, keepdims=keepdims))
if keepdims:
return numpy.mean(data, axis, keepdims=True)
else:
return typing.cast(_ImageDataType, numpy.mean(data, axis, keepdims=False))

if not Image.is_data_valid(data_and_metadata.data):
raise ValueError("Mean: invalid data")
Expand Down Expand Up @@ -1985,7 +1992,7 @@ def calculate_data(data: _ImageDataType) -> _ImageDataType:
yy, xx = get_coordinates(start_data, end_data, actual_integration_width)
samples = scipy.ndimage.map_coordinates(data, (yy, xx), order=spline_order)
if len(samples.shape) > 1:
return typing.cast(_ImageDataType, numpy.sum(samples, 0, dtype=data.dtype))
return numpy.sum(samples, 0, dtype=data.dtype)
else:
return typing.cast(_ImageDataType, samples)
else:
Expand Down
6 changes: 3 additions & 3 deletions nion/data/test/Core_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -413,12 +413,12 @@ def test_slice_sum_works_on_2d_data(self) -> None:
self.assertEqual(result.dimensional_calibrations[0], data_and_metadata.dimensional_calibrations[0])

def test_fft_works_on_rgba_data(self) -> None:
random_data = numpy.random.randint(0, 256, (32, 32, 4), numpy.uint8)
random_data = numpy.random.randint(0, 256, (32, 32, 4), dtype=numpy.uint8)
data_and_metadata = DataAndMetadata.new_data_and_metadata(data=random_data)
Core.function_fft(data_and_metadata)

def test_display_data_2d_not_a_view(self) -> None:
random_data = numpy.random.randint(0, 256, (2, 2), numpy.uint8)
random_data = numpy.random.randint(0, 256, (2, 2), dtype=numpy.uint8)
data_and_metadata = DataAndMetadata.new_data_and_metadata(data=random_data)
display_xdata = Core.function_display_data(data_and_metadata)
assert display_xdata
Expand All @@ -427,7 +427,7 @@ def test_display_data_2d_not_a_view(self) -> None:
self.assertTrue(numpy.array_equal(display_xdata._data_ex, display_xdata_copy._data_ex))

def test_display_rgba_with_1d_rgba(self) -> None:
random_data = numpy.random.randint(0, 256, (32, 4), numpy.uint8)
random_data = numpy.random.randint(0, 256, (32, 4), dtype=numpy.uint8)
data_and_metadata = DataAndMetadata.new_data_and_metadata(data=random_data)
Core.function_display_rgba(data_and_metadata)

Expand Down
Loading