adding more nodes
This commit is contained in:
75
tests/node_tests/grain_cross.py
Normal file
75
tests/node_tests/grain_cross.py
Normal file
@@ -0,0 +1,75 @@
|
||||
import numpy as np
|
||||
import pytest
|
||||
from tests.node_tests._shared import make_field
|
||||
from backend.nodes.helpers import bool_to_mask
|
||||
|
||||
|
||||
def test_basic_correlation():
|
||||
from backend.nodes.grain_cross import GrainCross
|
||||
|
||||
node = GrainCross()
|
||||
|
||||
rng = np.random.default_rng(42)
|
||||
data_a = rng.standard_normal((64, 64))
|
||||
data_b = rng.standard_normal((64, 64))
|
||||
field_a = make_field(data=data_a)
|
||||
field_b = make_field(data=data_b)
|
||||
|
||||
# Create mask with two distinct grains
|
||||
mask_bool = np.zeros((64, 64), dtype=bool)
|
||||
mask_bool[5:20, 5:20] = True
|
||||
mask_bool[40:55, 40:55] = True
|
||||
mask = bool_to_mask(mask_bool)
|
||||
|
||||
(table,) = node.process(field_a, field_b, mask=mask,
|
||||
property_a="mean_height", property_b="max_height",
|
||||
min_size=10)
|
||||
assert len(table) > 0, "Should return entries for detected grains"
|
||||
|
||||
|
||||
def test_pearson_reported():
|
||||
from backend.nodes.grain_cross import GrainCross
|
||||
|
||||
node = GrainCross()
|
||||
|
||||
rng = np.random.default_rng(7)
|
||||
data_a = rng.standard_normal((64, 64))
|
||||
data_b = rng.standard_normal((64, 64))
|
||||
field_a = make_field(data=data_a)
|
||||
field_b = make_field(data=data_b)
|
||||
|
||||
# Two grains so Pearson can be computed
|
||||
mask_bool = np.zeros((64, 64), dtype=bool)
|
||||
mask_bool[5:20, 5:20] = True
|
||||
mask_bool[40:55, 40:55] = True
|
||||
mask = bool_to_mask(mask_bool)
|
||||
|
||||
(table,) = node.process(field_a, field_b, mask=mask,
|
||||
property_a="mean_height", property_b="mean_height",
|
||||
min_size=10)
|
||||
quantities = [row["quantity"] for row in table]
|
||||
assert "Pearson r" in quantities, f"Expected 'Pearson r' in {quantities}"
|
||||
|
||||
|
||||
def test_min_size_filters():
|
||||
from backend.nodes.grain_cross import GrainCross
|
||||
|
||||
node = GrainCross()
|
||||
|
||||
data_a = np.zeros((64, 64))
|
||||
data_b = np.zeros((64, 64))
|
||||
field_a = make_field(data=data_a)
|
||||
field_b = make_field(data=data_b)
|
||||
|
||||
# Small grain (10x10 = 100 pixels)
|
||||
mask_bool = np.zeros((64, 64), dtype=bool)
|
||||
mask_bool[5:15, 5:15] = True
|
||||
mask = bool_to_mask(mask_bool)
|
||||
|
||||
# min_size larger than any grain
|
||||
(table,) = node.process(field_a, field_b, mask=mask,
|
||||
property_a="area", property_b="area",
|
||||
min_size=200)
|
||||
# No grain entries (only maybe no Pearson either since < 2 grains)
|
||||
grain_entries = [r for r in table if r["quantity"].startswith("Grain")]
|
||||
assert len(grain_entries) == 0, "No grains should pass with large min_size"
|
||||
Reference in New Issue
Block a user