Add data-integrity guards against silent NaN/Inf propagation and races
- log_transform / _validate_unit_pre_dir now raise on non-finite input instead of letting a NaN row silently poison the persisted normalizer cache (norm < 1e-6 was always False for NaN, so the existing guard never caught it). - encode_secondaries warns when a row's secondary energies cumulatively exceed e_sec, instead of silently saturating the overflowing slot's stick-breaking logit via the _EPS floor. - EVENT_ID_FILE_STRIDE overflow now raises instead of silently colliding two files' event ids together (reintroducing train/val leakage). - make_event_split(val_fraction=0.0) now actually holds out nothing, instead of always forcing at least 1 validation event. - setup_cache.save() is now serialized with a flock, since two concurrent writers (a real scenario on this repo's shared portal/condor machines) could otherwise race and silently drop one writer's freshly-computed cache section. - Documented (no behavior change) the pre_dir ≈ -ẑ antipodal rotation singularity in _rodrigues_axis, which is real but inherent to any single-valued local-frame convention. Each fix has a regression test. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -344,6 +344,15 @@ def test_load_event_ids_applies_offset(tmp_path):
|
||||
)
|
||||
|
||||
|
||||
def test_load_event_ids_raises_when_event_id_reaches_stride(tmp_path):
|
||||
"""A raw event_id >= EVENT_ID_FILE_STRIDE would collide into the next
|
||||
file's offset block if silently allowed through — must raise instead."""
|
||||
path = tmp_path / "a.parquet"
|
||||
pd.DataFrame({"event_id": [0, 1, EVENT_ID_FILE_STRIDE]}).to_parquet(path)
|
||||
with pytest.raises(ValueError, match="EVENT_ID_FILE_STRIDE"):
|
||||
load_event_ids(path)
|
||||
|
||||
|
||||
def test_load_steps_applies_offset_to_event_id(tmp_path):
|
||||
path = tmp_path / "a.parquet"
|
||||
_steps_df([0, 1]).to_parquet(path)
|
||||
|
||||
Reference in New Issue
Block a user