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 11 of 30 · 500/page · 14949 rows next →
# atheta_over_pikz_kw_k
5002 8 0.5000 378 148.622231978478 6.3802688552e-02
5003 8 0.5000 379 149.017240084580 6.6224945186e-02
5004 8 0.5000 380 149.417295059424 7.5341145995e-02
5005 8 0.5000 381 149.882604313400 1.2956003074e-01
5006 8 0.5000 382 150.069864054599 9.9659093700e-01
5007 8 0.5000 383 150.561247834699 6.8246124251e-02
5008 8 0.5000 384 150.927681636798 1.0645731866e+00
5009 8 0.5000 385 151.368014176795 6.9079506597e-02
5010 8 0.5000 386 151.745425851971 6.9007336760e-02
5011 8 0.5000 387 152.150921843536 6.5825323764e-02
5012 8 0.5000 388 152.562880319879 7.1861598710e-02
5013 8 0.5000 389 153.016558599650 1.0462165238e+00
5014 8 0.5000 390 153.284021632336 7.8976143683e-02
5015 8 0.5000 391 153.708312158149 6.6028390765e-02
5016 8 0.5000 392 154.105022544100 6.5908071193e-02
5017 8 0.5000 393 154.500602621877 7.6310052370e-02
5018 8 0.5000 394 154.898296766275 6.4115791196e-02
5019 8 0.5000 395 155.302901030923 6.8152921866e-02
5020 8 0.5000 396 155.673724186844 7.0221228552e-02
5021 8 0.5000 397 156.110365421081 1.0645117087e+00
5022 8 0.5000 398 156.469828400405 6.4826288612e-02
5023 8 0.5000 399 156.867532398846 6.4525498647e-02
5024 8 0.5000 400 157.273012410458 6.8538970848e-02
5025 8 0.5000 401 157.600616005710 1.0713056377e+00
5026 8 0.5000 402 158.041326979888 6.6047508760e-02
5027 8 0.5000 403 158.438990874811 6.5123395799e-02
5028 8 0.5000 404 158.848091602574 1.0749330310e+00
5029 8 0.5000 405 159.219551872568 6.6552295560e-02
5030 8 0.5000 406 159.619806345304 6.3961048080e-02
5031 8 0.5000 407 160.013231742556 6.3915181404e-02
5032 8 0.5000 408 160.409921921206 6.5311045318e-02
5033 8 0.5000 409 160.818372896439 7.6919586660e-02
5034 8 0.5000 410 161.189630298933 1.0655308787e+00
5035 8 0.5000 411 161.613095451204 7.4971933684e-02
5036 8 0.5000 412 161.980605606725 6.8858825640e-02
5037 8 0.5000 413 162.396360059180 7.1060079375e-02
5038 8 0.5000 414 162.802503909465 1.0376654306e-01
5039 8 0.5000 415 163.041528797225 1.0273100610e+00
5040 8 0.5000 416 163.529808026278 6.6292948255e-02
5041 8 0.5000 417 163.937159776665 6.6916461562e-02
5042 8 0.5000 418 164.317200588869 7.9519194504e-02
5043 8 0.5000 419 164.721334503110 6.6379423211e-02
5044 8 0.5000 420 165.120215225232 6.4576192854e-02
5045 8 0.5000 421 165.535696344318 1.0642861011e+00
5046 8 0.5000 422 165.913413337002 6.6169112180e-02
5047 8 0.5000 423 166.295549857178 8.1820019249e-02
5048 8 0.5000 424 166.707634913165 6.6418251383e-02
5049 8 0.5000 425 167.177466743002 1.0487069537e+00
5050 8 0.5000 426 167.450126489638 7.5944421862e-02
5051 8 0.5000 427 167.868401106078 6.7045335436e-02
5052 8 0.5000 428 168.263196145446 8.2772799400e-02
5053 8 0.5000 429 168.685938401438 7.8448326735e-02
5054 8 0.5000 430 169.091213498007 1.0667955328e+00
5055 8 0.5000 431 169.446413862087 6.7681492227e-02
5056 8 0.5000 432 169.907145660742 1.0580900354e+00
5057 8 0.5000 433 170.235971723353 7.8937997381e-02
5058 8 0.5000 434 170.601807471979 7.4097629283e-02
5059 8 0.5000 435 171.012358873839 6.5685045113e-02
5060 8 0.5000 436 171.411950851117 6.7793676539e-02
5061 8 0.5000 437 171.826505750694 7.4374040738e-02
5062 8 0.5000 438 172.181566961498 7.2771844359e-02
5063 8 0.5000 439 172.591760167408 6.5936604643e-02
5064 8 0.5000 440 172.995234751371 6.6420092161e-02
5065 8 0.5000 441 173.408474460147 1.0853846118e+00
5066 8 0.5000 442 173.783700796553 6.9039667888e-02
5067 8 0.5000 443 174.214125395017 8.4569425746e-02
5068 8 0.5000 444 174.684025007773 4.4961220409e-01
5069 8 0.5000 445 174.798818364890 6.7407498735e-01
5070 8 0.5000 446 175.316158958953 6.8491824503e-02
5071 8 0.5000 447 175.725929975714 6.7159745672e-02
5072 8 0.5000 448 176.139243879352 7.0652071376e-02
5073 8 0.5000 449 176.446774948230 1.0583250807e+00
5074 8 0.5000 450 176.907999961524 9.0119682573e-02
5075 8 0.5000 451 177.307864534077 6.7014711307e-02
5076 8 0.5000 452 177.710661821450 6.8745417056e-02
5077 8 0.5000 453 178.151246445299 1.1104258422e-01
5078 8 0.5000 454 178.386927983249 1.0373488413e+00
5079 8 0.5000 455 178.878113693427 6.9664619028e-02
5080 8 0.5000 456 179.255067845893 8.9526887452e-02
5081 8 0.5000 457 179.733407999614 1.1961817892e-01
5082 8 0.5000 458 179.930386257380 1.0054071777e+00
5083 8 0.5000 459 180.434796528379 6.9096023231e-02
5084 8 0.5000 460 180.852557845916 9.5805600999e-02
5085 8 0.5000 461 181.263404236815 7.7121520754e-02
5086 8 0.5000 462 181.622015657392 8.3874153693e-02
5087 8 0.5000 463 182.150805450658 5.4738643289e-01
5088 8 0.5000 464 182.260255164943 5.7304981133e-01
5089 8 0.5000 465 182.781035494302 7.1059040649e-02
5090 8 0.5000 466 183.185996046815 6.7745544513e-02
5091 8 0.5000 467 183.587174838292 6.5272599500e-02
5092 8 0.5000 468 183.990980079400 9.6877591742e-02
5093 8 0.5000 469 184.396379912954 7.0259318299e-02
5094 8 0.5000 470 184.867399233141 1.0503186969e+00
5095 8 0.5000 471 185.162308992275 8.5100803814e-02
5096 8 0.5000 472 185.592026703616 1.0788563331e+00
5097 8 0.5000 473 185.922004071872 7.4293324941e-02
5098 8 0.5000 474 186.342687125131 7.1071330534e-02
5099 8 0.5000 475 186.710452628377 9.7409026284e-02
5100 8 0.5000 476 187.220071905685 1.0398365326e+00
5101 8 0.5000 477 187.470918004601 8.5310578827e-02
5102 8 0.5000 478 187.904881369113 6.8455904566e-02
5103 8 0.5000 479 188.333329747285 9.8257088665e-02
5104 8 0.5000 480 188.695686916451 7.1177876595e-02
5105 8 0.5000 481 189.123325354400 7.6923485375e-02
5106 8 0.5000 482 189.423489582816 1.0617833129e+00
5107 8 0.5000 483 189.836004833167 9.0528246013e-02
5108 8 0.5000 484 190.260988556153 6.9307130417e-02
5109 8 0.5000 485 190.684490843990 1.0126805082e-01
5110 8 0.5000 486 191.056983663070 7.1032157594e-02
5111 8 0.5000 487 191.469336503579 6.9258768153e-02
5112 8 0.5000 488 191.988339865273 7.4343890839e-01
5113 8 0.5000 489 192.110503904363 4.1552830827e-01
5114 8 0.5000 490 192.605655414031 7.3185825476e-02
5115 8 0.5000 491 193.074748491257 1.0590481967e+00
5116 8 0.5000 492 193.394699917376 7.5071930106e-02
5117 8 0.5000 493 193.807285050006 7.1138727867e-02
5118 8 0.5000 494 194.226646517402 8.0830886167e-02
5119 8 0.5000 495 194.564958261560 9.0838943224e-02
5120 8 0.5000 496 195.021806156696 8.8647844335e-02
5121 8 0.5000 497 195.274727055712 1.0398048474e+00
5122 8 0.5000 498 195.758778666562 6.8436487644e-02
5123 8 0.5000 499 196.172673621536 1.1417890400e-01
5124 8 0.5000 500 196.594779845105 8.3584379150e-02
5125 8 0.5000 501 196.887394540966 1.0828526088e+00
5126 8 0.5000 502 197.321567060670 7.3721735980e-02
5127 8 0.5000 503 197.757083028465 8.8991594881e-02
5128 8 0.5000 504 198.022625229851 1.0876942868e+00
5129 8 0.5000 505 198.503000560340 7.0332005496e-02
5130 8 0.5000 506 198.899192685369 6.8840593282e-02
5131 8 0.5000 507 199.308467249824 6.7610012659e-02
5132 8 0.5000 508 199.704285967502 6.9340113162e-02
5133 8 0.5000 509 200.130433075047 1.1322986974e-01
5134 8 0.5000 510 200.483494326336 7.0156379316e-02
5135 8 0.5000 511 200.913261345445 8.3723636374e-02
5136 8 0.5000 512 201.261261414262 1.0966001854e+00
5137 8 0.5000 513 201.657681069145 7.1818920998e-02
5138 8 0.5000 514 202.056180036740 6.7852894024e-02
5139 8 0.5000 515 202.491528814917 1.0699959827e+00
5140 8 0.5000 516 202.854403149643 6.7764337603e-02
5141 8 0.5000 517 203.257151816523 1.2413862641e-01
5142 8 0.5000 518 203.664015829928 7.1372033630e-02
5143 8 0.5000 519 204.173784028716 1.0014623825e+00
5144 8 0.5000 520 204.394768792988 1.4895145922e-01
5145 8 0.5000 521 204.768657659657 1.0200167570e-01
5146 8 0.5000 522 205.323349954924 4.4875945089e-01
5147 8 0.5000 523 205.439827543640 6.7779037057e-01
5148 8 0.5000 524 205.975309167876 7.7716003874e-02
5149 8 0.5000 525 206.321542845156 1.1985243920e-01
5150 8 0.5000 526 206.758254719975 6.9752365403e-02
5151 8 0.5000 527 207.161693260605 6.9332848876e-02
5152 8 0.5000 528 207.603375673248 1.1970405535e-01
5153 8 0.5000 529 207.908444165667 1.0740314824e+00
5154 8 0.5000 530 208.382735495487 1.2257844794e-01
5155 8 0.5000 531 208.715468014825 7.6873487287e-02
5156 8 0.5000 532 209.123564671907 7.2426883299e-02
5157 8 0.5000 533 209.572626011820 1.0650700768e+00
5158 8 0.5000 534 209.919452545160 1.3800962185e-01
5159 8 0.5000 535 210.314928351981 6.9111305504e-02
5160 8 0.5000 536 210.715455992930 6.8555492543e-02
5161 8 0.5000 537 211.126762103773 7.6425327269e-02
5162 8 0.5000 538 211.642529560483 6.3417746090e-01
5163 8 0.5000 539 211.754803117495 4.9172646488e-01
5164 8 0.5000 540 212.269521516108 7.3909064247e-02
5165 8 0.5000 541 212.726021677934 1.1324179673e-01
5166 8 0.5000 542 213.051240167666 1.1129304167e-01
5167 8 0.5000 543 213.353094198272 1.1177707776e+00
5168 8 0.5000 544 213.829163262166 7.3496011877e-02
5169 8 0.5000 545 214.246522851472 7.7358712158e-02
5170 8 0.5000 546 214.553262635568 1.0575742699e+00
5171 8 0.5000 547 215.034789907865 1.4477186390e-01
5172 8 0.5000 548 215.425557654635 7.1755130316e-02
5173 8 0.5000 549 215.844451304674 8.1801914925e-02
5174 8 0.5000 550 216.179361629346 1.1051764183e+00
5175 8 0.5000 551 216.537623364614 9.6421093889e-02
5176 8 0.5000 552 216.975546640754 7.1822416684e-02
5177 8 0.5000 553 217.381583757032 7.0548524250e-02
5178 8 0.5000 554 217.791814407660 1.5268805669e-01
5179 8 0.5000 555 218.173001673140 7.0447157066e-02
5180 8 0.5000 556 218.581327229617 7.3772009191e-02
5181 8 0.5000 557 219.059493021196 1.0484945999e+00
5182 8 0.5000 558 219.348941089779 1.6607785310e-01
5183 8 0.5000 559 219.739154283195 7.7491235649e-02
5184 8 0.5000 560 220.163388203508 7.9275029341e-02
5185 8 0.5000 561 220.685449077922 8.9543102060e-01
5186 8 0.5000 562 220.814062751480 3.2201450728e-01
5187 8 0.5000 563 221.417165993626 1.0222992892e+00
5188 8 0.5000 564 221.634230515596 1.1613257590e-01
5189 8 0.5000 565 222.087828631646 7.5630561545e-02
5190 8 0.5000 566 222.484818563699 7.3472801519e-02
5191 8 0.5000 567 222.902455032806 7.8041850448e-02
5192 8 0.5000 568 223.236985240204 1.5391456621e-01
5193 8 0.5000 569 223.703145385075 8.3313316049e-02
5194 8 0.5000 570 224.018324770402 1.1493926017e+00
5195 8 0.5000 571 224.466569371202 7.5953382439e-02
5196 8 0.5000 572 224.970075752280 1.0378563397e+00
5197 8 0.5000 573 225.233095745883 1.2885293160e-01
5198 8 0.5000 574 225.562168505980 1.4211208613e-01
5199 8 0.5000 575 226.008145742985 7.5259690600e-02
5200 8 0.5000 576 226.452009494769 1.7165313524e-01
5201 8 0.5000 577 226.833816335496 7.9615999584e-02
5202 8 0.5000 578 227.331936408711 3.4118064947e-01
5203 8 0.5000 579 227.456935073938 7.9207253355e-01
5204 8 0.5000 580 227.986455205261 7.9169931429e-02
5205 8 0.5000 581 228.356010135879 1.8002957600e-01
5206 8 0.5000 582 228.794920547557 7.7684229454e-02
5207 8 0.5000 583 229.305943356338 8.5227592092e-01
5208 8 0.5000 584 229.441606430261 2.8267539960e-01
5209 8 0.5000 585 229.937255175464 7.5128970988e-02
5210 8 0.5000 586 230.380561465651 1.8639924757e-01
5211 8 0.5000 587 230.750171978867 7.8559414617e-02
5212 8 0.5000 588 231.239400187476 1.0420295223e+00
5213 8 0.5000 589 231.491332754229 1.0005077527e-01
5214 8 0.5000 590 231.977050589377 1.1809817100e+00
5215 8 0.5000 591 232.293869968909 8.2531797296e-02
5216 8 0.5000 592 232.726850279165 1.9685265305e-01
5217 8 0.5000 593 233.118457956586 7.8050692628e-02
5218 8 0.5000 594 233.640550913633 6.1234175022e-01
5219 8 0.5000 595 233.756811088052 5.2338091288e-01
5220 8 0.5000 596 234.277819068138 7.7531393771e-02
5221 8 0.5000 597 234.737673630990 1.2358024477e-01
5222 8 0.5000 598 235.001787907319 1.5061166531e-01
5223 8 0.5000 599 235.469929220141 7.9175581878e-02
5224 8 0.5000 600 235.931915177816 1.3987377890e-01
5225 8 0.5000 601 236.222983601289 1.6491242242e-01
5226 8 0.5000 602 236.538283686251 1.0585230207e+00
5227 8 0.5000 603 236.926173247189 1.8884458856e-01
5228 8 0.5000 604 237.390188022687 8.0871317342e-02
5229 8 0.5000 605 237.771884627069 1.0741542887e+00
5230 8 0.5000 606 238.190309578383 8.1162823321e-02
5231 8 0.5000 607 238.599022365211 7.4825539634e-02
5232 8 0.5000 608 239.015118038662 7.8643931375e-02
5233 8 0.5000 609 239.510978104973 9.4174115862e-01
5234 8 0.5000 610 239.649814956730 3.4362456442e-01
5235 8 0.5000 611 240.162368979819 8.1198687971e-02
5236 8 0.5000 612 240.564553609091 8.2189717905e-02
5237 8 0.5000 613 241.045517616521 1.1887056654e+00
5238 8 0.5000 614 241.301412945156 1.0360256563e-01
5239 8 0.5000 615 241.741391844647 7.7172193983e-02
5240 8 0.5000 616 242.151594068319 8.3790214833e-02
5241 8 0.5000 617 242.496256710495 2.3788475978e-01
5242 8 0.5000 618 242.831630362301 1.0598367140e+00
5243 8 0.5000 619 243.341227573856 2.3098135856e-01
5244 8 0.5000 620 243.693697246900 8.5035717557e-02
5245 8 0.5000 621 244.072769606447 1.0790636904e+00
5246 8 0.5000 622 244.490368185366 7.6323045362e-02
5247 8 0.5000 623 244.876489218574 2.4634834464e-01
5248 8 0.5000 624 245.286684045223 7.6613744305e-02
5249 8 0.5000 625 245.675340761777 7.9859654105e-02
5250 8 0.5000 626 246.077811535445 8.1074350702e-02
5251 8 0.5000 627 246.494745475717 8.1837307597e-02
5252 8 0.5000 628 246.864875738977 2.7625876665e-01
5253 8 0.5000 629 247.148968972945 1.0399909676e+00
5254 8 0.5000 630 247.646009725338 8.7192547099e-02
5255 8 0.5000 631 248.096744463926 1.0724216173e+00
5256 8 0.5000 632 248.436850292818 2.6912990584e-01
5257 8 0.5000 633 248.826229618892 8.0185578030e-02
5258 8 0.5000 634 249.245265796724 8.8623113752e-02
5259 8 0.5000 635 249.580508511962 1.0861670140e+00
5260 8 0.5000 636 249.927500786724 2.4457379549e-01
5261 8 0.5000 637 250.401969324136 8.3363002539e-02
5262 8 0.5000 638 250.901355758821 2.6635290927e-01
5263 8 0.5000 639 251.044587901545 8.8579774664e-01
5264 8 0.5000 640 251.559998611097 8.2996034810e-02
5265 8 0.5000 641 251.989294189771 2.8548670803e-01
5266 8 0.5000 642 252.445666609261 2.5879174836e-01
5267 8 0.5000 643 252.729104990098 1.0676091016e-01
5268 8 0.5000 644 253.076268147792 1.0709723377e+00
5269 8 0.5000 645 253.536045199823 8.2507485251e-02
5270 8 0.5000 646 253.947731018648 8.6884855491e-02
5271 8 0.5000 647 254.406894656546 2.7038115421e-01
5272 8 0.5000 648 254.695380602097 1.0229213614e-01
5273 8 0.5000 649 255.237703240499 6.8083186675e-01
5274 8 0.5000 650 255.353732978926 6.9443130614e-01
5275 8 0.5000 651 255.880072915963 9.4147194755e-02
5276 8 0.5000 652 256.371310132173 1.0563646926e+00
5277 8 0.5000 653 256.645529191961 9.8441327956e-02
5278 8 0.5000 654 257.054130007932 8.9757236874e-02
5279 8 0.5000 655 257.466081001835 8.0506485095e-02
5280 8 0.5000 656 257.862973529743 8.3737363013e-02
5281 8 0.5000 657 258.268538667782 3.2066940556e-01
5282 8 0.5000 658 258.614293423654 1.0834334857e+00
5283 8 0.5000 659 259.076241868778 9.7005920984e-02
5284 8 0.5000 660 259.380038292309 3.0933890547e-01
5285 8 0.5000 661 259.872173839047 1.0849992833e+00
5286 8 0.5000 662 260.299205198451 3.3303866188e-01
5287 8 0.5000 663 260.739143583374 5.6440790350e-01
5288 8 0.5000 664 260.864806066662 5.9125326781e-01
5289 8 0.5000 665 261.386290627395 9.4761683789e-02
5290 8 0.5000 666 261.808695020517 8.9836314331e-02
5291 8 0.5000 667 262.129684296524 3.3828302051e-01
5292 8 0.5000 668 262.577996346247 9.1570280534e-02
5293 8 0.5000 669 262.996902836921 8.7491428130e-02
5294 8 0.5000 670 263.514376806054 6.4728393454e-01
5295 8 0.5000 671 263.625613748156 7.8329941313e-01
5296 8 0.5000 672 264.134494393095 9.5987585094e-02
5297 8 0.5000 673 264.556128646533 8.7399380326e-02
5298 8 0.5000 674 264.980519324157 3.7578550056e-01
5299 8 0.5000 675 265.454678588879 3.3755475631e-01
5300 8 0.5000 676 265.595487168536 8.2023063615e-01
5301 8 0.5000 677 266.123583496005 8.9916918116e-02
5302 8 0.5000 678 266.604790762955 1.0807280816e+00
5303 8 0.5000 679 266.982215869442 3.6207173706e-01
5304 8 0.5000 680 267.257895653223 1.2328931603e-01
5305 8 0.5000 681 267.778985236620 2.3795966222e-01
5306 8 0.5000 682 267.950753626792 9.3062160011e-01
5307 8 0.5000 683 268.533953024328 3.6830373269e-01
5308 8 0.5000 684 268.804060376032 1.1358297373e-01
5309 8 0.5000 685 269.246946541368 9.1499143508e-02
5310 8 0.5000 686 269.681472378462 1.0078076920e-01
5311 8 0.5000 687 269.979491866410 1.0792652002e+00
5312 8 0.5000 688 270.385639766209 4.0962984956e-01
5313 8 0.5000 689 270.855726600022 1.0671045817e-01
5314 8 0.5000 690 271.195955862648 4.3359038345e-01
5315 8 0.5000 691 271.507207423356 1.0657643215e+00
5316 8 0.5000 692 272.020873399236 1.0455798417e-01
5317 8 0.5000 693 272.327723216317 4.1563982269e-01
5318 8 0.5000 694 272.789240920887 9.5942615528e-02
5319 8 0.5000 695 273.222450517340 1.2167367280e-01
5320 8 0.5000 696 273.472619654990 1.0488665444e+00
5321 8 0.5000 697 273.960471418274 1.0018905288e-01
5322 8 0.5000 698 274.364014213772 9.5180249522e-02
5323 8 0.5000 699 274.814951680454 4.5719289768e-01
5324 8 0.5000 700 275.158975822773 9.5926220194e-02
5325 8 0.5000 701 275.584007857595 1.0890939055e+00
5326 8 0.5000 702 275.962449324903 1.0165977270e-01
5327 8 0.5000 703 276.439972947596 1.4424073964e+00
5328 8 0.5000 704 276.694568192543 1.1726538554e-01
5329 8 0.5000 705 277.139540203768 9.4181628441e-02
5330 8 0.5000 706 277.537244393716 1.0049813340e-01
5331 8 0.5000 707 277.919113018097 5.0270815444e-01
5332 8 0.5000 708 278.259823516625 1.0792991982e+00
5333 8 0.5000 709 278.808310075163 1.8600370350e-01
5334 8 0.5000 710 279.123931468053 9.2666546673e-01
5335 8 0.5000 711 279.316173536129 5.5760229297e-01
5336 8 0.5000 712 279.847198183506 1.0778617419e-01
5337 8 0.6667 1 0.508934844829 6.5060560101e-02
5338 8 0.6667 2 0.911068352442 6.3392948825e-02
5339 8 0.6667 3 1.307821868206 6.2970434039e-02
5340 8 0.6667 4 1.702877237025 6.2801133653e-02
5341 8 0.6667 5 2.097176630939 6.2716738701e-02
5342 8 0.6667 6 2.491074125235 6.2668729395e-02
5343 8 0.6667 7 2.884733358460 6.2638901454e-02
5344 8 0.6667 8 3.278239603005 6.2619296254e-02
5345 8 0.6667 9 3.671643806126 6.2605612267e-02
5346 8 0.6667 10 4.064972992637 6.2595647599e-02
5347 8 0.6667 11 4.458253295196 6.2589501353e-02
5348 8 0.6667 12 4.851496662128 6.2583717518e-02
5349 8 0.6667 13 5.244707551381 6.2579488677e-02
5350 8 0.6667 14 5.637901905492 6.2578577635e-02
5351 8 0.6667 15 6.031090256082 6.2576125649e-02
5352 8 0.6667 16 6.424256444473 6.2573624384e-02
5353 8 0.6667 17 6.817423604500 6.2574657381e-02
5354 8 0.6667 18 7.210586944431 6.2573873813e-02
5355 8 0.6667 19 7.603761649799 6.2576735303e-02
5356 8 0.6667 20 7.996936441480 6.2575124184e-02
5357 8 0.6667 21 8.390121652473 6.2579499112e-02
5358 8 0.6667 22 8.783320161525 6.2579736896e-02
5359 8 0.6667 23 9.176547184976 6.2588991371e-02
5360 8 0.6667 24 9.569814470553 6.2590614565e-02
5361 8 0.6667 25 9.963101458334 6.2598290387e-02
5362 8 0.6667 26 10.356448122523 6.2607889560e-02
5363 8 0.6667 27 10.749876183525 6.2625401880e-02
5364 8 0.6667 28 11.143411172170 6.2640652465e-02
5365 8 0.6667 29 11.537090105696 6.2675725837e-02
5366 8 0.6667 30 11.931032751185 6.2720634934e-02
5367 8 0.6667 31 12.325344248297 6.2804766586e-02
5368 8 0.6667 32 12.720433891450 6.2974916870e-02
5369 8 0.6667 33 13.117186092384 6.3387701082e-02
5370 8 0.6667 34 13.519132541568 6.4972218921e-02
5371 8 0.6667 35 13.982829578539 1.4236388201e-01
5372 8 0.6667 36 14.151219611746 9.7267257222e-01
5373 8 0.6667 37 14.654035430167 6.5109144105e-02
5374 8 0.6667 38 15.056394980327 6.3417597823e-02
5375 8 0.6667 39 15.453235216205 6.2979035389e-02
5376 8 0.6667 40 15.848374018900 6.2819468538e-02
5377 8 0.6667 41 16.242790954304 6.2735017452e-02
5378 8 0.6667 42 16.636800608301 6.2687150310e-02
5379 8 0.6667 43 17.030574961848 6.2660451923e-02
5380 8 0.6667 44 17.424238461341 6.2645368614e-02
5381 8 0.6667 45 17.817786667042 6.2629832330e-02
5382 8 0.6667 46 18.211308324324 6.2632734044e-02
5383 8 0.6667 47 18.604833371249 6.2632877569e-02
5384 8 0.6667 48 18.998411461004 6.2648048741e-02
5385 8 0.6667 49 19.392071586444 6.2663174648e-02
5386 8 0.6667 50 19.785940201149 6.2716225066e-02
5387 8 0.6667 51 20.180269744816 6.2826285360e-02
5388 8 0.6667 52 20.576230516745 6.3375136930e-02
5389 8 0.6667 53 21.018333098222 1.0576707646e+00
5390 8 0.6667 54 21.346064352884 6.5146682966e-02
5391 8 0.6667 55 21.745874511036 6.3034405165e-02
5392 8 0.6667 56 22.141031057351 6.2810749461e-02
5393 8 0.6667 57 22.535425664932 6.2741679437e-02
5394 8 0.6667 58 22.929628451545 6.2753543311e-02
5395 8 0.6667 59 23.324095749654 6.2809858109e-02
5396 8 0.6667 60 23.719027213830 6.2928587301e-02
5397 8 0.6667 61 24.115327341630 6.3277133976e-02
5398 8 0.6667 62 24.515974138531 6.4627691031e-02
5399 8 0.6667 63 25.000842146375 1.0275897565e+00
5400 8 0.6667 64 25.228287017443 8.9840376230e-02
5401 8 0.6667 65 25.661526658731 6.4334889222e-02
5402 8 0.6667 66 26.061291164570 6.3208845862e-02
5403 8 0.6667 67 26.457332088915 6.2912047434e-02
5404 8 0.6667 68 26.852123340026 6.2767232812e-02
5405 8 0.6667 69 27.246261745906 6.2722230524e-02
5406 8 0.6667 70 27.640393134271 6.2720288704e-02
5407 8 0.6667 71 28.034218312263 6.2652179223e-02
5408 8 0.6667 72 28.427963146381 6.2684596507e-02
5409 8 0.6667 73 28.821723948130 6.2666057992e-02
5410 8 0.6667 74 29.215581281715 6.2722330257e-02
5411 8 0.6667 75 29.609767655595 6.2741069312e-02
5412 8 0.6667 76 30.004245755159 6.2917439211e-02
5413 8 0.6667 77 30.423181143954 1.0617076814e+00
5414 8 0.6667 78 30.788729082357 6.3186236584e-02
5415 8 0.6667 79 31.184630641907 6.2968382192e-02
5416 8 0.6667 80 31.580606476108 6.3118988803e-02
5417 8 0.6667 81 31.978384795573 6.3598602831e-02
5418 8 0.6667 82 32.382344780413 6.5513449767e-02
5419 8 0.6667 83 32.897225285347 7.1781164836e-01
5420 8 0.6667 84 33.007076896652 3.9574635559e-01
5421 8 0.6667 85 33.511297164124 6.5471510976e-02
5422 8 0.6667 86 33.915172483005 6.3610044971e-02
5423 8 0.6667 87 34.312936780910 6.3099201760e-02
5424 8 0.6667 88 34.708801909783 6.2974674004e-02
5425 8 0.6667 89 35.104240351487 6.2871217087e-02
5426 8 0.6667 90 35.498990613883 6.2839023630e-02
5427 8 0.6667 91 35.894085805935 6.2928964601e-02
5428 8 0.6667 92 36.289429938852 6.2980602749e-02
5429 8 0.6667 93 36.686323862609 6.3429957948e-02
5430 8 0.6667 94 37.087755076108 6.4746739996e-02
5431 8 0.6667 95 37.575486730503 1.0230385464e+00
5432 8 0.6667 96 37.795339260087 9.4166428563e-02
5433 8 0.6667 97 38.232662138111 6.4483005008e-02
5434 8 0.6667 98 38.633106406933 6.3323853518e-02
5435 8 0.6667 99 39.029902879267 6.3042161627e-02
5436 8 0.6667 100 39.425542764100 6.2938734943e-02
5437 8 0.6667 101 39.821225359128 6.3040226621e-02
5438 8 0.6667 102 40.218241046512 6.3488621976e-02
5439 8 0.6667 103 40.625636539929 6.8833002912e-02
5440 8 0.6667 104 40.924066610173 1.0524475751e+00
5441 8 0.6667 105 41.381459529130 6.3852397065e-02
5442 8 0.6667 106 41.779304508949 6.3078071590e-02
5443 8 0.6667 107 42.174872484235 6.2890027799e-02
5444 8 0.6667 108 42.569408100909 6.2795855397e-02
5445 8 0.6667 109 42.964736289487 6.3181201877e-02
5446 8 0.6667 110 43.328827058992 1.0615425397e+00
5447 8 0.6667 111 43.748127724813 6.2946687375e-02
5448 8 0.6667 112 44.142842156614 6.2795145961e-02
5449 8 0.6667 113 44.537018106527 6.2700171784e-02
5450 8 0.6667 114 44.930627949246 6.2676156871e-02
5451 8 0.6667 115 45.324530639743 6.2774736690e-02
5452 8 0.6667 116 45.718769030776 6.2704264459e-02
5453 8 0.6667 117 46.112631330355 6.2741286170e-02
5454 8 0.6667 118 46.506915366643 6.2859233546e-02
5455 8 0.6667 119 46.902302979196 6.3032305241e-02
5456 8 0.6667 120 47.299064940274 6.3367817398e-02
5457 8 0.6667 121 47.704975717789 6.8070117107e-02
5458 8 0.6667 122 48.010193643765 1.0538836660e+00
5459 8 0.6667 123 48.466302329541 6.4124693265e-02
5460 8 0.6667 124 48.867436936855 6.3832703999e-02
5461 8 0.6667 125 49.270645616167 6.5081027926e-02
5462 8 0.6667 126 49.762360695397 1.0177565252e+00
5463 8 0.6667 127 49.974491025731 9.9356796549e-02
5464 8 0.6667 128 50.416748544969 6.4728854445e-02
5465 8 0.6667 129 50.818395451320 6.3512891982e-02
5466 8 0.6667 130 51.216875393672 6.3421686901e-02
5467 8 0.6667 131 51.614438261806 6.3323526792e-02
5468 8 0.6667 132 52.013251984118 6.3755938497e-02
5469 8 0.6667 133 52.418185585350 6.5714045959e-02
5470 8 0.6667 134 52.934194797036 7.4022950406e-01
5471 8 0.6667 135 53.046057856209 3.7366684553e-01
5472 8 0.6667 136 53.549623504136 6.5682192873e-02
5473 8 0.6667 137 53.954125769660 6.3670653227e-02
5474 8 0.6667 138 54.352722636993 6.3376513801e-02
5475 8 0.6667 139 54.750099814146 6.3274572785e-02
5476 8 0.6667 140 55.147161737816 6.3239383841e-02
5477 8 0.6667 141 55.545127923408 6.3545299912e-02
5478 8 0.6667 142 55.947184294530 6.5015478902e-02
5479 8 0.6667 143 56.435644766899 1.0240611437e+00
5480 8 0.6667 144 56.657783599577 9.3592348822e-02
5481 8 0.6667 145 57.095607265482 6.4613957089e-02
5482 8 0.6667 146 57.497338194100 6.3652374082e-02
5483 8 0.6667 147 57.896256257997 6.3420344887e-02
5484 8 0.6667 148 58.294691751699 6.3770689950e-02
5485 8 0.6667 149 58.697962900011 6.4946735813e-02
5486 8 0.6667 150 59.138560678635 9.5752749936e-02
5487 8 0.6667 151 59.358073379224 1.0223586178e+00
5488 8 0.6667 152 59.852104382645 6.5911710500e-02
5489 8 0.6667 153 60.264582564996 6.6331652423e-02
5490 8 0.6667 154 60.780978267923 5.7770339249e-01
5491 8 0.6667 155 60.886707692183 5.3658220961e-01
5492 8 0.6667 156 61.400045642657 6.5856774253e-02
5493 8 0.6667 157 61.805371787688 6.3877999530e-02
5494 8 0.6667 158 62.204042640498 6.3348078897e-02
5495 8 0.6667 159 62.601621927163 6.3244013543e-02
5496 8 0.6667 160 62.997814809524 6.2973804160e-02
5497 8 0.6667 161 63.394026557154 6.3216562553e-02
5498 8 0.6667 162 63.791222420699 6.3398340320e-02
5499 8 0.6667 163 64.189413094195 6.3959478315e-02
5500 8 0.6667 164 64.593548597433 6.5365053775e-02
5501 8 0.6667 165 65.096798198951 9.8173385782e-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())