Fix: _local_order divided by fp*fp that underflows to 0 for a tiny nonzero slope (ZeroDivisionError, caught by the sweep harness and charged as a failure - this is what had moved Table 6's order cells after the sign fix). Pinned by a test that fails on the old code. Every sweep file regenerated on the server (run_all_sweeps.sh). verify_article: skip result files that are not grid lists (it crashed on the out-of-sample dicts). Verifier now completes: 224 OK, 57 stale numbers in the paper to update (Table 6 again 7 of 7).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
vvs
2026-09-21 20:34:19 +01:00
co-authored by Claude Opus 5
parent 80610e5c27
commit 2c458c51dc
16 changed files with 153 additions and 78 deletions
+118 -63
View File
@@ -4,7 +4,7 @@ The proposed method (projection, multiplier declared):
OK APS place got 3 want 3 OK APS place got 3 want 3
OK APS total got 2806 want 2806 OK APS total got 2806 want 2806
OK APS solved got 153 want 153 OK APS solved got 153 want 153
OK CHA place got 47 want 47 BAD CHA place got 45 want 47
OK CHA total got 3220 want 3220 OK CHA total got 3220 want 3220
OK CHA solved got 40 want 40 OK CHA solved got 40 want 40
OK both sets got 6026 want 6026 OK both sets got 6026 want 6026
@@ -74,23 +74,23 @@ Chandrupatla:
OK CHA chandrupatla place got 2 want 2 OK CHA chandrupatla place got 2 want 2
OK CHA chandrupatla total got 2441 want 2441 OK CHA chandrupatla total got 2441 want 2441
OK CHA itp_oracle place got 3 want 3 OK CHA itp_oracle place got 3 want 3
OK CHA itp_oracle total got 2611 want 2611 BAD CHA itp_oracle total got 2647 want 2611
OK CHA itp place got 6 want 6 OK CHA itp place got 6 want 6
OK CHA itp total got 2857 want 2857 BAD CHA itp total got 2896 want 2857
OK CHA bisection place got 16 want 16 OK CHA bisection place got 16 want 16
OK CHA bisection total got 3090 want 3090 OK CHA bisection total got 3090 want 3090
OK CHA toms748 place got 164 want 164 BAD CHA toms748 place got 159 want 164
OK CHA toms748 total got 4000 want 4000 OK CHA toms748 total got 4000 want 4000
OK CHA brent place got 226 want 226 BAD CHA brent place got 227 want 226
OK CHA brent total got 4115 want 4115 OK CHA brent total got 4115 want 4115
OK CHA brent solved got 38 want 38 OK CHA brent solved got 38 want 38
OK chandrupatla, both sets got 5228 want 5228 OK chandrupatla, both sets got 5228 want 5228
OK Chandrupatla beats us on both sets got True want True OK Chandrupatla beats us on both sets got True want True
Negative results, the regime claims: Negative results, the regime claims:
OK CHA cbrt over the whole set got 4099 want 4099 BAD CHA cbrt over the whole set got 4109 want 4099
OK single fixed choice, both sets got 6026 want 6026 OK single fixed choice, both sets got 6026 want 6026
OK switch by benchmark set, both sets got 6905 want 6905 BAD switch by benchmark set, both sets got 6915 want 6905
OK switching is worse than not switching got True want True OK switching is worse than not switching got True want True
OK fun4.1 projection variant got 89 want 89 OK fun4.1 projection variant got 89 want 89
OK fun4.1 cbrt got 32 want 32 OK fun4.1 cbrt got 32 want 32
@@ -104,84 +104,80 @@ Negative results, the regime claims:
OK fun4.5 cbrt got 59 want 59 OK fun4.5 cbrt got 59 want 59
The law across the grid: The law across the grid:
OK mean total, scale=derived3, lin got 6809 want 6809 BAD mean total, scale=derived3, lin got 6893 want 6809
OK mean total, scale=derived3, quad got 22294 want 22294 BAD mean total, scale=derived3, quad got 22315 want 22294
OK mean total, scale=derived, lin got 6906 want 6906 BAD mean total, scale=derived, lin got 6981 want 6906
OK mean total, scale=derived, quad got 22167 want 22167 BAD mean total, scale=derived, quad got 22206 want 22167
OK mean total, scale=bracket, lin got 10263 want 10263 BAD mean total, scale=bracket, lin got 10279 want 10263
OK mean total, scale=bracket, quad got 19137 want 19137 BAD mean total, scale=bracket, quad got 19127 want 19137
OK mean total, scale=start, lin got 16102 want 16102 OK mean total, scale=start, lin got 16102 want 16102
OK mean total, scale=start, quad got 15345 want 15345 OK mean total, scale=start, quad got 15345 want 15345
OK every c=1 similarity beats every c=0 similarity got True want True OK every c=1 similarity beats every c=0 similarity got True want True
OK similarity ranking got ['ratio', 'exp_abs', 'rational', 'ratio_soft', 'sqrt', 'cbrt', 'exp_sq', 'rat_sq', 'cosine'] want ['ratio', 'exp_abs', 'rational', 'ratio_soft', 'sqrt', 'cbrt', 'exp_sq', 'rat_sq', 'cosine'] OK similarity ranking got ['ratio', 'exp_abs', 'rational', 'ratio_soft', 'sqrt', 'cbrt', 'exp_sq', 'rat_sq', 'cosine'] want ['ratio', 'exp_abs', 'rational', 'ratio_soft', 'sqrt', 'cbrt', 'exp_sq', 'rat_sq', 'cosine']
OK similarity ratio best got 6496 want 6496 BAD similarity ratio best got 6560 want 6496
OK similarity exp_abs best got 6822 want 6822 BAD similarity exp_abs best got 6895 want 6822
OK similarity rational best got 7038 want 7038 BAD similarity rational best got 7118 want 7038
OK similarity ratio_soft best got 9502 want 9502 BAD similarity ratio_soft best got 9578 want 9502
OK similarity sqrt best got 10497 want 10497 BAD similarity sqrt best got 10546 want 10497
OK similarity cbrt best got 11941 want 11941 BAD similarity cbrt best got 12002 want 11941
OK similarity exp_sq best got 14314 want 14314 BAD similarity exp_sq best got 14307 want 14314
OK similarity rat_sq best got 15102 want 15102 OK similarity rat_sq best got 15102 want 15102
OK similarity cosine best got 16394 want 16394 OK similarity cosine best got 16394 want 16394
OK scale ranking got ['derived3', 'derived', 'bracket', 'start'] want ['derived3', 'derived', 'bracket', 'start'] OK scale ranking got ['derived3', 'derived', 'bracket', 'start'] want ['derived3', 'derived', 'bracket', 'start']
OK scale derived3 best got 6496 want 6496 BAD scale derived3 best got 6560 want 6496
OK scale derived best got 6628 want 6628 BAD scale derived best got 6702 want 6628
OK scale bracket best got 9081 want 9081 BAD scale bracket best got 9107 want 9081
OK scale start best got 14540 want 14540 OK scale start best got 14540 want 14540
The placement modes (each in its own sweep file): The placement modes (each in its own sweep file):
OK slope.ratio.derived3.project APS got 2848 want 2848 OK slope.ratio.derived3.project APS got 2848 want 2848
OK slope.ratio.derived3.project CHA got 3074 want 3074 BAD slope.ratio.derived3.project CHA got 3114 want 3074
OK slope.ratio.derived3.project solved got 193 want 193 OK slope.ratio.derived3.project solved got 193 want 193
OK slope.ratio.derived3.project guarantee (over 2x) got 0 want 0 OK slope.ratio.derived3.project guarantee (over 2x) got 0 want 0
OK pure+shape+slope.ratio.derived3.safe APS got 2527 want 2527 OK pure+shape+slope.ratio.derived3.safe APS got 2527 want 2527
OK pure+shape+slope.ratio.derived3.safe CHA got 3108 want 3108 BAD pure+shape+slope.ratio.derived3.safe CHA got 3126 want 3108
OK pure+shape+slope.ratio.derived3.safe solved got 193 want 193 OK pure+shape+slope.ratio.derived3.safe solved got 193 want 193
OK pure+shape+slope.ratio.derived3.safe guarantee (over 2x) got 0 want 0 OK pure+shape+slope.ratio.derived3.safe guarantee (over 2x) got 0 want 0
OK pure+dissim+slope.ratio.derived3.project APS got 2726 want 2726 OK pure+dissim+slope.ratio.derived3.project APS got 2726 want 2726
OK pure+dissim+slope.ratio.derived3.project CHA got 2785 want 2785 BAD pure+dissim+slope.ratio.derived3.project CHA got 2799 want 2785
OK pure+dissim+slope.ratio.derived3.project solved got 193 want 193 OK pure+dissim+slope.ratio.derived3.project solved got 193 want 193
OK pure+dissim+slope.ratio.derived3.project guarantee (over 2x) got 0 want 0 OK pure+dissim+slope.ratio.derived3.project guarantee (over 2x) got 0 want 0
OK pure+shape+dissim+slope.ratio.derived3.safe APS got 2884 want 2884 OK pure+shape+dissim+slope.ratio.derived3.safe APS got 2884 want 2884
OK pure+shape+dissim+slope.ratio.derived3.safe CHA got 2859 want 2859 BAD pure+shape+dissim+slope.ratio.derived3.safe CHA got 2871 want 2859
OK pure+shape+dissim+slope.ratio.derived3.safe solved got 193 want 193 OK pure+shape+dissim+slope.ratio.derived3.safe solved got 193 want 193
OK pure+shape+dissim+slope.ratio.derived3.safe guarantee (over 2x) got 0 want 0 OK pure+shape+dissim+slope.ratio.derived3.safe guarantee (over 2x) got 0 want 0
OK gate.ratio.derived.project APS got 4449 want 4449 !! gate.ratio.derived.project not in sweep_gate.json — stale sweep
OK gate.ratio.derived.project CHA got 2991 want 2991
OK gate.ratio.derived.project solved got 193 want 193
OK gate.ratio.derived.project guarantee (over 2x) got 0 want 0
OK log.ratio_soft.derived.safe APS got 6940 want 6940 OK log.ratio_soft.derived.safe APS got 6940 want 6940
OK log.ratio_soft.derived.safe CHA got 3474 want 3474 BAD log.ratio_soft.derived.safe CHA got 3541 want 3474
OK log.ratio_soft.derived.safe solved got 193 want 193 OK log.ratio_soft.derived.safe solved got 193 want 193
OK log.ratio_soft.derived.safe guarantee (over 2x) got 0 want 0 OK log.ratio_soft.derived.safe guarantee (over 2x) got 0 want 0
OK pure+dissim+slope.ratio.derived3.safe CHA per-set got 2683 want 2683 BAD pure+dissim+slope.ratio.derived3.safe CHA per-set got 2695 want 2683
OK gate.ratio_soft.derived.safe CHA per-set got 2851 want 2851
The per-place reading (sweep_order.json): The per-place reading (sweep_order.json):
OK far+rational both APS m=1 got 4522 want 4522 OK far+rational both APS m=1 got 4522 want 4522
OK far+rational both APS order got 3675 want 3675 OK far+rational both APS order got 3675 want 3675
OK far+rational both CHA m=1 got 3387 want 3387 BAD far+rational both CHA m=1 got 3406 want 3387
OK far+rational both CHA order got 3216 want 3216 BAD far+rational both CHA order got 3241 want 3216
OK far+rational bracket APS m=1 got 4606 want 4606 OK far+rational bracket APS m=1 got 4606 want 4606
OK far+rational bracket APS order got 3542 want 3542 OK far+rational bracket APS order got 3542 want 3542
OK far+rational bracket CHA m=1 got 3571 want 3571 BAD far+rational bracket CHA m=1 got 3602 want 3571
OK far+rational bracket CHA order got 3303 want 3303 BAD far+rational bracket CHA order got 3359 want 3303
OK far+rational credit APS m=1 got 5190 want 5190 OK far+rational credit APS m=1 got 5190 want 5190
OK far+rational credit APS order got 4686 want 4686 OK far+rational credit APS order got 4686 want 4686
OK far+rational credit CHA m=1 got 3013 want 3013 OK far+rational credit CHA m=1 got 3013 want 3013
OK far+rational credit CHA order got 2884 want 2884 OK far+rational credit CHA order got 2884 want 2884
OK far+rational project APS m=1 got 6932 want 6932 OK far+rational project APS m=1 got 6932 want 6932
OK far+rational project APS order got 6364 want 6364 OK far+rational project APS order got 6364 want 6364
OK far+rational project CHA m=1 got 4794 want 4794 BAD far+rational project CHA m=1 got 4789 want 4794
OK far+rational project CHA order got 4559 want 4559 BAD far+rational project CHA order got 4554 want 4559
OK far+rational safe APS m=1 got 5987 want 5987 OK far+rational safe APS m=1 got 5987 want 5987
OK far+rational safe APS order got 5229 want 5229 OK far+rational safe APS order got 5229 want 5229
OK far+rational safe CHA m=1 got 4108 want 4108 BAD far+rational safe CHA m=1 got 4134 want 4108
OK far+rational safe CHA order got 3923 want 3923 BAD far+rational safe CHA order got 3954 want 3923
OK far+rational step APS m=1 got 6435 want 6435 OK far+rational step APS m=1 got 6435 want 6435
OK far+rational step APS order got 5551 want 5551 OK far+rational step APS order got 5551 want 5551
OK far+rational step CHA m=1 got 4257 want 4257 BAD far+rational step CHA m=1 got 4287 want 4257
OK far+rational step CHA order got 4022 want 4022 BAD far+rational step CHA order got 4068 want 4022
OK far+rational none APS m=1 got 10676 want 10676 OK far+rational none APS m=1 got 10676 want 10676
OK far+rational none APS order got 10043 want 10043 OK far+rational none APS order got 10043 want 10043
OK far+rational none CHA m=1 got 8265 want 8265 OK far+rational none CHA m=1 got 8265 want 8265
@@ -197,32 +193,32 @@ The per-place reading (sweep_order.json):
The decision place (sweep_decision.json): The decision place (sweep_decision.json):
OK ratio.band.project APS got 5432 want 5432 OK ratio.band.project APS got 5432 want 5432
OK ratio.band.project CHA got 3066 want 3066 BAD ratio.band.project CHA got 3059 want 3066
OK ratio.band.credit CHA got 2899 want 2899 BAD ratio.band.credit CHA got 2892 want 2899
OK ratio.none.project APS got 2806 want 2806 OK ratio.none.project APS got 2806 want 2806
OK ratio.defect.project APS got 2523 want 2523 OK ratio.defect.project APS got 2523 want 2523
OK ratio.defect.project CHA got 3210 want 3210 OK ratio.defect.project CHA got 3210 want 3210
OK ratio_soft.simpair.project CHA got 2868 want 2868 BAD ratio_soft.simpair.project CHA got 2897 want 2868
OK defect APS solved got 153 want 153 OK defect APS solved got 153 want 153
OK defect both sets got 5733 want 5733 OK defect both sets got 5733 want 5733
OK defect is the new canonical best (< 2527) got True want True OK defect is the new canonical best (< 2527) got True want True
OK decision grid guarantee violations got 0 want 0 OK decision grid guarantee violations got 0 want 0
OK band refusal rate % got 63.6 want 63.6 BAD band refusal rate % got 63.5 want 63.6
OK defect refusal rate % got 7.0 want 7.0 BAD defect refusal rate % got 6.6 want 7.0
The gap decomposition (fresh runs of the diagnosis scripts): The gap decomposition (fresh runs of the diagnosis scripts):
OK problems where we lose got 33 want 33 OK problems where we lose got 33 want 33
OK fun1.4 our bracket halvings/eval got 0.62 want 0.62 OK fun1.4 our bracket halvings/eval got 0.62 want 0.62
OK fun1.4 IQI from our points got 10.37 want 10.37 OK fun1.4 IQI from our points got 10.37 want 10.37
OK flat: ours min got 0.41 want 0.41 OK flat: ours min got 0.41 want 0.41
OK flat: ours max got 0.81 want 0.81 BAD flat: ours max got 0.75 want 0.81
OK flat: IQI min got 0.01 want 0.01 OK flat: IQI min got 0.01 want 0.01
OK flat: IQI max got 0.17 want 0.17 OK flat: IQI max got 0.17 want 0.17
OK non-degenerate states with one negative weight got np.int64(428) want 428 OK non-degenerate states with one negative weight got np.int64(428) want 428
OK bracketing states in total got 433 want 433 BAD bracketing states in total got 431 want 433
OK every exception is an underflowed zero weight got True want True OK every exception is an underflowed zero weight got True want True
OK total gap on the losing problems got 244 want 244 BAD total gap on the losing problems got 256 want 244
OK flat families' gap got 160 want 160 BAD flat families' gap got 172 want 160
OK fun1 gap got 58 want 58 OK fun1 gap got 58 want 58
OK Chandrupatla bisect share fun3 % got 92 want 92 OK Chandrupatla bisect share fun3 % got 92 want 92
OK Chandrupatla bisect share fun4 % got 96 want 96 OK Chandrupatla bisect share fun4 % got 96 want 96
@@ -232,19 +228,19 @@ The gap decomposition (fresh runs of the diagnosis scripts):
OK Chandrupatla total fun5 got 233 want 233 OK Chandrupatla total fun5 got 233 want 233
OK Chandrupatla total fun6 got 233 want 233 OK Chandrupatla total fun6 got 233 want 233
OK m>=2 on canonical states % got np.float64(0.2) want 0.2 OK m>=2 on canonical states % got np.float64(0.2) want 0.2
OK m>=2 on flat states % got 5.8 want 5.8 BAD m>=2 on flat states % got 0.0 want 5.8
OK band fun4 no-gate got 573 want 573 OK band fun4 no-gate got 573 want 573
OK band fun4 with band got 296 want 296 OK band fun4 with band got 296 want 296
OK band fun5 no-gate got 456 want 456 OK band fun5 no-gate got 456 want 456
OK band fun5 with band got 239 want 239 OK band fun5 with band got 239 want 239
OK band fun6 no-gate got 456 want 456 OK band fun6 no-gate got 456 want 456
OK band fun6 with band got 235 want 235 BAD band fun6 with band got 228 want 235
OK band cost on fun1 got 164 want 164 OK band cost on fun1 got 164 want 164
OK band cost on fun2 got 111 want 111 OK band cost on fun2 got 111 want 111
OK band cost on fun8 got 170 want 170 OK band cost on fun8 got 170 want 170
OK band cost on fun9 got 144 want 144 OK band cost on fun9 got 144 want 144
OK log item: x-space control APS got 5822 want 5822 OK log item: x-space control APS got 5822 want 5822
OK log item: x-space control CHA got 3643 want 3643 BAD log item: x-space control CHA got 3695 want 3643
§3.1: the multiplier and the endowment (fresh runs): §3.1: the multiplier and the endowment (fresh runs):
OK multiplier 1.0 APS got 4817 want 4817 OK multiplier 1.0 APS got 4817 want 4817
@@ -277,14 +273,14 @@ The gap decomposition (fresh runs of the diagnosis scripts):
Tables 2-3 regenerated: Tables 2-3 regenerated:
OK APS pure.ratio.derived3.project place got 3 want 3 OK APS pure.ratio.derived3.project place got 3 want 3
OK APS pure.ratio.derived3.none place got 2 want 2 OK APS pure.ratio.derived3.none place got 2 want 2
OK CHA pure.ratio.derived3.project place got 47 want 47 BAD CHA pure.ratio.derived3.project place got 45 want 47
OK CHA pure.ratio.derived3.none place got 228 want 228 OK CHA pure.ratio.derived3.none place got 228 want 228
OK CHA pure.exp_abs.bracket.both place got 4 want 4 OK CHA pure.exp_abs.bracket.both place got 4 want 4
OK CHA exp_abs.bracket.both total got 2733 want 2733 BAD CHA exp_abs.bracket.both total got 2736 want 2733
OK CHA TOMS 748 over the 2x bound got 15 want 15 OK CHA TOMS 748 over the 2x bound got 15 want 15
OK CHA Brent over the 2x bound got 18 want 18 OK CHA Brent over the 2x bound got 18 want 18
OK credit APS vs itp_oracle got (86, 6, 61) want (86, 6, 61) OK credit APS vs itp_oracle got (86, 6, 61) want (86, 6, 61)
OK credit CHA vs itp_oracle got (2, 3, 35) want (2, 3, 35) BAD credit CHA vs itp_oracle got (2, 2, 36) want (2, 3, 35)
OK credit CHA vs bisection got (5, 0, 35) want (5, 0, 35) OK credit CHA vs bisection got (5, 0, 35) want (5, 0, 35)
OK project APS vs chandrupatla got (87, 24, 42) want (87, 24, 42) OK project APS vs chandrupatla got (87, 24, 42) want (87, 24, 42)
OK project APS vs itp got (132, 3, 18) want (132, 3, 18) OK project APS vs itp got (132, 3, 18) want (132, 3, 18)
@@ -297,7 +293,7 @@ Tables 2-3 regenerated:
OK both sets pure.ratio.derived3.credit got 6588 want 6588 OK both sets pure.ratio.derived3.credit got 6588 want 6588
OK both sets pure.ratio.derived3.project got 6026 want 6026 OK both sets pure.ratio.derived3.project got 6026 want 6026
OK both sets chandrupatla got 5228 want 5228 OK both sets chandrupatla got 5228 want 5228
OK both sets itp_oracle got 5871 want 5871 BAD both sets itp_oracle got 5907 want 5871
OK both sets toms748 got 6820 want 6820 OK both sets toms748 got 6820 want 6820
OK both sets brent got 7004 want 7004 OK both sets brent got 7004 want 7004
@@ -312,7 +308,66 @@ Tables 2-3 regenerated:
OK pure+shape+dissim+slope.ratio.derived3.credit CHA got 3037 want 3037 OK pure+shape+dissim+slope.ratio.derived3.credit CHA got 3037 want 3037
OK defect.ratio.derived3.credit APS got 3545 want 3545 OK defect.ratio.derived3.credit APS got 3545 want 3545
OK defect.ratio.derived3.credit CHA got 2949 want 2949 OK defect.ratio.derived3.credit CHA got 2949 want 2949
OK best constant-free configuration got 'defect.ratio.derived3.credit' want 'defect.ratio.derived3.credit' BAD best constant-free configuration got 'defect+flatanalogmempt+exp+half.ratio.derived3.credit' want 'defect.ratio.derived3.credit'
OK its total over both sets got 6494 want 6494 BAD its total over both sets got 6111 want 6494
every number stated in the paper matches the sweep data. 59 STATED NUMBERS DO NOT MATCH THE DATA:
CHA place
CHA itp_oracle total
CHA itp total
CHA toms748 place
CHA brent place
CHA cbrt over the whole set
switch by benchmark set, both sets
mean total, scale=derived3, lin
mean total, scale=derived3, quad
mean total, scale=derived, lin
mean total, scale=derived, quad
mean total, scale=bracket, lin
mean total, scale=bracket, quad
similarity ratio best
similarity exp_abs best
similarity rational best
similarity ratio_soft best
similarity sqrt best
similarity cbrt best
similarity exp_sq best
scale derived3 best
scale derived best
scale bracket best
slope.ratio.derived3.project CHA
pure+shape+slope.ratio.derived3.safe CHA
pure+dissim+slope.ratio.derived3.project CHA
pure+shape+dissim+slope.ratio.derived3.safe CHA
gate.ratio.derived.project missing from sweep_gate.json
log.ratio_soft.derived.safe CHA
pure+dissim+slope.ratio.derived3.safe CHA per-set
gate.ratio_soft.derived.safe missing from sweep_gate.json
far+rational both CHA m=1
far+rational both CHA order
far+rational bracket CHA m=1
far+rational bracket CHA order
far+rational project CHA m=1
far+rational project CHA order
far+rational safe CHA m=1
far+rational safe CHA order
far+rational step CHA m=1
far+rational step CHA order
ratio.band.project CHA
ratio.band.credit CHA
ratio_soft.simpair.project CHA
band refusal rate %
defect refusal rate %
flat: ours max
bracketing states in total
total gap on the losing problems
flat families' gap
m>=2 on flat states %
band fun6 with band
log item: x-space control CHA
CHA pure.ratio.derived3.project place
CHA exp_abs.bracket.both total
credit CHA vs itp_oracle
both sets itp_oracle
best constant-free configuration
its total over both sets
+7 -1
View File
@@ -682,7 +682,13 @@ def _local_order(x2, f2, x1, f1, x0, f0):
fpp = 2.0 * d012 # f''(x2) on the parabola fpp = 2.0 * d012 # f''(x2) on the parabola
if fp == 0.0 or not math.isfinite(fp) or not math.isfinite(fpp): if fp == 0.0 or not math.isfinite(fp) or not math.isfinite(fpp):
return 1.0 return 1.0
theta = f2 * fpp / (fp * fp) den = fp * fp
if den == 0.0:
# fp nonzero but its square underflows (found 2026-09-21: a ZeroDivisionError that
# the sweep harness caught and charged as a failure, which is what moved Table 6's
# order cells after the sign fix); no order can be read - decline, as for fp == 0
return 1.0
theta = f2 * fpp / den
if not math.isfinite(theta) or not (0.0 < theta < 1.0): if not math.isfinite(theta) or not (0.0 < theta < 1.0):
return 1.0 return 1.0
m = 1.0 / (1.0 - theta) m = 1.0 / (1.0 - theta)
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+9
View File
@@ -487,3 +487,12 @@ def test_close_and_sub_measured_in_development():
p19 = lambda x: x ** 19 # noqa: E731 p19 = lambda x: x ** 19 # noqa: E731
assert _n(p19, -10.0, 100.0, APRIME) == _n(p19, -10.0, 100.0, a_) assert _n(p19, -10.0, 100.0, APRIME) == _n(p19, -10.0, 100.0, a_)
assert _n(lambda x: 3.0 * x - 1.0, -2.0, 5.0, APRIME) == 4 assert _n(lambda x: 3.0 * x - 1.0, -2.0, 5.0, APRIME) == 4
def test_local_order_declines_when_the_slope_square_underflows():
"""Bug 2026-09-21: fp != 0 but fp*fp == 0 raised ZeroDivisionError; the sweep harness
charged it as a failure (Table 6 order cells). Now the estimator declines (m = 1)."""
from simroot.pure import _local_order
# three points on a line of slope 1e-170: fp ~ 1e-170, fp*fp underflows to 0
s = 1e-170
assert _local_order(3.0, 3.0 * s, 2.0, 2.0 * s, 1.0, 1.0 * s) == 1.0
+6 -1
View File
@@ -500,7 +500,12 @@ def verify_safeguard_and_tables():
if "smoke" in p: if "smoke" in p:
continue continue
with open(p, encoding="utf8") as fh: with open(p, encoding="utf8") as fh:
for r in json.load(fh): data = json.load(fh)
# only grid files (a list of labelled cells); the out-of-sample results
# (sweep_oos.json, sweep_fourth_*.json, ...) are dicts of a different shape
if not isinstance(data, list):
continue
for r in data:
cells.setdefault(r["label"], r) cells.setdefault(r["label"], r)
for lbl, aps, cha in (("slope.ratio.derived3.credit", 3507, 2997), for lbl, aps, cha in (("slope.ratio.derived3.credit", 3507, 2997),
("pure+shape+slope.ratio.derived3.credit", 3755, 3021), ("pure+shape+slope.ratio.derived3.credit", 3755, 3021),