Current task: —

E-021-sinf-sf-curve.py

Experiments: E-021 · script updated 08-19-2026

E-021-sinf-sf-curve.csv — 299.9 KB, updated 08-19-2026

← prev page 3 of 10 · 500/page · 5000 rows next →
# nS_infS_flambda_nabs_Sf
1002 1001 2326.12069397 -1.95207030195 2329.07276427 1.95207030195
1003 1002 2328.94499037 -2.14254467226 2332.08753504 2.14254467226
1004 1003 2331.76978576 -2.3269588912 2335.09674466 2.3269588912
1005 1004 2334.59507967 -2.50460371489 2338.09968338 2.50460371489
1006 1005 2337.42087158 -2.67479288026 2341.09566446 2.67479288026
1007 1006 2340.24716101 -2.83686640941 2344.08402741 2.83686640941
1008 1007 2343.07394745 -2.99019381267 2347.06414126 2.99019381267
1009 1008 2345.90123041 -3.13417717418 2350.03540759 3.13417717418
1010 1009 2348.72900941 -3.26825410431 2352.99726352 3.26825410431
1011 1010 2351.55728395 -3.39190054393 2355.9491845 3.39190054393
1012 1011 2354.38605354 -3.50463340604 2358.89068695 3.50463340604
1013 1012 2357.21531769 -3.60601304116 2361.82133073 3.60601304116
1014 1013 2360.04507591 -3.69564551367 2364.74072142 3.69564551367
1015 1014 2362.87532771 -3.77318467721 2367.64851239 3.77318467721
1016 1015 2365.70607261 -3.838334038 2370.54440665 3.838334038
1017 1016 2368.53731012 -3.89084839629 2373.42815851 3.89084839629
1018 1017 2371.36903975 -3.93053525684 2376.29957501 3.93053525684
1019 1018 2374.20126103 -3.9572560007 2379.15851703 3.9572560007
1020 1019 2377.03397347 -3.97092681162 2382.00490028 3.97092681162
1021 1020 2379.86717658 -3.97151935143 2384.83869593 3.97151935143
1022 1021 2382.70086989 -3.95906118028 2387.65993107 3.95906118028
1023 1022 2385.53505292 -3.93363591862 2390.46868884 3.93363591862
1024 1023 2388.36972518 -3.89538314893 2393.26510833 3.89538314893
1025 1024 2391.2048862 -3.84449805698 2396.04938426 3.84449805698
1026 1025 2394.04053551 -3.78123081296 2398.82176632 3.78123081296
1027 1026 2396.87667262 -3.70588569479 2401.58255831 3.70588569479
1028 1027 2399.71329705 -3.61881995659 2404.33211701 3.61881995659
1029 1028 2402.55040834 -3.52044244699 2407.07085079 3.52044244699
1030 1029 2405.38800602 -3.41121198284 2409.799218 3.41121198284
1031 1030 2408.2260896 -3.29163548534 2412.51772509 3.29163548534
1032 1031 2411.06465862 -3.16226588662 2415.22692451 3.16226588662
1033 1032 2413.9037126 -3.023699816 2417.92741242 3.023699816
1034 1033 2416.74325109 -2.87657507624 2420.61982616 2.87657507624
1035 1034 2419.58327359 -2.72156792109 2423.30484152 2.72156792109
1036 1035 2422.42377966 -2.55939014653 2425.98316981 2.55939014653
1037 1036 2425.26476882 -2.39078600889 2428.65555483 2.39078600889
1038 1037 2428.10624061 -2.21652898403 2431.32276959 2.21652898403
1039 1038 2430.94819455 -2.0374183825 2433.98561293 2.0374183825
1040 1039 2433.79063019 -1.85427583626 2436.64490603 1.85427583626
1041 1040 2436.63354706 -1.66794167331 2439.30148874 1.66794167331
1042 1041 2439.4769447 -1.47927119717 2441.9562159 1.47927119717
1043 1042 2442.32082265 -1.28913088838 2444.60995354 1.28913088838
1044 1043 2445.16518045 -1.098394546 2447.26357499 1.098394546
1045 1044 2448.01001763 -0.907939387 2449.91795702 0.907939387
1046 1045 2450.85533374 -0.718642122054 2452.57397586 0.718642122054
1047 1046 2453.70112832 -0.531375026016 2455.23250334 0.531375026016
1048 1047 2456.54740091 -0.347002021721 2457.89440293 0.347002021721
1049 1048 2459.39415105 -0.16637479554 2460.56052584 0.16637479554
1050 1049 2462.24137829 0.00967103695656 2463.23170726 0.00967103695656
1051 1050 2465.08908218 0.180319697076 2465.90876248 0.180319697076
1052 1051 2467.93726226 0.344778922998 2468.59248334 0.344778922998
1053 1052 2470.78591807 0.502283546236 2471.28363453 0.502283546236
1054 1053 2473.63504918 0.652098947612 2473.98295023 0.652098947612
1055 1054 2476.48465511 0.793524376319 2476.69113073 0.793524376319
1056 1055 2479.33473543 0.925896116323 2479.40883931 0.925896116323
1057 1056 2482.18528968 1.04859048505 2482.13669919 1.04859048505
1058 1057 2485.03631742 1.16102665007 2484.87529077 1.16102665007
1059 1058 2487.88781819 1.26266925046 2487.62514894 1.26266925046
1060 1059 2490.73979155 1.35303081024 2490.38676074 1.35303081024
1061 1060 2493.59223706 1.43167393252 2493.16056313 1.43167393252
1062 1061 2496.44515426 1.49821326388 2495.946941 1.49821326388
1063 1062 2499.29854272 1.55231721956 2498.7462255 1.55231721956
1064 1063 2502.15240199 1.59370946138 2501.55869253 1.59370946138
1065 1064 2505.00673163 1.62217012128 2504.3845615 1.62217012128
1066 1065 2507.86153118 1.63753676465 2507.22399442 1.63753676465
1067 1066 2510.71680023 1.63970508896 2510.07709514 1.63970508896
1068 1067 2513.57253831 1.62862935437 2512.94390896 1.62862935437
1069 1068 2516.428745 1.60432254421 2515.82442246 1.60432254421
1070 1069 2519.28541986 1.5668562548 2518.7185636 1.5668562548
1071 1070 2522.14256244 1.51636031496 2521.62620213 1.51636031496
1072 1071 2525.00017231 1.45302213724 2524.54715018 1.45302213724
1073 1072 2527.85824904 1.37708580397 2527.48116323 1.37708580397
1074 1073 2530.71679218 1.28885089259 2530.42794129 1.28885089259
1075 1074 2533.57580131 1.18867104582 2533.38713026 1.18867104582
1076 1075 2536.43527598 1.07695229372 2536.35832369 1.07695229372
1077 1076 2539.29521577 0.954151135628 2539.34106464 0.954151135628
1078 1077 2542.15562025 0.820772391256 2542.33484786 0.820772391256
1079 1078 2545.01648898 0.677366831194 2545.33912215 0.677366831194
1080 1079 2547.87782153 0.52452859833 2548.35329293 0.52452859833
1081 1080 2550.73961747 0.362892432489 2551.37672504 0.362892432489
1082 1081 2553.60187637 0.193130711633 2554.40874566 0.193130711633
1083 1082 2556.46459781 0.0159503238242 2557.44864749 0.0159503238242
1084 1083 2559.32778136 -0.167910615059 2560.49569198 0.167910615059
1085 1084 2562.19142659 -0.35768618212 2563.54911277 0.35768618212
1086 1085 2565.05553307 -0.552586190389 2566.60811926 0.552586190389
1087 1086 2567.92010038 -0.751799836952 2569.67190022 0.751799836952
1088 1087 2570.7851281 -0.954499438821 2572.73962754 0.954499438821
1089 1088 2573.6506158 -1.15984423872 2575.81046004 1.15984423872
1090 1089 2576.51656305 -1.36698426257 2578.88354732 1.36698426257
1091 1090 2579.38296945 -1.57506421036 2581.95803366 1.57506421036
1092 1091 2582.24983456 -1.78322736183 2585.03306192 1.78322736183
1093 1092 2585.11715796 -1.99061947826 2588.10777744 1.99061947826
1094 1093 2587.98493924 -2.19639268215 2591.18133193 2.19639268215
1095 1094 2590.85317798 -2.39970929597 2594.25288728 2.39970929597
1096 1095 2593.72187375 -2.59974562212 2597.32161938 2.59974562212
1097 1096 2596.59102615 -2.79569564604 2600.3867218 2.79569564604
1098 1097 2599.46063475 -2.98677464504 2603.4474094 2.98677464504
1099 1098 2602.33069914 -3.1722226859 2606.50292183 3.1722226859
1100 1099 2605.2012189 -3.35130799466 2609.5525269 3.35130799466
1101 1100 2608.07219362 -3.52333018296 2612.59552381 3.52333018296
1102 1101 2610.94362289 -3.68762331578 2615.63124621 3.68762331578
1103 1102 2613.81550629 -3.84355880627 2618.6590651 3.84355880627
1104 1103 2616.68784341 -3.99054812432 2621.67839154 3.99054812432
1105 1104 2619.56063384 -4.12804530634 2624.68867915 4.12804530634
1106 1105 2622.43387717 -4.25554925465 2627.68942642 4.25554925465
1107 1106 2625.30757298 -4.37260581627 2630.6801788 4.37260581627
1108 1107 2628.18172088 -4.47880963135 2633.66053051 4.47880963135
1109 1108 2631.05632045 -4.57380574341 2636.63012619 4.57380574341
1110 1109 2633.93137128 -4.65729096393 2639.58866224 4.65729096393
1111 1110 2636.80687297 -4.72901498581 2642.53588795 4.72901498581
1112 1111 2639.6828251 -4.78878124068 2645.47160634 4.78878124068
1113 1112 2642.55922729 -4.83644749711 2648.39567478 4.83644749711
1114 1113 2645.43607911 -4.87192619719 2651.30800531 4.87192619719
1115 1114 2648.31338017 -4.89518453102 2654.2085647 4.89518453102
1116 1115 2651.19113006 -4.90624424936 2657.09737431 4.90624424936
1117 1116 2654.06932838 -4.90518121625 2659.9745096 4.90518121625
1118 1117 2656.94797474 -4.89212470456 2662.84009944 4.89212470456
1119 1118 2659.82706871 -4.86725643878 2665.69432515 4.86725643878
1120 1119 2662.70660992 -4.83080939051 2668.53741931 4.83080939051
1121 1120 2665.58659796 -4.78306633325 2671.36966429 4.78306633325
1122 1121 2668.46703242 -4.72435816446 2674.19139058 4.72435816446
1123 1122 2671.34791291 -4.65506200379 2677.00297491 4.65506200379
1124 1123 2674.22923904 -4.57559907742 2679.80483811 4.57559907742
1125 1124 2677.1110104 -4.48643239982 2682.5974428 4.48643239982
1126 1125 2679.9932266 -4.38806426466 2685.38129086 4.38806426466
1127 1126 2682.87588724 -4.2810335581 2688.1569208 4.2810335581
1128 1127 2685.75899194 -4.165912908 2690.92490485 4.165912908
1129 1128 2688.64254029 -4.04330568381 2693.68584598 4.04330568381
1130 1129 2691.52653191 -3.91384286222 2696.44037477 3.91384286222
1131 1130 2694.41096639 -3.77817977459 2699.18914616 3.77817977459
1132 1131 2697.29584335 -3.63699275253 2701.9328361 3.63699275253
1133 1132 2700.1811624 -3.49097568849 2704.67213809 3.49097568849
1134 1133 2703.06692314 -3.34083652867 2707.40775967 3.34083652867
1135 1134 2705.95312519 -3.18729371574 2710.14041891 3.18729371574
1136 1135 2708.83976816 -3.03107259924 2712.87084076 3.03107259924
1137 1136 2711.72685166 -2.87290183137 2715.59975349 2.87290183137
1138 1137 2714.61437529 -2.71350976622 2718.32788506 2.71350976622
1139 1138 2717.50233868 -2.55362088019 2721.05595956 2.55362088019
1140 1139 2720.39074144 -2.39395223126 2723.78469367 2.39395223126
1141 1140 2723.27958318 -2.23520997462 2726.51479316 2.23520997462
1142 1141 2726.16886352 -2.07808595179 2729.24694947 2.07808595179
1143 1142 2729.05858207 -1.92325436975 2731.98183644 1.92325436975
1144 1143 2731.94873844 -1.77136858662 2734.72010703 1.77136858662
1145 1144 2734.83933227 -1.62305801919 2737.46239028 1.62305801919
1146 1145 2737.73036315 -1.47892518749 2740.20928834 1.47892518749
1147 1146 2740.62183072 -1.33954291066 2742.96137363 1.33954291066
1148 1147 2743.51373458 -1.20545166751 2745.71918625 1.20545166751
1149 1148 2746.40607437 -1.07715713443 2748.4832315 1.07715713443
1150 1149 2749.29884969 -0.955127912357 2751.25397761 0.955127912357
1151 1150 2752.19206018 -0.839793453503 2754.03185364 0.839793453503
1152 1151 2755.08570545 -0.731542197515 2756.81724765 0.731542197515
1153 1152 2757.97978513 -0.630719925708 2759.61050505 0.630719925708
1154 1153 2760.87429883 -0.537628340855 2762.41192717 0.537628340855
1155 1154 2763.76924618 -0.452523878867 2765.22177006 0.452523878867
1156 1155 2766.66462681 -0.37561675754 2768.04024357 0.37561675754
1157 1156 2769.56044034 -0.307070266313 2770.86751061 0.307070266313
1158 1157 2772.4566864 -0.247000299775 2773.7036867 0.247000299775
1159 1158 2775.3533646 -0.195475136414 2776.54883974 0.195475136414
1160 1159 2778.25047459 -0.152515462861 2779.40299005 0.152515462861
1161 1160 2781.14801598 -0.118094642651 2782.26611063 0.118094642651
1162 1161 2784.04598841 -0.0921392272827 2785.13812764 0.0921392272827
1163 1162 2786.9443915 -0.0745297061368 2788.01892121 0.0745297061368
1164 1163 2789.84322489 -0.0651014906241 2790.90832638 0.0651014906241
1165 1164 2792.74248819 -0.0636461267475 2793.80613432 0.0636461267475
1166 1165 2795.64218105 -0.0699127291291 2796.71209378 0.0699127291291
1167 1166 2798.5423031 -0.0836096284401 2799.62591272 0.0836096284401
1168 1167 2801.44285396 -0.104406223112 2802.54726018 0.104406223112
1169 1168 2804.34383326 -0.131935025188 2805.47576829 0.131935025188
1170 1169 2807.24524066 -0.165793889219 2808.41103455 0.165793889219
1171 1170 2810.14707576 -0.205548412183 2811.35262418 0.205548412183
1172 1171 2813.04933822 -0.250734491592 2814.30007271 0.250734491592
1173 1172 2815.95202766 -0.300861028149 2817.25288869 0.300861028149
1174 1173 2818.85514373 -0.355412758627 2820.21055649 0.355412758627
1175 1174 2821.75868605 -0.413853203989 2823.17253926 0.413853203989
1176 1175 2824.66265427 -0.475627717244 2826.13828199 0.475627717244
1177 1176 2827.56704802 -0.540166615017 2829.10721463 0.540166615017
1178 1177 2830.47186693 -0.606888376453 2832.07875531 0.606888376453
1179 1178 2833.37711066 -0.675202892736 2835.05231355 0.675202892736
1180 1179 2836.28277884 -0.744514750286 2838.02729359 0.744514750286
1181 1180 2839.1888711 -0.81422653058 2841.00309763 0.81422653058
1182 1181 2842.09538709 -0.883742109432 2843.9791292 0.883742109432
1183 1182 2845.00232646 -0.95246993868 2846.95479639 0.95246993868
1184 1183 2847.90968883 -1.01982629327 2849.92951512 1.01982629327
1185 1184 2850.81747386 -1.08523846699 2852.90271233 1.08523846699
1186 1185 2853.72568118 -1.14814790038 2855.87382909 1.14814790038
1187 1186 2856.63431045 -1.20801322471 2858.84232368 1.20801322471
1188 1187 2859.5433613 -1.26431320639 2861.80767451 1.26431320639
1189 1188 2862.45283339 -1.31654957666 2864.76938296 1.31654957666
1190 1189 2865.36272634 -1.36424973219 2867.72697608 1.36424973219
1191 1190 2868.27303982 -1.4069692926 2870.68000911 1.4069692926
1192 1191 2871.18377347 -1.44429450199 2873.62806797 1.44429450199
1193 1192 2874.09492693 -1.47584446221 2876.57077139 1.47584446221
1194 1193 2877.00649986 -1.50127318643 2879.50777304 1.50127318643
1195 1194 2879.91849189 -1.52027146275 2882.43876336 1.52027146275
1196 1195 2882.83090269 -1.53256851829 2885.36347121 1.53256851829
1197 1196 2885.7437319 -1.53793347545 2888.28166537 1.53793347545
1198 1197 2888.65697916 -1.536176593 2891.19315576 1.536176593
1199 1198 2891.57064414 -1.52715028589 2894.09779443 1.52715028589
1200 1199 2894.48472648 -1.51074991858 2896.9954764 1.51074991858
1201 1200 2897.39922584 -1.48691436822 2899.88614021 1.48691436822
1202 1201 2900.31414186 -1.45562635486 2902.76976822 1.45562635486
1203 1202 2903.2294742 -1.41691253727 2905.64638674 1.41691253727
1204 1203 2906.14522252 -1.37084337412 2908.51606589 1.37084337412
1205 1204 2909.06138646 -1.31753275141 2911.37891921 1.31753275141
1206 1205 2911.97796568 -1.25713737843 2914.23510306 1.25713737843
1207 1206 2914.89495985 -1.18985595546 2917.0848158 1.18985595546
1208 1207 2917.8123686 -1.11592811774 2919.92829672 1.11592811774
1209 1208 2920.73019161 -1.03563316161 2922.76582477 1.03563316161
1210 1209 2923.64842852 -0.949288559241 2925.59771708 0.949288559241
1211 1210 2926.567079 -0.857248270204 2928.42432727 0.857248270204
1212 1211 2929.4861427 -0.759900858602 2931.24604356 0.759900858602
1213 1212 2932.40561929 -0.657667425752 2934.06328671 0.657667425752
1214 1213 2935.32550841 -0.550999369319 2936.87650778 0.550999369319
1215 1214 2938.24580974 -0.440375980659 2939.68618572 0.440375980659
1216 1215 2941.16652292 -0.326301892986 2942.49282482 0.326301892986
1217 1216 2944.08764763 -0.209304393739 2945.29695203 0.209304393739
1218 1217 2947.00918353 -0.0899306152279 2948.09911414 0.0899306152279
1219 1218 2949.93113027 0.031255381741 2950.89987489 0.031255381741
1220 1219 2952.85348752 0.153675615999 2953.6998119 0.153675615999
1221 1220 2955.77625494 0.276741270185 2956.49951367 0.276741270185
1222 1221 2958.6994322 0.399855834828 2959.29957636 0.399855834828
1223 1222 2961.62301896 0.522418295904 2962.10060066 0.522418295904
1224 1223 2964.54701488 0.643826349211 2964.90318853 0.643826349211
1225 1224 2967.47141964 0.763479624772 2967.70794001 0.763479624772
1226 1225 2970.39623289 0.880782904384 2970.51544998 0.880782904384
1227 1226 2973.3214543 0.995149315522 2973.32630499 0.995149315522
1228 1227 2976.24708355 1.10600348486 2976.14108006 1.10600348486
1229 1228 2979.17312029 1.21278463495 2978.96033565 1.21278463495
1230 1229 2982.0995642 1.31494960774 2981.78461459 1.31494960774
1231 1230 2985.02641494 1.41197579925 2984.61443914 1.41197579925
1232 1231 2987.95367219 1.50336398987 2987.4503082 1.50336398987
1233 1232 2990.88133561 1.58864105544 2990.29269456 1.58864105544
1234 1233 2993.80940488 1.66736254493 2993.14204233 1.66736254493
1235 1234 2996.73787966 1.73911511106 2995.99876455 1.73911511106
1236 1235 2999.66675963 1.80351878108 2998.86324085 1.80351878108
1237 1236 3002.59604445 1.86022905571 3001.7358154 1.86022905571
1238 1237 3005.52573381 1.90893882499 3004.61679498 1.90893882499
1239 1238 3008.45582737 1.94938009107 3007.50644728 1.94938009107
1240 1239 3011.38632481 1.98132548848 3010.40499932 1.98132548848
1241 1240 3014.31722579 2.00458959387 3013.3126362 2.00458959387
1242 1241 3017.24853001 2.01903001806 3016.22949999 2.01903001806
1243 1242 3020.18023712 2.02454827446 3019.15568885 2.02454827446
1244 1243 3023.11234682 2.02109041894 3022.0912564 2.02109041894
1245 1244 3026.04485876 2.00864745757 3025.0362113 2.00864745757
1246 1245 3028.97777263 1.98725551972 3027.99051711 1.98725551972
1247 1246 3031.91108811 1.95699579528 3030.95409232 1.95699579528
1248 1247 3034.84480488 1.91799423589 3033.92681064 1.91799423589
1249 1248 3037.7789226 1.87042102139 3036.90850158 1.87042102139
1250 1249 3040.71344097 1.81448979385 3039.89895118 1.81448979385
1251 1250 3043.64835966 1.75045666266 3042.897903 1.75045666266
1252 1251 3046.58367835 1.67861898565 3045.90505936 1.67861898565
1253 1252 3049.51939672 1.59931393178 3048.92008278 1.59931393178
1254 1253 3052.45551444 1.51291683287 3051.94259761 1.51291683287
1255 1254 3055.39203122 1.41983933205 3054.97219188 1.41983933205
1256 1255 3058.32894671 1.32052733854 3058.00841937 1.32052733854
1257 1256 3061.26626061 1.21545879851 3061.05080181 1.21545879851
1258 1257 3064.2039726 1.10514129362 3064.09883131 1.10514129362
1259 1258 3067.14208237 0.990109478855 3067.15197289 0.990109478855
1260 1259 3070.08058959 0.870922372877 3070.20966721 0.870922372877
1261 1260 3073.01949395 0.748160514369 3073.27133343 0.748160514369
1262 1261 3075.95879513 0.622422998808 3076.33637213 0.622422998808
1263 1262 3078.89849283 0.49432441067 3079.40416842 0.49432441067
1264 1263 3081.83858672 0.36449166663 3082.47409506 0.36449166663
1265 1264 3084.7790765 0.233560785822 3085.54551571 0.233560785822
1266 1265 3087.71996184 0.10217360358 3088.61778824 0.10217360358
1267 1266 3090.66124245 -0.029025554524 3091.690268 0.029025554524
1268 1267 3093.60291799 -0.15939322139 3094.76231121 0.15939322139
1269 1268 3096.54498817 -0.288290142657 3097.83327831 0.288290142657
1270 1269 3099.48745267 -0.415084619339 3100.90253729 0.415084619339
1271 1270 3102.43031119 -0.539155821637 3103.96946701 0.539155821637
1272 1271 3105.3735634 -0.659897056854 3107.03346046 0.659897056854
1273 1272 3108.317209 -0.776718974547 3110.09392798 0.776718974547
1274 1273 3111.26124769 -0.889052692322 3113.15030038 0.889052692322
1275 1274 3114.20567915 -0.996352826074 3116.20203198 0.996352826074
1276 1275 3117.15050307 -1.09810040888 3119.24860348 1.09810040888
1277 1276 3120.09571916 -1.19380568338 3122.28952484 1.19380568338
1278 1277 3123.04132709 -1.28301075289 3125.32433784 1.28301075289
1279 1278 3125.98732656 -1.36529207757 3128.35261864 1.36529207757
1280 1279 3128.93371727 -1.44026280214 3131.37398007 1.44026280214
1281 1280 3131.88049891 -1.50757490308 3134.38807381 1.50757490308
1282 1281 3134.82767117 -1.56692114375 3137.39459232 1.56692114375
1283 1282 3137.77523376 -1.61803682686 3140.39327058 1.61803682686
1284 1283 3140.72318636 -1.66070133484 3143.38388769 1.66070133484
1285 1284 3143.67152867 -1.69473944972 3146.36626812 1.69473944972
1286 1285 3146.62026039 -1.72002244502 3149.34028283 1.72002244502
1287 1286 3149.56938122 -1.73646894351 3152.30585016 1.73646894351
1288 1287 3152.51889084 -1.7440455358 3155.26293638 1.7440455358
1289 1288 3155.46878897 -1.74276715584 3158.21155613 1.74276715584
1290 1289 3158.4190753 -1.73269721073 3161.15177251 1.73269721073
1291 1290 3161.36974952 -1.71394746338 3164.08369699 1.71394746338
1292 1291 3164.32081134 -1.68667766797 3167.00748901 1.68667766797
1293 1292 3167.27226046 -1.65109495913 3169.92335542 1.65109495913
1294 1293 3170.22409658 -1.60745299724 3172.83154957 1.60745299724
1295 1294 3173.17631939 -1.55605087342 3175.73237026 1.55605087342
1296 1295 3176.1289286 -1.49723177894 3178.62616038 1.49723177894
1297 1296 3179.08192391 -1.43138144498 3181.51330536 1.43138144498
1298 1297 3182.03530503 -1.35892635994 3184.39423139 1.35892635994
1299 1298 3184.98907165 -1.28033177253 3187.26940342 1.28033177253
1300 1299 3187.94322347 -1.19609948991 3190.13932296 1.19609948991
1301 1300 3190.89776021 -1.10676548148 3193.00452569 1.10676548148
1302 1301 3193.85268156 -1.01289729945 3195.86557886 1.01289729945
1303 1302 3196.80798724 -0.915091328805 3198.72307857 0.915091328805
1304 1303 3199.76367694 -0.813969879661 3201.57764682 0.813969879661
1305 1304 3202.71975037 -0.710178136233 3204.4299285 0.710178136233
1306 1305 3205.67620723 -0.604380977085 3207.28058821 0.604380977085
1307 1306 3208.63304723 -0.4972596822 3210.13030692 0.4972596822
1308 1307 3211.59027009 -0.389508542916 3212.97977863 0.389508542916
1309 1308 3214.5478755 -0.281831391334 3215.82970689 0.281831391334
1310 1309 3217.50586317 -0.174938066227 3218.68080124 0.174938066227
1311 1310 3220.46423281 -0.0695408328399 3221.53377365 0.0695408328399
1312 1311 3223.42298414 0.0336492257532 3224.38933491 0.0336492257532
1313 1312 3226.38211685 0.133925827889 3227.24819102 0.133925827889
1314 1313 3229.34163066 0.230591105218 3230.11103955 0.230591105218
1315 1314 3232.30152527 0.322959189318 3232.97856608 0.322959189318
1316 1315 3235.26180041 0.410359755161 3235.85144065 0.410359755161
1317 1316 3238.22245577 0.492141503744 3238.73031426 0.492141503744
1318 1317 3241.18349107 0.567675566447 3241.6158155 0.567675566447
1319 1318 3244.14490602 0.636358814043 3244.5085472 0.636358814043
1320 1319 3247.10670033 0.697617053705 3247.40908328 0.697617053705
1321 1320 3250.06887372 0.750908097877 3250.31796562 0.750908097877
1322 1321 3253.0314259 0.795724689465 3253.23570121 0.795724689465
1323 1322 3255.99435658 0.831597268494 3256.16275931 0.831597268494
1324 1323 3258.95766547 0.858096566101 3259.0995689 0.858096566101
1325 1324 3261.92135229 0.874836012574 3262.04651628 0.874836012574
1326 1325 3264.88541676 0.881473947023 3265.00394281 0.881473947023
1327 1326 3267.84985858 0.877715617233 3267.97214296 0.877715617233
1328 1327 3270.81467748 0.86331495922 3270.95136252 0.86331495922
1329 1328 3273.77987317 0.838076147125 3273.94179702 0.838076147125
1330 1329 3276.74544536 0.801854905134 3276.94359046 0.801854905134
1331 1330 3279.71139378 0.754559574306 3279.9568342 0.754559574306
1332 1331 3282.67771813 0.696151928353 3282.98156621 0.696151928353
1333 1332 3285.64441815 0.626647733642 3286.01777041 0.626647733642
1334 1333 3288.61149354 0.546117049932 3289.06537649 0.546117049932
1335 1334 3291.57894402 0.454684269624 3292.12425975 0.454684269624
1336 1335 3294.54676931 0.352527894572 3295.19424142 0.352527894572
1337 1336 3297.51496914 0.239880050787 3298.27508909 0.239880050787
1338 1337 3300.48354322 0.117025742644 3301.36651748 0.117025742644
1339 1338 3303.45249127 -0.0156981505187 3304.46818942 0.0156981505187
1340 1339 3306.42181301 -0.157904131255 3307.57971714 0.157904131255
1341 1340 3309.39150817 -0.309155588938 3310.70066376 0.309155588938
1342 1341 3312.36157646 -0.468968546135 3313.830545 0.468968546135
1343 1342 3315.3320176 -0.636813638643 3316.96883124 0.636813638643
1344 1343 3318.30283133 -0.812118320224 3320.11494965 0.812118320224
1345 1344 3321.27401735 -0.994269281992 3323.26828663 0.994269281992
1346 1345 3324.2455754 -1.18261507533 3326.42819048 1.18261507533
1347 1346 3327.2175052 -1.37646892621 3329.59397412 1.37646892621
1348 1347 3330.18980646 -1.57511172784 3332.76491819 1.57511172784
1349 1348 3333.16247893 -1.7777951977 3335.94027412 1.7777951977
1350 1349 3336.13552231 -1.98374518416 3339.11926749 1.98374518416
1351 1350 3339.10893633 -2.19216510719 3342.30110144 2.19216510719
1352 1351 3342.08272073 -2.40223951693 3345.48496025 2.40223951693
1353 1352 3345.05687523 -2.61313775336 3348.67001298 2.61313775336
1354 1353 3348.03139954 -2.82401768979 3351.85541723 2.82401768979
1355 1354 3351.00629341 -3.03402954237 3355.04032295 3.03402954237
1356 1355 3353.98155655 -3.24231972769 3358.22387628 3.24231972769
1357 1356 3356.95718869 -3.44803474993 3361.40522344 3.44803474993
1358 1357 3359.93318957 -3.65032509935 3364.58351467 3.65032509935
1359 1358 3362.90955891 -3.84834914333 3367.75790805 3.84834914333
1360 1359 3365.88629643 -4.04127699154 3370.92757342 4.04127699154
1361 1360 3368.86340187 -4.22829431682 3374.09169619 4.22829431682
1362 1361 3371.84087496 -4.40860611338 3377.24948108 4.40860611338
1363 1362 3374.81871543 -4.58144037459 3380.4001558 4.58144037459
1364 1363 3377.796923 -4.74605167263 3383.54297468 4.74605167263
1365 1364 3380.77549742 -4.90172462287 3386.67722204 4.90172462287
1366 1365 3383.7544384 -5.04777721654 3389.80221561 5.04777721654
1367 1366 3386.73374568 -5.18356400559 3392.91730968 5.18356400559
1368 1367 3389.71341899 -5.30847912452 3396.02189811 5.30847912452
1369 1368 3392.69345807 -5.42195913485 3399.1154172 5.42195913485
1370 1369 3395.67386264 -5.5234856783 3402.19734832 5.5234856783
1371 1370 3398.65463245 -5.61258792632 3405.26722037 5.61258792632
1372 1371 3401.63576721 -5.68884481393 3408.32461203 5.68884481393
1373 1372 3404.61726668 -5.75188704733 3411.36915373 5.75188704733
1374 1373 3407.59913058 -5.80139887555 3414.40052945 5.80139887555
1375 1374 3410.58135864 -5.83711961778 3417.41847826 5.83711961778
1376 1375 3413.5639506 -5.85884493892 3420.42279554 5.85884493892
1377 1376 3416.54690621 -5.86642786725 3423.41333407 5.86642786725
1378 1377 3419.53022518 -5.85977954945 3426.39000473 5.85977954945
1379 1378 3422.51390726 -5.83886973924 3429.352777 5.83886973924
1380 1379 3425.49795218 -5.80372701738 3432.3016792 5.80372701738
1381 1380 3428.48235969 -5.75443874186 3435.23679843 5.75443874186
1382 1381 3431.46712952 -5.69115072871 3438.15828025 5.69115072871
1383 1382 3434.4522614 -5.61406666481 3441.06632806 5.61406666481
1384 1383 3437.43775508 -5.52344725557 3443.96120233 5.52344725557
1385 1384 3440.42361029 -5.41960911161 3446.8432194 5.41960911161
1386 1385 3443.40982677 -5.30292337973 3449.71275015 5.30292337973
1387 1386 3446.39640426 -5.17381412479 3452.57021838 5.17381412479
1388 1387 3449.3833425 -5.03275647017 3455.41609897 5.03275647017
1389 1388 3452.37064123 -4.88027450583 3458.25091574 4.88027450583
1390 1389 3455.3583002 -4.71693897392 3461.07523917 4.71693897392
1391 1390 3458.34631913 -4.543364743 3463.88968388 4.543364743
1392 1391 3461.33469778 -4.36020808305 3466.69490586 4.36020808305
1393 1392 3464.32343588 -4.16816375413 3469.49159963 4.16816375413
1394 1393 3467.31253318 -3.96796192281 3472.2804951 3.96796192281
1395 1394 3470.30198941 -3.76036492089 3475.06235433 3.76036492089
1396 1395 3473.29180432 -3.546163862 3477.83796818 3.546163862
1397 1396 3476.28197766 -3.32617513217 3480.60815279 3.32617513217
1398 1397 3479.27250916 -3.10123677101 3483.37374593 3.10123677101
1399 1398 3482.26339857 -2.87220476091 3486.13560334 2.87220476091
1400 1399 3485.25464564 -2.63994924159 3488.89459488 2.63994924159
1401 1400 3488.2462501 -2.40535066827 3491.65160077 2.40535066827
1402 1401 3491.23821171 -2.16929593145 3494.40750764 2.16929593145
1403 1402 3494.23053021 -1.93267445682 3497.16320466 1.93267445682
1404 1403 3497.22320534 -1.69637430361 3499.91957964 1.69637430361
1405 1404 3500.21623684 -1.46127827983 3502.67751512 1.46127827983
1406 1405 3503.20962448 -1.22826009275 3505.43788457 1.22826009275
1407 1406 3506.20336798 -0.998180552629 3508.20154853 0.998180552629
1408 1407 3509.19746711 -0.771883847564 3510.96935095 0.771883847564
1409 1408 3512.1919216 -0.550193906788 3513.7421155 0.550193906788
1410 1409 3515.1867312 -0.333910869494 3516.52064207 0.333910869494
1411 1410 3518.18189566 -0.123807675522 3519.30570334 0.123807675522
1412 1411 3521.17741474 0.0793732062699 3522.09804153 0.0793732062699
1413 1412 3524.17328817 0.274922896856 3524.89836528 0.274922896856
1414 1413 3527.16951571 0.462169058793 3527.70734665 0.462169058793
1415 1414 3530.16609711 0.640478667394 3530.52561844 0.640478667394
1416 1415 3533.16303212 0.809260588739 3533.35377153 0.809260588739
1417 1416 3536.16032048 0.96796795292 3536.19235253 0.96796795292
1418 1417 3539.15796195 1.11610031194 3539.04186164 1.11610031194
1419 1418 3542.15595628 1.25320557271 3541.9027507 1.25320557271
1420 1419 3545.15430321 1.3788816968 3544.77542152 1.3788816968
1421 1420 3548.15300251 1.49277815966 3547.66022435 1.49277815966
1422 1421 3551.15205392 1.59459716321 3550.55745676 1.59459716321
1423 1422 3554.15145719 1.68409459707 3553.4673626 1.68409459707
1424 1423 3557.15121209 1.7610807447 3556.39013134 1.7610807447
1425 1424 3560.15131835 1.82542073216 3559.32589762 1.82542073216
1426 1425 3563.15177574 1.87703471839 3562.27474102 1.87703471839
1427 1426 3566.152584 1.91589782718 3565.23668617 1.91589782718
1428 1427 3569.1537429 1.94203982223 3568.21170307 1.94203982223
1429 1428 3572.15525218 1.95554452803 3571.19970765 1.95554452803
1430 1429 3575.1571116 1.95654900044 3574.2005626 1.95654900044
1431 1430 3578.15932091 1.94524245213 3577.21407846 1.94524245213
1432 1431 3581.16187988 1.92186493912 3580.24001494 1.92186493912
1433 1432 3584.16478825 1.88670581606 3583.27808243 1.88670581606
1434 1433 3587.16804578 1.84010196857 3586.32794381 1.84010196857
1435 1434 3590.17165223 1.78243583251 3589.3892164 1.78243583251
1436 1435 3593.17560736 1.71413321072 3592.46147415 1.71413321072
1437 1436 3596.17991092 1.63566089892 3595.54425002 1.63566089892
1438 1437 3599.18456267 1.54752413318 3598.63703854 1.54752413318
1439 1438 3602.18956236 1.45026387246 3601.73929849 1.45026387246
1440 1439 3605.19490977 1.34445393025 3604.85045584 1.34445393025
1441 1440 3608.20060463 1.23069797015 3607.96990666 1.23069797015
1442 1441 3611.20664672 1.10962638087 3611.09702034 1.10962638087
1443 1442 3614.21303578 0.981893046582 3614.23114274 0.981893046582
1444 1443 3617.21977159 0.848172029117 3617.37159956 0.848172029117
1445 1444 3620.2268539 0.70915417881 3620.51769972 0.70915417881
1446 1445 3623.23428247 0.56554369111 3623.66873878 0.56554369111
1447 1446 3626.24205706 0.418054626286 3626.82400243 0.418054626286
1448 1447 3629.25017743 0.267407409679 3629.98277002 0.267407409679
1449 1448 3632.25864335 0.114325329965 3633.14431802 0.114325329965
1450 1449 3635.26745456 -0.0404689471407 3636.30792351 0.0404689471407
1451 1450 3638.27661085 -0.196256832462 3639.47286768 0.196256832462
1452 1451 3641.28611196 -0.352327217172 3642.63843917 0.352327217172
1453 1452 3644.29595766 -0.507979810103 3645.80393747 0.507979810103
1454 1453 3647.30614771 -0.662528392217 3648.9686761 0.662528392217
1455 1454 3650.31668188 -0.815303972374 3652.13198585 0.815303972374
1456 1455 3653.32755993 -0.9656578291 3655.29321776 0.9656578291
1457 1456 3656.33878162 -1.11296442369 3658.45174604 1.11296442369
1458 1457 3659.35034672 -1.25662417069 3661.60697089 1.25662417069
1459 1458 3662.36225499 -1.39606605252 3664.75832104 1.39606605252
1460 1459 3665.37450619 -1.53075006599 3667.90525626 1.53075006599
1461 1460 3668.38710009 -1.66016948913 3671.04726958 1.66016948913
1462 1461 3671.40003646 -1.78385295801 3674.18388942 1.78385295801
1463 1462 3674.41331506 -1.90136634382 3677.31468141 1.90136634382
1464 1463 3677.42693566 -2.01231442207 3680.43925009 2.01231442207
1465 1464 3680.44089803 -2.11634232628 3683.55724035 2.11634232628
1466 1465 3683.45520192 -2.21313678022 3686.6683387 2.21313678022
1467 1466 3686.46984711 -2.30242710333 3689.77227421 2.30242710333
1468 1467 3689.48483336 -2.38398598579 3692.86881935 2.38398598579
1469 1468 3692.50016044 -2.45763003024 3695.95779047 2.45763003024
1470 1469 3695.51582813 -2.52322005888 3699.03904819 2.52322005888
1471 1470 3698.53183618 -2.58066118561 3702.11249737 2.58066118561
1472 1471 3701.54818437 -2.62990265413 3705.17808702 2.62990265413
1473 1472 3704.56487246 -2.67093744424 3708.2358099 2.67093744424
1474 1473 3707.58190023 -2.70380164958 3711.28570188 2.70380164958
1475 1474 3710.59926744 -2.72857363136 3714.32784107 2.72857363136
1476 1475 3713.61697386 -2.74537295384 3717.36234681 2.74537295384
1477 1476 3716.63501927 -2.7543591081 3720.38937837 2.7543591081
1478 1477 3719.65340343 -2.75573003214 3723.40913346 2.75573003214
1479 1478 3722.67212611 -2.74972043621 3726.42184655 2.74972043621
1480 1479 3725.69118709 -2.73659994299 3729.42778703 2.73659994299
1481 1480 3728.71058613 -2.71667105378 3732.42725719 2.71667105378
1482 1481 3731.73032301 -2.69026695205 3735.42058997 2.69026695205
1483 1482 3734.75039751 -2.65774915706 3738.40814666 2.65774915706
1484 1483 3737.77080938 -2.61950504073 3741.39031442 2.61950504073
1485 1484 3740.79155841 -2.57594522162 3744.36750363 2.57594522162
1486 1485 3743.81264437 -2.52750085072 3747.34014522 2.52750085072
1487 1486 3746.83406702 -2.47462080386 3750.30868783 2.47462080386
1488 1487 3749.85582615 -2.41776879655 3753.27359495 2.41776879655
1489 1488 3752.87792153 -2.35742043692 3756.23534197 2.35742043692
1490 1489 3755.90035293 -2.29406023299 3759.19441316 2.29406023299
1491 1490 3758.92312012 -2.22817857075 3762.15129869 2.22817857075
1492 1491 3761.94622289 -2.1602686794 3765.10649157 2.1602686794
1493 1492 3764.969661 -2.09082360045 3768.0604846 2.09082360045
1494 1493 3767.99343423 -2.02033317699 3771.01376741 2.02033317699
1495 1494 3771.01754236 -1.94928107966 3773.96682344 1.94928107966
1496 1495 3774.04198516 -1.87814188532 3776.92012704 1.87814188532
1497 1496 3777.0667624 -1.80737822427 3779.87414063 1.80737822427
1498 1497 3780.09187388 -1.73743801153 3782.82931189 1.73743801153
1499 1498 3783.11731935 -1.66875177704 3785.78607113 1.66875177704
1500 1499 3786.1430986 -1.60173010929 3788.74482871 1.60173010929
1501 1500 3789.16921141 -1.53676122613 3791.70597264 1.53676122613

E-021-sinf-sf-curve.json — 1.2 KB, updated 08-19-2026

JSON sidecar (click to expand)
{
  "experiment": "E-021",
  "task": "3.7: exact S_inf(n) + |S_f(n)| curve + D-036 constants",
  "script": "research/numerics/scripts/E-021-sinf-sf-curve.py",
  "parameters": {
    "n_max": 5000,
    "t_zeros": 5000.0
  },
  "checks": {
    "V1_lambda_vs_E015": true,
    "V2_R_bound_holds": true,
    "V3_Sinf_residual_bounded": true
  },
  "key_values": {
    "A_use": 0.9,
    "B0_use": 1.0,
    "R_max_sample": 4.7507714994958565,
    "C0_samples": {
      "1e2": 6.234438640727731,
      "1e4": 8.840233256550178,
      "1e6": 11.194201354663145
    },
    "eta_0": "-0.5772156649015328606065120900824024310",
    "Sinf_residual_fits": [
      [
        1000,
        -0.2500416666625
      ],
      [
        2000,
        -0.2500208333328125
      ],
      [
        3000,
        -0.25001388888873455
      ],
      [
        4000,
        -0.25001041666660156
      ],
      [
        5000,
        -0.2500083333333
      ]
    ],
    "V1_worst_rel": 4.79820218420929e-25,
    "S_f_max_abs": "13.5229134371",
    "S_f_max_abs_n": 3298
  },
  "elapsed_seconds": 2139.3,
  "timestamp_utc": "2026-08-19T06:48:55.463113+00:00"
}

Source code

Python script (click to expand)
"""E-021 — task 3.7: exact S_inf(n) to n=1e4, |S_f(n)| curve, tightened
D-036 constants. Feeds D-037 (finite-height Li theorem).

Components:
  P1. D-036 constants: C0(t) from Trudgian; |R(s)| = |zeta'/zeta(s) -
      sum_{|gamma-t|<1} 1/(s-rho)| sampled at ~30 contour points (flint
      acb zeta + fd derivative, zeros via mp.zetazero) -> fit A, B0.
  P2. eta_j — ALL FLINT (session 006 cont.10 root-cause: mpmath zeta,
      Hurwitz included, silently loses accuracy beyond ~58 digits on
      this stack [mpmath 1.3 + Py 3.14] -> eta_j errors ~1e-58 ->
      S_f binomial cancellation explodes ~(4/3)^n; V1 failed 1.4e143.
      The zero-side sigma route also has eta_0 wrong by 2.4e-4 from
      sigma_1 truncation at T=5000 — both defects removed here).
      j <= 23: Stieltjes series division (E-011 machinery, validated):
        -zeta'/zeta(1+u) = (1/u) N(u)/D(u), eta_k = [u^{k+1}] N/D.
      j >= 24: Lagarias (4.10) with flint arb zeta:
        eta_j = (-1)^{j+1} [(1-2^{-(j+1)}) zeta(j+1) - 1 + sigma_{j+1}]
        with sigma_m = (-1)^{m-1}(tau_{m-1} - eta_{m-1}) + 1 EXACT
        (arithmetic side) for m <= 24, and sigma_m = 2 Re sum
        rho^{-m} over the first 100 zeros (mp.zetazero, dps 100)
        for 25 <= m <= M_SIG; omitted beyond (boundary error
        C(n,M_SIG)*14^{-M_SIG} < 1e-40 by construction).
      NOTES (hard-won, session 006 cont.10):
      * sigma_m may NOT be omitted at any m <= M_SIG — the truncation
        boundary error ~ C(n,M)*14^{-M} PEAKS at M = n/15 with size
        ~(15/14)^n: with M=200, S_f exploded as 1e133 at n=5000
        (measured). M_SIG ~ 0.22*n_max.
      * the m=24 omission alone moved S_f(200) by ~0.4 (measured).
      * float64 zeros for sigma_m are NOT enough either (S_f(300) off
        by 7.8e-8 — measured); need mp.zetazero precision. Zeros
        k > 100 contribute < (14.13/236.5)^25 ~ 1e-31 relative for
        m >= 25, so the first 100 at dps 100 are effectively exact.
      * GAMMA_E must be a string (bare float -> 53-bit, 4.94e-21).
  P3. S_inf(n) EXACT for n <= N_MAX (Lagarias (4.11)):
        S_inf(n) = sum_{j=1}^n (-1)^j C(n,j) (1-2^{-j}) zeta*(j),
        zeta*(1) = log(4pi)+gamma, zeta*(j) = zeta(j) (flint.arb).
      Cancellation ~2^n -> dps = ceil(0.31*n) + 60.
  P4. S_f(n) = sum_{j=1}^n C(n,j) eta_{j-1} (plain binomial — the
      E-011/Lagarias-(4.13) convention after the (-1) absorbed into
      the series-eta definition; VALIDATED: S_f(200) = -2.14037668
      matches S_inf(200)+1-lambda_200(E-015)); lambda_n =
      S_inf - S_f + 1.
  P5. VALIDATION: lambda_n (n <= 3000) vs E-015 certified CSV (rel dev);
      eta_0 vs E-011 value; S_inf fit: S_inf - [(1/2)n log n + C1 n]
      -> c0 (+ c1/n...), C1 = (gamma-1-log(2pi))/2.

Checks:
  V1. lambda_n matches E-015 for n <= 3000 (rel dev < 1e-50 at dps used).
  V2. |R(s)| <= A log(t+2) + B0 at all sample points with the FITTED
      A, B0 (and fitted values reported vs D-036's 2.0/2.0).
  V3. S_inf fit residual -> constant c0 (|residual - c0| -> 0 trend).

Outputs: research/numerics/data/E-021-sinf-sf-curve.csv (+ .json)
"""
import json
import sys
import time
from datetime import datetime, timezone
from pathlib import Path

import flint
import mpmath as mp
import numpy as np

REPO = Path(__file__).resolve().parents[3]
DATA = REPO / "research" / "numerics" / "data"
CSV = DATA / "E-021-sinf-sf-curve.csv"
JSON = DATA / "E-021-sinf-sf-curve.json"
E015 = DATA / "E-015-li-coefficients-n3000.csv"

N_MAX = 5000            # 10000 costs ~2h (row cost ~ n^2 * dps);
                        # cached zeta/zeros make a later 1e4 rerun cheap
T_ZEROS = 5000.0        # zeros up to this height for sigma sums
N_ZMAX = 8000           # mp.zetazero count cap (N(5e3) ~ 7.9e3)
DPS_BIG = 3300
# NOTE: must be a STRING — a bare float literal collapses to 53-bit
# (measured error 4.94e-21 -> sigma_1/zeta*(1) wrong at digit 21).
GAMMA_E = "0.57721566490153286060651209008240243104215933593992337"


# ---------------------------------------------------------------- N(T)
def N_count(T):
    F = (T / (2 * np.pi)) * np.log(T / (2 * np.pi)) - T / (2 * np.pi) + 7 / 8
    return F


def S_bound(T):
    return 0.137 * np.log(T) + 0.443 * np.log(np.log(T)) + 1.588


def C0(t):
    """Upper bound for zeros in [t, t+1] (t >= 10)."""
    return (N_count(t + 1) - N_count(t)) + S_bound(t + 1) + S_bound(t)


# ------------------------------------------------------------- zeros
def compute_zeros():
    cache = DATA / "E-021-zeros-cache.npy"
    n_est = int(N_count(T_ZEROS) + S_bound(T_ZEROS)) + 100
    n_est = min(n_est, N_ZMAX)
    if cache.exists():
        zs = np.load(cache)
        if len(zs) >= n_est:
            print(f"  loaded {n_est} zeros from cache", flush=True)
            return zs[:n_est]
    print(f"  computing {n_est} zeros via mp.zetazero ...", flush=True)
    mp.mp.dps = 30
    zs = []
    for k in range(1, n_est + 1):
        zs.append(mp.zetazero(k).imag)
        if k % 1000 == 0:
            print(f"    {k}/{n_est}", flush=True)
    out = np.array([float(z) for z in zs])
    np.save(cache, out)
    return out


# ------------------------------------------------------- zeta strings
def get_zeta_strings(n_max):
    """zeta(j) decimal strings at full precision (flint arb), cached.
    full_digits = 0.31*n_max + 100 covers the ~2^n cancellation in
    BOTH S_inf and the (1-2^{-s})zeta(s)-1 eta formula (absolute
    error ~1e-1650 uniformly)."""
    full_digits = int(0.31 * n_max) + 100
    zcache = DATA / "E-021-zeta-cache.json"
    if zcache.exists():
        zeta_str = {int(k): v for k, v in
                    json.loads(zcache.read_text()).items()}
        print("  zeta strings loaded from cache", flush=True)
        # patch legacy zeta*(1) (built with double-precision GAMMA_E)
        mp.mp.dps = full_digits + 50
        z1 = mp.nstr(mp.log(4 * mp.pi) + mp.mpf(GAMMA_E), full_digits)
        if zeta_str.get(1) != z1:
            zeta_str[1] = z1
            zcache.write_text(json.dumps(zeta_str))
            print("  patched zeta*(1) in cache (GAMMA_E float fix)",
                  flush=True)
        return zeta_str, full_digits
    flint.ctx.prec = int(full_digits * 3.33) + 200
    mp.mp.dps = full_digits + 50
    zeta_str = {1: mp.nstr(mp.log(4 * mp.pi) + mp.mpf(GAMMA_E),
                           full_digits)}
    for j in range(2, n_max + 1):
        zeta_str[j] = flint.arb(j).zeta().str(full_digits,
                                              radius=False)
        if j % 2000 == 0:
            print(f"    zeta({j}) done", flush=True)
    zcache.write_text(json.dumps(zeta_str))
    return zeta_str, full_digits


# ---------------------------------------------------------------- eta
# K_SPLIT: eta_j for j < K_SPLIT from Stieltjes (exact, arithmetic);
# sigma_m exact for m <= K_SPLIT. Must be ~80: with K_SPLIT=24 the
# zero-tail (k>100) of sigma_25 entered at term j=24 with C(n,24)
# amplification — S_f(3000) was off by 1.06e3 growing ~n^24 (measured).
# With K_SPLIT=80 the zero-tail exposure (m>=81, k>100) is < 3e-11.
K_SPLIT = 80


def compute_eta(zeta_str, full_digits):
    """eta_j for j = 0..N_MAX-1, ALL flint-based (see header P2).
    Returns dict j -> decimal string at full_digits."""
    print(f"  eta_0..{K_SPLIT - 1}: flint Stieltjes + series division "
          "(E-011) ...", flush=True)
    flint.ctx.prec = int((full_digits + 100) * 3.33) + 200
    mp.mp.dps = full_digits + 100   # BEFORE mp.mpf(string) parses below!
    gam_s = [mp.mpf(flint.acb.stieltjes(k).real.str(
        full_digits + 100, radius=False)) for k in range(K_SPLIT + 2)]
    N_ = [mp.mpf(0)] * (K_SPLIT + 2)
    D_ = [mp.mpf(0)] * (K_SPLIT + 2)
    N_[0] = D_[0] = 1
    for m in range(0, K_SPLIT + 1):
        D_[m + 1] = (-1) ** m * gam_s[m] / mp.factorial(m)
    for m in range(1, K_SPLIT + 1):
        N_[m + 1] = -(-1) ** m * gam_s[m] / mp.factorial(m - 1)
    Ev = [mp.mpf(0)] * (K_SPLIT + 2)
    for k in range(0, K_SPLIT + 2):
        s = N_[k]
        for i in range(1, k + 1):
            s -= D_[i] * Ev[k - i]
        Ev[k] = s
    eta_str = {j: mp.nstr(Ev[j + 1], full_digits)
               for j in range(K_SPLIT)}
    print(f"    eta_0 = {mp.nstr(Ev[1], 15)} (should be -gamma)",
          flush=True)
    print(f"    eta_1 = {mp.nstr(Ev[2], 15)}", flush=True)

    # ---- sigma_m: exact (arithmetic) for m <= 24; zeros for 25..200
    print("  sigma_m: m<=24 exact (tau-eta), 25..200 from zeros ...",
          flush=True)
    mp.mp.dps = full_digits + 50
    tau = {0: mp.mpf(-0.5) * (mp.log(4 * mp.pi) + mp.mpf(GAMMA_E))}
    for j in range(1, K_SPLIT):
        z = mp.mpf(zeta_str[j + 1])
        tau[j] = (-1) ** (j + 1) * (1 - mp.mpf(2) ** (-(j + 1))) * z
    sigma = {}
    for m in range(1, K_SPLIT + 1):
        sigma[m] = ((-1) ** (m - 1)
                    * (tau[m - 1] - mp.mpf(eta_str[m - 1])) + 1)
    mp.mp.dps = 60
    sig1_known = 1 + mp.euler / 2 - mp.log(4 * mp.pi) / 2
    print(f"    sigma_1 = {mp.nstr(sigma[1], 20)} "
          f"(closed form {mp.nstr(sig1_known, 20)})", flush=True)
    # sigma_m, m = 25..M_SIG: first 100 zeros via mp.zetazero, dps 100.
    # M_SIG must be adaptive: truncating sigma at M leaves a boundary
    # error ~ C(n,M)*14.13^{-M} which PEAKS at M = n/15 (~(15/14)^n);
    # with M=200 the run exploded as 1e133 at n=5000 (measured). Need
    # C(n,M)*14^{-M} < 1e-40 on the decreasing side (M > n/15).
    # float64 zeros are NOT enough (S_f(300) off 7.8e-8 — measured);
    # zeros k>100 are suppressed by (14.13/236.5)^25 ~ 1e-31 relative.
    n_zeta = max(zeta_str)
    M_SIG = n_zeta
    for M in range(K_SPLIT + 1, n_zeta + 1):
        if M > n_zeta / 15:
            logC = (mp.loggamma(n_zeta + 1) - mp.loggamma(M + 1)
                    - mp.loggamma(n_zeta - M + 1))
            if float(logC - (M - 1) * mp.log(14.13)
                     + mp.log(0.05)) / np.log(10) < -40:
                M_SIG = M
                break
    print(f"    M_SIG = {M_SIG} (C(n,M)*14^{{-M}} < 1e-40)", flush=True)
    # sigma_m precision matters: dps-100 sums left eps_m ~ 14^{-m}e-100,
    # whose C(n,j)-amplified impact (peak term C(n,n/15)*14^{-n/15} ~
    # 1e105 at n=3000) showed up as S_f error ~1e3 (measured). Zeros
    # at 400 digits + sums at full_digits+50 kill it.
    # dps BEFORE any mp.mpf(string) parse! (Third instance of this bug
    # class: g100 parsed at leftover dps 60 corrupted sigma_m at
    # ~m*1e-60*14^{-m} -> S_f(3000) off by 1.7e7, growth ~n^80.)
    mp.mp.dps = full_digits + 50
    z100cache = DATA / "E-021-zeros100-hi-cache.json"
    if z100cache.exists():
        g100 = [mp.mpf(v) for v in
                json.loads(z100cache.read_text())]
    else:
        mp.mp.dps = 450
        g100 = [mp.zetazero(k).imag for k in range(1, 101)]
        z100cache.write_text(json.dumps([mp.nstr(g, 400)
                                         for g in g100]))
        mp.mp.dps = full_digits + 50
    rho = [mp.mpc(mp.mpf("0.5"), g) for g in g100]
    for m in range(K_SPLIT + 1, M_SIG + 1):
        sigma[m] = 2 * mp.re(sum(r ** (-m) for r in rho))
    mp.mp.dps = 60
    print(f"    sigma_2 = {mp.nstr(sigma[2], 20)}", flush=True)
    print(f"    sigma_25 (zeros) = {mp.nstr(sigma[25], 6)}; "
          f"sigma_{M_SIG} = {mp.nstr(sigma[M_SIG], 6)}", flush=True)

    print("  eta_j (j>=24): (-1)^{j+1}[(1-2^{-(j+1)})zeta(j+1) - 1 "
          "+ sigma_{j+1}] ...", flush=True)
    mp.mp.dps = full_digits + 50
    for j in range(K_SPLIT, n_zeta):
        z = mp.mpf(zeta_str[j + 1])
        sig = sigma[j + 1] if j + 1 <= M_SIG else mp.mpf(0)
        eta = (-1) ** (j + 1) * ((1 - mp.mpf(2) ** (-(j + 1))) * z - 1
                                 + sig)
        eta_str[j] = mp.nstr(eta, full_digits)
    # stitch check: eta_{K_SPLIT-1} via Stieltjes vs via full formula
    mp.mp.dps = full_digits + 50
    eta23_formula = ((-1) ** K_SPLIT
                     * ((1 - mp.mpf(2) ** (-K_SPLIT))
                        * mp.mpf(zeta_str[K_SPLIT])
                        - 1 + sigma[K_SPLIT]))
    stitch = abs(eta23_formula - mp.mpf(eta_str[K_SPLIT - 1]))
    mp.mp.dps = 60
    print(f"    stitch |eta_{K_SPLIT - 1} stieltjes - formula| = "
          f"{mp.nstr(stitch, 3)}", flush=True)
    return eta_str


# ----------------------------------------------------------- S_inf, Sf
def compute_S_inf(n_max, zeta_str, full_digits):
    """Exact S_inf(n) via zeta*(j) (flint arb), dps scaled by n.
    Cancellation ~2^n: every zeta(j) stored at FULL string precision
    (the Sigma(-1)^j C(n,j)*1 = 0 piece must cancel exactly)."""
    print("  parsing zeta strings once at full precision ...", flush=True)
    mp.mp.dps = full_digits + 50
    zeta_mpf = {j: mp.mpf(v) for j, v in zeta_str.items()}
    results = {}
    for n in range(1, n_max + 1):
        mp.mp.dps = int(0.31 * n) + 80
        s = mp.mpf(0)
        c = mp.mpf(1)
        for j in range(1, n + 1):
            c = c * (n - j + 1) / j          # C(n,j) by recurrence
            s += ((-1) ** j) * c * (1 - mp.mpf(2) ** (-j)) * zeta_mpf[j]
        results[n] = +s
        if n % 500 == 0:
            print(f"    S_inf row {n}/{n_max}", flush=True)
    return results


def compute_Sf(n_max, eta_str):
    """S_f(n) = sum_j C(n,j) eta_{j-1} — plain binomial (E-011/Lagarias
    (4.13) convention with series-eta; validated at n=200 vs E-015:
    S_f(200) = -2.14037668 = S_inf(200)+1-lambda_200). Requires eta_j
    absolute accuracy ~1e-1650 at n=5000 (terms C(n,j)*eta up to
    ~1e312 cancel to O(1)) — flint-only computation, see P2."""
    full_digits = int(0.31 * n_max) + 100
    mp.mp.dps = full_digits + 50
    eta_mpf = {j: mp.mpf(v) for j, v in eta_str.items()}
    results = {}
    for n in range(1, n_max + 1):
        mp.mp.dps = int(0.31 * n) + 80
        s = mp.mpf(0)
        c = mp.mpf(1)
        for j in range(1, n + 1):
            c = c * (n - j + 1) / j
            s += c * eta_mpf[j - 1]
        results[n] = +s
        if n % 500 == 0:
            print(f"    S_f row {n}/{n_max}", flush=True)
    return results


def main() -> int:
    if CSV.exists() and "--force" not in sys.argv:
        print(f"cached: {CSV} (use --force to recompute)")
        return 0
    t0 = time.time()

    # ---- P1: constants
    print("P1: D-036 constants ...", flush=True)
    print(f"  C0(100) = {C0(100):.3f}, C0(1e4) = {C0(1e4):.3f}, "
          f"C0(1e6) = {C0(1e6):.3f}", flush=True)
    gam_sample = compute_zeros()

    def xi_mp(s):
        return 0.5 * s * (s - 1) * mp.pi ** (-s / 2) * mp.gamma(s / 2) \
            * mp.zeta(s)

    def zeta_logder(s):
        """zeta'/zeta via xi'/xi minus explicit terms (mpmath dps 30;
        complex-zeta OK to ~1e-10 per E-018 C2)."""
        sm = mp.mpc(s.real, s.imag)
        xi_log = mp.diff(xi_mp, sm) / xi_mp(sm)
        return complex(xi_log - 1 / sm - 1 / (sm - 1)
                       + mp.mpf(0.5) * mp.log(mp.pi)
                       - mp.mpf(0.5) * mp.digamma(sm / 2))

    R_samples = []
    mp.mp.dps = 30
    for sig in (-2.5, 0.5, 3.0):
        for t in (10.0, 50.0, 100.0, 500.0, 1000.0):
            s = complex(sig, t)
            near = [g for g in gam_sample if abs(g - t) < 1.0]
            psum = sum(1.0 / (s - complex(0.5, g)) for g in near)
            R_samples.append((sig, t, abs(zeta_logder(s) - psum)))
    # fit |R| <= A log(t+2) + B0
    A_fit = max(v / np.log(t + 2) for _, t, v in R_samples)
    A_use = max(0.5, float(np.ceil(A_fit * 1.2 * 10) / 10))
    B0_need = max(v - A_use * np.log(t + 2) for _, t, v in R_samples)
    B0_use = max(1.0, float(np.ceil(B0_need * 1.3 * 10) / 10))
    print(f"  |R| max sample = {max(v for *_ , v in R_samples):.2f}; "
          f"A_use={A_use}, B0_use={B0_use}", flush=True)

    # ---- P2: zeta strings + eta (all flint)
    print("P2: zeta strings + eta_j (flint) ...", flush=True)
    zeta_str, full_digits = get_zeta_strings(N_MAX)
    eta_str = compute_eta(zeta_str, full_digits)

    # ---- P3/P4: S_inf, S_f
    print("P3: S_inf exact ...", flush=True)
    S_inf = compute_S_inf(N_MAX, zeta_str, full_digits)
    print("P4: S_f ...", flush=True)
    S_f = compute_Sf(N_MAX, eta_str)

    # ---- P5: validation + fit
    print("P5: validation vs E-015 ...", flush=True)
    e015 = {}
    with E015.open() as f:
        header = f.readline()
        for line in f:
            parts = line.strip().split(",")
            if len(parts) >= 2 and parts[0].isdigit():
                e015[int(parts[0])] = mp.mpf(parts[1])
    worst = 0.0
    mp.mp.dps = 100
    for n in sorted(e015):
        lam = S_inf[n] - S_f[n] + 1
        dev = abs(lam - e015[n]) / abs(e015[n])
        worst = max(worst, float(dev))
    print(f"  V1 worst rel dev vs E-015 (n<=3000): {worst:.2e}", flush=True)

    C1 = (mp.mpf(GAMMA_E) - 1 - mp.log(2 * mp.pi)) / 2
    fits = []
    for n in (1000, 2000, 3000, 4000, 5000, 6000, 8000, 10000):
        if n > N_MAX:
            continue
        mp.mp.dps = 100
        resid = S_inf[n] - (mp.mpf(n) / 2) * mp.log(n) - C1 * n
        fits.append((n, float(resid)))
    print(f"  S_inf residual (should -> c0): {fits}", flush=True)

    # ---- write CSV
    with CSV.open("w", encoding="utf-8", newline="") as f:
        f.write("n,S_inf,S_f,lambda_n,abs_Sf\n")
        for n in range(1, N_MAX + 1):
            lam = S_inf[n] - S_f[n] + 1
            f.write(f"{n},{mp.nstr(S_inf[n],12)},{mp.nstr(S_f[n],12)},"
                    f"{mp.nstr(lam,12)},{mp.nstr(abs(S_f[n]),12)}\n")

    checks = {
        # V1 floor is ~1e-24 (E-015 CSV holds 26 digits); 1e-15 still
        # kills any macroscopic (convention/precision) bug — the bugs
        # found in cont.10 produced 1e-8..1e143 deviations.
        "V1_lambda_vs_E015": bool(worst < 1e-15),
        "V2_R_bound_holds": bool(all(
            v <= A_use * np.log(t + 2) + B0_use for _, t, v in R_samples)),
        "V3_Sinf_residual_bounded": bool(
            abs(fits[-1][1] - fits[-2][1]) < abs(fits[0][1] - fits[1][1])),
    }
    meta = {
        "experiment": "E-021",
        "task": "3.7: exact S_inf(n) + |S_f(n)| curve + D-036 constants",
        "script": "research/numerics/scripts/E-021-sinf-sf-curve.py",
        "parameters": {"n_max": N_MAX, "t_zeros": T_ZEROS},
        "checks": checks,
        "key_values": {
            "A_use": A_use, "B0_use": B0_use,
            "R_max_sample": max(v for *_, v in R_samples),
            "C0_samples": {"1e2": C0(100), "1e4": C0(1e4), "1e6": C0(1e6)},
            "eta_0": eta_str[0][:40],
            "Sinf_residual_fits": fits,
            "V1_worst_rel": worst,
            "S_f_max_abs": mp.nstr(max(abs(S_f[n]) for n in S_f), 12),
            "S_f_max_abs_n": int(max(S_f, key=lambda k: abs(S_f[k]))),
        },
        "elapsed_seconds": round(time.time() - t0, 1),
        "timestamp_utc": datetime.now(timezone.utc).isoformat(),
    }
    JSON.write_text(json.dumps(meta, indent=2), encoding="utf-8")
    ok = all(checks.values())
    print(f"wrote {CSV.name}, {JSON.name} — "
          f"{'ALL CHECKS PASS' if ok else 'CHECK FAILURE: ' + str(checks)}")
    return 0 if ok else 1


if __name__ == "__main__":
    raise SystemExit(main())