low pri features

This commit is contained in:
2026-04-04 00:25:53 -07:00
parent 4818c1123c
commit 5de93e6c4d
47 changed files with 3866 additions and 19 deletions

View File

@@ -0,0 +1,64 @@
import numpy as np
import pytest
from tests.node_tests._shared import make_field
def test_output_shape():
"""Anisotropy map shape must match the input field."""
from backend.nodes.dwt_anisotropy import DWTAnisotropy
node = DWTAnisotropy()
field = make_field(shape=(64, 64))
aniso_field, stats = node.process(field, n_levels=4, ratio_threshold=0.2)
assert aniso_field.data.shape == (64, 64)
def test_isotropic_surface():
"""A random isotropic surface should have X/Y energy ratios near 1.0."""
from backend.nodes.dwt_anisotropy import DWTAnisotropy
rng = np.random.default_rng(42)
# Use a larger field so deeper levels still have enough coefficients
data = rng.standard_normal((128, 128))
field = make_field(data=data)
node = DWTAnisotropy()
aniso_field, stats = node.process(field, n_levels=3, ratio_threshold=0.2)
for row in stats:
assert 0.5 < row["ratio"] < 2.0, (
f"Level {row['level']} ratio {row['ratio']:.3f} too far from 1.0 for isotropic surface"
)
def test_statistics_table():
"""Statistics output is a list of dicts with the expected keys."""
from backend.nodes.dwt_anisotropy import DWTAnisotropy
node = DWTAnisotropy()
field = make_field(shape=(64, 64))
aniso_field, stats = node.process(field, n_levels=3, ratio_threshold=0.2)
assert isinstance(stats, list)
assert len(stats) == 3
expected_keys = {"level", "x_energy", "y_energy", "ratio", "anisotropic"}
for row in stats:
assert isinstance(row, dict)
assert set(row.keys()) == expected_keys
def test_anisotropic_detection():
"""Horizontal stripes should produce a ratio clearly different from 1.0."""
from backend.nodes.dwt_anisotropy import DWTAnisotropy
# Create horizontal stripes: constant along columns, varying along rows
data = np.tile(np.sin(np.linspace(0, 10 * np.pi, 64)), (64, 1))
field = make_field(data=data)
node = DWTAnisotropy()
aniso_field, stats = node.process(field, n_levels=4, ratio_threshold=0.2)
# At least one level should show a ratio far from 1.0
has_anisotropic = any(abs(row["ratio"] - 1.0) > 0.2 for row in stats)
assert has_anisotropic, (
f"Expected anisotropic detection for horizontal stripes, ratios: "
f"{[row['ratio'] for row in stats]}"
)