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 16 of 30 · 500/page · 14949 rows next →
# atheta_over_pikz_kw_k
7502 12 0.0000 30 7.857179721975 4.1683209538e-02
7503 12 0.0000 31 8.119096418777 4.1684867150e-02
7504 12 0.0000 32 8.381008271962 4.1684928639e-02
7505 12 0.0000 33 8.642917610701 4.1685023555e-02
7506 12 0.0000 34 8.904832590781 4.1682101331e-02
7507 12 0.0000 35 9.166742790827 4.1689048857e-02
7508 12 0.0000 36 9.428662312768 4.1682046773e-02
7509 12 0.0000 37 9.690578268006 4.1686629953e-02
7510 12 0.0000 38 9.952486165390 4.1683428820e-02
7511 12 0.0000 39 10.214401506629 4.1686571737e-02
7512 12 0.0000 40 10.476322040533 4.1683727162e-02
7513 12 0.0000 41 10.738239155042 4.1688570568e-02
7514 12 0.0000 42 11.000159116572 4.1684121936e-02
7515 12 0.0000 43 11.262084227822 4.1685251895e-02
7516 12 0.0000 44 11.523997233796 4.1689019376e-02
7517 12 0.0000 45 11.785924542478 4.1682873054e-02
7518 12 0.0000 46 12.047854710038 4.1689630361e-02
7519 12 0.0000 47 12.309772568597 4.1687408132e-02
7520 12 0.0000 48 12.571723576099 4.1688288822e-02
7521 12 0.0000 49 12.833645289833 4.1686938608e-02
7522 12 0.0000 50 13.095586225550 4.1693095773e-02
7523 12 0.0000 51 13.357546726488 4.1689456607e-02
7524 12 0.0000 52 13.619526895387 4.1702580357e-02
7525 12 0.0000 53 13.881596347353 4.1734618285e-02
7526 12 0.0000 54 14.135068365790 1.0415524030e+00
7527 12 0.0000 55 14.404951652259 4.1720659890e-02
7528 12 0.0000 56 14.667007713327 4.1706882547e-02
7529 12 0.0000 57 14.928994724612 4.1683046765e-02
7530 12 0.0000 58 15.190962360843 4.1707624118e-02
7531 12 0.0000 59 15.452933271473 4.1680375535e-02
7532 12 0.0000 60 15.714892796693 4.1701864636e-02
7533 12 0.0000 61 15.976863959855 4.1687939464e-02
7534 12 0.0000 62 16.238818946305 4.1695843923e-02
7535 12 0.0000 63 16.500814467189 4.1698779487e-02
7536 12 0.0000 64 16.762799901029 4.1693618447e-02
7537 12 0.0000 65 17.024765020964 4.1698447682e-02
7538 12 0.0000 66 17.286780218090 4.1697490332e-02
7539 12 0.0000 67 17.548784213942 4.1705071543e-02
7540 12 0.0000 68 17.810804656753 4.1701469038e-02
7541 12 0.0000 69 18.072863316811 4.1708588199e-02
7542 12 0.0000 70 18.334892090326 4.1705099319e-02
7543 12 0.0000 71 18.596990335310 4.1724009671e-02
7544 12 0.0000 72 18.859153000541 4.1716885888e-02
7545 12 0.0000 73 19.121275315467 4.1734374972e-02
7546 12 0.0000 74 19.383587667883 4.1755218313e-02
7547 12 0.0000 75 19.645949092277 4.1758224070e-02
7548 12 0.0000 76 19.908468432353 4.1819786377e-02
7549 12 0.0000 77 20.171400502720 4.1873371759e-02
7550 12 0.0000 78 20.435039684156 4.2090009467e-02
7551 12 0.0000 79 20.701260757916 4.2862841944e-02
7552 12 0.0000 80 21.018490608551 1.0268614844e+00
7553 12 0.0000 81 21.187957981601 5.2303964905e-02
7554 12 0.0000 82 21.468620317200 4.2613353837e-02
7555 12 0.0000 83 21.734147497514 4.2054297158e-02
7556 12 0.0000 84 21.997813235834 4.1892061696e-02
7557 12 0.0000 85 22.260742597159 4.1827768416e-02
7558 12 0.0000 86 22.523472053476 4.1796217317e-02
7559 12 0.0000 87 22.786109943628 4.1811442361e-02
7560 12 0.0000 88 23.048720354028 4.1783826083e-02
7561 12 0.0000 89 23.311378150188 4.1818677322e-02
7562 12 0.0000 90 23.574193148421 4.1851349973e-02
7563 12 0.0000 91 23.837281236289 4.1896418312e-02
7564 12 0.0000 92 24.100936705915 4.2047164642e-02
7565 12 0.0000 93 24.365935343371 4.2370197766e-02
7566 12 0.0000 94 24.635197389798 4.3679894046e-02
7567 12 0.0000 95 24.981838352596 5.3368126431e-01
7568 12 0.0000 96 25.039418017645 5.4172219076e-01
7569 12 0.0000 97 25.386189626146 4.3688862134e-02
7570 12 0.0000 98 25.655410427831 4.2368590206e-02
7571 12 0.0000 99 25.920387601215 4.2036111578e-02
7572 12 0.0000 100 26.184013068710 4.1900451115e-02
7573 12 0.0000 101 26.447063457031 4.1838304233e-02
7574 12 0.0000 102 26.709731420371 4.1790021081e-02
7575 12 0.0000 103 26.972337917858 4.1777713020e-02
7576 12 0.0000 104 27.234649236597 4.1770360496e-02
7577 12 0.0000 105 27.497166411774 4.1739524244e-02
7578 12 0.0000 106 27.759376734234 4.1770243398e-02
7579 12 0.0000 107 28.021690377724 4.1712149574e-02
7580 12 0.0000 108 28.283896660258 4.1742341880e-02
7581 12 0.0000 109 28.546098751029 4.1745167535e-02
7582 12 0.0000 110 28.808391410953 4.1749602885e-02
7583 12 0.0000 111 29.070806735757 4.1761028792e-02
7584 12 0.0000 112 29.333022478974 4.1763496488e-02
7585 12 0.0000 113 29.595766020516 4.1817547318e-02
7586 12 0.0000 114 29.858672727464 4.1943229033e-02
7587 12 0.0000 115 30.123127814970 4.2352242764e-02
7588 12 0.0000 116 30.422894035818 1.0370669085e+00
7589 12 0.0000 117 30.632139527653 4.4314925321e-02
7590 12 0.0000 118 30.900478187674 4.2099448881e-02
7591 12 0.0000 119 31.164153311850 4.1903864971e-02
7592 12 0.0000 120 31.427318405848 4.1864941427e-02
7593 12 0.0000 121 31.690167591987 4.1821834971e-02
7594 12 0.0000 122 31.953111755868 4.1903521719e-02
7595 12 0.0000 123 32.216709074713 4.2017942194e-02
7596 12 0.0000 124 32.481823239717 4.2515883688e-02
7597 12 0.0000 125 32.758901497758 4.9549576688e-02
7598 12 0.0000 126 32.938193376949 1.0301394305e+00
7599 12 0.0000 127 33.251690342710 4.2794901031e-02
7600 12 0.0000 128 33.517644274079 4.2036926840e-02
7601 12 0.0000 129 33.781186422669 4.1896800164e-02
7602 12 0.0000 130 34.044199346883 4.1850665597e-02
7603 12 0.0000 131 34.306853487531 4.1762472894e-02
7604 12 0.0000 132 34.569408720502 4.1812868646e-02
7605 12 0.0000 133 34.831706619342 4.1740323327e-02
7606 12 0.0000 134 35.094312762463 4.1773421765e-02
7607 12 0.0000 135 35.356702087429 4.1821008162e-02
7608 12 0.0000 136 35.619375203507 4.1765389638e-02
7609 12 0.0000 137 35.881966195291 4.1831785031e-02
7610 12 0.0000 138 36.144733790089 4.1885997091e-02
7611 12 0.0000 139 36.407988741871 4.1864172892e-02
7612 12 0.0000 140 36.671603581077 4.2104766452e-02
7613 12 0.0000 141 36.936563229513 4.2349090204e-02
7614 12 0.0000 142 37.206106153165 4.3737699630e-02
7615 12 0.0000 143 37.549920967924 4.2143200323e-01
7616 12 0.0000 144 37.609020202657 6.5400321053e-01
7617 12 0.0000 145 37.957396746244 4.3749131795e-02
7618 12 0.0000 146 38.226744055187 4.2329989262e-02
7619 12 0.0000 147 38.491614688852 4.2079069448e-02
7620 12 0.0000 148 38.755523000664 4.1948449038e-02
7621 12 0.0000 149 39.018936776307 4.1896887951e-02
7622 12 0.0000 150 39.281888516187 4.1849249351e-02
7623 12 0.0000 151 39.544880389535 4.1848954350e-02
7624 12 0.0000 152 39.807929507611 4.1891223128e-02
7625 12 0.0000 153 40.071178564987 4.1935680600e-02
7626 12 0.0000 154 40.334997034233 4.2102852220e-02
7627 12 0.0000 155 40.601283146946 4.2875135425e-02
7628 12 0.0000 156 40.915535659982 1.0298142615e+00
7629 12 0.0000 157 41.094025211530 4.9926730316e-02
7630 12 0.0000 158 41.371815954648 4.2559328007e-02
7631 12 0.0000 159 41.637558230588 4.2155089498e-02
7632 12 0.0000 160 41.901540605972 4.1973628672e-02
7633 12 0.0000 161 42.165511321927 4.2036604953e-02
7634 12 0.0000 162 42.429554268985 4.2139274530e-02
7635 12 0.0000 163 42.694941025767 4.2350044452e-02
7636 12 0.0000 164 42.964085524805 4.3718262963e-02
7637 12 0.0000 165 43.312035658390 8.2814021190e-01
7638 12 0.0000 166 43.381504648537 2.4751555484e-01
7639 12 0.0000 167 43.716533709904 4.3681310196e-02
7640 12 0.0000 168 43.985857052702 4.2372361474e-02
7641 12 0.0000 169 44.250780365138 4.2106207387e-02
7642 12 0.0000 170 44.514862843007 4.1910421995e-02
7643 12 0.0000 171 44.777805999913 4.1900764275e-02
7644 12 0.0000 172 45.040727222928 4.1787781269e-02
7645 12 0.0000 173 45.303388341818 4.1894655442e-02
7646 12 0.0000 174 45.565957021902 4.1705861345e-02
7647 12 0.0000 175 45.828498708143 4.1837472084e-02
7648 12 0.0000 176 46.091007544007 4.1809479055e-02
7649 12 0.0000 177 46.353936348503 4.1875409146e-02
7650 12 0.0000 178 46.616207478168 4.1725100930e-02
7651 12 0.0000 179 46.879207536552 4.1957414763e-02
7652 12 0.0000 180 47.142480648378 4.1932123292e-02
7653 12 0.0000 181 47.406900921373 4.2181008020e-02
7654 12 0.0000 182 47.673997080085 4.3219442227e-02
7655 12 0.0000 183 48.000386862335 1.0152046979e+00
7656 12 0.0000 184 48.145385486036 6.2839659021e-02
7657 12 0.0000 185 48.436505233932 4.3016110543e-02
7658 12 0.0000 186 48.703828010859 4.2139256788e-02
7659 12 0.0000 187 48.967517671641 4.1991017527e-02
7660 12 0.0000 188 49.231028573704 4.1953958832e-02
7661 12 0.0000 189 49.494435619375 4.1987789062e-02
7662 12 0.0000 190 49.773100982885 1.0411328727e+00
7663 12 0.0000 191 50.017031749508 4.2057456475e-02
7664 12 0.0000 192 50.280269862429 4.1810885028e-02
7665 12 0.0000 193 50.542988332736 4.1796671772e-02
7666 12 0.0000 194 50.805178159327 4.1765368409e-02
7667 12 0.0000 195 51.067864714496 4.1746346150e-02
7668 12 0.0000 196 51.330059250245 4.1930658767e-02
7669 12 0.0000 197 51.593016876860 4.1796032556e-02
7670 12 0.0000 198 51.855665287073 4.1852582036e-02
7671 12 0.0000 199 52.118599636970 4.1874661387e-02
7672 12 0.0000 200 52.382541760837 4.2208264808e-02
7673 12 0.0000 201 52.648970115474 4.2912123219e-02
7674 12 0.0000 202 52.966731097996 1.0266314031e+00
7675 12 0.0000 203 53.135626329648 5.2661983998e-02
7676 12 0.0000 204 53.416979266334 4.2686931522e-02
7677 12 0.0000 205 53.682571037372 4.2129123089e-02
7678 12 0.0000 206 53.946222854876 4.1869926962e-02
7679 12 0.0000 207 54.209883245794 4.2012572286e-02
7680 12 0.0000 208 54.472664712033 4.1797630927e-02
7681 12 0.0000 209 54.735617171271 4.1976114234e-02
7682 12 0.0000 210 54.998770714891 4.1888949724e-02
7683 12 0.0000 211 55.262283963588 4.2016451265e-02
7684 12 0.0000 212 55.526284264600 4.2034902273e-02
7685 12 0.0000 213 55.791160938577 4.2476185243e-02
7686 12 0.0000 214 56.060613982852 4.3777736386e-02
7687 12 0.0000 215 56.400176816898 3.1260883501e-01
7688 12 0.0000 216 56.464182584746 7.6296657121e-01
7689 12 0.0000 217 56.812723808169 4.3827970403e-02
7690 12 0.0000 218 57.082478674931 4.2337496599e-02
7691 12 0.0000 219 57.347796061823 4.2178820404e-02
7692 12 0.0000 220 57.611790870036 4.2012776267e-02
7693 12 0.0000 221 57.875945482972 4.2026977424e-02
7694 12 0.0000 222 58.139953298505 4.2135987180e-02
7695 12 0.0000 223 58.403251455355 4.1986874141e-02
7696 12 0.0000 224 58.668981836578 4.2514835485e-02
7697 12 0.0000 225 58.937636142074 4.3462775087e-02
7698 12 0.0000 226 59.251780661204 1.0715562481e-01
7699 12 0.0000 227 59.355156864402 9.6969137719e-01
7700 12 0.0000 228 59.695626888528 4.3652418491e-02
7701 12 0.0000 229 59.965088243257 4.2556529302e-02
7702 12 0.0000 230 60.231855485593 4.2434705779e-02
7703 12 0.0000 231 60.500644920662 4.3495654062e-02
7704 12 0.0000 232 60.827114320021 1.0167539342e+00
7705 12 0.0000 233 60.975046401480 6.1651927006e-02
7706 12 0.0000 234 61.265756026423 4.3059207125e-02
7707 12 0.0000 235 61.532827012799 4.2284461584e-02
7708 12 0.0000 236 61.797228733107 4.2028190809e-02
7709 12 0.0000 237 62.060652731812 4.2007048161e-02
7710 12 0.0000 238 62.323473691809 4.1756967672e-02
7711 12 0.0000 239 62.586751546093 4.1992821692e-02
7712 12 0.0000 240 62.849456541803 4.1818138864e-02
7713 12 0.0000 241 63.112308619700 4.1726060223e-02
7714 12 0.0000 242 63.374855111187 4.1980694713e-02
7715 12 0.0000 243 63.637939420802 4.1795404180e-02
7716 12 0.0000 244 63.900541157735 4.2045221418e-02
7717 12 0.0000 245 64.164493204145 4.2340613696e-02
7718 12 0.0000 246 64.428972925243 4.2177252522e-02
7719 12 0.0000 247 64.696799969448 4.3365896315e-02
7720 12 0.0000 248 65.003355931677 8.7707502541e-02
7721 12 0.0000 249 65.119344333838 9.8938213086e-01
7722 12 0.0000 250 65.455538021919 4.3430465780e-02
7723 12 0.0000 251 65.723961072929 4.2541104044e-02
7724 12 0.0000 252 65.988242764283 4.2020297833e-02
7725 12 0.0000 253 66.252774243475 4.2058678385e-02
7726 12 0.0000 254 66.516042869675 4.2154072959e-02
7727 12 0.0000 255 66.781168105885 4.2224045548e-02
7728 12 0.0000 256 67.078076257976 1.0384572644e+00
7729 12 0.0000 257 67.294093358172 4.3582233136e-02
7730 12 0.0000 258 67.562171733352 4.2225299805e-02
7731 12 0.0000 259 67.825429721518 4.1937850578e-02
7732 12 0.0000 260 68.088805598409 4.2135147732e-02
7733 12 0.0000 261 68.352693817347 4.2126418762e-02
7734 12 0.0000 262 68.616530934495 4.2085702158e-02
7735 12 0.0000 263 68.881772561214 4.2476382604e-02
7736 12 0.0000 264 69.150577363298 4.3744200483e-02
7737 12 0.0000 265 69.478858290065 1.8018121556e-01
7738 12 0.0000 266 69.558365405179 8.9576371274e-01
7739 12 0.0000 267 69.904246549364 4.3625812128e-02
7740 12 0.0000 268 70.173278383021 4.2421120702e-02
7741 12 0.0000 269 70.438098723145 4.1996105104e-02
7742 12 0.0000 270 70.702993354778 4.2478020533e-02
7743 12 0.0000 271 70.965815275284 4.1860451928e-02
7744 12 0.0000 272 71.229105367739 4.1987366540e-02
7745 12 0.0000 273 71.492806908183 4.2432200695e-02
7746 12 0.0000 274 71.758385018114 4.2449362363e-02
7747 12 0.0000 275 72.064667414754 1.0347308361e+00
7748 12 0.0000 276 72.260726841959 4.6101947291e-02
7749 12 0.0000 277 72.533098115049 4.2789716792e-02
7750 12 0.0000 278 72.797168628946 4.1794409003e-02
7751 12 0.0000 279 73.060279079921 4.2112904304e-02
7752 12 0.0000 280 73.323291409884 4.1782998560e-02
7753 12 0.0000 281 73.586063203889 4.1869815410e-02
7754 12 0.0000 282 73.848790385207 4.1835149639e-02
7755 12 0.0000 283 74.110541737928 4.1871021809e-02
7756 12 0.0000 284 74.373604713974 4.1792857741e-02
7757 12 0.0000 285 74.635393114755 4.2137724754e-02
7758 12 0.0000 286 74.898306514251 4.1809659157e-02
7759 12 0.0000 287 75.161506967924 4.1826075529e-02
7760 12 0.0000 288 75.423829208603 4.2054548312e-02
7761 12 0.0000 289 75.703930843640 1.0411964941e+00
7762 12 0.0000 290 75.947117265418 4.2298837549e-02
7763 12 0.0000 291 76.212312566130 4.2428701080e-02
7764 12 0.0000 292 76.476265394534 4.2266841773e-02
7765 12 0.0000 293 76.745575305869 4.3867196307e-02
7766 12 0.0000 294 77.070395872573 1.5529899352e-01
7767 12 0.0000 295 77.155554576385 9.2084361083e-01
7768 12 0.0000 296 77.499079589144 4.3999091459e-02
7769 12 0.0000 297 77.768290848999 4.2258401223e-02
7770 12 0.0000 298 78.033142609716 4.2269298466e-02
7771 12 0.0000 299 78.297069026278 4.1968723409e-02
7772 12 0.0000 300 78.560373195566 4.1793914436e-02
7773 12 0.0000 301 78.822584577311 4.2260480462e-02
7774 12 0.0000 302 79.085754309887 4.1991288824e-02
7775 12 0.0000 303 79.337808991256 1.0415624121e+00
7776 12 0.0000 304 79.609840349027 4.1862672968e-02
7777 12 0.0000 305 79.873246821068 4.2017040280e-02
7778 12 0.0000 306 80.134711931339 4.1806198519e-02
7779 12 0.0000 307 80.398481751080 4.2380553820e-02
7780 12 0.0000 308 80.659945009298 4.1697882014e-02
7781 12 0.0000 309 80.922896197306 4.2048520594e-02
7782 12 0.0000 310 81.186413652225 4.2178658421e-02
7783 12 0.0000 311 81.447753582936 4.2043953064e-02
7784 12 0.0000 312 81.711615707824 4.1922384257e-02
7785 12 0.0000 313 81.975030881729 4.2107290399e-02
7786 12 0.0000 314 82.240090197676 4.2511160698e-02
7787 12 0.0000 315 82.510625014911 4.3769753082e-02
7788 12 0.0000 316 82.830450801513 1.4114313024e-01
7789 12 0.0000 317 82.920405661561 9.3555386157e-01
7790 12 0.0000 318 83.264493141942 4.3761275084e-02
7791 12 0.0000 319 83.534364497333 4.2750591734e-02
7792 12 0.0000 320 83.800597845355 4.2493867511e-02
7793 12 0.0000 321 84.067218144066 4.3147787564e-02
7794 12 0.0000 322 84.337049881413 4.3794714317e-02
7795 12 0.0000 323 84.663597034013 1.6438114661e-01
7796 12 0.0000 324 84.746726368571 9.1202787394e-01
7797 12 0.0000 325 85.092401477945 4.3417423286e-02
7798 12 0.0000 326 85.361100526213 4.2630831002e-02
7799 12 0.0000 327 85.626631509925 4.2009028260e-02
7800 12 0.0000 328 85.889752053611 4.2209775268e-02
7801 12 0.0000 329 86.153544809933 4.1992073015e-02
7802 12 0.0000 330 86.417570092629 4.2403872694e-02
7803 12 0.0000 331 86.678987861231 4.2047471501e-02
7804 12 0.0000 332 86.943931015374 4.2219102444e-02
7805 12 0.0000 333 87.211064033792 4.3792602386e-02
7806 12 0.0000 334 87.427042752841 1.0382111575e+00
7807 12 0.0000 335 87.723819510821 4.3210233006e-02
7808 12 0.0000 336 87.988502832001 4.2370160281e-02
7809 12 0.0000 337 88.251076438393 4.2342221794e-02
7810 12 0.0000 338 88.515126974212 4.2127530616e-02
7811 12 0.0000 339 88.807635064866 1.0395116243e+00
7812 12 0.0000 340 89.032152026919 4.3083731173e-02
7813 12 0.0000 341 89.296200428330 4.2009371431e-02
7814 12 0.0000 342 89.560255988138 4.2133135466e-02
7815 12 0.0000 343 89.824080133689 4.2438273986e-02
7816 12 0.0000 344 90.084805179611 4.1780023538e-02
7817 12 0.0000 345 90.348039573248 4.2250053430e-02
7818 12 0.0000 346 90.609979368474 4.1620200384e-02
7819 12 0.0000 347 90.872518571434 4.2089800525e-02
7820 12 0.0000 348 91.136676002898 4.2296324013e-02
7821 12 0.0000 349 91.396371517883 4.2239473711e-02
7822 12 0.0000 350 91.659960539668 4.2085859825e-02
7823 12 0.0000 351 91.923012414626 4.1930218548e-02
7824 12 0.0000 352 92.188628168526 4.2752998071e-02
7825 12 0.0000 353 92.489810821478 1.0364535847e+00
7826 12 0.0000 354 92.695977713715 4.5866811285e-02
7827 12 0.0000 355 92.966265383019 4.2419948504e-02
7828 12 0.0000 356 93.230751706292 4.2172420677e-02
7829 12 0.0000 357 93.494191755864 4.2117312288e-02
7830 12 0.0000 358 93.759162351806 4.1997923170e-02
7831 12 0.0000 359 94.022980059407 4.3034923717e-02
7832 12 0.0000 360 94.294003260857 4.3469628463e-02
7833 12 0.0000 361 94.638311825666 8.7767594938e-01
7834 12 0.0000 362 94.714920129926 1.9925893902e-01
7835 12 0.0000 363 95.046337373205 4.3857094830e-02
7836 12 0.0000 364 95.315932835340 4.2488981627e-02
7837 12 0.0000 365 95.581765293200 4.3706551249e-02
7838 12 0.0000 366 95.869503963752 1.0404787645e+00
7839 12 0.0000 367 96.102826632675 4.2869273272e-02
7840 12 0.0000 368 96.367530016192 4.2017842011e-02
7841 12 0.0000 369 96.631593590871 4.2194589750e-02
7842 12 0.0000 370 96.894251731671 4.1889527883e-02
7843 12 0.0000 371 97.157966328794 4.1975860270e-02
7844 12 0.0000 372 97.421979491435 4.3254317364e-02
7845 12 0.0000 373 97.683556572831 4.1728739531e-02
7846 12 0.0000 374 97.947624711789 4.2188074663e-02
7847 12 0.0000 375 98.212527587469 4.2591945095e-02
7848 12 0.0000 376 98.481949649673 4.4519991391e-02
7849 12 0.0000 377 98.822176138534 9.5484239162e-01
7850 12 0.0000 378 98.918970952203 1.2245186242e-01
7851 12 0.0000 379 99.237057259724 4.3109253946e-02
7852 12 0.0000 380 99.504909198387 4.2794992571e-02
7853 12 0.0000 381 99.771326005546 4.2469541790e-02
7854 12 0.0000 382 100.032626606386 4.3122324331e-02
7855 12 0.0000 383 100.298785066400 4.2994185370e-02
7856 12 0.0000 384 100.557914378598 4.2438083272e-02
7857 12 0.0000 385 100.821455651342 4.1838875181e-02
7858 12 0.0000 386 101.086440170480 4.2911816724e-02
7859 12 0.0000 387 101.318995447929 1.0400897867e+00
7860 12 0.0000 388 101.605725409110 4.2173761124e-02
7861 12 0.0000 389 101.869462613094 4.2196931467e-02
7862 12 0.0000 390 102.131137796821 4.2003005268e-02
7863 12 0.0000 391 102.395184035685 4.2180721776e-02
7864 12 0.0000 392 102.657211439617 4.1803581016e-02
7865 12 0.0000 393 102.920618242518 4.2115345160e-02
7866 12 0.0000 394 103.184027969593 4.3433843253e-02
7867 12 0.0000 395 103.445328056803 4.2229067291e-02
7868 12 0.0000 396 103.724774166476 1.0412518228e+00
7869 12 0.0000 397 103.969201580395 4.2314903002e-02
7870 12 0.0000 398 104.232673690723 4.2619360027e-02
7871 12 0.0000 399 104.493922762332 4.3280499442e-02
7872 12 0.0000 400 104.760114954779 4.2539558914e-02
7873 12 0.0000 401 105.027705546305 4.3339783875e-02
7874 12 0.0000 402 105.332150997758 8.2089711598e-02
7875 12 0.0000 403 105.453036734638 9.9549973845e-01
7876 12 0.0000 404 105.789459383879 4.4641473055e-02
7877 12 0.0000 405 106.055688927073 4.3004679790e-02
7878 12 0.0000 406 106.321369816866 4.2163742734e-02
7879 12 0.0000 407 106.586138301716 4.2947149757e-02
7880 12 0.0000 408 106.850272818058 4.4441834763e-02
7881 12 0.0000 409 107.165567774727 1.0311528470e+00
7882 12 0.0000 410 107.348072941033 4.9552101694e-02
7883 12 0.0000 411 107.625037237014 4.2749980816e-02
7884 12 0.0000 412 107.889222700083 4.2144171336e-02
7885 12 0.0000 413 108.155283274450 4.3656810282e-02
7886 12 0.0000 414 108.415218006986 4.2326787561e-02
7887 12 0.0000 415 108.679468889961 4.2041932526e-02
7888 12 0.0000 416 108.941855212196 4.2523567064e-02
7889 12 0.0000 417 109.203938970145 4.1376022237e-02
7890 12 0.0000 418 109.466027624858 4.2134425012e-02
7891 12 0.0000 419 109.729002869001 4.2004865735e-02
7892 12 0.0000 420 109.993438195591 4.3251820292e-02
7893 12 0.0000 421 110.253412950490 4.3117584681e-02
7894 12 0.0000 422 110.515757208344 4.1944016051e-02
7895 12 0.0000 423 110.777098320447 4.3919197645e-02
7896 12 0.0000 424 111.030002097139 1.0419121428e+00
7897 12 0.0000 425 111.303861820570 4.2132371824e-02
7898 12 0.0000 426 111.568841183249 4.3061304243e-02
7899 12 0.0000 427 111.872401522211 1.0361501262e+00
7900 12 0.0000 428 112.075212462621 4.5745764944e-02
7901 12 0.0000 429 112.346074381994 4.2514102304e-02
7902 12 0.0000 430 112.610121552693 4.2344912814e-02
7903 12 0.0000 431 112.873567525097 4.4267070122e-02
7904 12 0.0000 432 113.140235958610 4.2593194472e-02
7905 12 0.0000 433 113.402870167571 4.2662338204e-02
7906 12 0.0000 434 113.669051389246 4.2440570109e-02
7907 12 0.0000 435 113.936711556411 4.3905933582e-02
7908 12 0.0000 436 114.280230443959 3.7855853417e-01
7909 12 0.0000 437 114.341183137016 6.9741841127e-01
7910 12 0.0000 438 114.688488985692 4.6470128279e-02
7911 12 0.0000 439 114.960077169417 4.2791297154e-02
7912 12 0.0000 440 115.226407239122 4.2024545173e-02
7913 12 0.0000 441 115.490882383386 4.3355060130e-02
7914 12 0.0000 442 115.752239955282 4.4543269394e-02
7915 12 0.0000 443 116.024687120111 4.5606486430e-02
7916 12 0.0000 444 116.228922386540 1.0362406655e+00
7917 12 0.0000 445 116.532701532411 4.2806147813e-02
7918 12 0.0000 446 116.795475761401 4.4655597195e-02
7919 12 0.0000 447 117.061249102425 4.3069454717e-02
7920 12 0.0000 448 117.325286836829 4.1967287976e-02
7921 12 0.0000 449 117.591495657870 4.2669344919e-02
7922 12 0.0000 450 117.855439430406 4.2610188518e-02
7923 12 0.0000 451 118.116742882940 4.4887352771e-02
7924 12 0.0000 452 118.386865571748 4.4481398005e-02
7925 12 0.0000 453 118.708503778913 1.3421173519e-01
7926 12 0.0000 454 118.800491604265 9.4232203307e-01
7927 12 0.0000 455 119.143619594204 4.4019858279e-02
7928 12 0.0000 456 119.416658620516 4.5242415138e-02
7929 12 0.0000 457 119.675947994930 4.3085656678e-02
7930 12 0.0000 458 119.941425952538 4.3051803182e-02
7931 12 0.0000 459 120.206992710942 4.2467182368e-02
7932 12 0.0000 460 120.473075605876 4.2551777241e-02
7933 12 0.0000 461 120.737798130075 4.2339531140e-02
7934 12 0.0000 462 121.008734642364 4.4695905811e-02
7935 12 0.0000 463 121.356991247535 8.7212942797e-01
7936 12 0.0000 464 121.433057311781 2.0424401177e-01
7937 12 0.0000 465 121.768212205202 4.6630665789e-02
7938 12 0.0000 466 122.033705859318 4.3179821812e-02
7939 12 0.0000 467 122.302767850003 4.4091502117e-02
7940 12 0.0000 468 122.574416350094 4.4505863628e-02
7941 12 0.0000 469 122.924757776261 6.8416014448e-01
7942 12 0.0000 470 122.985581053688 3.9613682365e-01
7943 12 0.0000 471 123.330440443559 4.4477326887e-02
7944 12 0.0000 472 123.606974092498 4.3885686365e-02
7945 12 0.0000 473 123.873631343856 4.7376500681e-02
7946 12 0.0000 474 124.226133470201 5.1456675250e-01
7947 12 0.0000 475 124.284754626699 5.6169966266e-01
7948 12 0.0000 476 124.631188317844 4.5081452834e-02
7949 12 0.0000 477 124.903202155258 4.2445523429e-02
7950 12 0.0000 478 125.170261059828 4.2938586307e-02
7951 12 0.0000 479 125.432835248252 4.2011419814e-02
7952 12 0.0000 480 125.698553558427 4.2358315707e-02
7953 12 0.0000 481 125.965904640656 4.5923756895e-02
7954 12 0.0000 482 126.219705435287 4.2698623996e-02
7955 12 0.0000 483 126.486664256670 4.2269186255e-02
7956 12 0.0000 484 126.743971944798 4.6097443698e-02
7957 12 0.0000 485 127.010771251623 4.2219498819e-02
7958 12 0.0000 486 127.274656940670 4.2503402944e-02
7959 12 0.0000 487 127.517488178487 1.0422104183e+00
7960 12 0.0000 488 127.798746222910 4.2489258694e-02
7961 12 0.0000 489 128.057655520006 4.6290743193e-02
7962 12 0.0000 490 128.325424778086 4.2641309086e-02
7963 12 0.0000 491 128.586727747606 4.2445278336e-02
7964 12 0.0000 492 128.851769679092 4.2557817286e-02
7965 12 0.0000 493 129.117317764428 4.3102551313e-02
7966 12 0.0000 494 129.395949430084 4.9487133359e-02
7967 12 0.0000 495 129.581919845183 1.0338422299e+00
7968 12 0.0000 496 129.884881847077 4.5477493106e-02
7969 12 0.0000 497 130.155766907576 4.2627219712e-02
7970 12 0.0000 498 130.424291547967 4.3466375502e-02
7971 12 0.0000 499 130.692639960216 4.4529970259e-02
7972 12 0.0000 500 131.027390721138 2.1807573518e-01
7973 12 0.0000 501 131.101583312667 8.5903761902e-01
7974 12 0.0000 502 131.449887829338 4.4030920244e-02
7975 12 0.0000 503 131.721655487022 4.3921008603e-02
7976 12 0.0000 504 131.977494041211 4.6763423396e-02
7977 12 0.0000 505 132.248204559566 4.2620568638e-02
7978 12 0.0000 506 132.514219611089 4.2637056745e-02
7979 12 0.0000 507 132.779202987312 4.3072660094e-02
7980 12 0.0000 508 133.037115329969 4.6816105638e-02
7981 12 0.0000 509 133.320077032964 5.1339155636e-02
7982 12 0.0000 510 133.501052687697 1.0298552975e+00
7983 12 0.0000 511 133.817150778878 4.3692442412e-02
7984 12 0.0000 512 134.087384414045 4.3549426974e-02
7985 12 0.0000 513 134.359482017610 5.0278670671e-02
7986 12 0.0000 514 134.690468730011 1.9450862153e-01
7987 12 0.0000 515 134.769429723764 8.8370079775e-01
7988 12 0.0000 516 135.107498525183 4.8260811105e-02
7989 12 0.0000 517 135.379219252848 4.3546061305e-02
7990 12 0.0000 518 135.647579678936 4.2740089933e-02
7991 12 0.0000 519 135.913451278432 4.3292150380e-02
7992 12 0.0000 520 136.175305794809 4.2286544237e-02
7993 12 0.0000 521 136.439103601389 4.2474676529e-02
7994 12 0.0000 522 136.703801027308 4.2527460948e-02
7995 12 0.0000 523 136.961458615377 4.8129554001e-02
7996 12 0.0000 524 137.231422757856 4.3014079121e-02
7997 12 0.0000 525 137.498112409937 4.2561158799e-02
7998 12 0.0000 526 137.765903746048 4.5070516881e-02
7999 12 0.0000 527 138.107640157650 9.6724570068e-01
8000 12 0.0000 528 138.210633404054 1.1059580472e-01
8001 12 0.0000 529 138.530863010066 4.7181283748e-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())