test: preserve scalar receipts when optional shear probes fail

This commit is contained in:
TRON committed 2026-10-18 20:22:23 -07:00
1 parent caa573f978
commit 1f64f7eb11
4 files changed
+69 -11

No files matched your search

@@ -1012,6 +1012,14 @@ class ProbeTraceTests(unittest.TestCase):
trace["values"] = [[1.0, 0.01, -0.02] * 24 for _ in sp.STEPS]
size = sp.validate(trace)
self.assertLess(size, sp.TRACE_MAX_BYTES)
final_trace = dict(trace, bytes=size)
self.assertEqual(size, len(json.dumps(final_trace, allow_nan=False).encode()))
self.assertEqual(sp.validate(final_trace), size)
with patch.object(sp, "TRACE_MAX_BYTES", size):
self.assertEqual(sp.validate(trace), size)
with patch.object(sp, "TRACE_MAX_BYTES", size - 1):
with self.assertRaises(ValueError):
sp.validate(trace)
realistic = dict(trace, values=[[1.0000012345678901, 0.012345678901234567,
-0.023456789012345678] * 24 for _ in sp.STEPS])
self.assertLess(sp.validate(realistic), sp.TRACE_MAX_BYTES)
@@ -1108,6 +1116,7 @@ class ProbeTraceTests(unittest.TestCase):
self.assertEqual(trace["steps"], list(sp.STEPS))
self.assertEqual(len(trace["values"]), len(sp.STEPS))
self.assertLessEqual(trace["bytes"], sp.TRACE_MAX_BYTES)
self.assertEqual(trace["bytes"], len(json.dumps(trace, allow_nan=False).encode()))
self.assertEqual(trace["case"], [run_case.NESTED_SHEAR, 128, 3, "projected_linear"])
self.assertEqual(len(rec["rows"]), 5) # qualification samples preserved
self.assertEqual(files, ["probe.json"]) # no field dumps
@@ -1122,3 +1131,34 @@ class ProbeTraceTests(unittest.TestCase):
self.assertTrue(all(p["level"] == 0 for p in t512["probes"]))
res = sp.residuals(t512)
self.assertLess(abs(res[0][0][1]), 1e-14) # exact field at t=0 at actual centers
def test_invalid_optional_trace_preserves_scalar_rows(self):
sp = self.probes
case = (128, 1, run_case.NESTED_SHEAR, "constant", [np.ones((128, 128), bool)])
baseline, _, _ = self.run_mocked(*case)
original = sp.sample
for bad in ([float("nan")] * 72, [float("inf")] * 72, [1.0],
ZeroDivisionError("zero probe density")):
calls = []
def sample(arrays, probes):
calls.append(True)
if len(calls) == 2: # probe-only step 1, before the next scalar save
if isinstance(bad, Exception):
raise bad
return bad
return original(arrays, probes)
with self.subTest(bad=repr(bad)), patch.object(sp, "sample", side_effect=sample):
rec, counts, files = self.run_mocked(*case)
self.assertTrue(rec["completed"])
self.assertEqual(rec["rows"], baseline["rows"])
self.assertEqual(set(rec["probe_trace"]), {"error"})
self.assertEqual(len(calls), 2) # no further probe sampling after rejection
self.assertEqual(counts[-1], 2048)
self.assertEqual(files, ["probe.json"])
with patch.object(sp, "TRACE_MAX_BYTES", 100):
rec, _, _ = self.run_mocked(*case)
self.assertTrue(rec["completed"])
self.assertEqual(rec["rows"], baseline["rows"])
self.assertIn("exceeds", rec["probe_trace"]["error"])