Skip to content

Temari v1.0.1

Latest

Choose a tag to compare

@seto77 seto77 released this 10 Aug 10:17
· 14 commits to main since this release

A patch release. Nothing in the shipping prescription or the generated values changed — dataset v5.0.0 is untouched, and the engine's output is bit-identical to what 1.0.0 produced (checked with bitident_snapshot.jl on both prescriptions).

What is in it is verification and contract work.

⚠ If you use tools/temari_contract.py, read this

Two changes affect callers:

  1. f_at() now returns three values, (F, bound, region), where it previously returned two. region is tabulated, unrecorded or impossible — the last being a request above s_kin = 1/λ(E₀), where no such beam pair exists on the Ewald sphere and the bound is therefore NaN rather than eps.
  2. The golden vector moved at off-node E₀. The loader's E₀ interpolation disagreed with the shipping consumer in three ways: the coordinate (raw E₀ over raw F, instead of ln(u−1) with log F where the column is positive), the endpoint slopes (a one-sided difference instead of the three-point formula), and out-of-range behaviour (clamping instead of extrapolating on the end cubic). Over 4.58 M points the worst disagreement was 2.9e-03, and 175 % where the sign flips. Corrected, and cross-checked against the Julia implementation to 4.5e-15.

Fe K at 137 kV, s = 2.50 now reads +3.8749841608e-01 (was +3.8749427661e-01). Values at E₀ nodes are unchanged.

Verification

  • The E₀ interpolation error was measured directly, by recomputing rows inside the intervals rather than inferring from leave-one-out. Over a stratified sample of 50 channels and 450 points the worst is 3.0e-03. C6 does not bound it — in the risky stratum it falls below the truth in 20 of 25 channels, because its leave-one-out drops only interior nodes and never examines the interval next to the threshold. Widening it does not help either: the widened figure comes in low in 4 of 50, with the ratio spanning a factor of 48. check_tables reports it, and does not gate on it.
  • The error in F was pushed through to the ALCHEMI observable. Since F enters only through μ and the Bloch solution does not depend on F, two runs differing only in the shape isolate it exactly. The observable responds only below about 2 Å⁻¹ — a perturbation at 4–6 Å⁻¹ moves it by 1.5e-09, above 10 Å⁻¹ by nothing. The interpolation error sits at 6.7–11.6 Å⁻¹, so it does not reach the observable: at most 1.2e-04 on the site ratio.
  • The small-component fraction now has an external check, and is gated in CI. All six values, three elements in both spin states, fall inside the interval that rounds to the one-significant-digit figures in the literature.
  • Beyond s_cert the contract now distinguishes two regions rather than treating them alike. No format change: s_kin depends only on E₀, so it is computed rather than stored — putting it in the JSON would create a second source of truth. schema_version stays at 2.

Other

  • Julia 1.12.6 produces bit-identical output (both snapshots differ only in the version header). The long fleet run is still unevaluated.
  • The watchdog now treats a frozen CPU with a stalled log as wedged after three minutes, instead of waiting fifteen; if CPU cannot be read it falls back to the old rule rather than risk killing a healthy lane.
  • The sample output in the documentation had been showing v2-era numbers and is regenerated from a real run.

The data

Distributed separately, under CC-BY-4.0: dataset-v5.0.0. The software remains MIT.