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 23 of 30 · 500/page · 14949 rows next →
# atheta_over_pikz_kw_k
11002 12 0.5000 324 84.876423380386 6.2670270858e-02
11003 12 0.5000 325 85.169263136454 4.3027667225e-02
11004 12 0.5000 326 85.435752086986 4.2372334709e-02
11005 12 0.5000 327 85.701349296461 4.2190032346e-02
11006 12 0.5000 328 85.964401973921 4.2095500973e-02
11007 12 0.5000 329 86.228319924398 4.2053384583e-02
11008 12 0.5000 330 86.492808749009 4.2879980850e-02
11009 12 0.5000 331 86.757508363961 4.2257396487e-02
11010 12 0.5000 332 87.026859670324 4.3784348364e-02
11011 12 0.5000 333 87.353187756348 1.6371843788e-01
11012 12 0.5000 334 87.436462190407 9.1253688820e-01
11013 12 0.5000 335 87.780609323353 4.4452825260e-02
11014 12 0.5000 336 88.050807619588 4.2989276745e-02
11015 12 0.5000 337 88.315855905129 4.2508446508e-02
11016 12 0.5000 338 88.582407749208 4.2760380488e-02
11017 12 0.5000 339 88.810430517254 1.0399634463e+00
11018 12 0.5000 340 89.101575213207 4.2544034712e-02
11019 12 0.5000 341 89.364645192463 4.1751609620e-02
11020 12 0.5000 342 89.627205046077 4.2017173258e-02
11021 12 0.5000 343 89.890523855951 4.2686877178e-02
11022 12 0.5000 344 90.153022183623 4.1672357936e-02
11023 12 0.5000 345 90.415043444157 4.2244191584e-02
11024 12 0.5000 346 90.678059873144 4.1645175149e-02
11025 12 0.5000 347 90.939490401212 4.1873488198e-02
11026 12 0.5000 348 91.203458101880 4.2779116562e-02
11027 12 0.5000 349 91.464333365641 4.1898507231e-02
11028 12 0.5000 350 91.726768926140 4.1985398616e-02
11029 12 0.5000 351 91.989313800440 4.1690652956e-02
11030 12 0.5000 352 92.252789787736 4.2506507964e-02
11031 12 0.5000 353 92.492801070269 1.0408680645e+00
11032 12 0.5000 354 92.771858373611 4.2659032147e-02
11033 12 0.5000 355 93.036006130147 4.2058933734e-02
11034 12 0.5000 356 93.299056004737 4.2034437134e-02
11035 12 0.5000 357 93.561395595821 4.1803496602e-02
11036 12 0.5000 358 93.825601172673 4.2081730301e-02
11037 12 0.5000 359 94.086613818562 4.2199903606e-02
11038 12 0.5000 360 94.353766030034 4.2616750684e-02
11039 12 0.5000 361 94.649385853091 1.0380944296e+00
11040 12 0.5000 362 94.862016489415 4.4278071891e-02
11041 12 0.5000 363 95.130715854697 4.2436553452e-02
11042 12 0.5000 364 95.396831914232 4.2563434038e-02
11043 12 0.5000 365 95.663784506988 4.5652900249e-02
11044 12 0.5000 366 95.872716940511 1.0369435583e+00
11045 12 0.5000 367 96.173398827096 4.2694936755e-02
11046 12 0.5000 368 96.438039357924 4.1912554936e-02
11047 12 0.5000 369 96.701157636209 4.2181706729e-02
11048 12 0.5000 370 96.963903737924 4.1734095394e-02
11049 12 0.5000 371 97.226805373876 4.1947671927e-02
11050 12 0.5000 372 97.488511368194 4.3234427467e-02
11051 12 0.5000 373 97.752318948381 4.1599856435e-02
11052 12 0.5000 374 98.014720734348 4.1967437136e-02
11053 12 0.5000 375 98.277371808227 4.2087697951e-02
11054 12 0.5000 376 98.540693908954 4.3179400786e-02
11055 12 0.5000 377 98.829850976787 1.0400022089e+00
11056 12 0.5000 378 99.056804442353 4.3082367291e-02
11057 12 0.5000 379 99.324339043929 4.2016528146e-02
11058 12 0.5000 380 99.586274956312 4.2065358650e-02
11059 12 0.5000 381 99.851070893442 4.2921087455e-02
11060 12 0.5000 382 100.111571629854 4.2469951453e-02
11061 12 0.5000 383 100.377200360597 4.3874059344e-02
11062 12 0.5000 384 100.641345974218 4.2571256916e-02
11063 12 0.5000 385 100.910332495814 4.3351520594e-02
11064 12 0.5000 386 101.223549585429 1.0922025977e-01
11065 12 0.5000 387 101.326046582427 9.6744924182e-01
11066 12 0.5000 388 101.665843432456 4.3612032043e-02
11067 12 0.5000 389 101.934701409453 4.2820385614e-02
11068 12 0.5000 390 102.198798266000 4.2001054107e-02
11069 12 0.5000 391 102.463020259187 4.2432724574e-02
11070 12 0.5000 392 102.726886747020 4.1906595291e-02
11071 12 0.5000 393 102.990910385523 4.2434416821e-02
11072 12 0.5000 394 103.254566730645 4.4003299597e-02
11073 12 0.5000 395 103.526382351104 4.5729226200e-02
11074 12 0.5000 396 103.727835439201 1.0356391954e+00
11075 12 0.5000 397 104.033604943977 4.3058650515e-02
11076 12 0.5000 398 104.299935577199 4.3221737838e-02
11077 12 0.5000 399 104.561489655788 4.2824468261e-02
11078 12 0.5000 400 104.828062554576 4.2716037005e-02
11079 12 0.5000 401 105.097001331040 4.3523688300e-02
11080 12 0.5000 402 105.438055883568 9.6148091677e-01
11081 12 0.5000 403 105.537130262116 1.1532013988e-01
11082 12 0.5000 404 105.853715466999 4.5032544218e-02
11083 12 0.5000 405 106.121811740586 4.2820020531e-02
11084 12 0.5000 406 106.387950259259 4.2239167881e-02
11085 12 0.5000 407 106.651639275423 4.2971643956e-02
11086 12 0.5000 408 106.910757837380 4.2744861128e-02
11087 12 0.5000 409 107.168891173345 1.0420440076e+00
11088 12 0.5000 410 107.437632398199 4.2259633302e-02
11089 12 0.5000 411 107.701405119380 4.2253208926e-02
11090 12 0.5000 412 107.963680041303 4.1712189129e-02
11091 12 0.5000 413 108.225686817475 4.3875207407e-02
11092 12 0.5000 414 108.487912440940 4.1918538188e-02
11093 12 0.5000 415 108.751388998224 4.2185541174e-02
11094 12 0.5000 416 109.013287503782 4.2454809505e-02
11095 12 0.5000 417 109.277726384534 4.1633973015e-02
11096 12 0.5000 418 109.539226072619 4.2034219959e-02
11097 12 0.5000 419 109.802266047078 4.2028224047e-02
11098 12 0.5000 420 110.065910591784 4.3903647692e-02
11099 12 0.5000 421 110.329196316097 4.3318408128e-02
11100 12 0.5000 422 110.598384883226 4.3707971538e-02
11101 12 0.5000 423 110.883050809966 6.1593189865e-02
11102 12 0.5000 424 111.034116780804 1.0180912103e+00
11103 12 0.5000 425 111.359929433142 4.3345330873e-02
11104 12 0.5000 426 111.627117461478 4.2876685481e-02
11105 12 0.5000 427 111.875304800574 1.0418087828e+00
11106 12 0.5000 428 112.152668170206 4.2390796888e-02
11107 12 0.5000 429 112.416901592586 4.2276800104e-02
11108 12 0.5000 430 112.680103875488 4.2342669998e-02
11109 12 0.5000 431 112.938534261815 4.3353893445e-02
11110 12 0.5000 432 113.205295997545 4.2925548963e-02
11111 12 0.5000 433 113.468590102672 4.2411692620e-02
11112 12 0.5000 434 113.734901295954 4.2582950157e-02
11113 12 0.5000 435 114.000532175485 4.2939705656e-02
11114 12 0.5000 436 114.316799100745 1.0286445856e+00
11115 12 0.5000 437 114.492965948277 5.2080961811e-02
11116 12 0.5000 438 114.767057630892 4.4392104406e-02
11117 12 0.5000 439 115.036249998132 4.2628646568e-02
11118 12 0.5000 440 115.304242619884 4.2609584166e-02
11119 12 0.5000 441 115.570646790683 4.4502343799e-02
11120 12 0.5000 442 115.835943684917 4.4970587381e-02
11121 12 0.5000 443 116.175195118768 2.7160507409e-01
11122 12 0.5000 444 116.242926161127 8.0476026903e-01
11123 12 0.5000 445 116.593353594059 4.4561421728e-02
11124 12 0.5000 446 116.857289211599 4.4253263523e-02
11125 12 0.5000 447 117.123733608016 4.3064045041e-02
11126 12 0.5000 448 117.389181589405 4.1879620987e-02
11127 12 0.5000 449 117.654716089544 4.2998843888e-02
11128 12 0.5000 450 117.921778597375 4.3485896202e-02
11129 12 0.5000 451 118.181483923501 4.4093831954e-02
11130 12 0.5000 452 118.450502147900 4.4112346084e-02
11131 12 0.5000 453 118.784768544544 1.0002673895e+00
11132 12 0.5000 454 118.910960260983 7.7422879127e-02
11133 12 0.5000 455 119.211996093604 4.3445684127e-02
11134 12 0.5000 456 119.480780225134 4.5934858501e-02
11135 12 0.5000 457 119.744300580114 4.2524566080e-02
11136 12 0.5000 458 120.006596947036 4.2545548509e-02
11137 12 0.5000 459 120.270524582476 4.2156073869e-02
11138 12 0.5000 460 120.535227602676 4.2509290360e-02
11139 12 0.5000 461 120.799229609548 4.1821067245e-02
11140 12 0.5000 462 121.063563696702 4.3353697365e-02
11141 12 0.5000 463 121.367969150504 1.0360404400e+00
11142 12 0.5000 464 121.572657586139 4.5642942605e-02
11143 12 0.5000 465 121.843015563139 4.5747129140e-02
11144 12 0.5000 466 122.108908636567 4.2345057327e-02
11145 12 0.5000 467 122.371486628251 4.3196129949e-02
11146 12 0.5000 468 122.638142372826 4.3197291440e-02
11147 12 0.5000 469 122.944192809627 1.0385979133e+00
11148 12 0.5000 470 123.142164401521 4.6702962302e-02
11149 12 0.5000 471 123.413492043686 4.2276353341e-02
11150 12 0.5000 472 123.682861589127 4.4384426828e-02
11151 12 0.5000 473 123.941156578965 4.4531325866e-02
11152 12 0.5000 474 124.254053573748 1.0332404462e+00
11153 12 0.5000 475 124.446604217658 4.8441419630e-02
11154 12 0.5000 476 124.717890706342 4.2876653126e-02
11155 12 0.5000 477 124.984651235309 4.2036384054e-02
11156 12 0.5000 478 125.248616333303 4.2968226738e-02
11157 12 0.5000 479 125.512319138368 4.1664761889e-02
11158 12 0.5000 480 125.776136701412 4.2388788503e-02
11159 12 0.5000 481 126.039406574821 4.7217608083e-02
11160 12 0.5000 482 126.302872994916 4.1936249123e-02
11161 12 0.5000 483 126.571360761005 4.4281113732e-02
11162 12 0.5000 484 126.825857624772 4.4419790475e-02
11163 12 0.5000 485 127.098037169068 4.3848325870e-02
11164 12 0.5000 486 127.404335941185 8.5572693748e-02
11165 12 0.5000 487 127.523379279644 9.9316268110e-01
11166 12 0.5000 488 127.862269844102 4.5077241204e-02
11167 12 0.5000 489 128.121420990833 4.5234535294e-02
11168 12 0.5000 490 128.392840711075 4.3527274138e-02
11169 12 0.5000 491 128.658067458827 4.2581858173e-02
11170 12 0.5000 492 128.924971798454 4.3112289379e-02
11171 12 0.5000 493 129.195152276189 4.4201209107e-02
11172 12 0.5000 494 129.543646730320 4.5503186115e-01
11173 12 0.5000 495 129.604395754836 6.2530375854e-01
11174 12 0.5000 496 129.946119526059 4.5301589947e-02
11175 12 0.5000 497 130.219425368806 4.2822380372e-02
11176 12 0.5000 498 130.487914935245 4.3766248654e-02
11177 12 0.5000 499 130.755905055928 4.3833034536e-02
11178 12 0.5000 500 131.083004255014 1.0174734510e+00
11179 12 0.5000 501 131.232515803672 6.2242357187e-02
11180 12 0.5000 502 131.525569086015 4.3606608948e-02
11181 12 0.5000 503 131.797905933381 4.5984006073e-02
11182 12 0.5000 504 132.050933770941 4.4157440194e-02
11183 12 0.5000 505 132.319892895516 4.2716371291e-02
11184 12 0.5000 506 132.587430409669 4.3222177106e-02
11185 12 0.5000 507 132.858525842777 4.5519113092e-02
11186 12 0.5000 508 133.118246891624 4.5869469886e-02
11187 12 0.5000 509 133.467716892397 5.2715467196e-01
11188 12 0.5000 510 133.526567474791 5.4936678038e-01
11189 12 0.5000 511 133.876072352284 4.4523951128e-02
11190 12 0.5000 512 134.149227531682 4.4039106587e-02
11191 12 0.5000 513 134.414050490596 4.9512946388e-02
11192 12 0.5000 514 134.750933721221 1.0099147545e+00
11193 12 0.5000 515 134.892869921352 7.2543074786e-02
11194 12 0.5000 516 135.179738166854 4.6087411205e-02
11195 12 0.5000 517 135.448595939474 4.2843834299e-02
11196 12 0.5000 518 135.714983093019 4.2667203613e-02
11197 12 0.5000 519 135.979923957910 4.3554944024e-02
11198 12 0.5000 520 136.244245835812 4.2262210312e-02
11199 12 0.5000 521 136.507559728858 4.2423471204e-02
11200 12 0.5000 522 136.774459710387 4.3917451528e-02
11201 12 0.5000 523 137.023360350937 4.5626943747e-02
11202 12 0.5000 524 137.292207903245 4.2852064203e-02
11203 12 0.5000 525 137.559050821628 4.2591272101e-02
11204 12 0.5000 526 137.821189106039 4.3434946000e-02
11205 12 0.5000 527 138.114554901167 1.0401044706e+00
11206 12 0.5000 528 138.341323801378 4.3628495757e-02
11207 12 0.5000 529 138.610969772382 4.8108737430e-02
11208 12 0.5000 530 138.867848344302 4.4101864938e-02
11209 12 0.5000 531 139.133916896081 4.2350016565e-02
11210 12 0.5000 532 139.400918204965 4.4443796421e-02
11211 12 0.5000 533 139.731638794250 1.0181118995e+00
11212 12 0.5000 534 139.886343741628 6.8745408215e-02
11213 12 0.5000 535 140.169768057766 4.3946588915e-02
11214 12 0.5000 536 140.439636075507 4.2916490879e-02
11215 12 0.5000 537 140.708160400164 4.3937824410e-02
11216 12 0.5000 538 141.019670709906 9.5997710403e-02
11217 12 0.5000 539 141.131166929280 9.8240022091e-01
11218 12 0.5000 540 141.470150363357 4.4948881290e-02
11219 12 0.5000 541 141.744064856508 4.9908498795e-02
11220 12 0.5000 542 142.004148988695 4.2356849801e-02
11221 12 0.5000 543 142.266549529029 4.2762718925e-02
11222 12 0.5000 544 142.533747831052 4.3356960116e-02
11223 12 0.5000 545 142.796111832743 5.0613730229e-02
11224 12 0.5000 546 143.108962074724 1.0339422919e+00
11225 12 0.5000 547 143.296646930876 4.7889707995e-02
11226 12 0.5000 548 143.574272951295 4.3527258483e-02
11227 12 0.5000 549 143.838868178238 4.2429116855e-02
11228 12 0.5000 550 144.104218157326 4.3033586039e-02
11229 12 0.5000 551 144.375368566943 4.7098431954e-02
11230 12 0.5000 552 144.622466206893 4.5688896267e-02
11231 12 0.5000 553 144.887222492416 4.2507759095e-02
11232 12 0.5000 554 145.158246413299 4.3381330868e-02
11233 12 0.5000 555 145.426647165296 4.9718271013e-02
11234 12 0.5000 556 145.683319901396 4.4027941332e-02
11235 12 0.5000 557 145.997702735851 1.0312888756e+00
11236 12 0.5000 558 146.176621249024 5.1497472555e-02
11237 12 0.5000 559 146.464224846273 5.1179808896e-02
11238 12 0.5000 560 146.725561343519 4.5099044661e-02
11239 12 0.5000 561 146.993972626289 4.3322551186e-02
11240 12 0.5000 562 147.293916200443 7.1482960193e-02
11241 12 0.5000 563 147.428406692054 1.0085773314e+00
11242 12 0.5000 564 147.756376831502 4.3920195244e-02
11243 12 0.5000 565 148.024860359772 4.2958597204e-02
11244 12 0.5000 566 148.289794785724 4.3122179989e-02
11245 12 0.5000 567 148.554775257840 4.1717141514e-02
11246 12 0.5000 568 148.818435988225 4.3693108038e-02
11247 12 0.5000 569 149.080147150500 4.3751500851e-02
11248 12 0.5000 570 149.353779115666 5.2119754115e-02
11249 12 0.5000 571 149.615024480997 4.3806856787e-02
11250 12 0.5000 572 149.908550457750 6.5013193938e-02
11251 12 0.5000 573 150.058845041625 1.0185610946e+00
11252 12 0.5000 574 150.366064246605 4.8540080091e-02
11253 12 0.5000 575 150.643368945374 4.3501164845e-02
11254 12 0.5000 576 150.924469101194 1.0432946336e+00
11255 12 0.5000 577 151.170990534796 4.3596948916e-02
11256 12 0.5000 578 151.443885918193 4.7337402511e-02
11257 12 0.5000 579 151.685077126540 4.6211185500e-02
11258 12 0.5000 580 151.955496670282 4.3968281773e-02
11259 12 0.5000 581 152.221079427105 4.2877778376e-02
11260 12 0.5000 582 152.483667141685 4.2746677124e-02
11261 12 0.5000 583 152.741145796637 5.2742902925e-02
11262 12 0.5000 584 153.023913349224 1.0420310459e+00
11263 12 0.5000 585 153.270225631920 4.3297648066e-02
11264 12 0.5000 586 153.532970108452 4.2027928134e-02
11265 12 0.5000 587 153.797004260422 4.3983587091e-02
11266 12 0.5000 588 154.061474899579 4.4337932363e-02
11267 12 0.5000 589 154.329850039237 4.5113693417e-02
11268 12 0.5000 590 154.569303570258 5.0422032632e-02
11269 12 0.5000 591 154.841689624538 4.3410674735e-02
11270 12 0.5000 592 155.111501152884 4.2898776175e-02
11271 12 0.5000 593 155.380154037938 4.6671303454e-02
11272 12 0.5000 594 155.619890899200 4.8889989990e-02
11273 12 0.5000 595 155.901031219559 4.6168006503e-02
11274 12 0.5000 596 156.114692134654 1.0400366550e+00
11275 12 0.5000 597 156.416266173358 4.2792653316e-02
11276 12 0.5000 598 156.680966063540 4.3370229854e-02
11277 12 0.5000 599 156.949064231168 4.3513476654e-02
11278 12 0.5000 600 157.222405995140 4.5120470175e-02
11279 12 0.5000 601 157.562702287456 4.8237406805e-01
11280 12 0.5000 602 157.623701611648 6.0864855543e-01
11281 12 0.5000 603 157.973411968521 4.5227382115e-02
11282 12 0.5000 604 158.242297852714 4.4377945830e-02
11283 12 0.5000 605 158.515415457897 4.5220458021e-02
11284 12 0.5000 606 158.843587517759 1.0188276232e+00
11285 12 0.5000 607 158.982659834765 7.3763457821e-02
11286 12 0.5000 608 159.275521710599 4.4999676300e-02
11287 12 0.5000 609 159.547387623227 4.2937217077e-02
11288 12 0.5000 610 159.813294451521 4.3402714600e-02
11289 12 0.5000 611 160.077301739428 4.2449088864e-02
11290 12 0.5000 612 160.343951961301 4.4017135226e-02
11291 12 0.5000 613 160.606009472681 4.2009739350e-02
11292 12 0.5000 614 160.873585901182 5.7894809658e-02
11293 12 0.5000 615 161.185948202986 1.0335625439e+00
11294 12 0.5000 616 161.374796459251 4.9578913107e-02
11295 12 0.5000 617 161.665389497370 5.4616257371e-02
11296 12 0.5000 618 161.902521155547 4.6166141049e-02
11297 12 0.5000 619 162.174765748581 4.4107766500e-02
11298 12 0.5000 620 162.444931745578 4.5648691390e-02
11299 12 0.5000 621 162.693754480076 5.7474919878e-02
11300 12 0.5000 622 163.026472326413 1.0225596725e+00
11301 12 0.5000 623 163.186792755050 5.8349462097e-02
11302 12 0.5000 624 163.470538071117 4.3863847770e-02
11303 12 0.5000 625 163.741538434224 4.3273043289e-02
11304 12 0.5000 626 164.006657326412 4.4178061854e-02
11305 12 0.5000 627 164.265066579183 5.8835815020e-02
11306 12 0.5000 628 164.535299115222 4.4973507183e-02
11307 12 0.5000 629 164.796554279697 4.3092125201e-02
11308 12 0.5000 630 165.059688769869 4.3064209167e-02
11309 12 0.5000 631 165.330920095010 4.6010882739e-02
11310 12 0.5000 632 165.539116609814 1.0379052716e+00
11311 12 0.5000 633 165.843382758208 4.4424619257e-02
11312 12 0.5000 634 166.117595726766 4.9789800300e-02
11313 12 0.5000 635 166.348044098817 5.2493586842e-02
11314 12 0.5000 636 166.625919096198 4.3480172665e-02
11315 12 0.5000 637 166.892335139762 4.4087655383e-02
11316 12 0.5000 638 167.183270976968 1.0421927692e+00
11317 12 0.5000 639 167.410217207771 4.3844784999e-02
11318 12 0.5000 640 167.679868923280 4.3658218996e-02
11319 12 0.5000 641 167.942021782497 4.3752548969e-02
11320 12 0.5000 642 168.215858094887 6.0840954387e-02
11321 12 0.5000 643 168.477067032060 4.4163798184e-02
11322 12 0.5000 644 168.759616410560 6.1179976750e-02
11323 12 0.5000 645 169.084588329466 9.5205357358e-01
11324 12 0.5000 646 169.183458773708 1.3050034052e-01
11325 12 0.5000 647 169.513337618575 4.6787768000e-02
11326 12 0.5000 648 169.856476705321 2.5832993825e-01
11327 12 0.5000 649 169.928268110223 8.2150792316e-01
11328 12 0.5000 650 170.291806634473 5.3551713731e-02
11329 12 0.5000 651 170.523121724340 5.2884602939e-02
11330 12 0.5000 652 170.802110669786 4.5245147147e-02
11331 12 0.5000 653 171.072882996886 4.3363035127e-02
11332 12 0.5000 654 171.337960507380 4.5281444173e-02
11333 12 0.5000 655 171.602825453628 4.3992152869e-02
11334 12 0.5000 656 171.883876644914 5.2716132464e-02
11335 12 0.5000 657 172.108082936425 5.0903554831e-02
11336 12 0.5000 658 172.381888259044 4.3847593203e-02
11337 12 0.5000 659 172.648890258882 4.3827555811e-02
11338 12 0.5000 660 172.916084936608 4.3386481201e-02
11339 12 0.5000 661 173.188388023324 4.8940676044e-02
11340 12 0.5000 662 173.411599050402 1.0584178676e+00
11341 12 0.5000 663 173.696525642772 4.4932941961e-02
11342 12 0.5000 664 173.961896278700 4.4497864319e-02
11343 12 0.5000 665 174.248852396808 5.8012120374e-02
11344 12 0.5000 666 174.470933389758 4.9924914699e-02
11345 12 0.5000 667 174.753790343112 1.0426157385e+00
11346 12 0.5000 668 175.006689047245 4.5520419782e-02
11347 12 0.5000 669 175.270913322529 4.3613456384e-02
11348 12 0.5000 670 175.539784926242 4.4299234260e-02
11349 12 0.5000 671 175.806336454898 4.3936770868e-02
11350 12 0.5000 672 176.075927001303 4.4701418651e-02
11351 12 0.5000 673 176.425548364880 8.2064858591e-01
11352 12 0.5000 674 176.495662599088 2.6053484108e-01
11353 12 0.5000 675 176.848685201816 6.3131378437e-02
11354 12 0.5000 676 177.086293048042 4.8012428775e-02
11355 12 0.5000 677 177.357494491898 4.4232267365e-02
11356 12 0.5000 678 177.624755817820 4.5705177555e-02
11357 12 0.5000 679 177.892742418672 4.4362568044e-02
11358 12 0.5000 680 178.168449757245 6.8292721860e-02
11359 12 0.5000 681 178.379046374881 1.0411336635e+00
11360 12 0.5000 682 178.677149652225 4.4489404738e-02
11361 12 0.5000 683 178.942606746467 4.2941538961e-02
11362 12 0.5000 684 179.193956994500 6.9140793416e-02
11363 12 0.5000 685 179.472318295047 4.3884861428e-02
11364 12 0.5000 686 179.760640242631 6.0846791307e-02
11365 12 0.5000 687 179.920801933444 1.0249279636e+00
11366 12 0.5000 688 180.246324057865 4.4167563883e-02
11367 12 0.5000 689 180.513391947201 4.5334279789e-02
11368 12 0.5000 690 180.802847295087 6.3959354655e-02
11369 12 0.5000 691 181.024250707294 4.9993153635e-02
11370 12 0.5000 692 181.310784515585 5.1392198980e-02
11371 12 0.5000 693 181.536633649320 6.1950444830e-02
11372 12 0.5000 694 181.825482034442 4.9336790891e-02
11373 12 0.5000 695 182.179631115123 5.8037878241e-01
11374 12 0.5000 696 182.239240809374 4.9879478096e-01
11375 12 0.5000 697 182.587555565746 4.5462631974e-02
11376 12 0.5000 698 182.860225008488 4.7446494970e-02
11377 12 0.5000 699 183.128415962525 4.4204436796e-02
11378 12 0.5000 700 183.390409852478 4.4276415212e-02
11379 12 0.5000 701 183.662291562550 4.4066805854e-02
11380 12 0.5000 702 183.947276661384 6.8512428788e-02
11381 12 0.5000 703 184.173349439724 4.6954972364e-02
11382 12 0.5000 704 184.454618044002 4.9707070782e-02
11383 12 0.5000 705 184.773634071734 1.0914491167e-01
11384 12 0.5000 706 184.883277294381 9.7308565791e-01
11385 12 0.5000 707 185.244052705361 5.4234914512e-02
11386 12 0.5000 708 185.553562604768 4.5162407631e-01
11387 12 0.5000 709 185.626175967154 6.5207235315e-01
11388 12 0.5000 710 185.985902100961 4.6854182505e-02
11389 12 0.5000 711 186.259867389495 4.6371340764e-02
11390 12 0.5000 712 186.553167393192 6.5473020092e-02
11391 12 0.5000 713 186.769813217455 5.5633633955e-02
11392 12 0.5000 714 187.075356402070 5.9549569012e-02
11393 12 0.5000 715 187.233552744941 1.0233027792e+00
11394 12 0.5000 716 187.557485964869 4.4520123165e-02
11395 12 0.5000 717 187.829228373256 4.4642554026e-02
11396 12 0.5000 718 188.095458407865 4.4229336817e-02
11397 12 0.5000 719 188.375580751582 7.7900868145e-02
11398 12 0.5000 720 188.615790033866 4.5776666405e-02
11399 12 0.5000 721 188.879293670357 4.3643043610e-02
11400 12 0.5000 722 189.147345114341 4.5013057550e-02
11401 12 0.5000 723 189.415725348908 1.0439016576e+00
11402 12 0.5000 724 189.683641432543 7.8057486913e-02
11403 12 0.5000 725 189.937498335224 4.6646696904e-02
11404 12 0.5000 726 190.196600666616 4.3983222924e-02
11405 12 0.5000 727 190.459354087914 4.4720230733e-02
11406 12 0.5000 728 190.727497703156 8.0098073461e-02
11407 12 0.5000 729 190.985324435865 4.6033375727e-02
11408 12 0.5000 730 191.246777539780 4.4315929967e-02
11409 12 0.5000 731 191.513035222231 4.4043530590e-02
11410 12 0.5000 732 191.782746117616 4.7465217844e-02
11411 12 0.5000 733 192.028825639690 1.0584132937e+00
11412 12 0.5000 734 192.262428352528 6.0703615891e-02
11413 12 0.5000 735 192.542697012006 4.8180581479e-02
11414 12 0.5000 736 192.813905328325 4.4606643035e-02
11415 12 0.5000 737 193.079719976531 1.0435994883e+00
11416 12 0.5000 738 193.345646311964 4.7126859523e-02
11417 12 0.5000 739 193.605523059886 4.4566363830e-02
11418 12 0.5000 740 193.866079444867 4.6459234429e-02
11419 12 0.5000 741 194.133853804363 4.6499113406e-02
11420 12 0.5000 742 194.410152706743 8.1348045817e-02
11421 12 0.5000 743 194.658076182228 4.5926716954e-02
11422 12 0.5000 744 194.929250927442 4.6145818570e-02
11423 12 0.5000 745 195.259417182832 1.0061419427e+00
11424 12 0.5000 746 195.392757173863 7.6415652065e-02
11425 12 0.5000 747 195.691659947286 4.5887541816e-02
11426 12 0.5000 748 195.970309951701 4.6907745424e-02
11427 12 0.5000 749 196.206925510395 8.7057101279e-02
11428 12 0.5000 750 196.500515804546 4.8923244703e-02
11429 12 0.5000 751 196.857015213989 7.8057610742e-01
11430 12 0.5000 752 196.937358247078 3.3809062988e-01
11431 12 0.5000 753 197.240774703851 4.9586737536e-02
11432 12 0.5000 754 197.524884763407 4.7049344160e-02
11433 12 0.5000 755 197.787756735823 4.9263655923e-02
11434 12 0.5000 756 198.015865937539 1.0847526106e+00
11435 12 0.5000 757 198.307429134525 4.5701089876e-02
11436 12 0.5000 758 198.576409270482 4.6461618415e-02
11437 12 0.5000 759 198.838829584077 4.6850699093e-02
11438 12 0.5000 760 199.104495609432 4.2261623105e-02
11439 12 0.5000 761 199.367737470880 4.5146711514e-02
11440 12 0.5000 762 199.629087258048 4.6109154501e-02
11441 12 0.5000 763 199.897164675808 4.6043515231e-02
11442 12 0.5000 764 200.172735868857 9.3528922681e-02
11443 12 0.5000 765 200.415788072024 4.5530767191e-02
11444 12 0.5000 766 200.694647565870 4.6704641567e-02
11445 12 0.5000 767 200.988956102049 6.5165529881e-02
11446 12 0.5000 768 201.254969497647 1.0219515336e+00
11447 12 0.5000 769 201.393048458187 8.8689398970e-02
11448 12 0.5000 770 201.703285032651 4.9309425258e-02
11449 12 0.5000 771 201.974517827318 4.6847665523e-02
11450 12 0.5000 772 202.246391048331 4.3525860223e-02
11451 12 0.5000 773 202.494368793877 1.0481786157e+00
11452 12 0.5000 774 202.769088052365 4.4642135403e-02
11453 12 0.5000 775 203.039963039581 4.6016516732e-02
11454 12 0.5000 776 203.274799803365 9.6826583796e-02
11455 12 0.5000 777 203.552575495625 4.6741498502e-02
11456 12 0.5000 778 203.831083623109 4.8544130997e-02
11457 12 0.5000 779 204.177548238062 9.0399984628e-01
11458 12 0.5000 780 204.261808302336 1.7745922529e-01
11459 12 0.5000 781 204.599120005459 1.0329557559e-01
11460 12 0.5000 782 204.854733493133 4.6389742852e-02
11461 12 0.5000 783 205.121799438219 4.5739242624e-02
11462 12 0.5000 784 205.394352943806 1.0453998864e+00
11463 12 0.5000 785 205.654194399097 4.5245563483e-02
11464 12 0.5000 786 205.920726464385 4.5957027357e-02
11465 12 0.5000 787 206.212270610804 9.6043561887e-02
11466 12 0.5000 788 206.425500801359 5.2160178769e-02
11467 12 0.5000 789 206.698682556192 4.5464720649e-02
11468 12 0.5000 790 206.969246173589 4.7322896802e-02
11469 12 0.5000 791 207.239673006341 4.5507184552e-02
11470 12 0.5000 792 207.530218918467 6.0609415675e-02
11471 12 0.5000 793 207.757737025279 1.2667801428e-01
11472 12 0.5000 794 207.913575566562 1.0002105322e+00
11473 12 0.5000 795 208.265564418711 5.2429811245e-02
11474 12 0.5000 796 208.487411832588 1.0300317881e-01
11475 12 0.5000 797 208.780964525364 4.6585569602e-02
11476 12 0.5000 798 209.043928841936 4.8967949053e-02
11477 12 0.5000 799 209.316214863562 4.6961052051e-02
11478 12 0.5000 800 209.576820654236 1.0467319506e+00
11479 12 0.5000 801 209.880476648089 9.6790650450e-02
11480 12 0.5000 802 210.074027459226 5.7093300148e-02
11481 12 0.5000 803 210.358016878349 4.5964469264e-02
11482 12 0.5000 804 210.619519253783 4.4953442832e-02
11483 12 0.5000 805 210.886634526857 4.5265555503e-02
11484 12 0.5000 806 211.153184863637 5.0756922935e-02
11485 12 0.5000 807 211.416646469354 4.5075317088e-02
11486 12 0.5000 808 211.690247657731 1.0455921026e+00
11487 12 0.5000 809 211.943696898942 4.7100851472e-02
11488 12 0.5000 810 212.209818612774 4.6818577503e-02
11489 12 0.5000 811 212.477764863069 4.5354758776e-02
11490 12 0.5000 812 212.770136268639 8.4376852719e-02
11491 12 0.5000 813 212.957795883901 7.8718421282e-02
11492 12 0.5000 814 213.330748215461 9.3762064522e-01
11493 12 0.5000 815 213.414167505195 2.1651846558e-01
11494 12 0.5000 816 213.743652556166 5.0283667699e-02
11495 12 0.5000 817 214.023307827218 4.8038508895e-02
11496 12 0.5000 818 214.284123710510 4.5151446266e-02
11497 12 0.5000 819 214.547328167369 1.0458461906e+00
11498 12 0.5000 820 214.818530519417 4.6293522152e-02
11499 12 0.5000 821 215.062089614611 1.1925488823e-01
11500 12 0.5000 822 215.343763226660 4.6117269330e-02
11501 12 0.5000 823 215.606561110755 4.6593600685e-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())