61 lines
1.7 KiB
Python
61 lines
1.7 KiB
Python
import numpy as np
|
|
import pytest
|
|
from tests.node_tests._shared import make_field
|
|
|
|
|
|
def test_terrace_fit_stepped_surface():
|
|
from backend.nodes.terrace_fit import TerraceFit
|
|
|
|
node = TerraceFit()
|
|
# Create a surface with 3 clear terraces
|
|
data = np.zeros((64, 64))
|
|
data[:20, :] = 0.0
|
|
data[20:40, :] = 1.0
|
|
data[40:, :] = 2.0
|
|
field = make_field(data=data)
|
|
result, records = node.process(field, 3, 1.0, 0, "residual")
|
|
assert result.data.shape == (64, 64)
|
|
assert isinstance(records, list)
|
|
assert len(records) >= 3 # at least terrace heights
|
|
|
|
|
|
def test_terrace_fit_auto_detect():
|
|
from backend.nodes.terrace_fit import TerraceFit
|
|
|
|
node = TerraceFit()
|
|
data = np.zeros((64, 64))
|
|
data[:32, :] = 0.0
|
|
data[32:, :] = 5.0
|
|
field = make_field(data=data)
|
|
result, records = node.process(field, 0, 1.0, 0, "fitted")
|
|
assert result.data.shape == (64, 64)
|
|
|
|
|
|
def test_terrace_fit_labels_output():
|
|
from backend.nodes.terrace_fit import TerraceFit
|
|
|
|
node = TerraceFit()
|
|
data = np.zeros((32, 32))
|
|
data[:16, :] = 1.0
|
|
data[16:, :] = 3.0
|
|
field = make_field(data=data)
|
|
result, records = node.process(field, 2, 1.0, 0, "labels")
|
|
assert result.data.shape == (32, 32)
|
|
# Labels should have exactly 2 distinct values
|
|
unique = np.unique(result.data)
|
|
assert len(unique) == 2
|
|
|
|
|
|
def test_terrace_fit_step_heights_reported():
|
|
from backend.nodes.terrace_fit import TerraceFit
|
|
|
|
node = TerraceFit()
|
|
data = np.zeros((64, 64))
|
|
data[:32, :] = 0.0
|
|
data[32:, :] = 2.5
|
|
field = make_field(data=data)
|
|
_, records = node.process(field, 2, 1.0, 0, "residual")
|
|
# Should report step height
|
|
step_records = [r for r in records if "Step" in r["quantity"]]
|
|
assert len(step_records) >= 1
|