You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(charge-state): validate conditions from training data and malformed archives
The training pipeline registered `charge_spin` as a two-value data requirement
and never checked the values, so a dataset carrying a fractional condition
reached the unguarded embedding gathers and was truncated onto a neighbouring
table row. Validation now runs in `normalize_batch`, the one place every
backend and both the standard and LMDB data systems read a batch through, and
ahead of tensor conversion so no device synchronization is needed. The rule is
evaluated over the whole batch at once, so the training loop pays no per-frame
cost, and the single-state and batch entry points share one implementation.
On the C++ side the range list from the archive is now required to hold one
range per value: a shorter or longer list would have checked one value against
another value's table. An empty range is rejected for the same reason.
Also registers DPA4C in the family's deepspin rejection list, which is a tuple
membership test that its name did not match, and gives it the escape hatch the
base contract requires of any descriptor overriding `uses_graph_lower`. DPA4C
refuses rather than no-ops there: it carries every neighbour within the cutoff
and reports an unreachable `sel`, so a dense lower sized from that capacity is
unallocatable rather than merely slower.
Two DPA4 fixtures named `[0.5, -0.5]`, which truncates to charge 0 and
multiplicity 0; they now name a state the tables can address.
0 commit comments