update test and build scripts
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import os
|
||||
|
||||
import numpy as np
|
||||
|
||||
|
||||
def _collect_vnormal_sequence(sensor, frames: int) -> np.ndarray:
|
||||
seq = []
|
||||
for _ in range(frames):
|
||||
img = sensor.get_img()
|
||||
assert img is not None
|
||||
sensor.compute_deformation(check_motion=False)
|
||||
(vnormal,) = sensor.read_info(sensor.info.VNORMAL)
|
||||
seq.append(vnormal.copy())
|
||||
return np.asarray(seq)
|
||||
|
||||
|
||||
def test_available_backends_smoke(sensor_factory, available_backends):
|
||||
for backend in available_backends:
|
||||
sensor = sensor_factory(backend=backend)
|
||||
try:
|
||||
img = sensor.get_img()
|
||||
assert img is not None
|
||||
sensor.compute_deformation(check_motion=False)
|
||||
flow, vnormal, vshear = sensor.read_info(
|
||||
sensor.info.VRAW,
|
||||
sensor.info.VNORMAL,
|
||||
sensor.info.VSHEAR,
|
||||
)
|
||||
assert flow.shape == vnormal.shape == vshear.shape
|
||||
assert flow.shape[-1] == 2
|
||||
assert np.isfinite(flow).all()
|
||||
assert np.isfinite(vnormal).all()
|
||||
assert np.isfinite(vshear).all()
|
||||
finally:
|
||||
sensor.disconnect()
|
||||
|
||||
|
||||
def test_backend_parity_against_cpu(sensor_factory, available_backends):
|
||||
if len(available_backends) <= 1:
|
||||
return
|
||||
|
||||
compare_frames = int(os.getenv("ORISYS_PARITY_FRAMES", "30"))
|
||||
warmup = int(os.getenv("ORISYS_PARITY_WARMUP", "5"))
|
||||
tol = float(os.getenv("ORISYS_PARITY_REL_TOL", "2.0"))
|
||||
|
||||
cpu_sensor = sensor_factory(backend="cpu")
|
||||
try:
|
||||
cpu_seq = _collect_vnormal_sequence(cpu_sensor, compare_frames)
|
||||
finally:
|
||||
cpu_sensor.disconnect()
|
||||
|
||||
cpu_ref = cpu_seq[warmup:].mean(axis=0)
|
||||
cpu_scale = float(np.mean(np.abs(cpu_ref))) + 1e-6
|
||||
|
||||
for backend in available_backends:
|
||||
if backend == "cpu":
|
||||
continue
|
||||
sensor = sensor_factory(backend=backend)
|
||||
try:
|
||||
seq = _collect_vnormal_sequence(sensor, compare_frames)
|
||||
finally:
|
||||
sensor.disconnect()
|
||||
|
||||
cand_ref = seq[warmup:].mean(axis=0)
|
||||
rel = float(np.mean(np.abs(cand_ref - cpu_ref)) / cpu_scale)
|
||||
assert rel < tol, f"{backend} parity drift too high: relative_error={rel:.4f}, tol={tol}"
|
||||
Reference in New Issue
Block a user