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 6 of 10 · 500/page · 5000 rows next →
# nS_infS_flambda_nabs_Sf
2502 2501 6957.26253732 7.26057942045 6951.0019579 7.26057942045
2503 2502 6960.54452953 7.18399812542 6954.36053141 7.18399812542
2504 2503 6963.82672159 7.09227539777 6957.7344462 7.09227539777
2505 2504 6967.10911341 6.9859354769 6961.12317793 6.9859354769
2506 2505 6970.39170491 6.86554320148 6964.52616171 6.86554320148
2507 2506 6973.67449601 6.73170101971 6967.94279499 6.73170101971
2508 2507 6976.95748663 6.58504586487 6971.37244077 6.58504586487
2509 2508 6980.24067669 6.42624591232 6974.81443078 6.42624591232
2510 2509 6983.52406612 6.25599723424 6978.26806888 6.25599723424
2511 2510 6986.80765483 6.07502036921 6981.73263446 6.07502036921
2512 2511 6990.09144274 5.88405682373 6985.20738591 5.88405682373
2513 2512 6993.37542977 5.68386552333 6988.69156425 5.68386552333
2514 2513 6996.65961585 5.4752192307 6992.18439662 5.4752192307
2515 2514 6999.94400089 5.25890094874 6995.68509994 5.25890094874
2516 2515 7003.22858482 5.03570032603 6999.1928845 5.03570032603
2517 2516 7006.51336756 4.80641008244 7002.70695748 4.80641008244
2518 2517 7009.79834903 4.57182247217 7006.22652655 4.57182247217
2519 2518 7013.08352914 4.3327258012 7009.75080334 4.3327258012
2520 2519 7016.36890783 4.0899010161 7013.27900681 4.0899010161
2521 2520 7019.654485 3.84411838024 7016.81036662 3.84411838024
2522 2521 7022.94026059 3.59613425319 7020.34412634 3.59613425319
2523 2522 7026.22623452 3.34668798851 7023.87954653 3.34668798851
2524 2523 7029.51240669 3.09649896419 7027.41590773 3.09649896419
2525 2524 7032.79877705 2.84626375963 7030.95251329 2.84626375963
2526 2525 7036.0853455 2.59665349181 7034.48869201 2.59665349181
2527 2526 7039.37211198 2.34831132284 7038.02380065 2.34831132284
2528 2527 7042.65907639 2.10185014969 7041.55722624 2.10185014969
2529 2528 7045.94623867 1.85785048639 7045.08838818 1.85785048639
2530 2529 7049.23359873 1.61685854758 7048.61674018 1.61685854758
2531 2530 7052.5211565 1.37938454126 7052.14177196 1.37938454126
2532 2531 7055.8089119 1.14590117777 7055.66301072 1.14590117777
2533 2532 7059.09686485 0.916842400491 7059.18002245 0.916842400491
2534 2533 7062.38501527 0.692602342746 7062.69241293 0.692602342746
2535 2534 7065.67336308 0.47353451435 7066.19982857 0.47353451435
2536 2535 7068.96190821 0.259951219726 7069.70195699 0.259951219726
2537 2536 7072.25065058 0.0521232085694 7073.19852738 0.0521232085694
2538 2537 7075.53959012 -0.149720441305 7076.68931056 0.149720441305
2539 2538 7078.82872673 -0.345392210482 7080.17411894 0.345392210482
2540 2539 7082.11806035 -0.53474579656 7083.65280615 0.53474579656
2541 2540 7085.4075909 -0.717675548773 7087.12526645 0.717675548773
2542 2541 7088.69731829 -0.894115683702 7090.59143398 0.894115683702
2543 2542 7091.98724247 -1.06403928825 7094.05128175 1.06403928825
2544 2543 7095.27736333 -1.22745711721 7097.50482045 1.22745711721
2545 2544 7098.56768082 -1.38441619366 7100.95209701 1.38441619366
2546 2545 7101.85819484 -1.53499822166 7104.39319306 1.53499822166
2547 2546 7105.14890533 -1.67931782142 7107.82822315 1.67931782142
2548 2547 7108.43981221 -1.81752059813 7111.25733281 1.81752059813
2549 2548 7111.73091539 -1.9497810566 7114.68069645 1.9497810566
2550 2549 7115.02221481 -2.07630037427 7118.09851518 2.07630037427
2551 2550 7118.31371038 -2.1973040463 7121.51101443 2.1973040463
2552 2551 7121.60540203 -2.31303941676 7124.91844145 2.31303941676
2553 2552 7124.89728969 -2.42377311051 7128.3210628 2.42377311051
2554 2553 7128.18937326 -2.52978838115 7131.71916164 2.52978838115
2555 2554 7131.48165269 -2.63138239035 7135.11303508 2.63138239035
2556 2555 7134.77412789 -2.72886343459 7138.50299132 2.72886343459
2557 2556 7138.06679878 -2.82254813532 7141.88934691 2.82254813532
2558 2557 7141.35966529 -2.91275860884 7145.2724239 2.91275860884
2559 2558 7144.65272734 -2.99981963216 7148.65254697 2.99981963216
2560 2559 7147.94598485 -3.08405582116 7152.03004068 3.08405582116
2561 2560 7151.23943776 -3.16578883724 7155.4052266 3.16578883724
2562 2561 7154.53308598 -3.24533463833 7158.77842062 3.24533463833
2563 2562 7157.82692943 -3.32300079019 7162.14993022 3.32300079019
2564 2563 7161.12096805 -3.39908385304 7165.5200519 3.39908385304
2565 2564 7164.41520174 -3.47386685872 7168.8890686 3.47386685872
2566 2565 7167.70963045 -3.54761689257 7172.25724734 3.54761689257
2567 2566 7171.00425409 -3.62058279391 7175.62483688 3.62058279391
2568 2567 7174.29907258 -3.69299298823 7178.99206557 3.69299298823
2569 2568 7177.59408585 -3.76505346348 7182.35913932 3.76505346348
2570 2569 7180.88929383 -3.83694590211 7185.72623973 3.83694590211
2571 2570 7184.18469644 -3.90882597948 7189.09352242 3.90882597948
2572 2571 7187.4802936 -3.98082183862 7192.46111543 3.98082183862
2573 2572 7190.77608523 -4.05303275003 7195.82911798 4.05303275003
2574 2573 7194.07207127 -4.12552796458 7199.19759923 4.12552796458
2575 2574 7197.36825163 -4.19834576602 7202.56659739 4.19834576602
2576 2575 7200.66462624 -4.27149272909 7205.93611897 4.27149272909
2577 2576 7203.96119503 -4.34494318759 7209.30613822 4.34494318759
2578 2577 7207.25795791 -4.41863891594 7212.67659683 4.41863891594
2579 2578 7210.55491482 -4.49248902656 7216.04740385 4.49248902656
2580 2579 7213.85206568 -4.56637008398 7219.41843577 4.56637008398
2581 2580 7217.14941042 -4.64012643581 7222.78953685 4.64012643581
2582 2581 7220.44694895 -4.7135707592 7226.16051971 4.7135707592
2583 2582 7223.7446812 -4.78648482026 7229.53116602 4.78648482026
2584 2583 7227.0426071 -4.85862044305 7232.90122755 4.85862044305
2585 2584 7230.34072658 -4.92970068318 7236.27042726 4.92970068318
2586 2585 7233.63903956 -4.99942120022 7239.63846076 4.99942120022
2587 2586 7236.93754595 -5.06745182201 7243.00499778 5.06745182201
2588 2587 7240.2362457 -5.13343829272 7246.36968399 5.13343829272
2589 2588 7243.53513872 -5.19700419568 7249.73214292 5.19700419568
2590 2589 7246.83422494 -5.25775304103 7253.09197798 5.25775304103
2591 2590 7250.13350429 -5.31527050708 7256.4487748 5.31527050708
2592 2591 7253.43297668 -5.36912682374 7259.80210351 5.36912682374
2593 2592 7256.73264205 -5.41887928538 7263.15152134 5.41887928538
2594 2593 7260.03250033 -5.46407487968 7266.49657521 5.46407487968
2595 2594 7263.33255143 -5.50425301858 7269.83680444 5.50425301858
2596 2595 7266.63279528 -5.53894835665 7273.17174363 5.53894835665
2597 2596 7269.93323181 -5.56769368174 7276.50092549 5.56769368174
2598 2597 7273.23386094 -5.59002286238 7279.8238838 5.59002286238
2599 2598 7276.53468261 -5.60547383589 7283.14015644 5.60547383589
2600 2599 7279.83569673 -5.61359162109 7286.44928835 5.61359162109
2601 2600 7283.13690323 -5.61393133904 7289.75083457 5.61393133904
2602 2601 7286.43830204 -5.60606122538 7293.04436326 5.60606122538
2603 2602 7289.73989308 -5.58956561762 7296.3294587 5.58956561762
2604 2603 7293.04167628 -5.56404790093 7299.60572418 5.56404790093
2605 2604 7296.34365157 -5.52913339598 7302.87278497 5.52913339598
2606 2605 7299.64581887 -5.48447217275 7306.13029104 5.48447217275
2607 2606 7302.94817811 -5.42974177442 7309.37791988 5.42974177442
2608 2607 7306.25072921 -5.36464983593 7312.61537905 5.36464983593
2609 2608 7309.55347211 -5.28893658226 7315.84240869 5.28893658226
2610 2609 7312.85640672 -5.20237719202 7319.05878392 5.20237719202
2611 2610 7316.15953298 -5.1047840125 7322.26431699 5.1047840125
2612 2611 7319.46285081 -4.99600861317 7325.45885942 4.99600861317
2613 2612 7322.76636014 -4.87594366541 7328.6423038 4.87594366541
2614 2613 7326.07006089 -4.74452463674 7331.81458552 4.74452463674
2615 2614 7329.37395299 -4.6017312893 7334.97568428 4.6017312893
2616 2615 7332.67803637 -4.44758897273 7338.12562534 4.44758897273
2617 2616 7335.98231095 -4.28216970297 7341.26448065 4.28216970297
2618 2617 7339.28677667 -4.10559301939 7344.39236969 4.10559301939
2619 2618 7342.59143344 -3.91802661377 7347.50946005 3.91802661377
2620 2619 7345.8962812 -3.71968672593 7350.61596792 3.71968672593
2621 2620 7349.20131987 -3.51083830166 7353.71215817 3.51083830166
2622 2621 7352.50654938 -3.29179491017 7356.79834429 3.29179491017
2623 2622 7355.81196966 -3.06291841923 7359.87488808 3.06291841923
2624 2623 7359.11758063 -2.82461842739 7362.94219906 2.82461842739
2625 2624 7362.42338223 -2.57735145414 7366.00073368 2.57735145414
2626 2625 7365.72937437 -2.32161988976 7369.05099426 2.32161988976
2627 2626 7369.03555699 -2.05797070809 7372.0935277 2.05797070809
2628 2627 7372.34193001 -1.78699394657 7375.12892396 1.78699394657
2629 2628 7375.64849336 -1.50932095906 7378.15781432 1.50932095906
2630 2629 7378.95524698 -1.22562244817 7381.18086942 1.22562244817
2631 2630 7382.26219078 -0.936606284974 7384.19879706 0.936606284974
2632 2631 7385.56932469 -0.643015125005 7387.21233981 0.643015125005
2633 2632 7388.87664864 -0.345623830621 7390.22227247 0.345623830621
2634 2633 7392.18416257 -0.0452367107083 7393.22939928 0.0452367107083
2635 2634 7395.49186639 0.257315410249 7396.23455098 0.257315410249
2636 2635 7398.79976004 0.561178280838 7399.23858176 0.561178280838
2637 2636 7402.10784344 0.865477455385 7402.24236598 0.865477455385
2638 2637 7405.41611652 1.1693216561 7405.24679486 1.1693216561
2639 2638 7408.72457921 1.47180624944 7408.25277296 1.47180624944
2640 2639 7412.03323144 1.77201682087 7411.26121462 1.77201682087
2641 2640 7415.34207313 2.06903283156 7414.2730403 2.06903283156
2642 2641 7418.65110422 2.36193134009 7417.28917288 2.36193134009
2643 2642 7421.96032463 2.6497907719 7420.31053386 2.6497907719
2644 2643 7425.26973429 2.93169471889 7423.33803957 2.93169471889
2645 2644 7428.57933313 3.20673575126 7426.37259738 3.20673575126
2646 2645 7431.88912108 3.47401922363 7429.41510186 3.47401922363
2647 2646 7435.19909806 3.73266705747 7432.46643101 3.73266705747
2648 2647 7438.50926401 3.98182148175 7435.52744253 3.98182148175
2649 2648 7441.81961885 4.22064871407 7438.59897014 4.22064871407
2650 2649 7445.13016251 4.44834256449 7441.68181995 4.44834256449
2651 2650 7448.44089493 4.66412794479 7444.77676698 4.66412794479
2652 2651 7451.75181602 4.86726426618 7447.88455175 4.86726426618
2653 2652 7455.06292572 5.05704870901 7451.00587701 5.05704870901
2654 2653 7458.37422396 5.23281934853 7454.14140461 5.23281934853
2655 2654 7461.68571066 5.39395812133 7457.29175254 5.39395812133
2656 2655 7464.99738576 5.53989361805 7460.45749214 5.53989361805
2657 2656 7468.30924918 5.67010368837 7463.63914549 5.67010368837
2658 2657 7471.62130086 5.7841178455 7466.83718301 5.7841178455
2659 2658 7474.93354071 5.88151945798 7470.05202126 5.88151945798
2660 2659 7478.24596868 5.96194771792 7473.28402096 5.96194771792
2661 2660 7481.55858469 6.02509937552 7476.53348532 6.02509937552
2662 2661 7484.87138867 6.07073023102 7479.80065844 6.07073023102
2663 2662 7488.18438055 6.09865637622 7483.08572417 6.09865637622
2664 2663 7491.49756026 6.1087551791 7486.38880508 6.1087551791
2665 2664 7494.81092772 6.10096600591 7489.70996172 6.10096600591
2666 2665 7498.12448288 6.07529067673 7493.0491922 6.07529067673
2667 2666 7501.43822565 6.03179365146 7496.40643199 6.03179365146
2668 2667 7504.75215596 5.97060194471 7499.78155402 5.97060194471
2669 2668 7508.06627376 5.89190476907 7503.17436899 5.89190476907
2670 2669 7511.38057896 5.7959529079 7506.58462605 5.7959529079
2671 2670 7514.69507149 5.68305781959 7510.01201367 5.68305781959
2672 2671 7518.0097513 5.55359047705 7513.45616082 5.55359047705
2673 2672 7521.32461829 5.40797994701 7516.91663835 5.40797994701
2674 2673 7524.63967242 5.24671171511 7520.3929607 5.24671171511
2675 2674 7527.9549136 5.07032576418 7523.88458783 5.07032576418
2676 2675 7531.27034176 4.87941441385 7527.39092735 4.87941441385
2677 2676 7534.58595684 4.67461993125 7530.91133691 4.67461993125
2678 2677 7537.90175877 4.4566319232 7534.44512685 4.4566319232
2679 2678 7541.21774747 4.22618452182 7537.99156295 4.22618452182
2680 2679 7544.53392288 3.98405337601 7541.54986951 3.98405337601
2681 2680 7547.85028493 3.73105246251 7545.11923247 3.73105246251
2682 2681 7551.16683354 3.46803073101 7548.69880281 3.46803073101
2683 2682 7554.48356865 3.19586859847 7552.28770006 3.19586859847
2684 2683 7557.80049019 2.9154743088 7555.88501588 2.9154743088
2685 2684 7561.11759809 2.62778017443 7559.48981792 2.62778017443
2686 2685 7564.43489228 2.33373871692 7563.10115356 2.33373871692
2687 2686 7567.75237269 2.03431872446 7566.71805396 2.03431872446
2688 2687 7571.07003924 1.73050124422 7570.339538 1.73050124422
2689 2688 7574.38789188 1.42327552803 7573.96461635 1.42327552803
2690 2689 7577.70593053 1.11363494992 7577.59229558 1.11363494992
2691 2690 7581.02415512 0.802572914396 7581.22158221 0.802572914396
2692 2691 7584.34256559 0.491078774219 7584.85148682 0.491078774219
2693 2692 7587.66116186 0.180133776382 7588.48102809 0.180133776382
2694 2693 7590.97994387 -0.129292944983 7592.10923681 0.129292944983
2695 2694 7594.29891154 -0.436248310448 7595.73515985 0.436248310448
2696 2695 7597.61806481 -0.739799153775 7599.35786397 0.739799153775
2697 2696 7600.93740361 -1.03903597936 7602.97643959 1.03903597936
2698 2697 7604.25692787 -1.33307660145 7606.59000447 1.33307660145
2699 2698 7607.57663752 -1.62106964852 7610.19770717 1.62106964852
2700 2699 7610.8965325 -1.90219791686 7613.79873041 1.90219791686
2701 2700 7614.21661272 -2.17568155802 7617.39229428 2.17568155802
2702 2701 7617.53687813 -2.4407810859 7620.97765922 2.4407810859
2703 2702 7620.85732866 -2.69680018963 7624.55412885 2.69680018963
2704 2703 7624.17796424 -2.94308833987 7628.12105258 2.94308833987
2705 2704 7627.4987848 -3.17904317674 7631.67782797 3.17904317674
2706 2705 7630.81979026 -3.40411266878 7635.22390293 3.40411266878
2707 2706 7634.14098057 -3.61779703366 7638.75877761 3.61779703366
2708 2707 7637.46235566 -3.81965041202 7642.28200607 3.81965041202
2709 2708 7640.78391545 -4.00928228756 7645.79319774 4.00928228756
2710 2709 7644.10565988 -4.18635864727 7649.29201853 4.18635864727
2711 2710 7647.42758888 -4.35060287726 7652.77819176 4.35060287726
2712 2711 7650.74970238 -4.50179639072 7656.25149877 4.50179639072
2713 2712 7654.07200032 -4.63977898586 7659.7117793 4.63977898586
2714 2713 7657.39448262 -4.76444893319 7663.15893155 4.76444893319
2715 2714 7660.71714922 -4.87576279238 7666.59291201 4.87576279238
2716 2715 7664.04000005 -4.97373496065 7670.01373501 4.97373496065
2717 2716 7667.36303504 -5.05843695567 7673.42147199 5.05843695567
2718 2717 7670.68625412 -5.12999643737 7676.81625056 5.12999643737
2719 2718 7674.00965723 -5.18859597415 7680.19825321 5.18859597415
2720 2719 7677.3332443 -5.23447156034 7683.56771586 5.23447156034
2721 2720 7680.65701527 -5.26791089288 7686.92492616 5.26791089288
2722 2721 7683.98097005 -5.28925141635 7690.27022147 5.28925141635
2723 2722 7687.30510859 -5.29887814654 7693.60398674 5.29887814654
2724 2723 7690.62943082 -5.29722128383 7696.9266521 5.29722128383
2725 2724 7693.95393667 -5.28475362866 7700.2386903 5.28475362866
2726 2725 7697.27862608 -5.26198781231 7703.54061389 5.26198781231
2727 2726 7700.60349897 -5.22947335687 7706.83297232 5.22947335687
2728 2727 7703.92855527 -5.18779357947 7710.11634885 5.18779357947
2729 2728 7707.25379494 -5.13756235617 7713.39135729 5.13756235617
2730 2729 7710.57921788 -5.07942076174 7716.65863864 5.07942076174
2731 2730 7713.90482404 -5.0140336022 7719.91885765 5.0140336022
2732 2731 7717.23061336 -4.94208585717 7723.17269921 4.94208585717
2733 2732 7720.55658575 -4.86427904988 7726.4208648 4.86427904988
2734 2733 7723.88274116 -4.78132756263 7729.66406873 4.78132756263
2735 2734 7727.20907953 -4.69395491598 7732.90303444 4.69395491598
2736 2735 7730.53560077 -4.60289002986 7736.1384908 4.60289002986
2737 2736 7733.86230483 -4.50886348504 7739.37116831 4.50886348504
2738 2737 7737.18919164 -4.41260380319 7742.60179544 4.41260380319
2739 2738 7740.51626112 -4.31483376362 7745.83109489 4.31483376362
2740 2739 7743.84351323 -4.21626677482 7749.05978 4.21626677482
2741 2740 7747.17094788 -4.11760331811 7752.2885512 4.11760331811
2742 2741 7750.49856502 -4.01952748083 7755.5180925 4.01952748083
2743 2742 7753.82636456 -3.92270359572 7758.74906816 3.92270359572
2744 2743 7757.15434646 -3.82777300255 7761.98211947 3.82777300255
2745 2744 7760.48251064 -3.73535094758 7765.21786159 3.73535094758
2746 2745 7763.81085704 -3.64602363565 7768.45688067 3.64602363565
2747 2746 7767.13938558 -3.56034544877 7771.69973103 3.56034544877
2748 2747 7770.46809621 -3.47883634439 7774.94693256 3.47883634439
2749 2748 7773.79698886 -3.40197944562 7778.1989683 3.40197944562
2750 2749 7777.12606345 -3.33021883442 7781.45628229 3.33021883442
2751 2750 7780.45531993 -3.26395755816 7784.71927749 3.26395755816
2752 2751 7783.78475823 -3.20355585845 7787.98831409 3.20355585845
2753 2752 7787.11437828 -3.14932963031 7791.26370791 3.14932963031
2754 2753 7790.44418002 -3.1015491184 7794.54572914 3.1015491184
2755 2754 7793.77416337 -3.06043785605 7797.83460123 3.06043785605
2756 2755 7797.10432829 -3.02617185122 7801.13050014 3.02617185122
2757 2756 7800.43467468 -2.99887902275 7804.43355371 2.99887902275
2758 2757 7803.7652025 -2.9786388887 7807.74384139 2.9786388887
2759 2758 7807.09591168 -2.9654825073 7811.06139419 2.9654825073
2760 2759 7810.42680215 -2.95939267004 7814.38619482 2.95939267004
2761 2760 7813.75787384 -2.96030434481 7817.71817819 2.96030434481
2762 2761 7817.0891267 -2.96810536607 7821.05723206 2.96810536607
2763 2762 7820.42056064 -2.9826373676 7824.40319801 2.9826373676
2764 2763 7823.75217562 -3.00369695225 7827.75587257 3.00369695225
2765 2764 7827.08397156 -3.03103709198 7831.11500865 3.03103709198
2766 2765 7830.41594839 -3.0643687502 7834.48031714 3.0643687502
2767 2766 7833.74810606 -3.10336271749 7837.85146878 3.10336271749
2768 2767 7837.08044449 -3.1476516507 7841.22809614 3.1476516507
2769 2768 7840.41296362 -3.1968323042 7844.60979593 3.1968323042
2770 2769 7843.7456634 -3.25046794154 7847.99613134 3.25046794154
2771 2770 7847.07854374 -3.30809091448 7851.38663465 3.30809091448
2772 2771 7850.41160458 -3.36920539578 7854.78080998 3.36920539578
2773 2772 7853.74484587 -3.43329025138 7858.17813612 3.43329025138
2774 2773 7857.07826753 -3.49980203678 7861.57806957 3.49980203678
2775 2774 7860.4118695 -3.56817810204 7864.9800476 3.56817810204
2776 2775 7863.74565172 -3.63783978914 7868.38349151 3.63783978914
2777 2776 7867.07961412 -3.70819570511 7871.78780982 3.70819570511
2778 2777 7870.41375663 -3.77864505401 7875.19240168 3.77864505401
2779 2778 7873.74807919 -3.84858101034 7878.5966602 3.84858101034
2780 2779 7877.08258174 -3.9173941168 7881.99997586 3.9173941168
2781 2780 7880.41726421 -3.98447568854 7885.4017399 3.98447568854
2782 2781 7883.75212653 -4.0492212067 7888.80134774 4.0492212067
2783 2782 7887.08716865 -4.11103368372 7892.19820233 4.11103368372
2784 2783 7890.42239049 -4.1693269832 7895.59171748 4.1693269832
2785 2784 7893.757792 -4.22352907737 7898.98132108 4.22352907737
2786 2785 7897.0933731 -4.27308522554 7902.36645833 4.27308522554
2787 2786 7900.42913374 -4.31746105743 7905.7465948 4.31746105743
2788 2787 7903.76507384 -4.35614554561 7909.12121939 4.35614554561
2789 2788 7907.10119335 -4.38865385208 7912.48984721 4.38865385208
2790 2789 7910.4374922 -4.41453003446 7915.85202224 4.41453003446
2791 2790 7913.77397033 -4.43334959826 7919.20731993 4.43334959826
2792 2791 7917.11062767 -4.44472188234 7922.55534955 4.44472188234
2793 2792 7920.44746415 -4.44829226543 7925.89575642 4.44829226543
2794 2793 7923.78447972 -4.44374418284 7929.2282239 4.44374418284
2795 2794 7927.1216743 -4.43080094319 7932.55247525 4.43080094319
2796 2795 7930.45904785 -4.40922733609 7935.86827518 4.40922733609
2797 2796 7933.79660028 -4.37883102287 7939.1754313 4.37883102287
2798 2797 7937.13433154 -4.33946370347 7942.47379524 4.33946370347
2799 2798 7940.47224156 -4.29102205378 7945.76326361 4.29102205378
2800 2799 7943.81033028 -4.23344842897 7949.04377871 4.23344842897
2801 2800 7947.14859764 -4.16673132937 7952.31532897 4.16673132937
2802 2801 7950.48704356 -4.09090562698 7955.57794919 4.09090562698
2803 2802 7953.825668 -4.0060525515 7958.83172055 4.0060525515
2804 2803 7957.16447088 -3.91229943637 7962.07677032 3.91229943637
2805 2804 7960.50345214 -3.80981922638 7965.31327137 3.80981922638
2806 2805 7963.84261172 -3.69882974953 7968.54144146 3.69882974953
2807 2806 7967.18194954 -3.57959275727 7971.7615423 3.57959275727
2808 2807 7970.52146556 -3.45241273805 7974.9738783 3.45241273805
2809 2808 7973.86115971 -3.31763551077 7978.17879522 3.31763551077
2810 2809 7977.20103192 -3.17564660531 7981.37667852 3.17564660531
2811 2810 7980.54108212 -3.02686943872 7984.56795156 3.02686943872
2812 2811 7983.88131027 -2.87176329666 7987.75307356 2.87176329666
2813 2812 7987.22171628 -2.71082113054 7990.93253741 2.71082113054
2814 2813 7990.56230011 -2.54456718176 7994.10686729 2.54456718176
2815 2814 7993.90306168 -2.37355444554 7997.27661612 2.37355444554
2816 2815 7997.24400093 -2.19836198726 8000.44236292 2.19836198726
2817 2816 8000.58511781 -2.01959212525 8003.60470993 2.01959212525
2818 2817 8003.92641224 -1.83786749468 8006.76427973 1.83786749468
2819 2818 8007.26788416 -1.65382800748 8009.92171217 1.65382800748
2820 2819 8010.60953352 -1.46812772401 8013.07766124 1.46812772401
2821 2820 8013.95136024 -1.2814316527 8016.2327919 1.2814316527
2822 2821 8017.29336427 -1.0944124938 8019.38777677 1.0944124938
2823 2822 8020.63554554 -0.907747344297 8022.54329289 0.907747344297
2824 2823 8023.97790399 -0.722114380554 8025.70001837 0.722114380554
2825 2824 8027.32043956 -0.538189535935 8028.85862909 0.538189535935
2826 2825 8030.66315218 -0.356643190255 8032.01979537 0.356643190255
2827 2826 8034.00604179 -0.178136888056 8035.18417868 0.178136888056
2828 2827 8037.34910833 -0.00332010246648 8038.35242843 0.00332010246648
2829 2828 8040.69235174 0.167172938829 8041.5251788 0.167172938829
2830 2829 8044.03577194 0.332726349307 8044.7030456 0.332726349307
2831 2830 8047.37936889 0.492745585228 8047.88662331 0.492745585228
2832 2831 8050.72314252 0.646660337859 8051.07648219 0.646660337859
2833 2832 8054.06709277 0.793927301576 8054.27316547 0.793927301576
2834 2833 8057.41121957 0.934032803763 8057.47718676 0.934032803763
2835 2834 8060.75552286 1.06649528313 8060.68902757 1.06649528313
2836 2835 8064.10000257 1.19086760388 8063.90913497 1.19086760388
2837 2836 8067.44465866 1.30673919396 8067.13791947 1.30673919396
2838 2837 8070.78949105 1.41373799661 8070.37575305 1.41373799661
2839 2838 8074.13449968 1.51153222526 8073.62296746 1.51153222526
2840 2839 8077.4796845 1.59983191304 8076.87985258 1.59983191304
2841 2840 8080.82504543 1.67839024894 8080.14665518 1.67839024894
2842 2841 8084.17058242 1.74700469404 8083.42357772 1.74700469404
2843 2842 8087.5162954 1.80551787221 8086.71077753 1.80551787221
2844 2843 8090.86218431 1.85381823076 8090.00836608 1.85381823076
2845 2844 8094.2082491 1.89184046794 8093.31640863 1.89184046794
2846 2845 8097.55448969 1.91956572516 8096.63492397 1.91956572516
2847 2846 8100.90090603 1.93702154307 8099.96388449 1.93702154307
2848 2847 8104.24749806 1.94428158194 8103.30321648 1.94428158194
2849 2848 8107.59426571 1.94146510792 8106.6528006 1.94146510792
2850 2849 8110.94120892 1.92873624784 8110.01247267 1.92873624784
2851 2850 8114.28832763 1.90630301667 8113.38202461 1.90630301667
2852 2851 8117.63562178 1.87441612266 8116.76120566 1.87441612266
2853 2852 8120.98309131 1.83336755654 8120.14972375 1.83336755654
2854 2853 8124.33073615 1.78348897198 8123.54724718 1.78348897198
2855 2854 8127.67855625 1.72514986596 8126.95340638 1.72514986596
2856 2855 8131.02655154 1.65875556838 8130.36779597 1.65875556838
2857 2856 8134.37472196 1.58474505141 8133.78997691 1.58474505141
2858 2857 8137.72306745 1.50358856999 8137.21947888 1.50358856999
2859 2858 8141.07158795 1.41578514566 8140.6558028 1.41578514566
2860 2859 8144.4202834 1.32185990678 8144.09842349 1.32185990678
2861 2860 8147.76915373 1.22236129902 8147.54679243 1.22236129902
2862 2861 8151.11819889 1.11785818036 8151.00034071 1.11785818036
2863 2862 8154.46741881 1.00893681597 8154.45848199 1.00893681597
2864 2863 8157.81681344 0.896197788167 8157.92061565 0.896197788167
2865 2864 8161.1663827 0.780252837777 8161.38612987 0.780252837777
2866 2865 8164.51612655 0.661721653045 8164.8544049 0.661721653045
2867 2866 8167.86604492 0.541228622843 8168.3248163 0.541228622843
2868 2867 8171.21613775 0.419399570943 8171.79673818 0.419399570943
2869 2868 8174.56640498 0.29685848831 8175.26954649 0.29685848831
2870 2869 8177.91684654 0.174224280338 8178.74262226 0.174224280338
2871 2870 8181.26746238 0.052107545915 8182.21535483 0.052107545915
2872 2871 8184.61825244 -0.0688925949815 8185.68714503 0.0688925949815
2873 2872 8187.96921665 -0.188191608677 8189.15740826 0.188191608677
2874 2873 8191.32035495 -0.305222574033 8192.62557753 0.305222574033
2875 2874 8194.6716673 -0.419439111789 8196.09110641 0.419439111789
2876 2875 8198.02315361 -0.530318201756 8199.55347181 0.530318201756
2877 2876 8201.37481384 -0.63736287318 8203.01217671 0.63736287318
2878 2877 8204.72664792 -0.740104754247 8206.46675267 0.740104754247
2879 2878 8208.07865579 -0.838106467386 8209.91676226 0.838106467386
2880 2879 8211.43083739 -0.930963857841 8213.36180125 0.930963857841
2881 2880 8214.78319267 -1.01830804382 8216.80150071 1.01830804382
2882 2881 8218.13572155 -1.09980727743 8220.23552883 1.09980727743
2883 2882 8221.48842399 -1.17516860655 8223.6635926 1.17516860655
2884 2883 8224.84129992 -1.24413932891 8227.08543925 1.24413932891
2885 2884 8228.19434928 -1.30650823051 8230.50085751 1.30650823051
2886 2885 8231.54757201 -1.36210660188 8233.90967861 1.36210660188
2887 2886 8234.90096805 -1.41080902651 8237.31177707 1.41080902651
2888 2887 8238.25453733 -1.45253393725 8240.70707127 1.45253393725
2889 2888 8241.60827981 -1.4872439374 8244.09552375 1.4872439374
2890 2889 8244.96219542 -1.51494588468 8247.47714131 1.51494588468
2891 2890 8248.3162841 -1.53569073713 8250.85197484 1.53569073713
2892 2891 8251.67054579 -1.54957316169 8254.22011895 1.54957316169
2893 2892 8255.02498043 -1.55673090696 8257.58171134 1.55673090696
2894 2893 8258.37958796 -1.55734394315 8260.93693191 1.55734394315
2895 2894 8261.73436833 -1.55163337331 8264.2860017 1.55163337331
2896 2895 8265.08932146 -1.53986012119 8267.62918158 1.53986012119
2897 2896 8268.44444731 -1.52232340214 8270.96677071 1.52232340214
2898 2897 8271.7997458 -1.49935898462 8274.29910479 1.49935898462
2899 2898 8275.15521689 -1.47133725105 8277.62655414 1.47133725105
2900 2899 8278.51086051 -1.43866106761 8280.94952158 1.43866106761
2901 2900 8281.86667661 -1.40176347384 8284.26844008 1.40176347384
2902 2901 8285.22266512 -1.3611052035 8287.58377032 1.3611052035
2903 2902 8288.57882598 -1.31717204944 8290.89599803 1.31717204944
2904 2903 8291.93515914 -1.27047208565 8294.20563123 1.27047208565
2905 2904 8295.29166453 -1.22153276068 8297.51319729 1.22153276068
2906 2905 8298.6483421 -1.17089787731 8300.81923998 1.17089787731
2907 2906 8302.00519179 -1.1191244737 8304.12431627 1.1191244737
2908 2907 8305.36221354 -1.06677962215 8307.42899316 1.06677962215
2909 2908 8308.71940728 -1.01443716173 8310.73384444 1.01443716173
2910 2909 8312.07677296 -0.962674381689 8314.03944735 0.962674381689
2911 2910 8315.43431053 -0.912068672553 8317.3463792 0.912068672553
2912 2911 8318.79201991 -0.863194162325 8320.65521408 0.863194162325
2913 2912 8322.14990106 -0.81661835506 8323.96651942 0.81661835506
2914 2913 8325.50795391 -0.772898789284 8327.2808527 0.772898789284
2915 2914 8328.86617841 -0.732579733585 8330.59875814 0.732579733585
2916 2915 8332.22457449 -0.696188936585 8333.92076342 0.696188936585
2917 2916 8335.58314209 -0.66423444825 8337.24737654 0.66423444825
2918 2917 8338.94188117 -0.637201529207 8340.5790827 0.637201529207
2919 2918 8342.30079165 -0.615549664283 8343.91634132 0.615549664283
2920 2919 8345.65987349 -0.599709696045 8347.25958318 0.599709696045
2921 2920 8349.01912661 -0.590081093522 8350.60920771 0.590081093522
2922 2921 8352.37855097 -0.587029370641 8353.96558034 0.587029370641
2923 2922 8355.7381465 -0.590883668216 8357.32903017 0.590883668216
2924 2923 8359.09791315 -0.601934512518 8360.69984766 0.601934512518
2925 2924 8362.45785086 -0.620431762603 8364.07828262 0.620431762603
2926 2925 8365.81795956 -0.64658275765 8367.46454232 0.64658275765
2927 2926 8369.17823921 -0.680550674604 8370.85878988 0.680550674604
2928 2927 8372.53868973 -0.722453105353 8374.26114284 0.722453105353
2929 2928 8375.89931108 -0.772360861626 8377.67167194 0.772360861626
2930 2929 8379.2601032 -0.830297014649 8381.09040021 0.830297014649
2931 2930 8382.62106602 -0.896236175444 8384.51730219 0.896236175444
2932 2931 8385.98219949 -0.970104020485 8387.95230351 0.970104020485
2933 2932 8389.34350355 -1.05177706616 8391.39528061 1.05177706616
2934 2933 8392.70497814 -1.14108269432 8394.84606083 1.14108269432
2935 2934 8396.0666232 -1.23779942987 8398.30442263 1.23779942987
2936 2935 8399.42843869 -1.34165747016 8401.77009616 1.34165747016
2937 2936 8402.79042452 -1.45233946464 8405.24276399 1.45233946464
2938 2937 8406.15258066 -1.56948154203 8408.72206221 1.56948154203
2939 2938 8409.51490705 -1.69267458095 8412.20758163 1.69267458095
2940 2939 8412.87740361 -1.82146571877 8415.69886933 1.82146571877
2941 2940 8416.2400703 -1.95536009228 8419.19543039 1.95536009228
2942 2941 8419.60290706 -2.09382280251 8422.69672986 2.09382280251
2943 2942 8422.96591383 -2.23628109501 8426.20219492 2.23628109501
2944 2943 8426.32909055 -2.38212674567 8429.71121729 2.38212674567
2945 2944 8429.69243716 -2.53071864128 8433.22315581 2.53071864128
2946 2945 8433.05595362 -2.6813855429 8436.73733916 2.6813855429
2947 2946 8436.41963985 -2.83342901923 8440.25306887 2.83342901923
2948 2947 8439.7834958 -2.98612653621 8443.76962234 2.98612653621
2949 2948 8443.14752142 -3.13873468856 8447.28625611 3.13873468856
2950 2949 8446.51171665 -3.29049255769 8450.8022092 3.29049255769
2951 2950 8449.87608142 -3.44062518043 8454.3167066 3.44062518043
2952 2951 8453.24061568 -3.58834711176 8457.8289628 3.58834711176
2953 2952 8456.60531938 -3.73286606472 8461.33818545 3.73286606472
2954 2953 8459.97019246 -3.87338661012 8464.84357907 3.87338661012
2955 2954 8463.33523485 -4.00911391803 8468.34434877 4.00911391803
2956 2955 8466.70044651 -4.13925752336 8471.83970403 4.13925752336
2957 2956 8470.06582737 -4.26303509703 8475.32886247 4.26303509703
2958 2957 8473.43137738 -4.37967620476 8478.81105359 4.37967620476
2959 2958 8476.79709648 -4.488426035 8482.28552252 4.488426035
2960 2959 8480.16298461 -4.58854907804 8485.75153369 4.58854907804
2961 2960 8483.52904172 -4.67933273824 8489.20837446 4.67933273824
2962 2961 8486.89526775 -4.76009086179 8492.65535861 4.76009086179
2963 2962 8490.26166264 -4.83016716267 8496.0918298 4.83016716267
2964 2963 8493.62822633 -4.88893853006 8499.51716486 4.88893853006
2965 2964 8496.99495878 -4.93581820071 8502.93077698 4.93581820071
2966 2965 8500.36185991 -4.97025878091 8506.33211869 4.97025878091
2967 2966 8503.72892968 -4.99175510273 8509.72068478 4.99175510273
2968 2967 8507.09616802 -4.99984690059 8513.09601492 4.99984690059
2969 2968 8510.46357489 -4.9941212947 8516.45769618 4.9941212947
2970 2969 8513.83115021 -4.97421506883 8519.80536528 4.97421506883
2971 2970 8517.19889395 -4.93981673112 8523.13871068 4.93981673112
2972 2971 8520.56680604 -4.89066834728 8526.45747438 4.89066834728
2973 2972 8523.93488641 -4.82656713686 8529.76145355 4.82656713686
2974 2973 8527.30313503 -4.74736682446 8533.05050185 4.74736682446
2975 2974 8530.67155183 -4.65297873857 8536.32453057 4.65297873857
2976 2975 8534.04013675 -4.54337265235 8539.5835094 4.54337265235
2977 2976 8537.40888973 -4.41857736163 8542.8274671 4.41857736163
2978 2977 8540.77781073 -4.27868099674 8546.05649173 4.27868099674
2979 2978 8544.14689968 -4.12383106606 8549.27073075 4.12383106606
2980 2979 8547.51615653 -3.95423423047 8552.47039076 3.95423423047
2981 2980 8550.88558123 -3.77015580921 8555.65573703 3.77015580921
2982 2981 8554.2551737 -3.57191901877 8558.82709272 3.57191901877
2983 2982 8557.62493391 -3.35990394809 8561.98483786 3.35990394809
2984 2983 8560.99486179 -3.13454627407 8565.12940806 3.13454627407
2985 2984 8564.36495728 -2.89633572327 8568.26129301 2.89633572327
2986 2985 8567.73522034 -2.64581428632 8571.38103462 2.64581428632
2987 2986 8571.1056509 -2.38357419317 8574.48922509 2.38357419317
2988 2987 8574.4762489 -2.11025565826 8577.58650456 2.11025565826
2989 2988 8577.8470143 -1.82654440583 8580.67355871 1.82654440583
2990 2989 8581.21794704 -1.53316898665 8583.75111603 1.53316898665
2991 2990 8584.58904706 -1.2308978986 8586.81994495 1.2308978986
2992 2991 8587.9603143 -0.920536524071 8589.88085082 0.920536524071
2993 2992 8591.3317487 -0.602923898671 8592.9346726 0.602923898671
2994 2993 8594.70335022 -0.278929325852 8595.98227955 0.278929325852
2995 2994 8598.0751188 0.0505511466585 8599.02456765 0.0505511466585
2996 2995 8601.44705438 0.384598372349 8602.06245601 0.384598372349
2997 2996 8604.8191569 0.722273856401 8605.09688304 0.722273856401
2998 2997 8608.19142631 1.06262359371 8608.12880272 1.06262359371
2999 2998 8611.56386256 1.40468197658 8611.15918058 1.40468197658
3000 2999 8614.93646558 1.74747575395 8614.18898983 1.74747575395
3001 3000 8618.30923532 2.09002802367 8617.2192073 2.09002802367

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())