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 21 of 30 · 500/page · 14949 rows next →
# atheta_over_pikz_kw_k
10002 12 0.3333 392 102.704171914641 4.1825612689e-02
10003 12 0.3333 393 102.967685435956 4.2258198511e-02
10004 12 0.3333 394 103.230764660079 4.3705341431e-02
10005 12 0.3333 395 103.495720692174 4.2840155625e-02
10006 12 0.3333 396 103.726752587148 1.0401403505e+00
10007 12 0.3333 397 104.016113827741 4.2569726592e-02
10008 12 0.3333 398 104.280682204924 4.2952446406e-02
10009 12 0.3333 399 104.541688371197 4.2946237182e-02
10010 12 0.3333 400 104.808395510084 4.2727550393e-02
10011 12 0.3333 401 105.077697158964 4.3703284483e-02
10012 12 0.3333 402 105.426764067548 7.1931548219e-01
10013 12 0.3333 403 105.488244424950 3.5660839335e-01
10014 12 0.3333 404 105.831116408257 4.5198156858e-02
10015 12 0.3333 405 106.099404359289 4.2933507508e-02
10016 12 0.3333 406 106.365511416618 4.2183663014e-02
10017 12 0.3333 407 106.629207230449 4.2855996814e-02
10018 12 0.3333 408 106.888978206931 4.3099744001e-02
10019 12 0.3333 409 107.167993020063 1.0416515880e+00
10020 12 0.3333 410 107.414975459345 4.2457688312e-02
10021 12 0.3333 411 107.679108654683 4.2217236876e-02
10022 12 0.3333 412 107.941071846372 4.1729179604e-02
10023 12 0.3333 413 108.204202611860 4.3860159557e-02
10024 12 0.3333 414 108.465586385439 4.1986868739e-02
10025 12 0.3333 415 108.729197336165 4.2127715036e-02
10026 12 0.3333 416 108.991204515429 4.2497003239e-02
10027 12 0.3333 417 109.254852618922 4.1490493571e-02
10028 12 0.3333 418 109.516193340199 4.2037200012e-02
10029 12 0.3333 419 109.779044114015 4.1987109457e-02
10030 12 0.3333 420 110.043002821437 4.3727024085e-02
10031 12 0.3333 421 110.305038313736 4.3202887873e-02
10032 12 0.3333 422 110.571267946855 4.2826908307e-02
10033 12 0.3333 423 110.840768780187 4.8778247493e-02
10034 12 0.3333 424 111.032288395593 1.0332839070e+00
10035 12 0.3333 425 111.342162000475 4.2809952408e-02
10036 12 0.3333 426 111.607235485683 4.2555884757e-02
10037 12 0.3333 427 111.874500592197 1.0421940714e+00
10038 12 0.3333 428 112.133570412630 4.2281443291e-02
10039 12 0.3333 429 112.397237448574 4.2182905695e-02
10040 12 0.3333 430 112.659910906264 4.2223424970e-02
10041 12 0.3333 431 112.919451381383 4.3674465121e-02
10042 12 0.3333 432 113.186645899137 4.2873823217e-02
10043 12 0.3333 433 113.449892841852 4.2516483234e-02
10044 12 0.3333 434 113.716503442577 4.2594250766e-02
10045 12 0.3333 435 113.983178910728 4.3365186094e-02
10046 12 0.3333 436 114.314541116391 1.0058176313e+00
10047 12 0.3333 437 114.447629933234 7.2593100813e-02
10048 12 0.3333 438 114.741440522675 4.5354226679e-02
10049 12 0.3333 439 115.012707837461 4.2803192582e-02
10050 12 0.3333 440 115.280782525562 4.2472614067e-02
10051 12 0.3333 441 115.546898247897 4.4197620616e-02
10052 12 0.3333 442 115.811150298616 4.4979557387e-02
10053 12 0.3333 443 116.123417273773 9.6478796406e-02
10054 12 0.3333 444 116.234138593410 9.8102162902e-01
10055 12 0.3333 445 116.573395646831 4.4090333136e-02
10056 12 0.3333 446 116.837234899013 4.4467589132e-02
10057 12 0.3333 447 117.103999457130 4.3138974934e-02
10058 12 0.3333 448 117.369329771798 4.1939820008e-02
10059 12 0.3333 449 117.635505671042 4.2988875872e-02
10060 12 0.3333 450 117.902013032092 4.3224170912e-02
10061 12 0.3333 451 118.162216839615 4.4422585951e-02
10062 12 0.3333 452 118.432583351543 4.4475424439e-02
10063 12 0.3333 453 118.779326191070 9.0627517714e-01
10064 12 0.3333 454 118.861342442170 1.7004774293e-01
10065 12 0.3333 455 119.188324921763 4.3893204076e-02
10066 12 0.3333 456 119.459893451503 4.5912908395e-02
10067 12 0.3333 457 119.722292451588 4.2658211996e-02
10068 12 0.3333 458 119.985639152052 4.2749510364e-02
10069 12 0.3333 459 120.250385330635 4.2301123366e-02
10070 12 0.3333 460 120.515871268841 4.2575756950e-02
10071 12 0.3333 461 120.780258020936 4.1992089087e-02
10072 12 0.3333 462 121.047008030129 4.3891903379e-02
10073 12 0.3333 463 121.366562427762 1.0266635408e+00
10074 12 0.3333 464 121.536808004138 5.3163623613e-02
10075 12 0.3333 465 121.820076440795 4.6214539862e-02
10076 12 0.3333 466 122.086056420500 4.2523107787e-02
10077 12 0.3333 467 122.350629447295 4.3547065946e-02
10078 12 0.3333 468 122.619434356672 4.3732481095e-02
10079 12 0.3333 469 122.942430828525 1.0252659902e+00
10080 12 0.3333 470 123.100050718030 5.7983634595e-02
10081 12 0.3333 471 123.386544389653 4.3097417318e-02
10082 12 0.3333 472 123.659136039518 4.4304207883e-02
10083 12 0.3333 473 123.920393730251 4.5650752437e-02
10084 12 0.3333 474 124.251932628220 1.0153863746e+00
10085 12 0.3333 475 124.399178279874 6.3869587482e-02
10086 12 0.3333 476 124.688323181175 4.3794486446e-02
10087 12 0.3333 477 124.957697919339 4.2238203060e-02
10088 12 0.3333 478 125.223181373683 4.3053522676e-02
10089 12 0.3333 479 125.486644156134 4.1751636686e-02
10090 12 0.3333 480 125.751147573284 4.2394508108e-02
10091 12 0.3333 481 126.016612801719 4.7073428571e-02
10092 12 0.3333 482 126.277017530021 4.2026023932e-02
10093 12 0.3333 483 126.544819905894 4.3496804147e-02
10094 12 0.3333 484 126.799085555652 4.4997565002e-02
10095 12 0.3333 485 127.069978352999 4.3263487861e-02
10096 12 0.3333 486 127.353515235501 5.4112863649e-02
10097 12 0.3333 487 127.520454383671 1.0266879638e+00
10098 12 0.3333 488 127.842557694816 4.4213969767e-02
10099 12 0.3333 489 128.101316495466 4.5666851731e-02
10100 12 0.3333 490 128.372424844438 4.3326883107e-02
10101 12 0.3333 491 128.636605970747 4.2555477773e-02
10102 12 0.3333 492 128.903287134145 4.3026427888e-02
10103 12 0.3333 493 129.172844527208 4.4090088467e-02
10104 12 0.3333 494 129.499108124885 1.4751227122e-01
10105 12 0.3333 495 129.589589362324 9.3301478780e-01
10106 12 0.3333 496 129.925843735977 4.5541287276e-02
10107 12 0.3333 497 130.199281884180 4.2856349908e-02
10108 12 0.3333 498 130.468491061214 4.3804049583e-02
10109 12 0.3333 499 130.737489769979 4.4272030444e-02
10110 12 0.3333 500 131.079369898906 9.6806314676e-01
10111 12 0.3333 501 131.183061045796 1.0997058951e-01
10112 12 0.3333 502 131.499840777308 4.4031652759e-02
10113 12 0.3333 503 131.773203314725 4.5322517831e-02
10114 12 0.3333 504 132.026486976509 4.5066247514e-02
10115 12 0.3333 505 132.296989504205 4.2803214315e-02
10116 12 0.3333 506 132.564788323734 4.3157879511e-02
10117 12 0.3333 507 132.834641980263 4.4748351506e-02
10118 12 0.3333 508 133.093412208596 4.6336772634e-02
10119 12 0.3333 509 133.421943579866 1.5708119177e-01
10120 12 0.3333 510 133.508797732022 9.2021346247e-01
10121 12 0.3333 511 133.855759223663 4.4474304747e-02
10122 12 0.3333 512 134.128905354739 4.3965216634e-02
10123 12 0.3333 513 134.397282293889 5.0185227860e-02
10124 12 0.3333 514 134.746525707064 9.4374015209e-01
10125 12 0.3333 515 134.842346434136 1.3627391040e-01
10126 12 0.3333 516 135.153473442902 4.7131647711e-02
10127 12 0.3333 517 135.424414236019 4.3176894973e-02
10128 12 0.3333 518 135.692065511518 4.2769329762e-02
10129 12 0.3333 519 135.957848460804 4.3558351160e-02
10130 12 0.3333 520 136.221531543212 4.2253747990e-02
10131 12 0.3333 521 136.484987390255 4.2450939157e-02
10132 12 0.3333 522 136.751060307747 4.3291171019e-02
10133 12 0.3333 523 137.002198749888 4.6598753252e-02
10134 12 0.3333 524 137.272333781908 4.2986476716e-02
10135 12 0.3333 525 137.539462250396 4.2587479741e-02
10136 12 0.3333 526 137.803494042810 4.4020364939e-02
10137 12 0.3333 527 138.113378666986 1.0346423429e+00
10138 12 0.3333 528 138.308731135503 4.7368920787e-02
10139 12 0.3333 529 138.587014238497 4.7888323027e-02
10140 12 0.3333 530 138.843372532090 4.4793151878e-02
10141 12 0.3333 531 139.111036267397 4.2678254760e-02
10142 12 0.3333 532 139.381348960098 4.5087044225e-02
10143 12 0.3333 533 139.727757926805 9.6618299045e-01
10144 12 0.3333 534 139.834560902159 1.1760624937e-01
10145 12 0.3333 535 140.137683657095 4.5025721985e-02
10146 12 0.3333 536 140.409881999209 4.2980554551e-02
10147 12 0.3333 537 140.678240056904 4.3690743806e-02
10148 12 0.3333 538 140.966752719672 5.6897940723e-02
10149 12 0.3333 539 141.127853770584 1.0237195801e+00
10150 12 0.3333 540 141.451825307490 4.4629756114e-02
10151 12 0.3333 541 141.725635690141 4.9235874283e-02
10152 12 0.3333 542 141.981377667165 4.2551476337e-02
10153 12 0.3333 543 142.245284452217 4.3043758537e-02
10154 12 0.3333 544 142.513510011090 4.3376974947e-02
10155 12 0.3333 545 142.780128750014 5.1242044080e-02
10156 12 0.3333 546 143.106967527733 1.0166642674e+00
10157 12 0.3333 547 143.252498360054 6.3238143849e-02
10158 12 0.3333 548 143.547624276006 4.3923992964e-02
10159 12 0.3333 549 143.813707803123 4.2709622220e-02
10160 12 0.3333 550 144.080455610951 4.3142691940e-02
10161 12 0.3333 551 144.351017505051 4.5940733573e-02
10162 12 0.3333 552 144.597824123518 4.6768288142e-02
10163 12 0.3333 553 144.864622517936 4.2994717582e-02
10164 12 0.3333 554 145.136776938240 4.3214365660e-02
10165 12 0.3333 555 145.406020393665 4.9098646581e-02
10166 12 0.3333 556 145.661140453868 4.5081460187e-02
10167 12 0.3333 557 145.995024436464 1.0049125465e+00
10168 12 0.3333 558 146.126323681934 7.6059881661e-02
10169 12 0.3333 559 146.436885965767 5.0595043504e-02
10170 12 0.3333 560 146.694531716615 4.5459206516e-02
10171 12 0.3333 561 146.961186457190 4.3019388011e-02
10172 12 0.3333 562 147.240917461251 4.9265754295e-02
10173 12 0.3333 563 147.425819116358 1.0330921742e+00
10174 12 0.3333 564 147.735230827583 4.3528121656e-02
10175 12 0.3333 565 148.002351889926 4.2827224683e-02
10176 12 0.3333 566 148.266994437401 4.3075448382e-02
10177 12 0.3333 567 148.530899133599 4.1654298487e-02
10178 12 0.3333 568 148.795225834154 4.3603390428e-02
10179 12 0.3333 569 149.057456631423 4.4038045958e-02
10180 12 0.3333 570 149.332534691775 5.0987699775e-02
10181 12 0.3333 571 149.585950599114 4.3627559152e-02
10182 12 0.3333 572 149.864035881730 4.9754073865e-02
10183 12 0.3333 573 150.056674609230 1.0353277693e+00
10184 12 0.3333 574 150.348581847456 4.9119673527e-02
10185 12 0.3333 575 150.625972935436 4.3645826384e-02
10186 12 0.3333 576 150.923483803359 1.0404667174e+00
10187 12 0.3333 577 151.143625457820 4.5078906521e-02
10188 12 0.3333 578 151.418067920837 4.5997841343e-02
10189 12 0.3333 579 151.660522348760 4.7907694962e-02
10190 12 0.3333 580 151.933555155770 4.4038099187e-02
10191 12 0.3333 581 152.198736975932 4.2824426531e-02
10192 12 0.3333 582 152.461396438826 4.2813790610e-02
10193 12 0.3333 583 152.724826862650 5.3453979534e-02
10194 12 0.3333 584 153.022860334030 1.0389956191e+00
10195 12 0.3333 585 153.240737084165 4.4816366646e-02
10196 12 0.3333 586 153.506662278737 4.2359338431e-02
10197 12 0.3333 587 153.772662129035 4.3983086253e-02
10198 12 0.3333 588 154.036826553933 4.4181049993e-02
10199 12 0.3333 589 154.301792176501 4.3799916033e-02
10200 12 0.3333 590 154.546112892047 5.2184973396e-02
10201 12 0.3333 591 154.818762294673 4.3485569084e-02
10202 12 0.3333 592 155.087227352893 4.2472714615e-02
10203 12 0.3333 593 155.352819899546 4.5081631497e-02
10204 12 0.3333 594 155.594993921621 5.0640607490e-02
10205 12 0.3333 595 155.872737234201 4.3960369752e-02
10206 12 0.3333 596 156.113635510494 1.0434401359e+00
10207 12 0.3333 597 156.396967642361 4.2258872261e-02
10208 12 0.3333 598 156.660536563333 4.3319149994e-02
10209 12 0.3333 599 156.927957975362 4.3375000131e-02
10210 12 0.3333 600 157.199554282219 4.4581463236e-02
10211 12 0.3333 601 157.519915771212 1.6342267234e-01
10212 12 0.3333 602 157.608387821936 9.2844087573e-01
10213 12 0.3333 603 157.953361720342 4.5063491358e-02
10214 12 0.3333 604 158.222724471993 4.4639947557e-02
10215 12 0.3333 605 158.497121229623 4.5446926365e-02
10216 12 0.3333 606 158.839175437649 9.5254519346e-01
10217 12 0.3333 607 158.934637353371 1.3840951244e-01
10218 12 0.3333 608 159.251441862147 4.5861172595e-02
10219 12 0.3333 609 159.525081386704 4.3035495823e-02
10220 12 0.3333 610 159.791842145359 4.3452007365e-02
10221 12 0.3333 611 160.056089997438 4.2622815263e-02
10222 12 0.3333 612 160.323710005984 4.3928286486e-02
10223 12 0.3333 613 160.585705603272 4.2391675902e-02
10224 12 0.3333 614 160.860022749688 5.8242029294e-02
10225 12 0.3333 615 161.183953225545 1.0165400100e+00
10226 12 0.3333 616 161.331750174671 6.4693500237e-02
10227 12 0.3333 617 161.637865160785 5.2280983339e-02
10228 12 0.3333 618 161.872901164014 4.8871393314e-02
10229 12 0.3333 619 162.149876999456 4.4304797593e-02
10230 12 0.3333 620 162.419979602913 4.5079726803e-02
10231 12 0.3333 621 162.676440990471 5.9144996454e-02
10232 12 0.3333 622 163.022982274484 9.7896738361e-01
10233 12 0.3333 623 163.133596955832 9.9763399356e-02
10234 12 0.3333 624 163.442564549957 4.4786242977e-02
10235 12 0.3333 625 163.715830662417 4.3263055058e-02
10236 12 0.3333 626 163.981411118052 4.4091180411e-02
10237 12 0.3333 627 164.246463983945 5.9049194033e-02
10238 12 0.3333 628 164.510386132866 4.4600128419e-02
10239 12 0.3333 629 164.769649349007 4.3095738376e-02
10240 12 0.3333 630 165.032357379378 4.2968343035e-02
10241 12 0.3333 631 165.298949675196 4.3528078212e-02
10242 12 0.3333 632 165.537962591945 1.0420200673e+00
10243 12 0.3333 633 165.823755155906 4.3831321980e-02
10244 12 0.3333 634 166.094104615859 4.7669914198e-02
10245 12 0.3333 635 166.327524127836 5.4923646172e-02
10246 12 0.3333 636 166.606521095231 4.3549024145e-02
10247 12 0.3333 637 166.874515873841 4.4510799234e-02
10248 12 0.3333 638 167.182068254081 1.0367701229e+00
10249 12 0.3333 639 167.377839373871 4.7741056210e-02
10250 12 0.3333 640 167.655095459385 4.3875245614e-02
10251 12 0.3333 641 167.919482399304 4.4296559634e-02
10252 12 0.3333 642 168.198887765598 5.9999483065e-02
10253 12 0.3333 643 168.452943956561 4.4740977113e-02
10254 12 0.3333 644 168.739364165792 5.9622622678e-02
10255 12 0.3333 645 169.063675757417 5.4737904081e-01
10256 12 0.3333 646 169.125560531075 5.3554374080e-01
10257 12 0.3333 647 169.482879977718 4.6493889423e-02
10258 12 0.3333 648 169.794966638496 8.6395637982e-02
10259 12 0.3333 649 169.918965691264 9.9500261686e-01
10260 12 0.3333 650 170.265727167588 5.0349460935e-02
10261 12 0.3333 651 170.498726272612 5.6006946279e-02
10262 12 0.3333 652 170.780423239253 4.5383276890e-02
10263 12 0.3333 653 171.050312049292 4.3185991488e-02
10264 12 0.3333 654 171.315710045880 4.5183580036e-02
10265 12 0.3333 655 171.579767378924 4.4081063455e-02
10266 12 0.3333 656 171.857354640402 4.9253183865e-02
10267 12 0.3333 657 172.081929222304 5.4191561828e-02
10268 12 0.3333 658 172.358655257916 4.4053646039e-02
10269 12 0.3333 659 172.626294227431 4.3829958381e-02
10270 12 0.3333 660 172.892685111971 4.3211364121e-02
10271 12 0.3333 661 173.162612921617 4.6989145369e-02
10272 12 0.3333 662 173.410467964291 1.0606275922e+00
10273 12 0.3333 663 173.675027078021 4.4981113408e-02
10274 12 0.3333 664 173.941154945475 4.4808098024e-02
10275 12 0.3333 665 174.226412032335 5.4275397835e-02
10276 12 0.3333 666 174.446176661492 5.3570415880e-02
10277 12 0.3333 667 174.752671883056 1.0402765872e+00
10278 12 0.3333 668 174.978916464764 4.6907711393e-02
10279 12 0.3333 669 175.246196267870 4.4085483100e-02
10280 12 0.3333 670 175.516253763190 4.4191843194e-02
10281 12 0.3333 671 175.782080080559 4.3886793156e-02
10282 12 0.3333 672 176.051427555046 4.4765066466e-02
10283 12 0.3333 673 176.391826104751 2.9433607245e-01
10284 12 0.3333 674 176.458973745911 7.8689147794e-01
10285 12 0.3333 675 176.825235461379 5.9774726850e-02
10286 12 0.3333 676 177.056181831245 5.0782266348e-02
10287 12 0.3333 677 177.331517546740 4.4568282716e-02
10288 12 0.3333 678 177.600656719003 4.5741891289e-02
10289 12 0.3333 679 177.867560055527 4.4250761621e-02
10290 12 0.3333 680 178.145866986431 6.4529993768e-02
10291 12 0.3333 681 178.377674025494 1.0453693593e+00
10292 12 0.3333 682 178.652587073312 4.3903158665e-02
10293 12 0.3333 683 178.914659893283 4.2516344943e-02
10294 12 0.3333 684 179.177079493171 6.9771284676e-02
10295 12 0.3333 685 179.444883035415 4.3216369941e-02
10296 12 0.3333 686 179.719935719223 4.9460954981e-02
10297 12 0.3333 687 179.918987804848 1.0383082968e+00
10298 12 0.3333 688 180.226450791831 4.3463815534e-02
10299 12 0.3333 689 180.492435801222 4.5357501837e-02
10300 12 0.3333 690 180.779285089417 5.8862484922e-02
10301 12 0.3333 691 180.993513503786 5.4113637055e-02
10302 12 0.3333 692 181.281042450661 4.8573636379e-02
10303 12 0.3333 693 181.515181831436 6.5596802930e-02
10304 12 0.3333 694 181.804453785505 4.9208254430e-02
10305 12 0.3333 695 182.136475518406 1.7689782793e-01
10306 12 0.3333 696 182.219123517348 9.0264544846e-01
10307 12 0.3333 697 182.566501772245 4.5378102467e-02
10308 12 0.3333 698 182.839872495089 4.7241972776e-02
10309 12 0.3333 699 183.105564105240 4.3986230675e-02
10310 12 0.3333 700 183.367932043284 4.4593483960e-02
10311 12 0.3333 701 183.639684331667 4.3907746508e-02
10312 12 0.3333 702 183.924581352104 6.3608650535e-02
10313 12 0.3333 703 184.139857567384 5.1002946137e-02
10314 12 0.3333 704 184.427326577103 4.9018985511e-02
10315 12 0.3333 705 184.717287560122 6.0637312232e-02
10316 12 0.3333 706 184.879186119122 1.0234293333e+00
10317 12 0.3333 707 185.217556381205 5.0853644907e-02
10318 12 0.3333 708 185.513976612538 2.0387449755e-01
10319 12 0.3333 709 185.612412222878 9.0346845645e-01
10320 12 0.3333 710 185.965640156597 4.6513437720e-02
10321 12 0.3333 711 186.238925053662 4.6360800756e-02
10322 12 0.3333 712 186.528595816140 5.9575925583e-02
10323 12 0.3333 713 186.740402463725 6.0454527067e-02
10324 12 0.3333 714 187.034544899665 4.8244769893e-02
10325 12 0.3333 715 187.231829653692 1.0367291885e+00
10326 12 0.3333 716 187.541022077492 4.4247965936e-02
10327 12 0.3333 717 187.811959163905 4.4458618643e-02
10328 12 0.3333 718 188.077855802254 4.4357348529e-02
10329 12 0.3333 719 188.362457828659 7.5562885243e-02
10330 12 0.3333 720 188.591606912673 4.7219160991e-02
10331 12 0.3333 721 188.858449638576 4.4171967239e-02
10332 12 0.3333 722 189.128891665247 4.5214081842e-02
10333 12 0.3333 723 189.414836667026 1.0428637285e+00
10334 12 0.3333 724 189.668377264637 7.6879455626e-02
10335 12 0.3333 725 189.910601288395 4.7224151610e-02
10336 12 0.3333 726 190.170705335231 4.4479102854e-02
10337 12 0.3333 727 190.435964285572 4.5073441238e-02
10338 12 0.3333 728 190.713320694193 7.8996347087e-02
10339 12 0.3333 729 190.959104619622 4.6444035891e-02
10340 12 0.3333 730 191.221220658308 4.4618573220e-02
10341 12 0.3333 731 191.487606096469 4.3938174567e-02
10342 12 0.3333 732 191.755709813365 4.6288915872e-02
10343 12 0.3333 733 192.027274252238 1.0559115098e+00
10344 12 0.3333 734 192.240345657637 6.5134517232e-02
10345 12 0.3333 735 192.523959575982 4.8508981743e-02
10346 12 0.3333 736 192.794881940398 4.4694044738e-02
10347 12 0.3333 737 193.078814846983 1.0426197019e+00
10348 12 0.3333 738 193.323091988803 4.7125070910e-02
10349 12 0.3333 739 193.582289355518 4.4805979056e-02
10350 12 0.3333 740 193.845446325742 4.6874611023e-02
10351 12 0.3333 741 194.114487681809 4.6660907298e-02
10352 12 0.3333 742 194.396608128270 7.9418545182e-02
10353 12 0.3333 743 194.632877722701 4.7262346926e-02
10354 12 0.3333 744 194.907488895208 4.6583108280e-02
10355 12 0.3333 745 195.252981189701 8.9907498099e-01
10356 12 0.3333 746 195.335701072272 1.8194260424e-01
10357 12 0.3333 747 195.664439391585 4.6569498328e-02
10358 12 0.3333 748 195.942331483402 4.5576783697e-02
10359 12 0.3333 749 196.193753046081 8.9361044346e-02
10360 12 0.3333 750 196.480614781731 4.8697614041e-02
10361 12 0.3333 751 196.831508179815 3.9653866008e-01
10362 12 0.3333 752 196.905252095807 7.1817618951e-01
10363 12 0.3333 753 197.209923566959 5.2624600007e-02
10364 12 0.3333 754 197.497398465416 4.6350947344e-02
10365 12 0.3333 755 197.758763747667 4.8523393741e-02
10366 12 0.3333 756 198.014779972988 1.0872845958e+00
10367 12 0.3333 757 198.287228460062 4.5591001597e-02
10368 12 0.3333 758 198.555713652439 4.6173115694e-02
10369 12 0.3333 759 198.817792686457 4.6889472512e-02
10370 12 0.3333 760 199.081142932954 4.2227511658e-02
10371 12 0.3333 761 199.345704281123 4.5105106188e-02
10372 12 0.3333 762 199.608189211853 4.6400438742e-02
10373 12 0.3333 763 199.876912323415 4.6113026547e-02
10374 12 0.3333 764 200.160010434042 9.1137857938e-02
10375 12 0.3333 765 200.389378874803 4.7600956923e-02
10376 12 0.3333 766 200.671907948377 4.6496430757e-02
10377 12 0.3333 767 200.961847019117 5.9639695526e-02
10378 12 0.3333 768 201.245675665588 8.9823229846e-01
10379 12 0.3333 769 201.335899526092 2.1705999304e-01
10380 12 0.3333 770 201.677842586303 4.9775771992e-02
10381 12 0.3333 771 201.950082493218 4.7044575780e-02
10382 12 0.3333 772 202.219490545862 4.3087917583e-02
10383 12 0.3333 773 202.493221456436 1.0482164598e+00
10384 12 0.3333 774 202.742703901633 4.4854989633e-02
10385 12 0.3333 775 203.011616598206 4.4757721481e-02
10386 12 0.3333 776 203.262600092831 9.8765095114e-02
10387 12 0.3333 777 203.532629210991 4.7203331099e-02
10388 12 0.3333 778 203.812214408388 4.8441026668e-02
10389 12 0.3333 779 204.159666121129 5.4359341334e-01
10390 12 0.3333 780 204.220313726605 5.3758159569e-01
10391 12 0.3333 781 204.587459485975 1.0155300617e-01
10392 12 0.3333 782 204.828631765644 4.7665864507e-02
10393 12 0.3333 783 205.099715234616 4.6345859064e-02
10394 12 0.3333 784 205.393259533845 1.0435364471e+00
10395 12 0.3333 785 205.626466652007 4.6158155715e-02
10396 12 0.3333 786 205.895952191229 4.6333538090e-02
10397 12 0.3333 787 206.191929481613 8.7677002753e-02
10398 12 0.3333 788 206.388120741907 5.9197965237e-02
10399 12 0.3333 789 206.668903143073 4.6001622230e-02
10400 12 0.3333 790 206.940931531301 4.6986266735e-02
10401 12 0.3333 791 207.207150486357 4.4871104335e-02
10402 12 0.3333 792 207.484645073453 5.0709297440e-02
10403 12 0.3333 793 207.717512907025 1.1283749869e-01
10404 12 0.3333 794 207.910739807039 1.0266768176e+00
10405 12 0.3333 795 208.242007568183 4.9272982286e-02
10406 12 0.3333 796 208.476398924433 1.0624973127e-01
10407 12 0.3333 797 208.762400788766 4.6201598319e-02
10408 12 0.3333 798 209.026321996213 4.9248123662e-02
10409 12 0.3333 799 209.297982057855 4.6792756089e-02
10410 12 0.3333 800 209.575956541124 1.0465813296e+00
10411 12 0.3333 801 209.860955130043 8.6717749964e-02
10412 12 0.3333 802 210.043204831454 6.6536258275e-02
10413 12 0.3333 803 210.334491304429 4.5940866920e-02
10414 12 0.3333 804 210.597075382750 4.5414845105e-02
10415 12 0.3333 805 210.865757947294 4.5368269429e-02
10416 12 0.3333 806 211.134472012293 5.0608270574e-02
10417 12 0.3333 807 211.396186923246 4.5473498285e-02
10418 12 0.3333 808 211.689161271598 1.0431937670e+00
10419 12 0.3333 809 211.916273203032 4.8218587306e-02
10420 12 0.3333 810 212.184326671485 4.6872921153e-02
10421 12 0.3333 811 212.450984487657 4.5299979643e-02
10422 12 0.3333 812 212.741617431475 7.2780334410e-02
10423 12 0.3333 813 212.932261133604 9.0984661935e-02
10424 12 0.3333 814 213.311720333812 5.5741846375e-01
10425 12 0.3333 815 213.375592903427 5.9655534179e-01
10426 12 0.3333 816 213.723202156637 5.0864987330e-02
10427 12 0.3333 817 214.002646692559 4.7562399589e-02
10428 12 0.3333 818 214.262512480249 4.5621947128e-02
10429 12 0.3333 819 214.546374981123 1.0452002270e+00
10430 12 0.3333 820 214.794596788193 4.5976323864e-02
10431 12 0.3333 821 215.053788242091 1.2045849035e-01
10432 12 0.3333 822 215.324280718338 4.5833415076e-02
10433 12 0.3333 823 215.587155435781 4.6770036602e-02
10434 12 0.3333 824 215.855740039889 5.0694846034e-02
10435 12 0.3333 825 216.166728189226 1.0357220225e+00
10436 12 0.3333 826 216.352663749717 1.3323365944e-01
10437 12 0.3333 827 216.627216172081 4.6252731565e-02
10438 12 0.3333 828 216.894362596682 4.6897684554e-02
10439 12 0.3333 829 217.163071438881 4.7379809038e-02
10440 12 0.3333 830 217.435611057195 4.7487720770e-02
10441 12 0.3333 831 217.729596241497 9.1021562664e-02
10442 12 0.3333 832 217.902221953240 8.0023354334e-02
10443 12 0.3333 833 218.200652649708 4.7784501358e-02
10444 12 0.3333 834 218.476280832222 4.7821653773e-02
10445 12 0.3333 835 218.738471301719 4.8079995822e-02
10446 12 0.3333 836 219.063924852446 1.0345606269e+00
10447 12 0.3333 837 219.283349056578 9.8698649236e-02
10448 12 0.3333 838 219.470500929269 8.2706395940e-02
10449 12 0.3333 839 219.755573502514 5.1388761638e-02
10450 12 0.3333 840 220.041817830882 4.9923335892e-02
10451 12 0.3333 841 220.304538870918 5.1477411474e-02
10452 12 0.3333 842 220.633839968411 1.5853602943e-01
10453 12 0.3333 843 220.727423817997 1.0138949606e+00
10454 12 0.3333 844 221.074015009326 4.9908927487e-02
10455 12 0.3333 845 221.423088912157 9.8947865732e-01
10456 12 0.3333 846 221.540407155713 1.0126220614e-01
10457 12 0.3333 847 221.850986428838 4.9302241155e-02
10458 12 0.3333 848 222.119620921101 4.7830481231e-02
10459 12 0.3333 849 222.377349356566 5.1451598886e-02
10460 12 0.3333 850 222.653345879898 4.6197746769e-02
10461 12 0.3333 851 222.908831210458 4.6583766619e-02
10462 12 0.3333 852 223.183429519261 1.4030703481e-01
10463 12 0.3333 853 223.447520724896 4.6246013295e-02
10464 12 0.3333 854 223.715483780134 4.9282547901e-02
10465 12 0.3333 855 224.008202038013 1.1054516326e+00
10466 12 0.3333 856 224.185513177752 7.7712618544e-02
10467 12 0.3333 857 224.481907509889 4.7583469621e-02
10468 12 0.3333 858 224.760291602858 5.4057742781e-02
10469 12 0.3333 859 224.984844411804 1.0472229608e+00
10470 12 0.3333 860 225.294835569074 5.6300795610e-02
10471 12 0.3333 861 225.489824257636 1.3211065086e-01
10472 12 0.3333 862 225.791568421425 5.5433618587e-02
10473 12 0.3333 863 226.065068825987 4.7090706532e-02
10474 12 0.3333 864 226.359318577986 7.2213546379e-02
10475 12 0.3333 865 226.528850217755 1.1789049253e-01
10476 12 0.3333 866 226.845831710056 5.1992976024e-02
10477 12 0.3333 867 227.104910879725 4.9310530708e-02
10478 12 0.3333 868 227.418720867965 1.0432346890e+00
10479 12 0.3333 869 227.620049114504 5.1896120436e-02
10480 12 0.3333 870 227.899290659079 4.9200356697e-02
10481 12 0.3333 871 228.182321373036 6.6222773130e-02
10482 12 0.3333 872 228.371334673294 1.3686303819e-01
10483 12 0.3333 873 228.678137737502 5.0630008007e-02
10484 12 0.3333 874 228.959739667005 5.4009941993e-02
10485 12 0.3333 875 229.296410044499 4.1506407390e-01
10486 12 0.3333 876 229.361507050683 6.7356193275e-01
10487 12 0.3333 877 229.717774085962 5.0861211760e-02
10488 12 0.3333 878 229.988358517999 4.8250366790e-02
10489 12 0.3333 879 230.294903433246 8.2591968331e-02
10490 12 0.3333 880 230.458959267989 1.2403223739e-01
10491 12 0.3333 881 230.764294325787 5.0609310557e-02
10492 12 0.3333 882 231.040415940269 5.5017091945e-02
10493 12 0.3333 883 231.252815856194 1.0426234269e+00
10494 12 0.3333 884 231.563289678639 5.2208799188e-02
10495 12 0.3333 885 231.894810742748 1.7557701634e-01
10496 12 0.3333 886 231.994566256066 1.0347675794e+00
10497 12 0.3333 887 232.340858273995 5.1706190458e-02
10498 12 0.3333 888 232.650688640962 1.0083317325e-01
10499 12 0.3333 889 232.808876333969 1.1394663328e-01
10500 12 0.3333 890 233.114742894876 5.0410658738e-02
10501 12 0.3333 891 233.386949500243 4.9654878116e-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())