tip modelling and deconvolution
This commit is contained in:
83
tests/node_tests/resample.py
Normal file
83
tests/node_tests/resample.py
Normal file
@@ -0,0 +1,83 @@
|
||||
import numpy as np
|
||||
import pytest
|
||||
from tests.node_tests._shared import make_field
|
||||
|
||||
|
||||
def test_resample_upsample():
|
||||
from backend.nodes.resample import Resample
|
||||
|
||||
node = Resample()
|
||||
field = make_field(shape=(32, 32))
|
||||
result, = node.process(field, width=64, height=64, interpolation="linear")
|
||||
|
||||
assert result.data.shape == (64, 64)
|
||||
assert np.isclose(result.xreal, field.xreal)
|
||||
assert np.isclose(result.yreal, field.yreal)
|
||||
# dx should halve since physical size is same but twice the pixels
|
||||
assert np.isclose(result.dx, field.dx / 2, rtol=1e-9)
|
||||
|
||||
|
||||
def test_resample_downsample():
|
||||
from backend.nodes.resample import Resample
|
||||
|
||||
node = Resample()
|
||||
field = make_field(shape=(64, 64))
|
||||
result, = node.process(field, width=32, height=32, interpolation="linear")
|
||||
|
||||
assert result.data.shape == (32, 32)
|
||||
assert np.isclose(result.xreal, field.xreal)
|
||||
|
||||
|
||||
def test_resample_non_square():
|
||||
from backend.nodes.resample import Resample
|
||||
|
||||
node = Resample()
|
||||
field = make_field(shape=(32, 64))
|
||||
result, = node.process(field, width=128, height=64, interpolation="nearest")
|
||||
|
||||
assert result.data.shape == (64, 128)
|
||||
|
||||
|
||||
def test_resample_interpolation_modes():
|
||||
from backend.nodes.resample import Resample
|
||||
|
||||
node = Resample()
|
||||
field = make_field(shape=(32, 32))
|
||||
|
||||
for interp in ("linear", "cubic", "nearest"):
|
||||
result, = node.process(field, width=64, height=64, interpolation=interp)
|
||||
assert result.data.shape == (64, 64)
|
||||
|
||||
|
||||
def test_resample_constant_field():
|
||||
"""Resampling a constant field should remain constant regardless of interpolation."""
|
||||
from backend.nodes.resample import Resample
|
||||
|
||||
node = Resample()
|
||||
field = make_field(data=np.full((16, 16), 3.14))
|
||||
|
||||
for interp in ("linear", "cubic", "nearest"):
|
||||
result, = node.process(field, width=32, height=32, interpolation=interp)
|
||||
assert np.allclose(result.data, 3.14, atol=1e-6)
|
||||
|
||||
|
||||
def test_resample_metadata_preserved():
|
||||
from backend.nodes.resample import Resample
|
||||
|
||||
node = Resample()
|
||||
field = make_field()
|
||||
result, = node.process(field, width=64, height=64, interpolation="linear")
|
||||
|
||||
assert result.si_unit_xy == field.si_unit_xy
|
||||
assert result.si_unit_z == field.si_unit_z
|
||||
assert np.isclose(result.xreal, field.xreal)
|
||||
|
||||
|
||||
def test_resample_unknown_interpolation():
|
||||
from backend.nodes.resample import Resample
|
||||
|
||||
node = Resample()
|
||||
field = make_field()
|
||||
|
||||
with pytest.raises(ValueError, match="interpolation"):
|
||||
node.process(field, width=64, height=64, interpolation="lanczos")
|
||||
Reference in New Issue
Block a user