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 12 of 30 · 500/page · 14949 rows next →
# atheta_over_pikz_kw_k
5502 8 0.6667 166 65.272503070469 1.3424039296e-01
5503 8 0.6667 167 65.736072259458 6.5803173624e-02
5504 8 0.6667 168 66.142644660740 6.4348456091e-02
5505 8 0.6667 169 66.549130987884 6.5867707073e-02
5506 8 0.6667 170 67.060318920110 9.4334242106e-01
5507 8 0.6667 171 67.213796154940 1.7198169592e-01
5508 8 0.6667 172 67.689903170015 6.5696146732e-02
5509 8 0.6667 173 68.095123517071 6.4126602002e-02
5510 8 0.6667 174 68.495787714238 6.3930604909e-02
5511 8 0.6667 175 68.899092337620 6.4985522934e-02
5512 8 0.6667 176 69.338587002962 9.5645478103e-02
5513 8 0.6667 177 69.557320927118 1.0219140574e+00
5514 8 0.6667 178 70.047120626070 6.4970275124e-02
5515 8 0.6667 179 70.449009299818 6.3413779239e-02
5516 8 0.6667 180 70.845735463845 6.3533579317e-02
5517 8 0.6667 181 71.242745084783 6.3177962871e-02
5518 8 0.6667 182 71.638041441575 6.3315122866e-02
5519 8 0.6667 183 72.064934807032 1.0613328560e+00
5520 8 0.6667 184 72.422362327039 6.3801406111e-02
5521 8 0.6667 185 72.817926474062 6.2938940494e-02
5522 8 0.6667 186 73.212510942278 6.2966846022e-02
5523 8 0.6667 187 73.607826098673 6.2932459969e-02
5524 8 0.6667 188 74.003065309449 6.3174281348e-02
5525 8 0.6667 189 74.399485149897 6.3238339267e-02
5526 8 0.6667 190 74.795587954435 6.3592055200e-02
5527 8 0.6667 191 75.198550555929 6.5100539182e-02
5528 8 0.6667 192 75.692279954039 1.0100832934e+00
5529 8 0.6667 193 75.894046617014 1.0659860108e-01
5530 8 0.6667 194 76.340489916053 6.5178739884e-02
5531 8 0.6667 195 76.743195661029 6.3738272203e-02
5532 8 0.6667 196 77.144596227923 1.0632771402e+00
5533 8 0.6667 197 77.536774114535 6.3534368179e-02
5534 8 0.6667 198 77.934608378798 6.3406257009e-02
5535 8 0.6667 199 78.332660129040 6.3682505909e-02
5536 8 0.6667 200 78.737219758523 6.5860900750e-02
5537 8 0.6667 201 79.219198615722 2.0509319879e-01
5538 8 0.6667 202 79.359791444141 9.0958549718e-01
5539 8 0.6667 203 79.871940667924 6.5800684786e-02
5540 8 0.6667 204 80.276275855880 6.3950556173e-02
5541 8 0.6667 205 80.673283580442 6.3423176973e-02
5542 8 0.6667 206 81.070895442058 6.3490351412e-02
5543 8 0.6667 207 81.466504396435 6.3537582113e-02
5544 8 0.6667 208 81.865396466008 6.3662351885e-02
5545 8 0.6667 209 82.267286546485 6.4805933915e-02
5546 8 0.6667 210 82.711138286468 1.0169263800e-01
5547 8 0.6667 211 82.922096165995 1.0164491886e+00
5548 8 0.6667 212 83.416075080555 6.5524064487e-02
5549 8 0.6667 213 83.821250296564 6.4524979908e-02
5550 8 0.6667 214 84.225697030012 6.5828488685e-02
5551 8 0.6667 215 84.722822159162 1.0088598129e+00
5552 8 0.6667 216 84.923224934452 1.0805811028e-01
5553 8 0.6667 217 85.372144758387 6.5143689838e-02
5554 8 0.6667 218 85.775388083349 6.3879028715e-02
5555 8 0.6667 219 86.173436865536 6.3361356427e-02
5556 8 0.6667 220 86.570103454280 6.4025396704e-02
5557 8 0.6667 221 86.970374974253 6.4045549532e-02
5558 8 0.6667 222 87.420937340327 1.0565640474e+00
5559 8 0.6667 223 87.741050717730 6.7899555742e-02
5560 8 0.6667 224 88.149822726587 6.5656215341e-02
5561 8 0.6667 225 88.582991496156 8.6911197429e-02
5562 8 0.6667 226 88.818641092026 1.0315549994e+00
5563 8 0.6667 227 89.302079210082 6.4986012634e-02
5564 8 0.6667 228 89.704417385410 6.3912617897e-02
5565 8 0.6667 229 90.099700443843 6.3357241250e-02
5566 8 0.6667 230 90.495190746317 6.3243142553e-02
5567 8 0.6667 231 90.891186262168 6.3091356457e-02
5568 8 0.6667 232 91.286175875765 6.4032537069e-02
5569 8 0.6667 233 91.681725258401 6.3159660803e-02
5570 8 0.6667 234 92.077723549858 6.3115532874e-02
5571 8 0.6667 235 92.490712338452 1.0627945277e+00
5572 8 0.6667 236 92.864316840951 6.3848262719e-02
5573 8 0.6667 237 93.262339165800 6.3620501282e-02
5574 8 0.6667 238 93.661215746286 6.3679013522e-02
5575 8 0.6667 239 94.065026288410 6.6147242397e-02
5576 8 0.6667 240 94.569176008432 3.4377492411e-01
5577 8 0.6667 241 94.685314288716 7.7219666725e-01
5578 8 0.6667 242 95.208158374063 6.7562222156e-02
5579 8 0.6667 243 95.653885055362 9.4816227148e-02
5580 8 0.6667 244 95.881285712309 1.0256825845e+00
5581 8 0.6667 245 96.371214926530 6.5244531065e-02
5582 8 0.6667 246 96.774408214357 6.3963604434e-02
5583 8 0.6667 247 97.174011937455 6.3509256566e-02
5584 8 0.6667 248 97.568261847089 6.4215910372e-02
5585 8 0.6667 249 97.967975502705 6.3576607727e-02
5586 8 0.6667 250 98.368260150142 6.4955177286e-02
5587 8 0.6667 251 98.825707873034 1.0532924023e+00
5588 8 0.6667 252 99.124308931400 6.9222416185e-02
5589 8 0.6667 253 99.534423853185 6.4266477067e-02
5590 8 0.6667 254 99.934920389814 6.5169248120e-02
5591 8 0.6667 255 100.335818184051 6.5614540906e-02
5592 8 0.6667 256 100.739147496700 6.5877629176e-02
5593 8 0.6667 257 101.245867315419 4.0054279029e-01
5594 8 0.6667 258 101.356338718476 7.1380100372e-01
5595 8 0.6667 259 101.873989752086 6.6388724956e-02
5596 8 0.6667 260 102.280048741760 6.4258541585e-02
5597 8 0.6667 261 102.680939401818 6.4085968412e-02
5598 8 0.6667 262 103.086595107947 6.6525168780e-02
5599 8 0.6667 263 103.529458855377 1.0385544077e-01
5600 8 0.6667 264 103.737602802602 1.0139943148e+00
5601 8 0.6667 265 104.232841541592 6.6469340931e-02
5602 8 0.6667 266 104.632872633150 6.4438162365e-02
5603 8 0.6667 267 105.032248141700 6.3552209185e-02
5604 8 0.6667 268 105.445615192386 1.0633144838e+00
5605 8 0.6667 269 105.827868548830 6.5075904103e-02
5606 8 0.6667 270 106.225684381692 6.4162166379e-02
5607 8 0.6667 271 106.632318925004 6.7327307393e-02
5608 8 0.6667 272 107.143012498452 8.7382449582e-01
5609 8 0.6667 273 107.274577785791 2.4159513834e-01
5610 8 0.6667 274 107.763937557247 6.6002629157e-02
5611 8 0.6667 275 108.170531382786 6.5808636610e-02
5612 8 0.6667 276 108.567335578399 6.3509362404e-02
5613 8 0.6667 277 108.964018128104 6.3948679941e-02
5614 8 0.6667 278 109.362555376107 6.3328475541e-02
5615 8 0.6667 279 109.759363537697 6.3615732435e-02
5616 8 0.6667 280 110.156127429886 6.5998420433e-02
5617 8 0.6667 281 110.559194636349 6.5925872015e-02
5618 8 0.6667 282 111.023331112612 1.0521274117e+00
5619 8 0.6667 283 111.322696068047 7.3901106622e-02
5620 8 0.6667 284 111.851796096788 9.1177540101e-01
5621 8 0.6667 285 111.995228885965 2.0529248046e-01
5622 8 0.6667 286 112.481046243238 6.6383071566e-02
5623 8 0.6667 287 112.886771694548 6.6366208942e-02
5624 8 0.6667 288 113.290577589117 6.5235107752e-02
5625 8 0.6667 289 113.697512160116 6.5944547018e-02
5626 8 0.6667 290 114.163907695070 1.4108595553e-01
5627 8 0.6667 291 114.336896079854 9.7624523833e-01
5628 8 0.6667 292 114.838193182783 6.7541068125e-02
5629 8 0.6667 293 115.249623358727 6.4956340899e-02
5630 8 0.6667 294 115.657480436177 6.9303365000e-02
5631 8 0.6667 295 116.171373721039 5.3530840727e-01
5632 8 0.6667 296 116.277416272958 5.7953200436e-01
5633 8 0.6667 297 116.791309772181 6.8762834678e-02
5634 8 0.6667 298 117.195916245271 6.4520986824e-02
5635 8 0.6667 299 117.597825571489 6.3968805142e-02
5636 8 0.6667 300 117.996130719336 6.5977526365e-02
5637 8 0.6667 301 118.388836888008 6.4193978600e-02
5638 8 0.6667 302 118.790531631327 1.0631905719e+00
5639 8 0.6667 303 119.182156321794 6.3643456783e-02
5640 8 0.6667 304 119.574063698755 6.6618021248e-02
5641 8 0.6667 305 119.973343643941 6.4373049069e-02
5642 8 0.6667 306 120.373488415467 6.4179222905e-02
5643 8 0.6667 307 120.778563880652 6.5892571732e-02
5644 8 0.6667 308 121.272743304861 2.7443387697e-01
5645 8 0.6667 309 121.398715481231 8.4114951800e-01
5646 8 0.6667 310 121.913606596761 6.9575081180e-02
5647 8 0.6667 311 122.330003882120 6.7732035085e-02
5648 8 0.6667 312 122.806645044894 1.6517376127e-01
5649 8 0.6667 313 122.965540518636 9.5541055705e-01
5650 8 0.6667 314 123.474967705759 6.5775901268e-02
5651 8 0.6667 315 123.875582961650 6.7760686098e-02
5652 8 0.6667 316 124.258012652994 1.0630299365e+00
5653 8 0.6667 317 124.670479682996 6.4446615398e-02
5654 8 0.6667 318 125.070462909748 6.3603079398e-02
5655 8 0.6667 319 125.464740413323 6.3298644240e-02
5656 8 0.6667 320 125.865859752807 6.6040878533e-02
5657 8 0.6667 321 126.249668374896 6.4798355450e-02
5658 8 0.6667 322 126.653635005557 6.8164869844e-02
5659 8 0.6667 323 127.050840664660 6.4732350800e-02
5660 8 0.6667 324 127.511257764103 1.0542777357e+00
5661 8 0.6667 325 127.816028609609 7.1475001861e-02
5662 8 0.6667 326 128.216078472462 6.6460999147e-02
5663 8 0.6667 327 128.619489819640 6.5057328040e-02
5664 8 0.6667 328 129.027552944742 6.6711190936e-02
5665 8 0.6667 329 129.546848049794 8.0063804550e-01
5666 8 0.6667 330 129.667913862145 3.2009944113e-01
5667 8 0.6667 331 130.167260803063 6.6731905081e-02
5668 8 0.6667 332 130.580277069488 6.7497769465e-02
5669 8 0.6667 333 131.076424781725 1.0220434042e+00
5670 8 0.6667 334 131.296218345586 9.7685467767e-02
5671 8 0.6667 335 131.744782766805 6.9129817737e-02
5672 8 0.6667 336 132.136797021532 6.6007754838e-02
5673 8 0.6667 337 132.543410047571 6.5143096329e-02
5674 8 0.6667 338 132.952519727226 7.1520488522e-02
5675 8 0.6667 339 133.469349772075 8.4590429228e-01
5676 8 0.6667 340 133.597472799043 2.7079795005e-01
5677 8 0.6667 341 134.102637608828 6.9877548122e-02
5678 8 0.6667 342 134.542274354090 1.0358910560e-01
5679 8 0.6667 343 134.768440738600 1.0232365723e+00
5680 8 0.6667 344 135.252071420848 6.8825214522e-02
5681 8 0.6667 345 135.660579896417 6.4548802533e-02
5682 8 0.6667 346 136.058618572991 6.4846261826e-02
5683 8 0.6667 347 136.457654851319 6.3935214525e-02
5684 8 0.6667 348 136.859708553695 6.9382821870e-02
5685 8 0.6667 349 137.250562155792 6.4295912089e-02
5686 8 0.6667 350 137.653062347182 6.5735665962e-02
5687 8 0.6667 351 138.110705383080 1.0544182359e+00
5688 8 0.6667 352 138.418852327987 7.1434317346e-02
5689 8 0.6667 353 138.815568599092 6.9654097727e-02
5690 8 0.6667 354 139.227657015782 6.6510140214e-02
5691 8 0.6667 355 139.723761903552 1.0106334594e+00
5692 8 0.6667 356 139.927569972181 1.1534724172e-01
5693 8 0.6667 357 140.375588440906 6.5723443419e-02
5694 8 0.6667 358 140.781859046681 6.5759886722e-02
5695 8 0.6667 359 141.126892524541 1.0611654252e+00
5696 8 0.6667 360 141.569270405866 6.7556106901e-02
5697 8 0.6667 361 141.950727779605 6.7108229948e-02
5698 8 0.6667 362 142.352281225517 6.4217738652e-02
5699 8 0.6667 363 142.751771637376 7.1931258228e-02
5700 8 0.6667 364 143.113622703715 1.0634555261e+00
5701 8 0.6667 365 143.538193018541 6.4084715707e-02
5702 8 0.6667 366 143.934143104301 6.3922299278e-02
5703 8 0.6667 367 144.336834843713 6.8906940050e-02
5704 8 0.6667 368 144.715263426755 6.6995992711e-02
5705 8 0.6667 369 145.120449736893 6.4367524024e-02
5706 8 0.6667 370 145.513947808878 7.3308963932e-02
5707 8 0.6667 371 145.993172464651 1.0449559443e+00
5708 8 0.6667 372 146.260383283449 8.0504908914e-02
5709 8 0.6667 373 146.665076398345 7.1183393634e-02
5710 8 0.6667 374 147.073563371886 6.4993737247e-02
5711 8 0.6667 375 147.425589083610 1.0628347211e+00
5712 8 0.6667 376 147.858355351443 6.4527545522e-02
5713 8 0.6667 377 148.256781510088 6.4574278384e-02
5714 8 0.6667 378 148.657738033505 6.4261883247e-02
5715 8 0.6667 379 149.053648680916 6.6481461072e-02
5716 8 0.6667 380 149.450629233589 7.5251283087e-02
5717 8 0.6667 381 149.956529024301 2.8818729168e-01
5718 8 0.6667 382 150.084986320586 8.3740097615e-01
5719 8 0.6667 383 150.600620548580 7.1184990569e-02
5720 8 0.6667 384 150.929822807769 1.0597235320e+00
5721 8 0.6667 385 151.393701587825 7.0736087447e-02
5722 8 0.6667 386 151.773476442529 6.8140384478e-02
5723 8 0.6667 387 152.177459078333 6.5574109635e-02
5724 8 0.6667 388 152.587526477390 7.2139078710e-02
5725 8 0.6667 389 153.019851542691 1.0586677106e+00
5726 8 0.6667 390 153.338329362610 6.8652513699e-02
5727 8 0.6667 391 153.746872330979 6.5655939854e-02
5728 8 0.6667 392 154.141673490965 6.5708953960e-02
5729 8 0.6667 393 154.530508218795 7.5780965293e-02
5730 8 0.6667 394 154.932218203807 6.4038637060e-02
5731 8 0.6667 395 155.337755113479 6.9681913112e-02
5732 8 0.6667 396 155.707394255994 6.8264955932e-02
5733 8 0.6667 397 156.112536805530 1.0663295897e+00
5734 8 0.6667 398 156.509626850399 6.4376494333e-02
5735 8 0.6667 399 156.907467149230 6.4876135456e-02
5736 8 0.6667 400 157.324755949086 7.6521592396e-02
5737 8 0.6667 401 157.603557124866 1.0607313543e+00
5738 8 0.6667 402 158.068834854440 6.6763874026e-02
5739 8 0.6667 403 158.469624009470 6.5531292764e-02
5740 8 0.6667 404 158.850077313198 1.0753471572e+00
5741 8 0.6667 405 159.251588214651 6.6029120880e-02
5742 8 0.6667 406 159.652134314052 6.4160786871e-02
5743 8 0.6667 407 160.046069604766 6.3869727464e-02
5744 8 0.6667 408 160.441966029202 6.5252444436e-02
5745 8 0.6667 409 160.849717481838 7.9238515682e-02
5746 8 0.6667 410 161.191797042935 1.0624331983e+00
5747 8 0.6667 411 161.642752897827 7.7631235223e-02
5748 8 0.6667 412 162.018502585178 6.7831473944e-02
5749 8 0.6667 413 162.437343096286 7.4042422064e-02
5750 8 0.6667 414 162.872654524073 1.5802131558e-01
5751 8 0.6667 415 163.048778858197 9.6801106200e-01
5752 8 0.6667 416 163.556591866781 6.6817960192e-02
5753 8 0.6667 417 163.966925678910 6.8012838806e-02
5754 8 0.6667 418 164.342384694759 7.8385376071e-02
5755 8 0.6667 419 164.748269162287 6.6314921485e-02
5756 8 0.6667 420 165.147497821098 6.4514812185e-02
5757 8 0.6667 421 165.537424255983 1.0648291463e+00
5758 8 0.6667 422 165.943559274447 6.6584313638e-02
5759 8 0.6667 423 166.317954573922 8.0383985149e-02
5760 8 0.6667 424 166.730673534378 6.5981330665e-02
5761 8 0.6667 425 167.180186334360 1.0594427548e+00
5762 8 0.6667 426 167.498866316718 6.7836794105e-02
5763 8 0.6667 427 167.902989385881 6.6577274305e-02
5764 8 0.6667 428 168.287188144794 8.1401449149e-02
5765 8 0.6667 429 168.710560679549 7.9661339525e-02
5766 8 0.6667 430 169.093430832462 1.0680936347e+00
5767 8 0.6667 431 169.480109124757 6.5511808952e-02
5768 8 0.6667 432 169.909759689841 1.0638326174e+00
5769 8 0.6667 433 170.284393132777 7.8813471621e-02
5770 8 0.6667 434 170.645769287096 7.0386779765e-02
5771 8 0.6667 435 171.050752660963 6.5316979832e-02
5772 8 0.6667 436 171.446954039991 6.7343052149e-02
5773 8 0.6667 437 171.863066504058 7.7533507608e-02
5774 8 0.6667 438 172.221129759791 6.9858321621e-02
5775 8 0.6667 439 172.627084761475 6.5694168485e-02
5776 8 0.6667 440 173.030406440308 6.6794244263e-02
5777 8 0.6667 441 173.410743724647 1.0857246419e+00
5778 8 0.6667 442 173.818830216490 6.8169022565e-02
5779 8 0.6667 443 174.246851344892 8.7363499469e-02
5780 8 0.6667 444 174.729324472954 8.9940794929e-01
5781 8 0.6667 445 174.872487806624 2.2324471757e-01
5782 8 0.6667 446 175.359639452893 6.8341522104e-02
5783 8 0.6667 447 175.770649261351 6.7853384346e-02
5784 8 0.6667 448 176.206313095489 8.7194127582e-02
5785 8 0.6667 449 176.450938122931 1.0384973912e+00
5786 8 0.6667 450 176.930675768812 9.0940216355e-02
5787 8 0.6667 451 177.341796674606 6.7604913372e-02
5788 8 0.6667 452 177.747933760041 6.9555104128e-02
5789 8 0.6667 453 178.210575296271 1.6319166386e-01
5790 8 0.6667 454 178.394023867855 9.8291976314e-01
5791 8 0.6667 455 178.911064236407 7.2300085237e-02
5792 8 0.6667 456 179.282689570419 8.7454246602e-02
5793 8 0.6667 457 179.793457536753 2.0881963711e-01
5794 8 0.6667 458 179.939513353698 9.1477343668e-01
5795 8 0.6667 459 180.458065205242 6.9492505202e-02
5796 8 0.6667 460 180.870851886103 9.6373968140e-02
5797 8 0.6667 461 181.293359126874 8.0214289304e-02
5798 8 0.6667 462 181.651583081702 8.0868719460e-02
5799 8 0.6667 463 182.179744603408 8.6751774879e-01
5800 8 0.6667 464 182.313133710824 2.5311137303e-01
5801 8 0.6667 465 182.809289529355 7.1047442903e-02
5802 8 0.6667 466 183.214363044534 6.7589248185e-02
5803 8 0.6667 467 183.615574248641 6.5131712876e-02
5804 8 0.6667 468 184.009013846225 9.6426640476e-02
5805 8 0.6667 469 184.419388352931 6.9810668430e-02
5806 8 0.6667 470 184.870152498689 1.0600962348e+00
5807 8 0.6667 471 185.210870219337 8.0209258059e-02
5808 8 0.6667 472 185.595558599315 1.0820443495e+00
5809 8 0.6667 473 185.971491709513 6.9646836702e-02
5810 8 0.6667 474 186.385496732247 7.2752547543e-02
5811 8 0.6667 475 186.736387936732 9.2629859580e-02
5812 8 0.6667 476 187.223810548460 1.0574493281e+00
5813 8 0.6667 477 187.532087875565 7.0896584214e-02
5814 8 0.6667 478 187.944782464390 6.7466408454e-02
5815 8 0.6667 479 188.364042075430 1.0163270261e-01
5816 8 0.6667 480 188.745324216581 6.9825338889e-02
5817 8 0.6667 481 189.195998745397 1.0222385411e-01
5818 8 0.6667 482 189.429330286828 1.0357754111e+00
5819 8 0.6667 483 189.863799716420 8.7861010216e-02
5820 8 0.6667 484 190.289349484925 6.9149687480e-02
5821 8 0.6667 485 190.706176301460 1.0308760579e-01
5822 8 0.6667 486 191.090381597284 6.9888127586e-02
5823 8 0.6667 487 191.500578114131 6.8874538307e-02
5824 8 0.6667 488 192.007843888365 9.6234037573e-01
5825 8 0.6667 489 192.171461701413 1.9826045957e-01
5826 8 0.6667 490 192.638889527476 7.1487086008e-02
5827 8 0.6667 491 193.077607984463 1.0655447054e+00
5828 8 0.6667 492 193.443873033196 7.1231735722e-02
5829 8 0.6667 493 193.849765352532 7.0983368754e-02
5830 8 0.6667 494 194.275348779602 8.8274072303e-02
5831 8 0.6667 495 194.614296089992 8.4061334226e-02
5832 8 0.6667 496 195.101938766525 1.4387955105e-01
5833 8 0.6667 497 195.282465896956 9.8145913543e-01
5834 8 0.6667 498 195.791990162546 6.9463693220e-02
5835 8 0.6667 499 196.195325082360 1.1493593171e-01
5836 8 0.6667 500 196.654362029938 1.0699827258e-01
5837 8 0.6667 501 196.892542004367 1.0591449406e+00
5838 8 0.6667 502 197.357980049472 7.3846841428e-02
5839 8 0.6667 503 197.814000201339 1.1633510114e-01
5840 8 0.6667 504 198.027156024243 1.0574572430e+00
5841 8 0.6667 505 198.527068512528 7.1180361524e-02
5842 8 0.6667 506 198.924845895377 6.8514294088e-02
5843 8 0.6667 507 199.334663935503 6.8043585358e-02
5844 8 0.6667 508 199.730467145935 6.9032705929e-02
5845 8 0.6667 509 200.149970777490 1.1623009641e-01
5846 8 0.6667 510 200.519425275691 6.8261458286e-02
5847 8 0.6667 511 200.948518107481 8.9495583173e-02
5848 8 0.6667 512 201.264129490579 1.0913401787e+00
5849 8 0.6667 513 201.689398332733 7.1295831496e-02
5850 8 0.6667 514 202.085991763316 6.6972250125e-02
5851 8 0.6667 515 202.493527510255 1.0717486095e+00
5852 8 0.6667 516 202.889509759261 6.7248993812e-02
5853 8 0.6667 517 203.274403612775 1.2321783536e-01
5854 8 0.6667 518 203.690990669427 7.0745877709e-02
5855 8 0.6667 519 204.179883181914 1.0415783081e+00
5856 8 0.6667 520 204.468049397717 1.2335591536e-01
5857 8 0.6667 521 204.817425739994 8.9862735760e-02
5858 8 0.6667 522 205.366894320253 8.7825820175e-01
5859 8 0.6667 523 205.507302754366 2.4867688014e-01
5860 8 0.6667 524 206.022474208645 8.3575292662e-02
5861 8 0.6667 525 206.350253327876 1.1231576240e-01
5862 8 0.6667 526 206.790297229525 7.0032895619e-02
5863 8 0.6667 527 207.193883381628 6.9020522143e-02
5864 8 0.6667 528 207.632628156594 1.3081944026e-01
5865 8 0.6667 529 207.911630821695 1.0618296193e+00
5866 8 0.6667 530 208.403676718555 1.2815485198e-01
5867 8 0.6667 531 208.755635195404 7.3307683541e-02
5868 8 0.6667 532 209.154912738059 7.1105495953e-02
5869 8 0.6667 533 209.575099796431 1.0690744364e+00
5870 8 0.6667 534 209.941156979341 1.3570929855e-01
5871 8 0.6667 535 210.352341447735 6.8844154651e-02
5872 8 0.6667 536 210.751705936916 6.8194894722e-02
5873 8 0.6667 537 211.158811841457 7.6212952275e-02
5874 8 0.6667 538 211.670341693606 9.5006515360e-01
5875 8 0.6667 539 211.832431620892 1.7752784317e-01
5876 8 0.6667 540 212.310482807743 7.3299761076e-02
5877 8 0.6667 541 212.768467742970 1.2892738044e-01
5878 8 0.6667 542 213.145911024855 1.4159857110e-01
5879 8 0.6667 543 213.360117139393 1.0707906673e+00
5880 8 0.6667 544 213.865869152355 7.4845164658e-02
5881 8 0.6667 545 214.303117205798 9.1575319378e-02
5882 8 0.6667 546 214.556954258788 1.0400460941e+00
5883 8 0.6667 547 215.048213629674 1.4644319639e-01
5884 8 0.6667 548 215.458945776716 7.2562970855e-02
5885 8 0.6667 549 215.892180214069 9.3203551063e-02
5886 8 0.6667 550 216.183761242532 1.0974087662e+00
5887 8 0.6667 551 216.566825526634 9.0923629575e-02
5888 8 0.6667 552 217.001430778190 7.1888238349e-02
5889 8 0.6667 553 217.408024205204 7.0669964488e-02
5890 8 0.6667 554 217.804641049854 1.5318581647e-01
5891 8 0.6667 555 218.200355845466 6.9680057448e-02
5892 8 0.6667 556 218.604252274793 7.3041091759e-02
5893 8 0.6667 557 219.062505777761 1.0605624683e+00
5894 8 0.6667 558 219.374585230906 1.5832857984e-01
5895 8 0.6667 559 219.774182788207 7.4944605105e-02
5896 8 0.6667 560 220.190943979862 7.8672977049e-02
5897 8 0.6667 561 220.699784445440 1.0625253945e+00
5898 8 0.6667 562 220.878747293903 1.5532402727e-01
5899 8 0.6667 563 221.423304708401 1.0583236285e+00
5900 8 0.6667 564 221.710135348987 8.3823990996e-02
5901 8 0.6667 565 222.135483066786 7.5623070800e-02
5902 8 0.6667 566 222.532010138024 7.2768597296e-02
5903 8 0.6667 567 222.957993677104 8.6664146267e-02
5904 8 0.6667 568 223.264216960884 1.4293238915e-01
5905 8 0.6667 569 223.749955491841 9.5973788817e-02
5906 8 0.6667 570 224.021662056468 1.1354833596e+00
5907 8 0.6667 571 224.491853096170 7.5491916828e-02
5908 8 0.6667 572 224.974683487891 1.0620073439e+00
5909 8 0.6667 573 225.306154071024 1.2778031748e-01
5910 8 0.6667 574 225.604433287865 1.2171692082e-01
5911 8 0.6667 575 226.042301107989 7.3778003034e-02
5912 8 0.6667 576 226.467032277842 1.7367719253e-01
5913 8 0.6667 577 226.871267454144 7.9267280643e-02
5914 8 0.6667 578 227.386240366043 7.9239756314e-01
5915 8 0.6667 579 227.510826690289 3.4040605575e-01
5916 8 0.6667 580 228.027216436044 8.2532069590e-02
5917 8 0.6667 581 228.372066846825 1.7490513946e-01
5918 8 0.6667 582 228.822311157255 7.7944389327e-02
5919 8 0.6667 583 229.320017180575 9.9621490926e-01
5920 8 0.6667 584 229.510751839145 1.4013799649e-01
5921 8 0.6667 585 229.969787484282 7.3731964720e-02
5922 8 0.6667 586 230.393688407342 1.8843293326e-01
5923 8 0.6667 587 230.782104807197 7.6440415030e-02
5924 8 0.6667 588 231.243853403850 1.0622911794e+00
5925 8 0.6667 589 231.551046580572 8.2304951029e-02
5926 8 0.6667 590 231.980587472660 1.1882298966e+00
5927 8 0.6667 591 232.349449710817 7.6348407660e-02
5928 8 0.6667 592 232.744037183413 1.9642144996e-01
5929 8 0.6667 593 233.159136245093 7.6802459611e-02
5930 8 0.6667 594 233.672305697280 9.5489196221e-01
5931 8 0.6667 595 233.839341342415 1.8217617039e-01
5932 8 0.6667 596 234.322364808782 7.7205605397e-02
5933 8 0.6667 597 234.790463999597 1.5646878701e-01
5934 8 0.6667 598 235.058017271785 1.1821661170e-01
5935 8 0.6667 599 235.517179954201 8.0005945281e-02
5936 8 0.6667 600 235.989996178339 1.8082259057e-01
5937 8 0.6667 601 236.358539427367 2.3954487981e-01
5938 8 0.6667 602 236.557345682444 9.5480322896e-01
5939 8 0.6667 603 236.954269138449 1.7437301587e-01
5940 8 0.6667 604 237.430423942844 8.4125347402e-02
5941 8 0.6667 605 237.774664144452 1.0696886751e+00
5942 8 0.6667 606 238.218325616630 8.1274777136e-02
5943 8 0.6667 607 238.629790175196 7.4913011200e-02
5944 8 0.6667 608 239.047110196658 7.9485985592e-02
5945 8 0.6667 609 239.525589766601 1.1027020034e+00
5946 8 0.6667 610 239.709748177371 1.8252075564e-01
5947 8 0.6667 611 240.196458896987 8.1884342369e-02
5948 8 0.6667 612 240.597451489127 8.1075582167e-02
5949 8 0.6667 613 241.049900772265 1.2102509588e+00
5950 8 0.6667 614 241.368131806193 8.5866636531e-02
5951 8 0.6667 615 241.795779583095 7.8669283424e-02
5952 8 0.6667 616 242.227434219214 1.0098658524e-01
5953 8 0.6667 617 242.534663386468 2.3352892150e-01
5954 8 0.6667 618 242.835990791141 1.0401559029e+00
5955 8 0.6667 619 243.353228826714 2.3652841518e-01
5956 8 0.6667 620 243.741266771331 8.6725329895e-02
5957 8 0.6667 621 244.075910476240 1.0736095634e+00
5958 8 0.6667 622 244.527689204823 7.8528710164e-02
5959 8 0.6667 623 244.888041303075 2.4398260324e-01
5960 8 0.6667 624 245.321708153584 7.8112665818e-02
5961 8 0.6667 625 245.712404542010 7.9710104629e-02
5962 8 0.6667 626 246.115411026353 8.1498020867e-02
5963 8 0.6667 627 246.548522297949 9.1638287699e-02
5964 8 0.6667 628 246.893759514112 2.9097827160e-01
5965 8 0.6667 629 247.153897651277 1.0115263144e+00
5966 8 0.6667 630 247.667052865448 8.8049547929e-02
5967 8 0.6667 631 248.099544133571 1.0792435700e+00
5968 8 0.6667 632 248.451275468998 2.6639398649e-01
5969 8 0.6667 633 248.871166295475 8.0599332483e-02
5970 8 0.6667 634 249.309161603392 1.0691745754e-01
5971 8 0.6667 635 249.587274070521 1.0741152386e+00
5972 8 0.6667 636 249.942084916466 2.3336076216e-01
5973 8 0.6667 637 250.425992054788 8.4179686866e-02
5974 8 0.6667 638 250.950580057205 5.3009537636e-01
5975 8 0.6667 639 251.069291823171 6.2195861053e-01
5976 8 0.6667 640 251.585308643987 8.3005769345e-02
5977 8 0.6667 641 251.996740988002 2.8569318175e-01
5978 8 0.6667 642 252.462815183669 2.7697925425e-01
5979 8 0.6667 643 252.803930727097 1.0651964842e-01
5980 8 0.6667 644 253.080481101415 1.0527030303e+00
5981 8 0.6667 645 253.561801769587 8.2974865122e-02
5982 8 0.6667 646 253.973020294369 8.6795149002e-02
5983 8 0.6667 647 254.421504164497 2.8394098770e-01
5984 8 0.6667 648 254.743481349212 9.0658967525e-02
5985 8 0.6667 649 255.268056918369 1.0627471213e+00
5986 8 0.6667 650 255.408188086752 3.1156160398e-01
5987 8 0.6667 651 255.905662941806 9.2866632453e-02
5988 8 0.6667 652 256.375372606686 1.0729353827e+00
5989 8 0.6667 653 256.707016628602 8.7842564741e-02
5990 8 0.6667 654 257.097254577260 8.7297849821e-02
5991 8 0.6667 655 257.509893633976 8.1399085824e-02
5992 8 0.6667 656 257.910070939326 8.5407158020e-02
5993 8 0.6667 657 258.283261605952 3.2413213955e-01
5994 8 0.6667 658 258.617692340111 1.0744853075e+00
5995 8 0.6667 659 259.115147114941 1.0955640285e-01
5996 8 0.6667 660 259.391848195087 2.9522870532e-01
5997 8 0.6667 661 259.874033703401 1.0866149574e+00
5998 8 0.6667 662 260.308922876225 3.3838620852e-01
5999 8 0.6667 663 260.777720229779 9.2758493059e-01
6000 8 0.6667 664 260.939183558882 2.2561769013e-01
6001 8 0.6667 665 261.423718556422 9.4924856231e-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())