CultMath tests: pin the FreeViolated record of the real solves, column by column

The 30 trace cases' FreeViolated lines (column, gradient magnitude, threshold) are pinned by exact equality beside the base-derived decisions they feed, so a free-set test that is mis-called from SolveTraced (a shifted threshold, a short free count) fails here and not only in the hand-built FreeSetViolated tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Meta Vens 2026-10-11 03:04:25 +02:00
commit b941b68085
2 changed files with 133 additions and 1 deletions

View file

@ -480,4 +480,133 @@ internal static class BlsBaseTraces
end Converged 6 3f800000 bf800000 bf800000 00000000 3dcccccd
""",
};
// The FreeViolated lines of the same cases: the free-set test is a decision the base took inline and did not record, so these
// are recorded at head. The decisions they feed (Miss, Stall, Kkt) are the base commit's above, and the structural test ties each line to them.
internal static readonly Dictionary<string, string> FreeViolatedLines = new()
{
["confirm-pass-1"] = """
FreeViolated 1 4.191491598248831E-11 3.4029892871621996E-11 0
""",
["confirm-pass-2"] = """
FreeViolated 0 9.329426120530115E-11 9.174025280630848E-11 0
""",
["noise-one-heavy"] = """
FreeViolated 0 1.3877787807814457E-17 0 0
FreeViolated 0 1.6046192152785466E-17 0 0
FreeViolated 5 4.336808689942018E-19 0 0
FreeViolated 0 4.336808689942018E-19 0 0
FreeViolated 5 4.336808689942018E-19 0 0
FreeViolated 0 1.3010426069826053E-18 0 0
FreeViolated 5 4.336808689942018E-19 0 0
FreeViolated 0 4.336808689942018E-19 0 0
FreeViolated 5 2.168404344971009E-19 0 0
""",
["noise-one-light"] = """
FreeViolated 0 5.684341886080802E-14 0 0
FreeViolated 0 2.9753977059954195E-14 0 0
FreeViolated 5 8.881784197001252E-16 0 0
FreeViolated 0 3.9968028886505635E-15 0 0
FreeViolated 5 2.220446049250313E-16 0 0
FreeViolated 0 3.1086244689504383E-15 0 0
FreeViolated 5 6.661338147750939E-16 0 0
""",
["noise-ascending"] = """
FreeViolated 0 6.938893903907228E-17 0 0
FreeViolated 0 2.6020852139652106E-18 0 0
FreeViolated 5 1.1368683772161603E-13 0 0
""",
["below-noise-2"] = """
FreeViolated 1 4.3655745685100555E-11 3.610817172344793E-14 0
FreeViolated 2 5.4569682106375694E-12 3.610817172344793E-14 0
FreeViolated 3 7.275957614183426E-12 3.610817172344793E-14 0
FreeViolated 4 1.4551915228366852E-11 3.610817172344793E-14 0
FreeViolated 5 3.2741809263825417E-11 3.610817172344793E-14 0
FreeViolated 6 2.9103830456733704E-11 3.610817172344793E-14 0
FreeViolated 7 8.731149137020111E-11 3.610817172344793E-14 0
FreeViolated 10 2.1827872842550278E-11 3.610817172344793E-14 0
FreeViolated 11 1.4551915228366852E-11 3.610817172344793E-14 0
FreeViolated 12 2.0372681319713593E-10 3.610817172344793E-14 0
FreeViolated 14 3.637978807091713E-12 3.610817172344793E-14 0
FreeViolated 15 4.3655745685100555E-11 3.610817172344793E-14 0
FreeViolated 16 8.731149137020111E-11 3.610817172344793E-14 0
FreeViolated 17 8.731149137020111E-11 3.610817172344793E-14 0
FreeViolated 18 2.9103830456733704E-11 3.610817172344793E-14 0
FreeViolated 19 2.9103830456733704E-11 3.610817172344793E-14 0
FreeViolated 20 7.275957614183426E-12 3.610817172344793E-14 0
FreeViolated 21 1.1641532182693481E-10 3.610817172344793E-14 0
FreeViolated 23 1.1641532182693481E-10 3.610817172344793E-14 0
FreeViolated 0 8.731149137020111E-11 3.610817172344793E-14 0
FreeViolated 1 8.731149137020111E-11 3.610817172344793E-14 0
FreeViolated 2 5.4569682106375694E-12 3.610817172344793E-14 0
FreeViolated 3 2.1827872842550278E-11 3.610817172344793E-14 0
FreeViolated 4 3.637978807091713E-11 3.610817172344793E-14 0
FreeViolated 5 1.0913936421275139E-11 3.610817172344793E-14 0
FreeViolated 7 4.3655745685100555E-11 3.610817172344793E-14 0
FreeViolated 8 2.9103830456733704E-11 3.610817172344793E-14 0
FreeViolated 9 1.8189894035458565E-12 3.610817172344793E-14 0
FreeViolated 10 2.1827872842550278E-11 3.610817172344793E-14 0
FreeViolated 11 2.9103830456733704E-11 3.610817172344793E-14 0
FreeViolated 12 2.9103830456733704E-11 3.610817172344793E-14 0
FreeViolated 13 8.731149137020111E-11 3.610817172344793E-14 0
FreeViolated 14 3.637978807091713E-12 3.610817172344793E-14 0
FreeViolated 17 2.3283064365386963E-10 3.610817172344793E-14 0
FreeViolated 18 3.637978807091713E-11 3.610817172344793E-14 0
FreeViolated 19 2.9103830456733704E-11 3.610817172344793E-14 0
FreeViolated 20 3.637978807091713E-11 3.610817172344793E-14 0
FreeViolated 21 5.820766091346741E-11 3.610817172344793E-14 0
FreeViolated 22 7.275957614183426E-11 3.610817172344793E-14 0
FreeViolated 23 2.9103830456733704E-11 3.610817172344793E-14 0
""",
["below-noise-9"] = """
FreeViolated 0 1.8189894035458565E-12 5.814784892130276E-14 0
FreeViolated 1 6.548361852765083E-11 5.814784892130276E-14 0
FreeViolated 2 4.001776687800884E-11 5.814784892130276E-14 0
FreeViolated 3 8.731149137020111E-11 5.814784892130276E-14 0
FreeViolated 4 5.093170329928398E-11 5.814784892130276E-14 0
FreeViolated 5 1.8189894035458565E-12 5.814784892130276E-14 0
FreeViolated 6 6.548361852765083E-11 5.814784892130276E-14 0
FreeViolated 7 2.9103830456733704E-11 5.814784892130276E-14 0
FreeViolated 8 1.382431946694851E-10 5.814784892130276E-14 0
FreeViolated 9 2.1827872842550278E-11 5.814784892130276E-14 0
FreeViolated 10 4.3655745685100555E-11 5.814784892130276E-14 0
FreeViolated 11 6.184563972055912E-11 5.814784892130276E-14 0
FreeViolated 12 1.3642420526593924E-11 5.814784892130276E-14 0
FreeViolated 13 6.548361852765083E-11 5.814784892130276E-14 0
FreeViolated 14 8.003553375601768E-11 5.814784892130276E-14 0
FreeViolated 15 1.8189894035458565E-11 5.814784892130276E-14 0
FreeViolated 16 7.275957614183426E-11 5.814784892130276E-14 0
FreeViolated 17 6.548361852765083E-11 5.814784892130276E-14 0
FreeViolated 18 3.637978807091713E-11 5.814784892130276E-14 0
FreeViolated 19 4.3655745685100555E-11 5.814784892130276E-14 0
FreeViolated 20 1.4551915228366852E-11 5.814784892130276E-14 0
FreeViolated 21 3.637978807091713E-11 5.814784892130276E-14 0
FreeViolated 22 3.637978807091713E-12 5.814784892130276E-14 0
FreeViolated 23 4.3655745685100555E-11 5.814784892130276E-14 0
FreeViolated 0 1.000444171950221E-11 5.814784892130276E-14 0
FreeViolated 1 1.2369127944111824E-10 5.814784892130276E-14 0
FreeViolated 2 3.637978807091713E-11 5.814784892130276E-14 0
FreeViolated 3 5.093170329928398E-11 5.814784892130276E-14 0
FreeViolated 4 5.820766091346741E-11 5.814784892130276E-14 0
FreeViolated 5 3.637978807091713E-12 5.814784892130276E-14 0
FreeViolated 6 5.820766091346741E-11 5.814784892130276E-14 0
FreeViolated 7 4.3655745685100555E-11 5.814784892130276E-14 0
FreeViolated 8 1.4551915228366852E-10 5.814784892130276E-14 0
FreeViolated 9 7.275957614183426E-12 5.814784892130276E-14 0
FreeViolated 10 1.3096723705530167E-10 5.814784892130276E-14 0
FreeViolated 11 5.4569682106375694E-11 5.814784892130276E-14 0
FreeViolated 12 1.6370904631912708E-11 5.814784892130276E-14 0
FreeViolated 13 2.1827872842550278E-11 5.814784892130276E-14 0
FreeViolated 14 1.4551915228366852E-11 5.814784892130276E-14 0
FreeViolated 15 2.1827872842550278E-11 5.814784892130276E-14 0
FreeViolated 16 1.4551915228366852E-10 5.814784892130276E-14 0
FreeViolated 17 3.637978807091713E-11 5.814784892130276E-14 0
FreeViolated 18 8.003553375601768E-11 5.814784892130276E-14 0
FreeViolated 19 7.275957614183426E-12 5.814784892130276E-14 0
FreeViolated 20 2.9103830456733704E-11 5.814784892130276E-14 0
FreeViolated 21 8.731149137020111E-11 5.814784892130276E-14 0
FreeViolated 22 1.4551915228366852E-11 5.814784892130276E-14 0
FreeViolated 23 1.0913936421275139E-10 5.814784892130276E-14 0
""",
};
}

View file

@ -23,7 +23,10 @@ public sealed class BoundedLeastSquaresTraceTests
foreach (var c in BlsTrace.Cases())
{
Assert.True(BlsBaseTraces.Expected.TryGetValue(c.Name, out var expected), $"{c.Name}: no base trace");
Assert.Equal(Normal(expected!), WithoutFreeViolated(BlsTrace.Trace(c)));
var trace = BlsTrace.Trace(c);
Assert.Equal(Normal(expected!), WithoutFreeViolated(trace));
var free = string.Join("\n", trace.Split('\n').Where(l => l.StartsWith("FreeViolated ", StringComparison.Ordinal)));
Assert.Equal(Normal(BlsBaseTraces.FreeViolatedLines.GetValueOrDefault(c.Name, "")), free);
}
Assert.Equal(BlsTrace.Cases().Count(), BlsBaseTraces.Expected.Count);
}