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 14 of 30 · 500/page · 14949 rows next →
# atheta_over_pikz_kw_k
6502 8 0.8333 454 178.406957890106 8.4940123058e-01
6503 8 0.8333 455 178.942587094637 7.5168546439e-02
6504 8 0.8333 456 179.310157458126 8.4819891722e-02
6505 8 0.8333 457 179.847086136514 4.4281686638e-01
6506 8 0.8333 458 179.959483960309 6.8010429115e-01
6507 8 0.8333 459 180.482415962519 6.9745715060e-02
6508 8 0.8333 460 180.888319732080 9.6240896454e-02
6509 8 0.8333 461 181.319290528265 8.3103702421e-02
6510 8 0.8333 462 181.679118030373 7.8087865030e-02
6511 8 0.8333 463 182.191580894525 9.9257348236e-01
6512 8 0.8333 464 182.377803073101 1.2939709016e-01
6513 8 0.8333 465 182.839781200001 7.0669416335e-02
6514 8 0.8333 466 183.244094065939 6.7396860840e-02
6515 8 0.8333 467 183.645951527973 6.5303120507e-02
6516 8 0.8333 468 184.027906485038 9.5360217098e-02
6517 8 0.8333 469 184.442352866826 6.9534055688e-02
6518 8 0.8333 470 184.872294198892 1.0647243739e+00
6519 8 0.8333 471 185.252138955518 8.1240328375e-02
6520 8 0.8333 472 185.598474588583 1.0798410849e+00
6521 8 0.8333 473 186.009488564381 6.8509623208e-02
6522 8 0.8333 474 186.424169661840 7.5743749543e-02
6523 8 0.8333 475 186.763349067345 8.7448936498e-02
6524 8 0.8333 476 187.226301925831 1.0643410416e+00
6525 8 0.8333 477 187.578370842600 6.6513690449e-02
6526 8 0.8333 478 187.980995239109 6.6819056236e-02
6527 8 0.8333 479 188.389195077482 1.0314668429e-01
6528 8 0.8333 480 188.786510877816 6.9585104253e-02
6529 8 0.8333 481 189.271142569943 1.7985117126e-01
6530 8 0.8333 482 189.439526380233 9.5869338739e-01
6531 8 0.8333 483 189.892520963847 8.5120269750e-02
6532 8 0.8333 484 190.317499980868 6.9018580427e-02
6533 8 0.8333 485 190.725831493367 1.0390538752e-01
6534 8 0.8333 486 191.120094543664 6.9225055848e-02
6535 8 0.8333 487 191.528703854139 6.8474569268e-02
6536 8 0.8333 488 192.016432464369 1.0391357038e+00
6537 8 0.8333 489 192.232698743459 1.2392846269e-01
6538 8 0.8333 490 192.674637481122 7.0112226950e-02
6539 8 0.8333 491 193.079940282988 1.0670152299e+00
6540 8 0.8333 492 193.480605384306 7.0387856575e-02
6541 8 0.8333 493 193.884584198872 7.0871497451e-02
6542 8 0.8333 494 194.312932650897 9.4678353753e-02
6543 8 0.8333 495 194.660488061273 7.8797015368e-02
6544 8 0.8333 496 195.181849869756 3.6003411853e-01
6545 8 0.8333 497 195.302069923241 7.6356749219e-01
6546 8 0.8333 498 195.828169434848 7.0829924992e-02
6547 8 0.8333 499 196.218161555793 1.1407475472e-01
6548 8 0.8333 500 196.715915589542 1.6367577860e-01
6549 8 0.8333 501 196.900354396292 1.0024329265e+00
6550 8 0.8333 502 197.392722703749 7.4292606642e-02
6551 8 0.8333 503 197.877182748117 1.9248964848e-01
6552 8 0.8333 504 198.035374467774 9.7884191002e-01
6553 8 0.8333 505 198.551869360552 7.1923697136e-02
6554 8 0.8333 506 198.951141265600 6.8143687824e-02
6555 8 0.8333 507 199.361001036335 6.8461590648e-02
6556 8 0.8333 508 199.757132231394 6.8801517035e-02
6557 8 0.8333 509 200.167941664862 1.1805378329e-01
6558 8 0.8333 510 200.553855300026 6.7511959606e-02
6559 8 0.8333 511 200.986327491691 9.9335197350e-02
6560 8 0.8333 512 201.267259814132 1.0808548340e+00
6561 8 0.8333 513 201.717815388341 7.1571997222e-02
6562 8 0.8333 514 202.116477434041 6.6938504036e-02
6563 8 0.8333 515 202.495322187395 1.0711547094e+00
6564 8 0.8333 516 202.918445448617 6.8097222576e-02
6565 8 0.8333 517 203.289237386980 1.2162517243e-01
6566 8 0.8333 518 203.712368099173 7.0311243518e-02
6567 8 0.8333 519 204.183013041991 1.0554239016e+00
6568 8 0.8333 520 204.513758764947 1.2062517625e-01
6569 8 0.8333 521 204.860969429084 8.0939701390e-02
6570 8 0.8333 522 205.380668456101 1.0125717674e+00
6571 8 0.8333 523 205.590516425163 1.1650101538e-01
6572 8 0.8333 524 206.072735905033 9.2232216469e-02
6573 8 0.8333 525 206.386913794756 1.0187640617e-01
6574 8 0.8333 526 206.825369151750 7.0289838924e-02
6575 8 0.8333 527 207.230183408219 6.9057931234e-02
6576 8 0.8333 528 207.666128549090 1.4825398192e-01
6577 8 0.8333 529 207.915438146626 1.0419517413e+00
6578 8 0.8333 530 208.420692625681 1.3200167484e-01
6579 8 0.8333 531 208.792368548890 7.1922702656e-02
6580 8 0.8333 532 209.188337509561 7.0604516782e-02
6581 8 0.8333 533 209.577372065034 1.0701053289e+00
6582 8 0.8333 534 209.957772133469 1.3366268371e-01
6583 8 0.8333 535 210.380694759953 6.9140270875e-02
6584 8 0.8333 536 210.780866088080 6.8072094229e-02
6585 8 0.8333 537 211.184006816551 7.5638775028e-02
6586 8 0.8333 538 211.678977053456 1.0261169848e+00
6587 8 0.8333 539 211.904212389087 1.0436989796e-01
6588 8 0.8333 540 212.348478802509 7.2166312441e-02
6589 8 0.8333 541 212.798438573554 1.3803202155e-01
6590 8 0.8333 542 213.243766647100 3.2319682511e-01
6591 8 0.8333 543 213.377575385488 8.8031325829e-01
6592 8 0.8333 544 213.904323934791 7.6037811005e-02
6593 8 0.8333 545 214.373456906130 1.3678601920e-01
6594 8 0.8333 546 214.563609114899 9.9180453375e-01
6595 8 0.8333 547 215.061696502665 1.4692773388e-01
6596 8 0.8333 548 215.489824528199 7.3690256684e-02
6597 8 0.8333 549 215.943595886009 1.1675934480e-01
6598 8 0.8333 550 216.189293016972 1.0768478994e+00
6599 8 0.8333 551 216.596520082481 8.6451526162e-02
6600 8 0.8333 552 217.027655705784 7.1952520987e-02
6601 8 0.8333 553 217.435549441842 7.1177593668e-02
6602 8 0.8333 554 217.817209290422 1.5258141376e-01
6603 8 0.8333 555 218.225855181062 6.9420629763e-02
6604 8 0.8333 556 218.626872041900 7.2493253972e-02
6605 8 0.8333 557 219.064912964947 1.0676147807e+00
6606 8 0.8333 558 219.393902308736 1.5336048548e-01
6607 8 0.8333 559 219.802089795291 7.3637614297e-02
6608 8 0.8333 560 220.213303996907 7.7983485426e-02
6609 8 0.8333 561 220.705762646536 1.1139630575e+00
6610 8 0.8333 562 220.933632176677 1.0494779891e-01
6611 8 0.8333 563 221.426776577064 1.0699135597e+00
6612 8 0.8333 564 221.764757524478 7.5076444775e-02
6613 8 0.8333 565 222.176588183773 7.5746042435e-02
6614 8 0.8333 566 222.574496461907 7.2415065897e-02
6615 8 0.8333 567 223.010595661057 1.0051643146e-01
6616 8 0.8333 568 223.298012590007 1.2754498832e-01
6617 8 0.8333 569 223.801276967990 1.2188649737e-01
6618 8 0.8333 570 224.026061390946 1.1077964002e+00
6619 8 0.8333 571 224.514837174857 7.5109325296e-02
6620 8 0.8333 572 224.977529480380 1.0714585315e+00
6621 8 0.8333 573 225.354955046123 1.3991699702e-01
6622 8 0.8333 574 225.651555163500 1.0339521899e-01
6623 8 0.8333 575 226.078050398433 7.2490934585e-02
6624 8 0.8333 576 226.480368432109 1.7345290271e-01
6625 8 0.8333 577 226.900213120867 7.9078972227e-02
6626 8 0.8333 578 227.404237025014 9.8914015530e-01
6627 8 0.8333 579 227.588245255992 1.4568441603e-01
6628 8 0.8333 580 228.072827016192 8.8303046052e-02
6629 8 0.8333 581 228.390837876763 1.6636133075e-01
6630 8 0.8333 582 228.847795417325 7.7988132433e-02
6631 8 0.8333 583 229.326687984900 1.0440596516e+00
6632 8 0.8333 584 229.577813563571 9.4957978163e-02
6633 8 0.8333 585 230.006810407973 7.2430244001e-02
6634 8 0.8333 586 230.406621136382 1.8849890268e-01
6635 8 0.8333 587 230.811955988773 7.5343126060e-02
6636 8 0.8333 588 231.246947042799 1.0706726034e+00
6637 8 0.8333 589 231.601616797969 7.7285396237e-02
6638 8 0.8333 590 231.983386674517 1.1884825031e+00
6639 8 0.8333 591 232.392909577504 7.6111349373e-02
6640 8 0.8333 592 232.758054634719 1.9354778191e-01
6641 8 0.8333 593 233.187769809209 7.6160472132e-02
6642 8 0.8333 594 233.681389031570 1.0314448002e+00
6643 8 0.8333 595 233.911384075430 1.0818038556e-01
6644 8 0.8333 596 234.360164995538 7.6176825897e-02
6645 8 0.8333 597 234.823637304857 1.7912280499e-01
6646 8 0.8333 598 235.113193191713 9.6722083416e-02
6647 8 0.8333 599 235.556533082032 7.9699131794e-02
6648 8 0.8333 600 236.021301348602 1.9957565656e-01
6649 8 0.8333 601 236.470506369746 7.2042516808e-01
6650 8 0.8333 602 236.629072467339 4.8349641933e-01
6651 8 0.8333 603 237.002283228460 1.4784924596e-01
6652 8 0.8333 604 237.489438216192 9.4431649854e-02
6653 8 0.8333 605 237.778698157788 1.0559194796e+00
6654 8 0.8333 606 238.247324934664 8.1414982628e-02
6655 8 0.8333 607 238.661371789375 7.4982355578e-02
6656 8 0.8333 608 239.079616690408 8.0457344709e-02
6657 8 0.8333 609 239.533615461108 1.1668401725e+00
6658 8 0.8333 610 239.773028165102 1.1861719921e-01
6659 8 0.8333 611 240.232671365184 8.2379169750e-02
6660 8 0.8333 612 240.633235971470 8.0231315218e-02
6661 8 0.8333 613 241.053107572784 1.2179037629e+00
6662 8 0.8333 614 241.420952926908 8.0302014271e-02
6663 8 0.8333 615 241.845015870523 8.0319795523e-02
6664 8 0.8333 616 242.305881086285 1.4055260991e-01
6665 8 0.8333 617 242.608498529659 2.4445927533e-01
6666 8 0.8333 618 242.844518443667 9.8487653276e-01
6667 8 0.8333 619 243.365827482972 2.3984362329e-01
6668 8 0.8333 620 243.796259766833 9.7288179875e-02
6669 8 0.8333 621 244.079929255059 1.0598131931e+00
6670 8 0.8333 622 244.566238761503 8.3307376791e-02
6671 8 0.8333 623 244.900376511420 2.3874511593e-01
6672 8 0.8333 624 245.353185072768 7.9937521182e-02
6673 8 0.8333 625 245.748273586351 7.9940781080e-02
6674 8 0.8333 626 246.152696128428 8.1895354713e-02
6675 8 0.8333 627 246.606985349335 1.1108559092e-01
6676 8 0.8333 628 246.936532489004 3.2357271322e-01
6677 8 0.8333 629 247.161705489178 9.5610808794e-01
6678 8 0.8333 630 247.690867585495 8.9372256889e-02
6679 8 0.8333 631 248.102287658729 1.0834266397e+00
6680 8 0.8333 632 248.463020508416 2.6280289882e-01
6681 8 0.8333 633 248.906712250984 8.2212323117e-02
6682 8 0.8333 634 249.376258065626 1.5492630875e-01
6683 8 0.8333 635 249.597354568523 1.0351798133e+00
6684 8 0.8333 636 249.957901788373 2.2037656937e-01
6685 8 0.8333 637 250.447465246772 8.4595673325e-02
6686 8 0.8333 638 250.979421463794 8.2136117230e-01
6687 8 0.8333 639 251.112798383661 3.3184053373e-01
6688 8 0.8333 640 251.613258043254 8.3232838478e-02
6689 8 0.8333 641 252.004032702430 2.8430414956e-01
6690 8 0.8333 642 252.474235642698 2.8606195942e-01
6691 8 0.8333 643 252.875602135436 1.3826671832e-01
6692 8 0.8333 644 253.086586427999 1.0120944688e+00
6693 8 0.8333 645 253.585851629603 8.3411303156e-02
6694 8 0.8333 646 253.996508690264 8.6663969322e-02
6695 8 0.8333 647 254.432230879515 2.9106075571e-01
6696 8 0.8333 648 254.783557893891 8.5130682934e-02
6697 8 0.8333 649 255.280762891948 1.2140055725e+00
6698 8 0.8333 650 255.474403582813 1.6088921045e-01
6699 8 0.8333 651 255.933438658684 9.0998808067e-02
6700 8 0.8333 652 256.378338417317 1.0795252241e+00
6701 8 0.8333 653 256.754900478481 8.6225098406e-02
6702 8 0.8333 654 257.139233790885 8.5404515330e-02
6703 8 0.8333 655 257.553969380367 8.3073773152e-02
6704 8 0.8333 656 257.967462715879 9.3000706437e-02
6705 8 0.8333 657 258.303270329412 3.2538056516e-01
6706 8 0.8333 658 258.621466881326 1.0604666529e+00
6707 8 0.8333 659 259.151805596734 1.2807601537e-01
6708 8 0.8333 660 259.406168301992 2.7605149398e-01
6709 8 0.8333 661 259.875667042038 1.0867653256e+00
6710 8 0.8333 662 260.315364536521 3.4044709994e-01
6711 8 0.8333 663 260.789195160810 1.0255567269e+00
6712 8 0.8333 664 261.010359605072 1.2966839803e-01
6713 8 0.8333 665 261.458550389810 9.4242477481e-02
6714 8 0.8333 666 261.917787196031 1.2800904456e-01
6715 8 0.8333 667 262.161491938539 2.9516295782e-01
6716 8 0.8333 668 262.628977912053 9.1240664208e-02
6717 8 0.8333 669 263.050142380576 8.7584361729e-02
6718 8 0.8333 670 263.559321893518 1.2606686811e+00
6719 8 0.8333 671 263.747512935823 1.7487728639e-01
6720 8 0.8333 672 264.197978574472 9.3086205507e-02
6721 8 0.8333 673 264.620436608394 8.8966200888e-02
6722 8 0.8333 674 264.995800476794 3.7426160247e-01
6723 8 0.8333 675 265.528534850132 9.0518259491e-01
6724 8 0.8333 676 265.684152208175 2.5111590013e-01
6725 8 0.8333 677 266.176812824671 8.8589635553e-02
6726 8 0.8333 678 266.610719673510 1.0930139702e+00
6727 8 0.8333 679 267.016657426933 3.9174558489e-01
6728 8 0.8333 680 267.384782478421 9.2072247653e-02
6729 8 0.8333 681 267.894505432160 9.3360745175e-01
6730 8 0.8333 682 268.062804554151 2.3041956775e-01
6731 8 0.8333 683 268.564842319297 4.0306946579e-01
6732 8 0.8333 684 268.948168355991 8.7541862054e-02
6733 8 0.8333 685 269.360914724843 9.1404017412e-02
6734 8 0.8333 686 269.893150809088 5.3698201048e-01
6735 8 0.8333 687 270.040697602502 6.6752946906e-01
6736 8 0.8333 688 270.417028987967 3.7672128300e-01
6737 8 0.8333 689 270.978813181468 1.7967418756e-01
6738 8 0.8333 690 271.266555432339 4.4364461485e-01
6739 8 0.8333 691 271.522385973088 9.7726768126e-01
6740 8 0.8333 692 272.105764133356 1.4790379885e-01
6741 8 0.8333 693 272.353710567289 3.7232027827e-01
6742 8 0.8333 694 272.845298362066 9.9424736845e-02
6743 8 0.8333 695 273.333828859470 2.6728163891e-01
6744 8 0.8333 696 273.490574890497 8.9798644422e-01
6745 8 0.8333 697 274.002427325144 1.0140730037e-01
6746 8 0.8333 698 274.407896442594 9.3908706666e-02
6747 8 0.8333 699 274.825888635236 4.6422419062e-01
6748 8 0.8333 700 275.223696755900 9.4469711192e-02
6749 8 0.8333 701 275.589255890683 1.0878916106e+00
6750 8 0.8333 702 276.015519764593 1.0005210056e-01
6751 8 0.8333 703 276.446425352684 1.4749851627e+00
6752 8 0.8333 704 276.805019142015 9.1634228055e-02
6753 8 0.8333 705 277.230348346758 9.9576805857e-02
6754 8 0.8333 706 277.665303124875 1.3276924354e-01
6755 8 0.8333 707 277.955908254632 4.9422863547e-01
6756 8 0.8333 708 278.268999731987 1.0405530356e+00
6757 8 0.8333 709 278.875659022058 2.7670619136e-01
6758 8 0.8333 710 279.177215758472 1.1569427039e+00
6759 8 0.8333 711 279.408931464889 2.4132362359e-01
6760 8 0.8333 712 279.904683608810 1.0882000809e-01
6761 8 1.0000 1 0.562101262810 6.5645093444e-02
6762 8 1.0000 2 0.966387712065 6.3595420564e-02
6763 8 1.0000 3 1.364048610833 6.3073618021e-02
6764 8 1.0000 4 1.759609068364 6.2863779223e-02
6765 8 1.0000 5 2.154231042340 6.2758829618e-02
6766 8 1.0000 6 2.548352632577 6.2698953475e-02
6767 8 1.0000 7 2.942176853856 6.2661729954e-02
6768 8 1.0000 8 3.335809701748 6.2637086164e-02
6769 8 1.0000 9 3.729314788296 6.2620156619e-02
6770 8 1.0000 10 4.122726279872 6.2607296680e-02
6771 8 1.0000 11 4.516072836607 6.2599244611e-02
6772 8 1.0000 12 4.909374362568 6.2592458371e-02
6773 8 1.0000 13 5.302635341579 6.2586549565e-02
6774 8 1.0000 14 5.695868457680 6.2584206901e-02
6775 8 1.0000 15 6.089094583077 6.2582607275e-02
6776 8 1.0000 16 6.482298416328 6.2578704887e-02
6777 8 1.0000 17 6.875495020878 6.2579429234e-02
6778 8 1.0000 18 7.268686818940 6.2577742961e-02
6779 8 1.0000 19 7.661885441785 6.2581201280e-02
6780 8 1.0000 20 8.055091022969 6.2579678332e-02
6781 8 1.0000 21 8.448301836269 6.2583820839e-02
6782 8 1.0000 22 8.841529238036 6.2583717124e-02
6783 8 1.0000 23 9.234775840260 6.2592495894e-02
6784 8 1.0000 24 9.628077417783 6.2597354454e-02
6785 8 1.0000 25 10.021404355417 6.2604410542e-02
6786 8 1.0000 26 10.414792525863 6.2614779628e-02
6787 8 1.0000 27 10.808266456809 6.2634169912e-02
6788 8 1.0000 28 11.201873177950 6.2653775310e-02
6789 8 1.0000 29 11.595636815802 6.2690902381e-02
6790 8 1.0000 30 11.989709807418 6.2747277838e-02
6791 8 1.0000 31 12.384217390841 6.2841558933e-02
6792 8 1.0000 32 12.779617431856 6.3041546844e-02
6793 8 1.0000 33 13.176980424605 6.3528912044e-02
6794 8 1.0000 34 13.580554790445 6.5445683998e-02
6795 8 1.0000 35 14.094847764913 6.9252562370e-01
6796 8 1.0000 36 14.202969969499 4.2088584025e-01
6797 8 1.0000 37 14.708345985468 6.5433201552e-02
6798 8 1.0000 38 15.111913496220 6.3533665035e-02
6799 8 1.0000 39 15.509264140918 6.3032123074e-02
6800 8 1.0000 40 15.904626701973 6.2842707110e-02
6801 8 1.0000 41 16.299150348375 6.2746749841e-02
6802 8 1.0000 42 16.693204960528 6.2690088959e-02
6803 8 1.0000 43 17.086968937564 6.2654223027e-02
6804 8 1.0000 44 17.480581318301 6.2636374031e-02
6805 8 1.0000 45 17.874051502220 6.2612041761e-02
6806 8 1.0000 46 18.267428815505 6.2605793340e-02
6807 8 1.0000 47 18.660755683433 6.2595142229e-02
6808 8 1.0000 48 19.054052705394 6.2596884846e-02
6809 8 1.0000 49 19.447327650352 6.2587635909e-02
6810 8 1.0000 50 19.840586200845 6.2593511165e-02
6811 8 1.0000 51 20.233834659117 6.2579305236e-02
6812 8 1.0000 52 20.626999956094 6.2576294983e-02
6813 8 1.0000 53 21.021929982375 1.0625751252e+00
6814 8 1.0000 54 21.413379192045 6.2585167915e-02
6815 8 1.0000 55 21.806605196763 6.2584455883e-02
6816 8 1.0000 56 22.199854564813 6.2599154111e-02
6817 8 1.0000 57 22.593178721387 6.2596135670e-02
6818 8 1.0000 58 22.986474895238 6.2604794950e-02
6819 8 1.0000 59 23.379959440874 6.2642000370e-02
6820 8 1.0000 60 23.773626634547 6.2679602066e-02
6821 8 1.0000 61 24.167825459647 6.2824121922e-02
6822 8 1.0000 62 24.563791020491 6.3377260116e-02
6823 8 1.0000 63 25.007017111562 1.0572681037e+00
6824 8 1.0000 64 25.332035355310 6.5339734664e-02
6825 8 1.0000 65 25.732041614218 6.3011237184e-02
6826 8 1.0000 66 26.126916370552 6.2747527183e-02
6827 8 1.0000 67 26.520885249811 6.2677826757e-02
6828 8 1.0000 68 26.914560718215 6.2630513639e-02
6829 8 1.0000 69 27.307907209836 6.2601071215e-02
6830 8 1.0000 70 27.701404922723 6.2648454155e-02
6831 8 1.0000 71 28.094883999469 6.2598286405e-02
6832 8 1.0000 72 28.488261529262 6.2631859212e-02
6833 8 1.0000 73 28.881737108795 6.2619924326e-02
6834 8 1.0000 74 29.275271303835 6.2674259619e-02
6835 8 1.0000 75 29.669327169314 6.2750807732e-02
6836 8 1.0000 76 30.064180332164 6.3113352823e-02
6837 8 1.0000 77 30.426702931982 1.0614780054e+00
6838 8 1.0000 78 30.847280356490 6.2974074116e-02
6839 8 1.0000 79 31.242365290016 6.2858198500e-02
6840 8 1.0000 80 31.637542432314 6.2965985355e-02
6841 8 1.0000 81 32.034029923409 6.3320097188e-02
6842 8 1.0000 82 32.435170415826 6.4775361407e-02
6843 8 1.0000 83 32.924033308354 1.0204237950e+00
6844 8 1.0000 84 33.139560787619 9.6481577369e-02
6845 8 1.0000 85 33.578532278912 6.4484761084e-02
6846 8 1.0000 86 33.978847870379 6.3281791933e-02
6847 8 1.0000 87 34.375149644541 6.2922868836e-02
6848 8 1.0000 88 34.769971810293 6.2819455932e-02
6849 8 1.0000 89 35.164670975202 6.2785413800e-02
6850 8 1.0000 90 35.558783392727 6.2709473181e-02
6851 8 1.0000 91 35.952978453023 6.2784975428e-02
6852 8 1.0000 92 36.347213472833 6.2735970951e-02
6853 8 1.0000 93 36.741929808717 6.2971020101e-02
6854 8 1.0000 94 37.138700809303 6.3478265078e-02
6855 8 1.0000 95 37.582337775999 1.0573721200e+00
6856 8 1.0000 96 37.908124692978 6.5478037893e-02
6857 8 1.0000 97 38.309035850700 6.3155103342e-02
6858 8 1.0000 98 38.704830844772 6.2930271112e-02
6859 8 1.0000 99 39.100229468860 6.2960173229e-02
6860 8 1.0000 100 39.496007394651 6.3054053079e-02
6861 8 1.0000 101 39.893227545987 6.3463944965e-02
6862 8 1.0000 102 40.295341246279 6.4965706997e-02
6863 8 1.0000 103 40.753133327020 1.2698302354e-01
6864 8 1.0000 104 40.933604105434 9.8869521638e-01
6865 8 1.0000 105 41.434084857715 6.5171179220e-02
6866 8 1.0000 106 41.837115029853 6.3634955857e-02
6867 8 1.0000 107 42.235930647968 6.3436184258e-02
6868 8 1.0000 108 42.634865200888 6.3769447551e-02
6869 8 1.0000 109 43.046702763802 7.1136390314e-02
6870 8 1.0000 110 43.333157533234 1.0496086941e+00
6871 8 1.0000 111 43.796569843312 6.4103067656e-02
6872 8 1.0000 112 44.195504296740 6.3198179503e-02
6873 8 1.0000 113 44.591650593012 6.2952094391e-02
6874 8 1.0000 114 44.986469990303 6.2811662275e-02
6875 8 1.0000 115 45.381010741167 6.2865727930e-02
6876 8 1.0000 116 45.776045991693 6.2856297485e-02
6877 8 1.0000 117 46.170790292533 6.2876098466e-02
6878 8 1.0000 118 46.565952533201 6.3018270819e-02
6879 8 1.0000 119 46.962951025400 6.3433888218e-02
6880 8 1.0000 120 47.364296650292 6.4625025411e-02
6881 8 1.0000 121 47.806405570582 1.0034252313e-01
6882 8 1.0000 122 48.016763145100 1.0166048404e+00
6883 8 1.0000 123 48.508383701347 6.4982303767e-02
6884 8 1.0000 124 48.911643920430 6.3827333114e-02
6885 8 1.0000 125 49.312513212663 6.4181587360e-02
6886 8 1.0000 126 49.768820015155 1.0540179958e+00
6887 8 1.0000 127 50.074642565005 6.8003676740e-02
6888 8 1.0000 128 50.481154084026 6.3507225634e-02
6889 8 1.0000 129 50.878214306606 6.3038808238e-02
6890 8 1.0000 130 51.274382447929 6.3169406828e-02
6891 8 1.0000 131 51.670631017830 6.3099951531e-02
6892 8 1.0000 132 52.067741571324 6.3412699810e-02
6893 8 1.0000 133 52.469461682930 6.4931544515e-02
6894 8 1.0000 134 52.959223798007 1.0202395008e+00
6895 8 1.0000 135 53.174654120363 9.6893493751e-02
6896 8 1.0000 136 53.614381604351 6.4676022001e-02
6897 8 1.0000 137 54.015293574020 6.3302061251e-02
6898 8 1.0000 138 54.411822804944 6.3092633640e-02
6899 8 1.0000 139 54.807599776747 6.3040470136e-02
6900 8 1.0000 140 55.203197759492 6.2972100615e-02
6901 8 1.0000 141 55.599012218060 6.3095104667e-02
6902 8 1.0000 142 55.996234391161 6.3729517442e-02
6903 8 1.0000 143 56.442245466259 1.0570256664e+00
6904 8 1.0000 144 56.765788535223 6.5963695373e-02
6905 8 1.0000 145 57.168380533985 6.3307471811e-02
6906 8 1.0000 146 57.565205460219 6.3201831815e-02
6907 8 1.0000 147 57.962577290985 6.3339591869e-02
6908 8 1.0000 148 58.360749845442 6.3796220593e-02
6909 8 1.0000 149 58.766213592356 6.5808823125e-02
6910 8 1.0000 150 59.270827580799 3.7270302119e-01
6911 8 1.0000 151 59.383286327413 7.4167975321e-01
6912 8 1.0000 152 59.902541820647 6.6400657314e-02
6913 8 1.0000 153 60.315608202828 6.6057736752e-02
6914 8 1.0000 154 60.817754198149 9.9821006957e-01
6915 8 1.0000 155 61.007672709266 1.1855726554e-01
6916 8 1.0000 156 61.462565563796 6.5160804576e-02
6917 8 1.0000 157 61.865428619059 6.3652357822e-02
6918 8 1.0000 158 62.262874684872 6.3136852996e-02
6919 8 1.0000 159 62.659382057669 6.3138375411e-02
6920 8 1.0000 160 63.055037337562 6.2845370587e-02
6921 8 1.0000 161 63.450036811232 6.3004836994e-02
6922 8 1.0000 162 63.845844050702 6.3176260346e-02
6923 8 1.0000 163 64.241824944627 6.3472459328e-02
6924 8 1.0000 164 64.641633817161 6.4220046093e-02
6925 8 1.0000 165 65.106334234345 1.0493343632e+00
6926 8 1.0000 166 65.391308845968 7.1485158560e-02
6927 8 1.0000 167 65.803967853494 6.4200935950e-02
6928 8 1.0000 168 66.204282626306 6.3564207962e-02
6929 8 1.0000 169 66.604359910809 6.4398169603e-02
6930 8 1.0000 170 67.073232171626 1.0478336406e+00
6931 8 1.0000 171 67.351975945826 7.2774896853e-02
6932 8 1.0000 172 67.767017636739 6.4200836416e-02
6933 8 1.0000 173 68.167204263160 6.3748568339e-02
6934 8 1.0000 174 68.566837128674 6.3929787685e-02
6935 8 1.0000 175 68.972228007715 6.5865444819e-02
6936 8 1.0000 176 69.479357548299 4.3201412391e-01
6937 8 1.0000 177 69.587375259263 6.8175488213e-01
6938 8 1.0000 178 70.102863946244 6.5670080995e-02
6939 8 1.0000 179 70.507386048304 6.3663555682e-02
6940 8 1.0000 180 70.904275725476 6.3458100974e-02
6941 8 1.0000 181 71.301420062623 6.3252697843e-02
6942 8 1.0000 182 71.696419109994 6.3100282323e-02
6943 8 1.0000 183 72.068509211082 1.0623677633e+00
6944 8 1.0000 184 72.484132305709 6.3333157666e-02
6945 8 1.0000 185 72.878704009366 6.2816709640e-02
6946 8 1.0000 186 73.272383884225 6.2792345250e-02
6947 8 1.0000 187 73.666869547719 6.2826269550e-02
6948 8 1.0000 188 74.061103795636 6.2997589028e-02
6949 8 1.0000 189 74.456692661479 6.3150011373e-02
6950 8 1.0000 190 74.851110851966 6.3069031694e-02
6951 8 1.0000 191 75.249391951075 6.3918352101e-02
6952 8 1.0000 192 75.700185539622 1.0556057698e+00
6953 8 1.0000 193 76.014549539882 6.7055366589e-02
6954 8 1.0000 194 76.419034652377 6.4006371853e-02
6955 8 1.0000 195 76.823397614313 6.6237887434e-02
6956 8 1.0000 196 77.148835133295 1.0574889475e+00
6957 8 1.0000 197 77.594813167804 6.4112578311e-02
6958 8 1.0000 198 77.994819352997 6.3638889516e-02
6959 8 1.0000 199 78.393850754253 6.3735204247e-02
6960 8 1.0000 200 78.798596172350 6.6046255449e-02
6961 8 1.0000 201 79.312039039100 8.7453544204e-01
6962 8 1.0000 202 79.443141730310 2.3985795420e-01
6963 8 1.0000 203 79.932571898674 6.5875488680e-02
6964 8 1.0000 204 80.337691655371 6.4148970432e-02
6965 8 1.0000 205 80.735375383224 6.3370342405e-02
6966 8 1.0000 206 81.133021738478 6.3643657151e-02
6967 8 1.0000 207 81.529022161499 6.3462053818e-02
6968 8 1.0000 208 81.928549911382 6.3923750125e-02
6969 8 1.0000 209 82.333438812201 6.5635523315e-02
6970 8 1.0000 210 82.838301493077 4.0054081051e-01
6971 8 1.0000 211 82.948819385464 7.1415511038e-01
6972 8 1.0000 212 83.465792365165 6.6032506266e-02
6973 8 1.0000 213 83.871814155017 6.4408894399e-02
6974 8 1.0000 214 84.272778879511 6.4662113493e-02
6975 8 1.0000 215 84.730476412623 1.0543538974e+00
6976 8 1.0000 216 85.036555172919 6.7900598840e-02
6977 8 1.0000 217 85.442867689678 6.3689657035e-02
6978 8 1.0000 218 85.840891211487 6.3458655998e-02
6979 8 1.0000 219 86.237246499083 6.3148397522e-02
6980 8 1.0000 220 86.631240542079 6.3492876098e-02
6981 8 1.0000 221 87.028370153630 6.3222337768e-02
6982 8 1.0000 222 87.425271704634 1.0633975792e+00
6983 8 1.0000 223 87.822266925782 6.4571987907e-02
6984 8 1.0000 224 88.226356410331 6.6204895936e-02
6985 8 1.0000 225 88.727726978064 3.4123603288e-01
6986 8 1.0000 226 88.842621709442 7.7283052459e-01
6987 8 1.0000 227 89.357530551970 6.5743214910e-02
6988 8 1.0000 228 89.762746409563 6.4358290519e-02
6989 8 1.0000 229 90.159782085420 6.3408831135e-02
6990 8 1.0000 230 90.555339541170 6.3191091149e-02
6991 8 1.0000 231 90.951492082127 6.3187827349e-02
6992 8 1.0000 232 91.345807415791 6.3990658591e-02
6993 8 1.0000 233 91.742526944776 6.3323208507e-02
6994 8 1.0000 234 92.141265920860 6.4083305900e-02
6995 8 1.0000 235 92.494403895501 1.0613421404e+00
6996 8 1.0000 236 92.922617998443 6.3897497724e-02
6997 8 1.0000 237 93.321201578344 6.3704839606e-02
6998 8 1.0000 238 93.720995575928 6.3798937415e-02
6999 8 1.0000 239 94.123813885484 6.5771273514e-02
7000 8 1.0000 240 94.633267852930 9.6330737745e-01
7001 8 1.0000 241 94.798693669252 1.5448192998e-01

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