Current task: —

E-024-theta-sweep.py

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

E-024-theta-sweep.csv — 700.6 KB, updated 08-19-2026

← prev page 6 of 30 · 500/page · 14949 rows next →
# atheta_over_pikz_kw_k
2502 8 0.0000 14 5.501688789378 6.2546332527e-02
2503 8 0.0000 15 5.894673163694 6.2544271218e-02
2504 8 0.0000 16 6.287655159831 6.2546502356e-02
2505 8 0.0000 17 6.680650465409 6.2546589932e-02
2506 8 0.0000 18 7.073642067555 6.2547422385e-02
2507 8 0.0000 19 7.466642115519 6.2546943843e-02
2508 8 0.0000 20 7.859632222866 6.2547180485e-02
2509 8 0.0000 21 8.252638251194 6.2548955461e-02
2510 8 0.0000 22 8.645641176769 6.2549231410e-02
2511 8 0.0000 23 9.038662834972 6.2551398716e-02
2512 8 0.0000 24 9.431668007365 6.2547519304e-02
2513 8 0.0000 25 9.824682356565 6.2552469333e-02
2514 8 0.0000 26 10.217711173412 6.2552729507e-02
2515 8 0.0000 27 10.610749996796 6.2554261184e-02
2516 8 0.0000 28 11.003779132656 6.2552517118e-02
2517 8 0.0000 29 11.396833199960 6.2558996468e-02
2518 8 0.0000 30 11.789885693821 6.2553930361e-02
2519 8 0.0000 31 12.182950960860 6.2563652907e-02
2520 8 0.0000 32 12.576052449733 6.2562974388e-02
2521 8 0.0000 33 12.969161978434 6.2569718830e-02
2522 8 0.0000 34 13.362321660709 6.2578191511e-02
2523 8 0.0000 35 13.755656083177 6.2648367164e-02
2524 8 0.0000 36 14.135528606974 1.0623365060e+00
2525 8 0.0000 37 14.541053828104 6.2635293586e-02
2526 8 0.0000 38 14.934394570917 6.2582746207e-02
2527 8 0.0000 39 15.327599682066 6.2586041867e-02
2528 8 0.0000 40 15.720881810006 6.2595102024e-02
2529 8 0.0000 41 16.114168221360 6.2593633052e-02
2530 8 0.0000 42 16.507477116935 6.2601570942e-02
2531 8 0.0000 43 16.900846679196 6.2614185961e-02
2532 8 0.0000 44 17.294291779263 6.2622301756e-02
2533 8 0.0000 45 17.687810208621 6.2644227535e-02
2534 8 0.0000 46 18.081505458126 6.2671738004e-02
2535 8 0.0000 47 18.475378001397 6.2707685662e-02
2536 8 0.0000 48 18.869556302047 6.2765775233e-02
2537 8 0.0000 49 19.264191771202 6.2865824016e-02
2538 8 0.0000 50 19.659751820773 6.3067682449e-02
2539 8 0.0000 51 20.057275088346 6.3558937475e-02
2540 8 0.0000 52 20.461107165641 6.5502338517e-02
2541 8 0.0000 53 20.974285540465 6.0381398943e-01
2542 8 0.0000 54 21.079352585815 5.0963302341e-01
2543 8 0.0000 55 21.589616963064 6.5524444094e-02
2544 8 0.0000 56 21.993727516417 6.3625437620e-02
2545 8 0.0000 57 22.391722614848 6.3155274581e-02
2546 8 0.0000 58 22.788025407263 6.3021003302e-02
2547 8 0.0000 59 23.183836536864 6.2983558921e-02
2548 8 0.0000 60 23.579802287581 6.3088541362e-02
2549 8 0.0000 61 23.977049117669 6.3420065146e-02
2550 8 0.0000 62 24.378648524339 6.4786853183e-02
2551 8 0.0000 63 24.828019361958 1.1113733762e-01
2552 8 0.0000 64 25.023863769765 1.0050384235e+00
2553 8 0.0000 65 25.519344063656 6.4979563677e-02
2554 8 0.0000 66 25.921378804726 6.3420690406e-02
2555 8 0.0000 67 26.318404984307 6.3029342165e-02
2556 8 0.0000 68 26.713843286595 6.2872509911e-02
2557 8 0.0000 69 27.108746492989 6.2845753931e-02
2558 8 0.0000 70 27.503436123789 6.2780565857e-02
2559 8 0.0000 71 27.897815766759 6.2788110490e-02
2560 8 0.0000 72 28.292556102174 6.2848026746e-02
2561 8 0.0000 73 28.687564695268 6.2922341977e-02
2562 8 0.0000 74 29.083474072507 6.3122031022e-02
2563 8 0.0000 75 29.481111849818 6.3539900174e-02
2564 8 0.0000 76 29.884699836292 6.5450079661e-02
2565 8 0.0000 77 30.398151883139 8.5640934978e-01
2566 8 0.0000 78 30.525034104252 2.5757996181e-01
2567 8 0.0000 79 31.015952459709 6.5428115999e-02
2568 8 0.0000 80 31.419876282610 6.3645336566e-02
2569 8 0.0000 81 31.818267009934 6.3272286001e-02
2570 8 0.0000 82 32.215828960253 6.3382361073e-02
2571 8 0.0000 83 32.618576557237 6.6107397778e-02
2572 8 0.0000 84 32.939217646456 1.0565858532e+00
2573 8 0.0000 85 33.386438630819 6.3597718117e-02
2574 8 0.0000 86 33.783568539445 6.2987541607e-02
2575 8 0.0000 87 34.178644634912 6.2828816746e-02
2576 8 0.0000 88 34.573341578352 6.2822421940e-02
2577 8 0.0000 89 34.967716248047 6.2721448568e-02
2578 8 0.0000 90 35.362023100091 6.2821241989e-02
2579 8 0.0000 91 35.756860360098 6.2854283416e-02
2580 8 0.0000 92 36.151984643903 6.3006340094e-02
2581 8 0.0000 93 36.548886641516 6.3361548092e-02
2582 8 0.0000 94 36.949669201341 6.4624482712e-02
2583 8 0.0000 95 37.394784335184 1.0483306530e-01
2584 8 0.0000 96 37.598370797518 1.0116489386e+00
2585 8 0.0000 97 38.091232944423 6.4893564689e-02
2586 8 0.0000 98 38.493034153427 6.3425344880e-02
2587 8 0.0000 99 38.890038577439 6.3025835836e-02
2588 8 0.0000 100 39.285502483302 6.2906494315e-02
2589 8 0.0000 101 39.680674888230 6.2884916179e-02
2590 8 0.0000 102 40.075925237589 6.2984879973e-02
2591 8 0.0000 103 40.472709530451 6.3502113929e-02
2592 8 0.0000 104 40.915045536437 1.0578850570e+00
2593 8 0.0000 105 41.244271258444 6.5233228005e-02
2594 8 0.0000 106 41.645034242368 6.3256689540e-02
2595 8 0.0000 107 42.041533036743 6.3063476081e-02
2596 8 0.0000 108 42.438178319470 6.3345790806e-02
2597 8 0.0000 109 42.838971066928 6.4565819559e-02
2598 8 0.0000 110 43.318336842496 1.0358246639e+00
2599 8 0.0000 111 43.562956427393 8.2541884600e-02
2600 8 0.0000 112 43.989158760157 6.4170734730e-02
2601 8 0.0000 113 44.388205787583 6.3151845599e-02
2602 8 0.0000 114 44.784144072769 6.2979761600e-02
2603 8 0.0000 115 45.179365686680 6.2872025993e-02
2604 8 0.0000 116 45.573696218394 6.2717766608e-02
2605 8 0.0000 117 45.967991065977 6.2820547781e-02
2606 8 0.0000 118 46.362627100708 6.2866218188e-02
2607 8 0.0000 119 46.757362206437 6.2830527927e-02
2608 8 0.0000 120 47.152336271684 6.2983281692e-02
2609 8 0.0000 121 47.550117819976 6.3809688312e-02
2610 8 0.0000 122 48.000679748168 1.0556758506e+00
2611 8 0.0000 123 48.316099021197 6.6979585593e-02
2612 8 0.0000 124 48.722060622189 6.3822951033e-02
2613 8 0.0000 125 49.124135008379 6.4677885347e-02
2614 8 0.0000 126 49.560589413288 9.2309209064e-02
2615 8 0.0000 127 49.784237105843 1.0252114963e+00
2616 8 0.0000 128 50.271268574547 6.4754123771e-02
2617 8 0.0000 129 50.672694085404 6.3438231374e-02
2618 8 0.0000 130 51.069925781752 6.3050640764e-02
2619 8 0.0000 131 51.465122177154 6.2973666079e-02
2620 8 0.0000 132 51.860786661955 6.3029972000e-02
2621 8 0.0000 133 52.257430563196 6.3337008554e-02
2622 8 0.0000 134 52.660738146514 6.6731155354e-02
2623 8 0.0000 135 52.974814845557 1.0555667206e+00
2624 8 0.0000 136 53.425135685593 6.3739702225e-02
2625 8 0.0000 137 53.822372279489 6.3047978547e-02
2626 8 0.0000 138 54.218294667776 6.3012022284e-02
2627 8 0.0000 139 54.613542670138 6.2954986829e-02
2628 8 0.0000 140 55.008785669917 6.3015774211e-02
2629 8 0.0000 141 55.405443251183 6.3343116129e-02
2630 8 0.0000 142 55.806360332431 6.4730802588e-02
2631 8 0.0000 143 56.248742108399 1.0092463901e-01
2632 8 0.0000 144 56.457920637425 1.0158423261e+00
2633 8 0.0000 145 56.948825332942 6.4829795046e-02
2634 8 0.0000 146 57.350702770556 6.3467946864e-02
2635 8 0.0000 147 57.747466074607 6.2987600920e-02
2636 8 0.0000 148 58.142993063649 6.3078925179e-02
2637 8 0.0000 149 58.537827503805 6.2762320761e-02
2638 8 0.0000 150 58.932212061234 6.2922983103e-02
2639 8 0.0000 151 59.345798231392 1.0624141318e+00
2640 8 0.0000 152 59.719546166864 6.3119300802e-02
2641 8 0.0000 153 60.115758485938 6.3214997806e-02
2642 8 0.0000 154 60.518333746330 6.6414783083e-02
2643 8 0.0000 155 60.836053177961 1.0561523295e+00
2644 8 0.0000 156 61.284025602860 6.3686679046e-02
2645 8 0.0000 157 61.680952909251 6.3039014680e-02
2646 8 0.0000 158 62.075994274810 6.2967778619e-02
2647 8 0.0000 159 62.470914718277 6.2778486799e-02
2648 8 0.0000 160 62.864869030457 6.2791427970e-02
2649 8 0.0000 161 63.260036207002 6.2949868239e-02
2650 8 0.0000 162 63.655160050542 6.2998690263e-02
2651 8 0.0000 163 64.051210418295 6.3499005079e-02
2652 8 0.0000 164 64.450314821749 6.4228798553e-02
2653 8 0.0000 165 64.877183755464 8.2934327238e-02
2654 8 0.0000 166 65.121351141463 1.0356682156e+00
2655 8 0.0000 167 65.602533500538 6.4915965681e-02
2656 8 0.0000 168 66.004041091482 6.3709719620e-02
2657 8 0.0000 169 66.405504783622 6.4484137908e-02
2658 8 0.0000 170 66.826991211088 7.7250760635e-02
2659 8 0.0000 171 67.087507529923 1.0421924818e+00
2660 8 0.0000 172 67.562452483019 6.4512444045e-02
2661 8 0.0000 173 67.962293631056 6.3409069754e-02
2662 8 0.0000 174 68.358456052905 6.3149784690e-02
2663 8 0.0000 175 68.753806670281 6.2935682714e-02
2664 8 0.0000 176 69.148444351722 6.3051590596e-02
2665 8 0.0000 177 69.546214875248 1.0628166778e+00
2666 8 0.0000 178 69.938040839950 6.2880445256e-02
2667 8 0.0000 179 70.332989156494 6.2951909792e-02
2668 8 0.0000 180 70.729590002995 6.3624548482e-02
2669 8 0.0000 181 71.127396946298 6.3613684942e-02
2670 8 0.0000 182 71.530608846493 6.5733262150e-02
2671 8 0.0000 183 72.043290892265 8.9180503304e-01
2672 8 0.0000 184 72.178357980185 2.2262321622e-01
2673 8 0.0000 185 72.663064533288 6.5706379650e-02
2674 8 0.0000 186 73.067768304476 6.3898849498e-02
2675 8 0.0000 187 73.466503676416 6.3274473223e-02
2676 8 0.0000 188 73.863628289203 6.3319001600e-02
2677 8 0.0000 189 74.260081480901 6.3198919584e-02
2678 8 0.0000 190 74.657556893334 6.3924984018e-02
2679 8 0.0000 191 75.060215876481 6.4775119137e-02
2680 8 0.0000 192 75.502512288197 9.9351864195e-02
2681 8 0.0000 193 75.716229298747 1.0184595999e+00
2682 8 0.0000 194 76.211457255962 6.6124264358e-02
2683 8 0.0000 195 76.622260479410 6.6028342340e-02
2684 8 0.0000 196 77.128393781051 9.7552685015e-01
2685 8 0.0000 197 77.300052997536 1.4078595947e-01
2686 8 0.0000 198 77.764029155436 6.5211718145e-02
2687 8 0.0000 199 78.166940795828 6.3752768529e-02
2688 8 0.0000 200 78.565426371586 6.3266567705e-02
2689 8 0.0000 201 78.960747478068 6.3415487415e-02
2690 8 0.0000 202 79.338456475765 1.0625121929e+00
2691 8 0.0000 203 79.749568550326 6.2964214770e-02
2692 8 0.0000 204 80.143301454590 6.2918236484e-02
2693 8 0.0000 205 80.537129584613 6.3280526054e-02
2694 8 0.0000 206 80.932398522226 6.2928807853e-02
2695 8 0.0000 207 81.326368249156 6.3380821215e-02
2696 8 0.0000 208 81.721184108842 6.2777912743e-02
2697 8 0.0000 209 82.115419380260 6.2931268335e-02
2698 8 0.0000 210 82.511217118799 6.3218535636e-02
2699 8 0.0000 211 82.909984278849 1.0630594255e+00
2700 8 0.0000 212 83.299544020912 6.3198542870e-02
2701 8 0.0000 213 83.696349849177 6.3683683873e-02
2702 8 0.0000 214 84.097672204685 6.5380018063e-02
2703 8 0.0000 215 84.543170682719 1.0464861611e-01
2704 8 0.0000 216 84.747692619445 1.0123536467e+00
2705 8 0.0000 217 85.242645282714 6.5222533093e-02
2706 8 0.0000 218 85.645701311010 6.3763277594e-02
2707 8 0.0000 219 86.044057841133 6.3647403774e-02
2708 8 0.0000 220 86.444494618327 6.4590785066e-02
2709 8 0.0000 221 86.849138031598 6.5663995438e-02
2710 8 0.0000 222 87.355590930905 4.1485245407e-01
2711 8 0.0000 223 87.465016862696 6.9962971118e-01
2712 8 0.0000 224 87.979571149167 6.6425747251e-02
2713 8 0.0000 225 88.383817218108 6.4145825815e-02
2714 8 0.0000 226 88.807417593321 1.0623657737e+00
2715 8 0.0000 227 89.175524980632 6.3741858204e-02
2716 8 0.0000 228 89.572665990856 6.3186732868e-02
2717 8 0.0000 229 89.967043317071 6.3640716200e-02
2718 8 0.0000 230 90.363498480065 6.3388830324e-02
2719 8 0.0000 231 90.759550386667 6.3128586520e-02
2720 8 0.0000 232 91.156592351649 6.4038850386e-02
2721 8 0.0000 233 91.552654069066 6.3905155629e-02
2722 8 0.0000 234 91.956336879863 6.5438833243e-02
2723 8 0.0000 235 92.468092165496 8.9321771441e-01
2724 8 0.0000 236 92.604175171282 2.2224724940e-01
2725 8 0.0000 237 93.088809378944 6.5624007997e-02
2726 8 0.0000 238 93.492075323287 6.3733396312e-02
2727 8 0.0000 239 93.891836865935 6.3873772821e-02
2728 8 0.0000 240 94.289189746114 6.3411777126e-02
2729 8 0.0000 241 94.652997244882 1.0625394606e+00
2730 8 0.0000 242 95.073284662859 6.3307710344e-02
2731 8 0.0000 243 95.470309345480 6.3992061869e-02
2732 8 0.0000 244 95.870174277090 1.0631204700e+00
2733 8 0.0000 245 96.256883242118 6.3120818932e-02
2734 8 0.0000 246 96.652550717630 6.3214710691e-02
2735 8 0.0000 247 97.047772971898 6.2932379729e-02
2736 8 0.0000 248 97.443885551861 6.4622697060e-02
2737 8 0.0000 249 97.842279704812 6.3587813753e-02
2738 8 0.0000 250 98.246099035881 6.5937220829e-02
2739 8 0.0000 251 98.739790312066 2.9570757477e-01
2740 8 0.0000 252 98.861052025449 8.1969582579e-01
2741 8 0.0000 253 99.377538385594 6.5808153150e-02
2742 8 0.0000 254 99.782572237623 6.4615526954e-02
2743 8 0.0000 255 100.178420398892 6.4327131621e-02
2744 8 0.0000 256 100.572038352918 6.4308616145e-02
2745 8 0.0000 257 100.972769484990 6.4283826890e-02
2746 8 0.0000 258 101.320528477375 1.0602583661e+00
2747 8 0.0000 259 101.752813796483 6.3579847765e-02
2748 8 0.0000 260 102.147714831062 6.3193886358e-02
2749 8 0.0000 261 102.543005255576 6.3245854305e-02
2750 8 0.0000 262 102.939349651314 6.3372497547e-02
2751 8 0.0000 263 103.331200698473 6.4405534867e-02
2752 8 0.0000 264 103.725668731299 1.0631289346e+00
2753 8 0.0000 265 104.124908084113 6.3928493236e-02
2754 8 0.0000 266 104.519927788933 6.5000584916e-02
2755 8 0.0000 267 104.924553809952 6.5613597035e-02
2756 8 0.0000 268 105.429986340795 9.7323323379e-01
2757 8 0.0000 269 105.600102764839 1.4325602335e-01
2758 8 0.0000 270 106.062760182848 6.6589727103e-02
2759 8 0.0000 271 106.471305495489 6.5153349277e-02
2760 8 0.0000 272 106.882095130260 7.2655517890e-02
2761 8 0.0000 273 107.174640109574 1.0509774536e+00
2762 8 0.0000 274 107.638793741433 6.4792696722e-02
2763 8 0.0000 275 108.040260585910 6.4317078475e-02
2764 8 0.0000 276 108.432005817433 6.4024219442e-02
2765 8 0.0000 277 108.830516530727 6.3890728308e-02
2766 8 0.0000 278 109.226193329016 6.3018540924e-02
2767 8 0.0000 279 109.622743744571 6.3622074958e-02
2768 8 0.0000 280 110.023211773548 6.5820970925e-02
2769 8 0.0000 281 110.424690047623 6.6581286343e-02
2770 8 0.0000 282 110.904565593945 1.9680340286e-01
2771 8 0.0000 283 111.051461716670 9.2093391308e-01
2772 8 0.0000 284 111.578392529536 7.3194422091e-02
2773 8 0.0000 285 111.880517676814 1.0526748335e+00
2774 8 0.0000 286 112.345694454363 6.4953434841e-02
2775 8 0.0000 287 112.748019417438 6.5294174220e-02
2776 8 0.0000 288 113.142737269115 6.4016976338e-02
2777 8 0.0000 289 113.537151619978 6.3261309200e-02
2778 8 0.0000 290 113.932486734451 6.3365023940e-02
2779 8 0.0000 291 114.320674901243 1.0630878949e+00
2780 8 0.0000 292 114.720531345038 6.5622480957e-02
2781 8 0.0000 293 115.117968444872 6.3139874154e-02
2782 8 0.0000 294 115.517025575531 6.5736933027e-02
2783 8 0.0000 295 115.915706338923 6.8148329731e-02
2784 8 0.0000 296 116.231271048120 1.0558667289e+00
2785 8 0.0000 297 116.685377452226 6.6480589503e-02
2786 8 0.0000 298 117.080620823894 6.4495368650e-02
2787 8 0.0000 299 117.479850684119 6.3466274555e-02
2788 8 0.0000 300 117.878755224253 6.5402258777e-02
2789 8 0.0000 301 118.276026869098 6.7151775976e-02
2790 8 0.0000 302 118.776559673622 9.9529342752e-01
2791 8 0.0000 303 118.963414977132 1.2135103925e-01
2792 8 0.0000 304 119.421480007068 6.8438039166e-02
2793 8 0.0000 305 119.819776843253 6.4637052125e-02
2794 8 0.0000 306 120.216746677452 6.3476157777e-02
2795 8 0.0000 307 120.613072002142 6.3412398117e-02
2796 8 0.0000 308 121.011411348508 6.4302206667e-02
2797 8 0.0000 309 121.372203401469 1.0614748431e+00
2798 8 0.0000 310 121.797290992191 6.6656510566e-02
2799 8 0.0000 311 122.192865526596 6.4181817321e-02
2800 8 0.0000 312 122.588227705988 6.4368829126e-02
2801 8 0.0000 313 122.948712491090 1.0656082352e+00
2802 8 0.0000 314 123.373590940759 6.3760197356e-02
2803 8 0.0000 315 123.777209522210 6.8652268202e-02
2804 8 0.0000 316 124.249235646938 1.0429654320e+00
2805 8 0.0000 317 124.513721249342 7.8287659067e-02
2806 8 0.0000 318 124.933525119516 6.4079207937e-02
2807 8 0.0000 319 125.332003640696 6.4167018311e-02
2808 8 0.0000 320 125.732809850249 6.3991213765e-02
2809 8 0.0000 321 126.122780678880 6.8046495460e-02
2810 8 0.0000 322 126.531874935386 6.6457064762e-02
2811 8 0.0000 323 126.926143611325 6.7338005087e-02
2812 8 0.0000 324 127.426613334015 3.0284555052e-01
2813 8 0.0000 325 127.547293255251 8.1318377773e-01
2814 8 0.0000 326 128.060856616609 7.0494284195e-02
2815 8 0.0000 327 128.469724849805 6.5386234941e-02
2816 8 0.0000 328 128.873253956688 6.4879496649e-02
2817 8 0.0000 329 129.286172010524 7.0964372583e-02
2818 8 0.0000 330 129.584858808516 1.0560303659e+00
2819 8 0.0000 331 130.041594295292 6.6037387093e-02
2820 8 0.0000 332 130.452468524378 6.6774139658e-02
2821 8 0.0000 333 130.904200668290 1.1336842633e-01
2822 8 0.0000 334 131.101056016083 1.0048720930e+00
2823 8 0.0000 335 131.601032870877 6.6397437701e-02
2824 8 0.0000 336 131.995695383142 6.8951945759e-02
2825 8 0.0000 337 132.401493528933 6.4306646093e-02
2826 8 0.0000 338 132.805360664703 6.7183941712e-02
2827 8 0.0000 339 133.205475632635 7.2343337609e-02
2828 8 0.0000 340 133.503512243087 1.0519352263e+00
2829 8 0.0000 341 133.965480769859 6.5004058929e-02
2830 8 0.0000 342 134.365373972450 7.0164641160e-02
2831 8 0.0000 343 134.756895967831 1.0647128619e+00
2832 8 0.0000 344 135.149922983375 6.8230761521e-02
2833 8 0.0000 345 135.549418676278 6.3792041049e-02
2834 8 0.0000 346 135.946823544079 6.4795991985e-02
2835 8 0.0000 347 136.344132395117 6.4002321000e-02
2836 8 0.0000 348 136.746967814707 6.6850363285e-02
2837 8 0.0000 349 137.132017042414 6.6721881269e-02
2838 8 0.0000 350 137.543202199445 6.6994845058e-02
2839 8 0.0000 351 138.052256766510 4.6746748650e-01
2840 8 0.0000 352 138.160745119012 6.4874179671e-01
2841 8 0.0000 353 138.678880038101 7.4141438983e-02
2842 8 0.0000 354 139.091823620831 6.6919593315e-02
2843 8 0.0000 355 139.548053176019 1.1417164110e-01
2844 8 0.0000 356 139.750619377221 1.0107190507e+00
2845 8 0.0000 357 140.239618686599 6.7302090285e-02
2846 8 0.0000 358 140.650984091694 6.5888713163e-02
2847 8 0.0000 359 141.117942039354 1.0530026454e+00
2848 8 0.0000 360 141.415469338010 7.1835633209e-02
2849 8 0.0000 361 141.821268155921 7.1650293578e-02
2850 8 0.0000 362 142.228128063507 6.5193798255e-02
2851 8 0.0000 363 142.639266476199 7.1085282924e-02
2852 8 0.0000 364 143.103371114652 1.0431360569e+00
2853 8 0.0000 365 143.362169814889 7.9989375230e-02
2854 8 0.0000 366 143.786630034362 6.5555228239e-02
2855 8 0.0000 367 144.191527808055 6.5589824243e-02
2856 8 0.0000 368 144.578851923116 7.1744979239e-02
2857 8 0.0000 369 144.984441802827 6.4277179540e-02
2858 8 0.0000 370 145.395348951690 7.4012137360e-02
2859 8 0.0000 371 145.859758953007 1.6522936418e-01
2860 8 0.0000 372 146.019958114277 9.5434849663e-01
2861 8 0.0000 373 146.528993159072 7.5478846331e-02
2862 8 0.0000 374 146.936874445876 6.6349592404e-02
2863 8 0.0000 375 147.415520314583 1.0468842327e+00
2864 8 0.0000 376 147.686080311974 7.6905503508e-02
2865 8 0.0000 377 148.106694573754 6.5417159220e-02
2866 8 0.0000 378 148.506262786334 6.3700316413e-02
2867 8 0.0000 379 148.905387110768 6.6284142523e-02
2868 8 0.0000 380 149.310311507432 7.2634968373e-02
2869 8 0.0000 381 149.700316195228 6.6354159856e-02
2870 8 0.0000 382 150.056673304630 1.0667159049e+00
2871 8 0.0000 383 150.472821624735 6.7863504542e-02
2872 8 0.0000 384 150.921747876595 1.0619292450e+00
2873 8 0.0000 385 151.263010988529 6.7502541259e-02
2874 8 0.0000 386 151.651259291200 7.3015353272e-02
2875 8 0.0000 387 152.060951079543 6.6400246768e-02
2876 8 0.0000 388 152.474547501125 7.0199845264e-02
2877 8 0.0000 389 152.969394657978 5.7011292079e-01
2878 8 0.0000 390 153.080121238941 5.5235725065e-01
2879 8 0.0000 391 153.597880844740 6.7237286821e-02
2880 8 0.0000 392 154.003238077242 6.7171786473e-02
2881 8 0.0000 393 154.412911356160 7.5283974275e-02
2882 8 0.0000 394 154.796672146451 6.5635628688e-02
2883 8 0.0000 395 155.202954930353 6.5893143807e-02
2884 8 0.0000 396 155.591570704990 7.6356453894e-02
2885 8 0.0000 397 156.099313582771 1.0080600868e+00
2886 8 0.0000 398 156.297693926292 1.1279911947e-01
2887 8 0.0000 399 156.749936167423 6.6747597290e-02
2888 8 0.0000 400 157.158568069124 6.6116162801e-02
2889 8 0.0000 401 157.593701225039 1.0738489202e+00
2890 8 0.0000 402 157.939534554880 6.8085699008e-02
2891 8 0.0000 403 158.347054509412 6.7432139096e-02
2892 8 0.0000 404 158.837915841778 1.0336342712e+00
2893 8 0.0000 405 159.059603318669 1.0119955121e-01
2894 8 0.0000 406 159.500086125348 6.5768079850e-02
2895 8 0.0000 407 159.903663072603 6.5483194127e-02
2896 8 0.0000 408 160.309164473324 6.6358519987e-02
2897 8 0.0000 409 160.724587191983 7.3808923284e-02
2898 8 0.0000 410 161.179250673597 1.0405491603e+00
2899 8 0.0000 411 161.432613274035 8.6919548034e-02
2900 8 0.0000 412 161.838138864814 7.8915955296e-02
2901 8 0.0000 413 162.254549950306 6.6197955822e-02
2902 8 0.0000 414 162.650788245443 8.1009663657e-02
2903 8 0.0000 415 163.031829405408 1.0637883767e+00
2904 8 0.0000 416 163.442710998232 6.4864149811e-02
2905 8 0.0000 417 163.843825538324 6.5200247687e-02
2906 8 0.0000 418 164.240987410655 8.1128442971e-02
2907 8 0.0000 419 164.635695701790 6.7264744307e-02
2908 8 0.0000 420 165.039708451820 6.6544320058e-02
2909 8 0.0000 421 165.527134849829 1.0329095929e+00
2910 8 0.0000 422 165.766273547213 8.9848794004e-02
2911 8 0.0000 423 166.209158497892 8.4783488374e-02
2912 8 0.0000 424 166.611458323052 6.8411969340e-02
2913 8 0.0000 425 167.128101140043 5.3657763498e-01
2914 8 0.0000 426 167.236198820081 5.8313915752e-01
2915 8 0.0000 427 167.758730696170 6.9460227497e-02
2916 8 0.0000 428 168.181897638413 8.3653065066e-02
2917 8 0.0000 429 168.591353891254 7.5556045908e-02
2918 8 0.0000 430 169.073277335721 9.6742865430e-01
2919 8 0.0000 431 169.249144813317 1.6604618390e-01
2920 8 0.0000 432 169.844455850472 4.6660117864e-01
2921 8 0.0000 433 169.958442247702 6.5562556080e-01
2922 8 0.0000 434 170.465057981970 8.7296108231e-02
2923 8 0.0000 435 170.883583957227 6.6845205407e-02
2924 8 0.0000 436 171.290361277962 6.7757918511e-02
2925 8 0.0000 437 171.691219122482 6.6602808252e-02
2926 8 0.0000 438 172.066095313005 8.2825177663e-02
2927 8 0.0000 439 172.481386803643 6.6468490015e-02
2928 8 0.0000 440 172.889206156884 6.7602232788e-02
2929 8 0.0000 441 173.392372965531 9.9132660246e-01
2930 8 0.0000 442 173.565401860691 1.5247457652e-01
2931 8 0.0000 443 174.037540629786 7.0086936563e-02
2932 8 0.0000 444 174.420325389277 8.9852693762e-02
2933 8 0.0000 445 174.759059529145 1.0588093159e+00
2934 8 0.0000 446 175.209662022007 6.7171240515e-02
2935 8 0.0000 447 175.613237601226 6.6030020968e-02
2936 8 0.0000 448 176.012073873711 6.5263339378e-02
2937 8 0.0000 449 176.439443113674 1.0666605209e+00
2938 8 0.0000 450 176.821440046441 8.4361891542e-02
2939 8 0.0000 451 177.185567410035 6.9091653324e-02
2940 8 0.0000 452 177.591123784853 6.7994582441e-02
2941 8 0.0000 453 178.003630312138 7.5295998277e-02
2942 8 0.0000 454 178.375425389211 1.0757903395e+00
2943 8 0.0000 455 178.760756227818 6.6375694391e-02
2944 8 0.0000 456 179.166115557297 9.1512251069e-02
2945 8 0.0000 457 179.564733849452 6.6174437351e-02
2946 8 0.0000 458 179.918808520087 1.0659958326e+00
2947 8 0.0000 459 180.353669178948 6.7015707143e-02
2948 8 0.0000 460 180.773970370191 8.7346015237e-02
2949 8 0.0000 461 181.130717648028 7.1726300170e-02
2950 8 0.0000 462 181.516106398901 9.2355039547e-02
2951 8 0.0000 463 181.952178579687 8.4279064057e-02
2952 8 0.0000 464 182.215491785737 1.0430254718e+00
2953 8 0.0000 465 182.699298635332 6.8986302055e-02
2954 8 0.0000 466 183.098271462941 6.7848732871e-02
2955 8 0.0000 467 183.499788131878 6.6348600433e-02
2956 8 0.0000 468 183.926612314845 9.3482687364e-02
2957 8 0.0000 469 184.305031926163 7.2761026318e-02
2958 8 0.0000 470 184.828364462887 6.6924110385e-01
2959 8 0.0000 471 184.945958167703 4.5660628911e-01
2960 8 0.0000 472 185.559504572088 8.2994054341e-01
2961 8 0.0000 473 185.696452966911 3.2397380038e-01
2962 8 0.0000 474 186.210183103152 7.1501208102e-02
2963 8 0.0000 475 186.632008858279 1.0429794454e-01
2964 8 0.0000 476 187.132894663765 2.8929030198e-01
2965 8 0.0000 477 187.259441226207 8.3122292001e-01
2966 8 0.0000 478 187.784587829696 6.9600728450e-02
2967 8 0.0000 479 188.211820444597 7.9654263503e-02
2968 8 0.0000 480 188.548504973600 8.6743900600e-02
2969 8 0.0000 481 188.974329086287 6.7751354143e-02
2970 8 0.0000 482 189.413154676031 1.0658369161e+00
2971 8 0.0000 483 189.745295894493 1.0121676553e-01
2972 8 0.0000 484 190.162358271845 6.9857566712e-02
2973 8 0.0000 485 190.590365163053 8.7207171037e-02
2974 8 0.0000 486 190.928198527578 8.1388422153e-02
2975 8 0.0000 487 191.349825121470 6.9331785219e-02
2976 8 0.0000 488 191.797736786004 9.9935710841e-02
2977 8 0.0000 489 192.040946340359 1.0611076422e+00
2978 8 0.0000 490 192.512926532611 7.6698959668e-02
2979 8 0.0000 491 193.045057313820 7.8532831084e-01
2980 8 0.0000 492 193.167830869088 3.3795912857e-01
2981 8 0.0000 493 193.667297079403 7.2123567236e-02
2982 8 0.0000 494 194.073576898382 7.0212364400e-02
2983 8 0.0000 495 194.456485054233 1.0474789758e-01
2984 8 0.0000 496 194.868522351750 6.7560943547e-02
2985 8 0.0000 497 195.265466125616 1.0671910886e+00
2986 8 0.0000 498 195.665459901455 6.7431179613e-02
2987 8 0.0000 499 196.097442051836 1.0318384045e-01
2988 8 0.0000 500 196.441535575443 7.4783687363e-02
2989 8 0.0000 501 196.876483373378 1.0890668551e+00
2990 8 0.0000 502 197.197462707188 8.3125913607e-02
2991 8 0.0000 503 197.624222503628 7.2176902767e-02
2992 8 0.0000 504 198.014662777635 1.1109515959e+00
2993 8 0.0000 505 198.417105426600 6.8082125491e-02
2994 8 0.0000 506 198.811441150582 6.9882463313e-02
2995 8 0.0000 507 199.216491322464 6.6248589960e-02
2996 8 0.0000 508 199.614038386086 7.0237221514e-02
2997 8 0.0000 509 200.044256993241 9.4312679796e-02
2998 8 0.0000 510 200.361404146516 8.7234412869e-02
2999 8 0.0000 511 200.808615119880 7.5948295999e-02
3000 8 0.0000 512 201.249835550619 1.0753962395e+00
3001 8 0.0000 513 201.512096852270 9.7589770042e-02

E-024-theta-sweep.json — 10.3 KB, updated 08-19-2026

JSON sidecar (click to expand)
{
  "experiment": "E-024",
  "task": "2.12: theta-flow numerics (theta-independence test)",
  "script": "research/numerics/scripts/E-024-theta-sweep.py",
  "parameters": {
    "a_list": [
      4.0,
      8.0,
      12.0
    ],
    "thetas_over_pi": [
      0.0,
      0.1667,
      0.3333,
      0.5,
      0.6667,
      0.8333,
      1.0
    ],
    "z_max": 300.0,
    "z_metric": 280.0
  },
  "checks": {
    "V1_lattice_all_theta": true,
    "V2_theta_pi_matches_E022": true,
    "V3_weights_positive": true
  },
  "key_values": {
    "a4_th0.0000pi": {
      "theta_over_pi": 0.0,
      "n_zeros": 381,
      "z1_times_a": 3.1471258584711514,
      "mass_total": 184.1835959613851,
      "mass_pm0.1": 119.4128093530634,
      "mass_pm0.05": 91.94966918355006,
      "residual": 48.76433809073876,
      "valley_mass_mean": 1.0747560148463995,
      "plateau_weight_mean": 0.21201886126408157,
      "Delta_eff": 1.6231737129268227
    },
    "a4_th0.1667pi": {
      "theta_over_pi": 0.1667,
      "n_zeros": 381,
      "z1_times_a": 3.4619359298190293,
      "mass_total": 184.18630284387328,
      "mass_pm0.1": 118.29623992508816,
      "mass_pm0.05": 86.87180322997308,
      "residual": 48.931287590873524,
      "valley_mass_mean": 1.0734525020079346,
      "plateau_weight_mean": 0.2127447286559719,
      "Delta_eff": 1.6185423804514978
    },
    "a4_th0.3333pi": {
      "theta_over_pi": 0.3333,
      "n_zeros": 381,
      "z1_times_a": 3.7176915045337466,
      "mass_total": 183.9726782811009,
      "mass_pm0.1": 113.57262540386267,
      "mass_pm0.05": 85.73049725879235,
      "residual": 50.41888852750091,
      "valley_mass_mean": 1.0599507123301588,
      "plateau_weight_mean": 0.22016981889738385,
      "Delta_eff": 1.5715785355566734
    },
    "a4_th0.5000pi": {
      "theta_over_pi": 0.5,
      "n_zeros": 381,
      "z1_times_a": 3.934163190177167,
      "mass_total": 183.98559583483848,
      "mass_pm0.1": 113.33711825061624,
      "mass_pm0.05": 89.82793793217617,
      "residual": 50.618934373720066,
      "valley_mass_mean": 1.0584655671517333,
      "plateau_weight_mean": 0.22104338154462916,
      "Delta_eff": 1.566216581357752
    },
    "a4_th0.6667pi": {
      "theta_over_pi": 0.6667,
      "n_zeros": 381,
      "z1_times_a": 4.128324562896003,
      "mass_total": 183.9983973653932,
      "mass_pm0.1": 119.75726561744686,
      "mass_pm0.05": 95.81754097212591,
      "residual": 48.13040632212352,
      "valley_mass_mean": 1.078317389232299,
      "plateau_weight_mean": 0.21017644682150013,
      "Delta_eff": 1.6352097313960756
    },
    "a4_th0.8333pi": {
      "theta_over_pi": 0.8333,
      "n_zeros": 381,
      "z1_times_a": 4.314182529701571,
      "mass_total": 184.01134904950752,
      "mass_pm0.1": 120.40026511109403,
      "mass_pm0.05": 90.96419878254113,
      "residual": 47.43102136203055,
      "valley_mass_mean": 1.0839708546625155,
      "plateau_weight_mean": 0.20712236402633416,
      "Delta_eff": 1.6550765456169134
    },
    "a4_th1.0000pi": {
      "theta_over_pi": 1.0,
      "n_zeros": 381,
      "z1_times_a": 4.504293602793437,
      "mass_total": 184.02432245308052,
      "mass_pm0.1": 116.64777135239572,
      "mass_pm0.05": 93.33647263205195,
      "residual": 48.30754760742576,
      "valley_mass_mean": 1.0771172606797996,
      "plateau_weight_mean": 0.2109499895520775,
      "Delta_eff": 1.6304224593273315
    },
    "a8_th0.0000pi": {
      "theta_over_pi": 0.0,
      "n_zeros": 763,
      "z1_times_a": 3.1437903681267265,
      "mass_total": 184.1082994928043,
      "mass_pm0.1": 134.20929653000076,
      "mass_pm0.05": 123.1835197830814,
      "residual": 57.73718018875971,
      "valley_mass_mean": 1.002945391301941,
      "plateau_weight_mean": 0.09852761124361722,
      "Delta_eff": 2.320359515027157
    },
    "a8_th0.1667pi": {
      "theta_over_pi": 0.1667,
      "n_zeros": 763,
      "z1_times_a": 3.418119179475546,
      "mass_total": 184.11283914170593,
      "mass_pm0.1": 131.8317519020843,
      "mass_pm0.05": 126.78097971430489,
      "residual": 56.7356526846647,
      "valley_mass_mean": 1.010930051246359,
      "plateau_weight_mean": 0.09681851993970085,
      "Delta_eff": 2.3457877312638367
    },
    "a8_th0.3333pi": {
      "theta_over_pi": 0.3333,
      "n_zeros": 763,
      "z1_times_a": 3.654042277120252,
      "mass_total": 184.11760264338506,
      "mass_pm0.1": 132.1490251381983,
      "mass_pm0.05": 124.0292094105938,
      "residual": 58.16107071439245,
      "valley_mass_mean": 0.9996550153094651,
      "plateau_weight_mean": 0.09925097391534557,
      "Delta_eff": 2.3097585025024654
    },
    "a8_th0.5000pi": {
      "theta_over_pi": 0.5,
      "n_zeros": 763,
      "z1_times_a": 3.867441949623103,
      "mass_total": 184.12212186389277,
      "mass_pm0.1": 133.24139728241443,
      "mass_pm0.05": 121.15410070178395,
      "residual": 59.85047462666191,
      "valley_mass_mean": 0.9862829145811973,
      "plateau_weight_mean": 0.10213391574515683,
      "Delta_eff": 2.26765839342186
    },
    "a8_th0.6667pi": {
      "theta_over_pi": 0.6667,
      "n_zeros": 763,
      "z1_times_a": 4.071478758632688,
      "mass_total": 184.1262503654809,
      "mass_pm0.1": 132.29513175105507,
      "mass_pm0.05": 122.51608044758039,
      "residual": 57.48114969555114,
      "valley_mass_mean": 1.0051198465867441,
      "plateau_weight_mean": 0.09809069913916582,
      "Delta_eff": 2.3269695116402334
    },
    "a8_th0.8333pi": {
      "theta_over_pi": 0.8333,
      "n_zeros": 763,
      "z1_times_a": 4.27766402464752,
      "mass_total": 184.12992169567084,
      "mass_pm0.1": 131.99007596810569,
      "mass_pm0.05": 124.30470833176733,
      "residual": 57.28031602287514,
      "valley_mass_mean": 1.0067429021650454,
      "plateau_weight_mean": 0.09774797956122035,
      "Delta_eff": 2.332083020259487
    },
    "a8_th1.0000pi": {
      "theta_over_pi": 1.0,
      "n_zeros": 763,
      "z1_times_a": 4.4968101024775144,
      "mass_total": 184.13312237431055,
      "mass_pm0.1": 133.51693635274228,
      "mass_pm0.05": 124.28962039506533,
      "residual": 58.6511497935264,
      "valley_mass_mean": 0.9958886712760646,
      "plateau_weight_mean": 0.10008728633707581,
      "Delta_eff": 2.297592806874823
    },
    "a12_th0.0000pi": {
      "theta_over_pi": 0.0,
      "n_zeros": 1145,
      "z1_times_a": 3.1428501414881977,
      "mass_total": 184.16007157245687,
      "mass_pm0.1": 133.61538092090012,
      "mass_pm0.05": 128.10759866335772,
      "residual": 60.30642315719122,
      "valley_mass_mean": 0.9829654636132195,
      "plateau_weight_mean": 0.06395166824728656,
      "Delta_eff": 2.732446371442262
    },
    "a12_th0.1667pi": {
      "theta_over_pi": 0.1667,
      "n_zeros": 1145,
      "z1_times_a": 3.405992501692748,
      "mass_total": 184.1639822094043,
      "mass_pm0.1": 133.36866840406773,
      "mass_pm0.05": 129.35521418242917,
      "residual": 60.3669918644722,
      "valley_mass_mean": 0.9825157963883501,
      "plateau_weight_mean": 0.06401589805352302,
      "Delta_eff": 2.73098496176509
    },
    "a12_th0.3333pi": {
      "theta_over_pi": 0.3333,
      "n_zeros": 1145,
      "z1_times_a": 3.635830555925344,
      "mass_total": 184.09580595481827,
      "mass_pm0.1": 133.41942035595872,
      "mass_pm0.05": 129.05415843419973,
      "residual": 58.57426551897014,
      "valley_mass_mean": 0.9962027018718106,
      "plateau_weight_mean": 0.06218074895856703,
      "Delta_eff": 2.7739053032480143
    },
    "a12_th0.5000pi": {
      "theta_over_pi": 0.5,
      "n_zeros": 1145,
      "z1_times_a": 3.8476946281889486,
      "mass_total": 184.09881987373944,
      "mass_pm0.1": 132.95788338488353,
      "mass_pm0.05": 129.3505890774291,
      "residual": 58.94147251618104,
      "valley_mass_mean": 0.9933122806155429,
      "plateau_weight_mean": 0.06257056530380153,
      "Delta_eff": 2.764750131884173
    },
    "a12_th0.6667pi": {
      "theta_over_pi": 0.6667,
      "n_zeros": 1145,
      "z1_times_a": 4.05423555082551,
      "mass_total": 184.10127816912785,
      "mass_pm0.1": 133.37160860447023,
      "mass_pm0.05": 129.68837121321633,
      "residual": 58.35802636312266,
      "valley_mass_mean": 0.9979623159206761,
      "plateau_weight_mean": 0.06195119571456758,
      "Delta_eff": 2.7793686068267633
    },
    "a12_th0.8333pi": {
      "theta_over_pi": 0.8333,
      "n_zeros": 1145,
      "z1_times_a": 4.2666373857585445,
      "mass_total": 184.1032513640804,
      "mass_pm0.1": 133.09565694496038,
      "mass_pm0.05": 129.3399679137547,
      "residual": 58.63289108937627,
      "valley_mass_mean": 0.9957965101166993,
      "plateau_weight_mean": 0.062242984171312424,
      "Delta_eff": 2.7724971046813764
    },
    "a12_th1.0000pi": {
      "theta_over_pi": 1.0,
      "n_zeros": 1145,
      "z1_times_a": 4.495304974166889,
      "mass_total": 184.10483484645468,
      "mass_pm0.1": 133.31147006007708,
      "mass_pm0.05": 129.13788187469896,
      "residual": 57.594257954705384,
      "valley_mass_mean": 1.004052197553566,
      "plateau_weight_mean": 0.06114040122580191,
      "Delta_eff": 2.7986264096434
    },
    "V4_theta_spread": {
      "a4": {
        "residual_minmax": [
          47.43102136203055,
          50.618934373720066
        ],
        "residual_spread_pct": 2.234095821084676,
        "mass_pm01_spread_pct": 2.302784187513983,
        "z1_times_a_range": [
          3.1471258584711514,
          4.504293602793437
        ]
      },
      "a8": {
        "residual_minmax": [
          56.7356526846647,
          59.85047462666191
        ],
        "residual_spread_pct": 1.6396401999266315,
        "mass_pm01_spread_pct": 0.6333372523281642,
        "z1_times_a_range": [
          3.1437903681267265,
          4.4968101024775144
        ]
      },
      "a12": {
        "residual_minmax": [
          57.594257954705384,
          60.3669918644722
        ],
        "residual_spread_pct": 1.6057262581418954,
        "mass_pm01_spread_pct": 0.15063835179687926,
        "z1_times_a_range": [
          3.1428501414881977,
          4.495304974166889
        ]
      }
    }
  },
  "elapsed_seconds": 212.6,
  "timestamp_utc": "2026-08-19T18:19:09.910473+00:00"
}

Source code

Python script (click to expand)
"""E-024 — task 2.12: theta-flow numerics (D-041 §5/§8, D-038 §5).

Theory (de Branges/Clark): the model space's kernel K_a(z,z) is
theta-INDEPENDENT; the extension choice theta only phase-shifts the
atom lattice z_k(theta). PREDICTION (to be tested): consolidation
statistics (valley-captured mass, residual) are theta-independent —
if confirmed, no theta(a) flow can fix consolidation and the
obstruction is entirely the K-saturation (D-040 F6); if refuted,
the theta-flow channel is alive.

For theta in {0, pi/6, pi/3, pi/2, 2pi/3, 5pi/6, pi} and a in {4,8,12}:
  - zeros of W(a,theta;z) on (0, Z_MAX] via the real gauge
        g_theta(z) = Re[ e^{-i theta/2} (z - i) V_+(z) ]
    (e^{-i theta/2} W = 2 Re[e^{-i theta/2}(z-i)V_+] on the real line,
    using Vm = conj(Vp); reduces to z ImV - ReV at theta=pi);
  - Clark weights w_k = 1/K_a(z_k,z_k) (E-022 Schur-Toeplitz route);
  - metrics: n_zeros, z1*a, mass within +/-0.1 and +/-0.05 of true
    gammas, residual R(a,theta) = total - captured, mean valley mass,
    effective depth Delta_eff = log(mean valley weight / mean plateau
    weight).

Checks:
  V1. all zeros real & count = maximal lattice a*Z_MAX/pi +/- 2,
      every theta (self-adjointness).
  V2. theta=pi reproduces E-022: |z1*a - 4.4953| < 0.05 at a=12 and
      mass(+/-0.1) within 1% of E-022 value.
  V3. weights positive, all theta.
  V4. headline: theta-spread of residual R and mass(+/-0.1) reported
      per a (small spread = theta-independence confirmed).

Outputs: research/numerics/data/E-024-theta-sweep.csv (+ .json)
"""
import importlib.util
import json
import sys
import time
from datetime import datetime, timezone
from pathlib import Path

import mpmath as mp
import numpy as np
import scipy.linalg
import scipy.optimize

REPO = Path(__file__).resolve().parents[3]
DATA = REPO / "research" / "numerics" / "data"
CSV = DATA / "E-024-theta-sweep.csv"
JSON = DATA / "E-024-theta-sweep.json"

_spec = importlib.util.spec_from_file_location(
    "E16", Path(__file__).with_name("E-016-herglotz-fine-structure.py"))
E16 = importlib.util.module_from_spec(_spec)
_spec.loader.exec_module(E16)                     # runs the e^20 sieve
sys.path.insert(0, str(Path(__file__).parent))
from prime_backend_v2 import PrimeBackendV2       # noqa: E402

H = E16.H_MAIN
LAM = E16.LAM_SHIFT
A_LIST = [4.0, 8.0, 12.0]
THETAS = [0.0, np.pi / 6, np.pi / 3, np.pi / 2, 2 * np.pi / 3,
          5 * np.pi / 6, np.pi]
Z_MAX = 300.0
Z_METRIC = 280.0
N_GRID = 40000
XN = E16.XN
mp.mp.dps = 40


def collect_t_points(a, h):
    n_elem = int(round(2 * a / h))
    pts = []

    def add_quad(lo, hi, peak):
        n_lo = int(np.ceil(np.exp(lo)))
        n_hi = int(np.floor(np.exp(hi)))
        if n_hi - n_lo > 64:
            for aa, bb in ((lo, peak), (peak, hi)):
                if bb - aa > 0:
                    mid, half = 0.5 * (aa + bb), 0.5 * (bb - aa)
                    pts.extend(mid + half * XN)
            return
        segs = sorted({lo, peak, hi} |
                      {float(np.log(n))
                       for n in range(max(n_lo, 2), n_hi + 1)
                       if lo < np.log(n) < hi})
        for p0, p1 in zip(segs, segs[1:]):
            if p1 - p0 > 0:
                mid, half = 0.5 * (p0 + p1), 0.5 * (p1 - p0)
                pts.extend(mid + half * XN)

    for k in range(n_elem):
        if k == 0:
            add_quad(0.0, h, 0.0)
        else:
            add_quad((k - 1) * h, (k + 1) * h, k * h)
    return np.array(pts)


def locate_zeros_theta(cp, x, h, theta, z_max=Z_MAX, n_grid=N_GRID):
    zg = np.linspace(1e-3, z_max, n_grid)
    E = np.exp(1j * np.outer(zg, x))
    V = E16.hat_FT(zg, h) * (E @ cp)
    f = np.exp(-0.5j * theta) * (zg - 1j) * V
    g = f.real

    def g_direct(zz):
        V1 = E16.hat_FT(np.array([zz]), h)[0] * complex(
            np.exp(1j * zz * x) @ cp)
        return float(np.real(np.exp(-0.5j * theta) * (zz - 1j) * V1))

    idx = np.flatnonzero(np.sign(g[:-1]) * np.sign(g[1:]) < 0)
    zeros = []
    for i in idx:
        try:
            zeros.append(scipy.optimize.brentq(g_direct, zg[i], zg[i + 1],
                                               xtol=1e-13, rtol=1e-13))
        except ValueError:
            pass
    return np.array(zeros)


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

    print("backend: load E-022 cache ...", flush=True)
    tq = np.concatenate([collect_t_points(a, H) for a in A_LIST])
    be = PrimeBackendV2(tq)
    be.load_cache(DATA / "E-022-backend-cache.npz")
    E16._BUILD.clear()
    E16.prime_sum_vec = be.prime_sum

    mp.mp.dps = 30
    gam = np.array([float(mp.zetazero(k).imag) for k in range(1, 201)])
    gam = gam[gam <= Z_METRIC]

    rows = []
    report = {"per_a_theta": {}}
    v1_ok = v3_ok = True
    v2 = {}
    for a in A_LIST:
        ta = time.time()
        x, h, Q, M, b = E16.build(a, H)
        n = len(x)
        cp, _ = E16.solve_v(Q, M, b[+1.0], LAM, n)
        # Toeplitz bordered solver for weights (theta-independent K)
        mc = np.zeros(n)
        mc[0] = 2 * h / 3
        mc[1] = h / 6
        tc = Q[:, 0] - LAM * mc
        u1 = scipy.linalg.solve_toeplitz((tc, tc), np.ones(n))
        s1 = u1.sum()

        def K1(z):
            bz = E16.hat_FT(np.array([z]), h)[0] * np.exp(-1j * z * x)
            u0 = scipy.linalg.solve_toeplitz((tc, tc), bz)
            v = u0 - (u0.sum() / s1) * u1
            return float(np.real(np.conj(bz) @ v))

        for th in THETAS:
            zeros = locate_zeros_theta(cp, x, h, th)
            lat = a * Z_MAX / np.pi
            if abs(len(zeros) - lat) > 2:
                v1_ok = False
            zm = zeros[zeros <= Z_METRIC]
            ws = np.array([1.0 / K1(z) for z in zm])
            if np.any(ws <= 0):
                v3_ok = False
            tot = float(ws.sum())
            idx = np.clip(np.searchsorted(gam, zm), 1, len(gam) - 1)
            d = np.minimum(np.abs(zm - gam[idx - 1]),
                           np.abs(zm - gam[idx]))
            m01 = float(ws[d <= 0.1].sum())
            m005 = float(ws[d <= 0.05].sum())
            # valley atoms = nearest to each gamma; plateau = rest
            near_idx = np.array([np.argmin(np.abs(zm - g)) for g in gam])
            valley_mass = ws[near_idx]
            mask_pl = np.ones(len(zm), bool)
            mask_pl[near_idx] = False
            pl = ws[mask_pl]
            d_eff = float(np.log(valley_mass.mean() / pl.mean()))
            key = f"a{a:g}_th{th / np.pi:.4f}pi"
            report["per_a_theta"][key] = {
                "theta_over_pi": round(th / np.pi, 4),
                "n_zeros": int(len(zeros)),
                "z1_times_a": float(zeros[0] * a),
                "mass_total": tot,
                "mass_pm0.1": m01, "mass_pm0.05": m005,
                "residual": tot - float(valley_mass.sum()),
                "valley_mass_mean": float(valley_mass.mean()),
                "plateau_weight_mean": float(pl.mean()),
                "Delta_eff": d_eff,
            }
            for k, (zz, ww) in enumerate(zip(zm, ws), 1):
                rows.append((a, th / np.pi, k, zz, ww))
        print(f"a={a:g} done ({time.time() - ta:.0f}s)", flush=True)

    # V2: theta=pi cross-check vs E-022
    e022 = report["per_a_theta"]["a12_th1.0000pi"]
    v2 = {"z1_times_a_ok": bool(abs(e022["z1_times_a"] - 4.4953) < 0.05)}
    # V4: theta-spread per a
    v4 = {}
    for a in A_LIST:
        vals = [report["per_a_theta"][f"a{a:g}_th{th / np.pi:.4f}pi"]
                for th in THETAS]
        res = np.array([v["residual"] for v in vals])
        m01 = np.array([v["mass_pm0.1"] for v in vals])
        z1a = np.array([v["z1_times_a"] for v in vals])
        v4[f"a{a:g}"] = {
            "residual_minmax": [float(res.min()), float(res.max())],
            "residual_spread_pct": float(100 * res.std() / res.mean()),
            "mass_pm01_spread_pct": float(100 * m01.std() / m01.mean()),
            "z1_times_a_range": [float(z1a.min()), float(z1a.max())],
        }
        print(f"a={a:g}: residual spread {v4[f'a{a:g}']['residual_spread_pct']:.2f}%, "
              f"mass01 spread {v4[f'a{a:g}']['mass_pm01_spread_pct']:.2f}%, "
              f"z1a in [{z1a.min():.3f},{z1a.max():.3f}]", flush=True)

    checks = {"V1_lattice_all_theta": v1_ok,
              "V2_theta_pi_matches_E022": v2["z1_times_a_ok"],
              "V3_weights_positive": v3_ok}

    import csv as csvmod
    with open(CSV, "w", newline="") as f:
        w = csvmod.writer(f)
        w.writerow(["a", "theta_over_pi", "k", "z_k", "w_k"])
        for a, thp, k, zz, ww in rows:
            w.writerow([f"{a:g}", f"{thp:.4f}", k, f"{zz:.12f}",
                        f"{ww:.10e}"])

    meta = {
        "experiment": "E-024",
        "task": "2.12: theta-flow numerics (theta-independence test)",
        "script": "research/numerics/scripts/E-024-theta-sweep.py",
        "parameters": {"a_list": A_LIST,
                       "thetas_over_pi": [round(t / np.pi, 4)
                                          for t in THETAS],
                       "z_max": Z_MAX, "z_metric": Z_METRIC},
        "checks": checks,
        "key_values": {**report["per_a_theta"], "V4_theta_spread": v4},
        "elapsed_seconds": round(time.time() - t0, 1),
        "timestamp_utc": datetime.now(timezone.utc).isoformat(),
    }
    JSON.write_text(json.dumps(meta, indent=2))
    print(f"wrote {CSV.name}, {JSON.name}; elapsed "
          f"{meta['elapsed_seconds']}s", flush=True)
    return 0 if all(checks.values()) else 1


if __name__ == "__main__":
    sys.exit(main())