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 4 of 30 · 500/page · 14949 rows next →
# atheta_over_pikz_kw_k
1502 4 0.6667 79 62.412327782231 1.2673506781e-01
1503 4 0.6667 80 63.210257695426 1.2754489059e-01
1504 4 0.6667 81 64.019178546025 1.3139694303e-01
1505 4 0.6667 82 65.018496252929 8.2505088698e-01
1506 4 0.6667 83 65.328919351699 4.0491585102e-01
1507 4 0.6667 84 66.292317271618 1.3118453846e-01
1508 4 0.6667 85 67.082217878248 1.1273788581e+00
1509 4 0.6667 86 67.899028721473 1.2716243652e-01
1510 4 0.6667 87 68.695443351507 1.2718345400e-01
1511 4 0.6667 88 69.539495774378 1.1244452485e+00
1512 4 0.6667 89 70.277898944364 1.2808066495e-01
1513 4 0.6667 90 71.083518978482 1.3008345744e-01
1514 4 0.6667 91 72.034392678021 1.0782196807e+00
1515 4 0.6667 92 72.548838460709 1.6127444327e-01
1516 4 0.6667 93 73.400975303089 1.2930471293e-01
1517 4 0.6667 94 74.206787655157 1.2822566002e-01
1518 4 0.6667 95 75.013996319556 1.3061045431e-01
1519 4 0.6667 96 75.716751354764 1.1232295475e+00
1520 4 0.6667 97 76.648132324033 1.6086271435e-01
1521 4 0.6667 98 77.177418811735 1.0828178116e+00
1522 4 0.6667 99 78.146958604202 1.3507751810e-01
1523 4 0.6667 100 79.130952502703 4.3556320962e-01
1524 4 0.6667 101 79.439055372611 7.9668878233e-01
1525 4 0.6667 102 80.444257776519 1.3249527824e-01
1526 4 0.6667 103 81.258500240639 1.2905685156e-01
1527 4 0.6667 104 82.062959651018 1.2815028933e-01
1528 4 0.6667 105 82.904902815828 1.1276091635e+00
1529 4 0.6667 106 83.673696409142 1.3260178360e-01
1530 4 0.6667 107 84.670869015055 9.6418138771e-01
1531 4 0.6667 108 85.042866479223 2.7019566263e-01
1532 4 0.6667 109 85.978865825280 1.3348639737e-01
1533 4 0.6667 110 86.820081146841 1.4189569723e-01
1534 4 0.6667 111 87.447696174618 1.1121049290e+00
1535 4 0.6667 112 88.505077401377 2.8085638930e-01
1536 4 0.6667 113 88.876331946325 9.5612537709e-01
1537 4 0.6667 114 89.879095012686 1.3306963006e-01
1538 4 0.6667 115 90.695952458809 1.2957138184e-01
1539 4 0.6667 116 91.507276039309 1.3163274124e-01
1540 4 0.6667 117 92.461022970077 1.0856213746e+00
1541 4 0.6667 118 92.995496004767 1.5757402038e-01
1542 4 0.6667 119 93.850573384602 1.3122464024e-01
1543 4 0.6667 120 94.653651497039 1.1333663747e+00
1544 4 0.6667 121 95.638897294753 3.8317002958e-01
1545 4 0.6667 122 95.960858824924 8.5130315266e-01
1546 4 0.6667 123 96.972599564979 1.3379432039e-01
1547 4 0.6667 124 97.799338526817 1.3356162209e-01
1548 4 0.6667 125 98.786057523234 1.0461612631e+00
1549 4 0.6667 126 99.244138708297 1.9565216429e-01
1550 4 0.6667 127 100.149776811269 1.3879127260e-01
1551 4 0.6667 128 101.159626927360 5.8255595601e-01
1552 4 0.6667 129 101.456757867968 6.5228645175e-01
1553 4 0.6667 130 102.476578010877 1.3761510646e-01
1554 4 0.6667 131 103.436492942833 3.0176753841e-01
1555 4 0.6667 132 103.798285890614 9.3730673187e-01
1556 4 0.6667 133 104.818887752885 1.4223944417e-01
1557 4 0.6667 134 105.466154613099 1.1130144362e+00
1558 4 0.6667 135 106.380308267879 1.3102384687e-01
1559 4 0.6667 136 107.169968150002 1.1287067985e+00
1560 4 0.6667 137 107.980544919095 1.2878383356e-01
1561 4 0.6667 138 108.773368741635 1.2786336077e-01
1562 4 0.6667 139 109.571602825780 1.2792386056e-01
1563 4 0.6667 140 110.373033777650 1.3408092185e-01
1564 4 0.6667 141 111.043617405351 1.1192076704e+00
1565 4 0.6667 142 111.880488289873 1.1273991219e+00
1566 4 0.6667 143 112.723033556302 1.2987571153e-01
1567 4 0.6667 144 113.518740766060 1.2842710049e-01
1568 4 0.6667 145 114.320500406008 1.1299322375e+00
1569 4 0.6667 146 115.130540570258 1.3353889120e-01
1570 4 0.6667 147 116.130177015457 8.2734163054e-01
1571 4 0.6667 148 116.447889614586 4.0970744719e-01
1572 4 0.6667 149 117.419469915410 1.3524536111e-01
1573 4 0.6667 150 118.278110262515 1.6017416456e-01
1574 4 0.6667 151 118.821579483641 1.0871198272e+00
1575 4 0.6667 152 119.764878956559 1.3385785756e-01
1576 4 0.6667 153 120.575849417422 1.2867277493e-01
1577 4 0.6667 154 121.371157653472 1.1290160401e+00
1578 4 0.6667 155 122.174145251870 1.3150911074e-01
1579 4 0.6667 156 122.950868002038 1.1346047070e+00
1580 4 0.6667 157 123.878527604825 2.1500846792e-01
1581 4 0.6667 158 124.306423766710 1.0263446649e+00
1582 4 0.6667 159 125.291610165354 1.3267860887e-01
1583 4 0.6667 160 126.108771260968 1.3603260969e-01
1584 4 0.6667 161 126.942721949880 1.4901719294e-01
1585 4 0.6667 162 127.541961020241 1.1060030027e+00
1586 4 0.6667 163 128.484604568435 1.3830787500e-01
1587 4 0.6667 164 129.507187991427 9.4837991441e-01
1588 4 0.6667 165 129.879805013862 2.9936395573e-01
1589 4 0.6667 166 131.025668088730 9.9684541332e-01
1590 4 0.6667 167 131.437578685108 2.5144433468e-01
1591 4 0.6667 168 132.371439058425 1.4115145405e-01
1592 4 0.6667 169 133.394923154544 8.1732970769e-01
1593 4 0.6667 170 133.717468673607 4.2508343578e-01
1594 4 0.6667 171 134.747361280425 1.1378152302e+00
1595 4 0.6667 172 135.489185216316 1.3451602725e-01
1596 4 0.6667 173 136.306518457924 1.3163173042e-01
1597 4 0.6667 174 137.114803432316 1.3783922270e-01
1598 4 0.6667 175 138.082900994161 1.0855007297e+00
1599 4 0.6667 176 138.627612396184 1.7263485025e-01
1600 4 0.6667 177 139.677980216040 1.0040943911e+00
1601 4 0.6667 178 140.085437146470 2.4667041730e-01
1602 4 0.6667 179 141.108142219165 1.1249098523e+00
1603 4 0.6667 180 141.803667628431 1.4635716501e-01
1604 4 0.6667 181 142.723133848074 2.1792400225e-01
1605 4 0.6667 182 143.161064544737 1.0327802844e+00
1606 4 0.6667 183 144.162961500685 1.4002840703e-01
1607 4 0.6667 184 144.976933815055 1.3912107796e-01
1608 4 0.6667 185 145.953330907035 1.0493926723e+00
1609 4 0.6667 186 146.418846991600 2.0989836468e-01
1610 4 0.6667 187 147.407069969823 1.1247460914e+00
1611 4 0.6667 188 148.097229107468 1.3798474969e-01
1612 4 0.6667 189 148.946385256147 1.4238302608e-01
1613 4 0.6667 190 149.963653175652 9.1226962712e-01
1614 4 0.6667 191 150.379247505199 4.1438615534e-01
1615 4 0.6667 192 150.979093017991 1.0499569722e+00
1616 4 0.6667 193 151.984722928149 1.4520746091e-01
1617 4 0.6667 194 152.980340474987 1.0684306005e+00
1618 4 0.6667 195 153.466887519297 1.8826290253e-01
1619 4 0.6667 196 154.359337110464 1.4679849551e-01
1620 4 0.6667 197 155.181139798819 1.3998263898e-01
1621 4 0.6667 198 156.089250808371 1.1126809259e+00
1622 4 0.6667 199 156.705771325897 1.4513859464e-01
1623 4 0.6667 200 157.590488032167 1.1477223861e+00
1624 4 0.6667 201 158.433952816074 1.9988423513e-01
1625 4 0.6667 202 158.894741160080 1.0605881527e+00
1626 4 0.6667 203 159.889287774012 1.3812385529e-01
1627 4 0.6667 204 160.813120031093 2.3582583669e-01
1628 4 0.6667 205 161.243841977221 1.0295692516e+00
1629 4 0.6667 206 162.212403709453 1.4650686859e-01
1630 4 0.6667 207 163.026992925444 1.1397016164e+00
1631 4 0.6667 208 163.832083142909 1.3808503104e-01
1632 4 0.6667 209 164.603168500243 1.4263117793e-01
1633 4 0.6667 210 165.520780584015 1.1208873567e+00
1634 4 0.6667 211 166.201180481242 1.5817657599e-01
1635 4 0.6667 212 167.157023555529 1.1040669318e+00
1636 4 0.6667 213 167.757532665445 1.6141559892e-01
1637 4 0.6667 214 168.660054643610 2.2611153602e-01
1638 4 0.6667 215 169.145497070077 1.0668087809e+00
1639 4 0.6667 216 169.939945192807 1.1202014541e+00
1640 4 0.6667 217 170.850890323396 1.4394240641e-01
1641 4 0.6667 218 171.694424720581 1.4637851773e-01
1642 4 0.6667 219 172.467136716775 1.3914451977e-01
1643 4 0.6667 220 173.391581293789 1.1413987027e+00
1644 4 0.6667 221 174.061535330434 1.5781495887e-01
1645 4 0.6667 222 174.763938852796 1.1354960917e+00
1646 4 0.6667 223 175.642950773489 1.3499326502e-01
1647 4 0.6667 224 176.445147331180 1.1428492519e+00
1648 4 0.6667 225 177.244469144100 1.5276748158e-01
1649 4 0.6667 226 178.282054509163 9.0356228073e-01
1650 4 0.6667 227 178.647376598700 3.8315519487e-01
1651 4 0.6667 228 179.782101710314 7.4692369086e-01
1652 4 0.6667 229 180.115594461238 5.2051396708e-01
1653 4 0.6667 230 181.117230501450 1.8290742329e-01
1654 4 0.6667 231 182.122516105348 9.3166051376e-01
1655 4 0.6667 232 182.497138102660 3.2938592932e-01
1656 4 0.6667 233 183.478875783032 1.4900741013e-01
1657 4 0.6667 234 184.310567055070 1.9114371141e-01
1658 4 0.6667 235 184.916090291331 1.1232618060e+00
1659 4 0.6667 236 185.628889246946 1.1249518159e+00
1660 4 0.6667 237 186.629831173664 1.8771376858e-01
1661 4 0.6667 238 187.253790413723 1.1122431540e+00
1662 4 0.6667 239 188.239046126830 1.7333101223e-01
1663 4 0.6667 240 189.177195566378 4.0711405300e-01
1664 4 0.6667 241 189.521161267612 8.7778144004e-01
1665 4 0.6667 242 190.544460120966 1.7210788172e-01
1666 4 0.6667 243 191.322271551308 1.4564873943e-01
1667 4 0.6667 244 192.043836030701 1.1678475204e+00
1668 4 0.6667 245 193.052449348230 1.1071413035e+00
1669 4 0.6667 246 193.638345694512 1.5916367955e-01
1670 4 0.6667 247 194.463307357002 1.7651702095e-01
1671 4 0.6667 248 195.267519506869 1.1365786668e+00
1672 4 0.6667 249 196.115140669957 1.8141622240e-01
1673 4 0.6667 250 196.884298145062 1.1804622174e+00
1674 4 0.6667 251 197.902827528524 8.1153941536e-01
1675 4 0.6667 252 198.215485885397 4.8692914362e-01
1676 4 0.6667 253 199.203244892495 1.4333197075e-01
1677 4 0.6667 254 200.065768593281 1.8994013747e-01
1678 4 0.6667 255 200.987734203252 3.6386995009e-01
1679 4 0.6667 256 201.343444911915 9.4449684129e-01
1680 4 0.6667 257 202.472037227493 1.1282839804e+00
1681 4 0.6667 258 203.162413744904 2.0452070962e-01
1682 4 0.6667 259 204.136233456783 1.0352469404e+00
1683 4 0.6667 260 204.587330946022 2.8232847049e-01
1684 4 0.6667 261 205.405006664774 1.1374328361e+00
1685 4 0.6667 262 206.277441153159 2.0058266461e-01
1686 4 0.6667 263 207.112311587701 1.4563771644e-01
1687 4 0.6667 264 207.896897995402 1.1907453368e+00
1688 4 0.6667 265 208.619765333610 1.9798304612e-01
1689 4 0.6667 266 209.563737071331 1.1527074026e+00
1690 4 0.6667 267 210.179120063918 1.8582446001e-01
1691 4 0.6667 268 211.065951158133 1.5515090136e-01
1692 4 0.6667 269 211.712210674781 1.1253628840e+00
1693 4 0.6667 270 212.692584665894 2.0671576368e-01
1694 4 0.6667 271 213.355729795710 1.2204303916e+00
1695 4 0.6667 272 214.455863499474 9.0913133105e-01
1696 4 0.6667 273 214.857382491716 4.2427259881e-01
1697 4 0.6667 274 215.929995604052 4.4228843790e-01
1698 4 0.6667 275 216.284619706390 9.1116498749e-01
1699 4 0.6667 276 217.335217733764 1.6757234205e-01
1700 4 0.6667 277 218.042005691919 2.0321995705e-01
1701 4 0.6667 278 219.047265032628 1.1537738880e+00
1702 4 0.6667 279 219.625486913516 2.1610850672e-01
1703 4 0.6667 280 220.678088577543 1.1851513259e+00
1704 4 0.6667 281 221.383535246189 1.1303040072e+00
1705 4 0.6667 282 221.969929011880 1.9507688594e-01
1706 4 0.6667 283 222.929165600217 2.1602240049e-01
1707 4 0.6667 284 223.835018527096 6.9475770074e-01
1708 4 0.6667 285 224.188561447954 7.1479126834e-01
1709 4 0.6667 286 225.026158886115 1.1723477941e+00
1710 4 0.6667 287 225.873019837461 2.0087998535e-01
1711 4 0.6667 288 226.646757572939 2.3675712685e-01
1712 4 0.6667 289 227.434641281067 1.1466965307e+00
1713 4 0.6667 290 228.338124886313 2.6440633226e-01
1714 4 0.6667 291 229.305959916160 1.1244053652e+00
1715 4 0.6667 292 229.967422976872 2.0838315814e-01
1716 4 0.6667 293 230.744810529520 3.0255948378e-01
1717 4 0.6667 294 231.323505254030 1.1088620042e+00
1718 4 0.6667 295 232.032033870669 1.2134395165e+00
1719 4 0.6667 296 232.916208400899 2.5861078471e-01
1720 4 0.6667 297 233.710549456510 1.1482235244e+00
1721 4 0.6667 298 234.714916238785 2.5696743590e-01
1722 4 0.6667 299 235.419141341977 1.8997394260e-01
1723 4 0.6667 300 236.338164661489 8.1003390364e-01
1724 4 0.6667 301 236.744539487914 7.1688575845e-01
1725 4 0.6667 302 237.761398961313 1.1621117597e+00
1726 4 0.6667 303 238.537010821330 1.5933202808e-01
1727 4 0.6667 304 239.510536478127 1.2498739625e+00
1728 4 0.6667 305 240.070475959245 1.9749663344e-01
1729 4 0.6667 306 241.035886979370 1.2926126589e+00
1730 4 0.6667 307 241.738855382601 1.7752995952e-01
1731 4 0.6667 308 242.677028544644 9.9821097513e-01
1732 4 0.6667 309 243.141169862744 5.6980584111e-01
1733 4 0.6667 310 244.055101265379 1.1762664623e+00
1734 4 0.6667 311 244.842675283727 3.3167827902e-01
1735 4 0.6667 312 245.648239538382 1.6746663954e-01
1736 4 0.6667 313 246.547656573451 2.4260966442e-01
1737 4 0.6667 314 247.138400083066 1.2377827493e+00
1738 4 0.6667 315 248.102069609904 1.2391225513e+00
1739 4 0.6667 316 248.712233230501 2.6851687882e-01
1740 4 0.6667 317 249.599737645806 1.2863188985e+00
1741 4 0.6667 318 250.321142693363 2.1984484671e-01
1742 4 0.6667 319 251.041851644194 1.1571024643e+00
1743 4 0.6667 320 252.035280486267 4.3156169531e-01
1744 4 0.6667 321 252.852275939488 7.8462324395e-01
1745 4 0.6667 322 253.260575927557 6.5038236943e-01
1746 4 0.6667 323 254.367744113484 3.8370998685e-01
1747 4 0.6667 324 255.263357356969 1.3608284938e+00
1748 4 0.6667 325 255.954957993009 3.1040737165e-01
1749 4 0.6667 326 256.452484684625 1.0444474736e+00
1750 4 0.6667 327 257.491373989002 1.9098823755e-01
1751 4 0.6667 328 258.447617716196 1.1059378388e+00
1752 4 0.6667 329 258.969734324309 5.7924118274e-01
1753 4 0.6667 330 259.844855715761 1.3092869289e+00
1754 4 0.6667 331 260.640694389954 1.0758890274e+00
1755 4 0.6667 332 261.109066254487 4.4587615404e-01
1756 4 0.6667 333 262.112923506543 4.5202966425e-01
1757 4 0.6667 334 263.004206925578 2.0877506925e-01
1758 4 0.6667 335 263.608507742424 1.4175254990e+00
1759 4 0.6667 336 264.706734736325 3.3862058483e-01
1760 4 0.6667 337 265.461869880306 1.1852762841e+00
1761 4 0.6667 338 266.150143386015 4.3366457539e-01
1762 4 0.6667 339 266.757197810923 1.2594605566e+00
1763 4 0.6667 340 267.802786733987 1.0104992511e+00
1764 4 0.6667 341 268.364179034817 6.2822704397e-01
1765 4 0.6667 342 269.122197000943 2.4034529468e-01
1766 4 0.6667 343 270.009325001893 1.3464519620e+00
1767 4 0.6667 344 270.734662450915 4.3266967009e-01
1768 4 0.6667 345 271.460055144284 1.3954038176e+00
1769 4 0.6667 346 272.310727254441 5.4591727456e-01
1770 4 0.6667 347 273.350388395669 9.1755473924e-01
1771 4 0.6667 348 273.746536925512 4.3477674706e-01
1772 4 0.6667 349 274.778154751418 5.5499886697e-01
1773 4 0.6667 350 275.572887508561 1.1946662969e+00
1774 4 0.6667 351 276.430422046628 1.5683487585e+00
1775 4 0.6667 352 277.161403474200 2.1839810814e-01
1776 4 0.6667 353 278.054642048781 1.2341341963e+00
1777 4 0.6667 354 278.593627548247 6.5619687530e-01
1778 4 0.6667 355 279.235874601730 1.4293726830e+00
1779 4 0.8333 1 1.078545632425 1.3127037164e-01
1780 4 0.8333 2 1.887611366812 1.2732633260e-01
1781 4 0.8333 3 2.683942435073 1.2632666635e-01
1782 4 0.8333 4 3.476270565896 1.2593068332e-01
1783 4 0.8333 5 4.266850263035 1.2573927086e-01
1784 4 0.8333 6 5.056544152480 1.2563811446e-01
1785 4 0.8333 7 5.845767022908 1.2558505690e-01
1786 4 0.8333 8 6.634758283937 1.2556260264e-01
1787 4 0.8333 9 7.423684994394 1.2556399251e-01
1788 4 0.8333 10 8.212692998426 1.2558891578e-01
1789 4 0.8333 11 9.001944987262 1.2564332565e-01
1790 4 0.8333 12 9.791668433732 1.2574304027e-01
1791 4 0.8333 13 10.582251853935 1.2592680703e-01
1792 4 0.8333 14 11.374493184669 1.2629881325e-01
1793 4 0.8333 15 12.170457911700 1.2722215986e-01
1794 4 0.8333 16 12.978064980771 1.3080289984e-01
1795 4 0.8333 17 13.955130629758 4.9519753142e-01
1796 4 0.8333 18 14.248737530963 7.3362740278e-01
1797 4 0.8333 19 15.245688687640 1.3093929429e-01
1798 4 0.8333 20 16.054172672316 1.2738306018e-01
1799 4 0.8333 21 16.851393591813 1.2654685539e-01
1800 4 0.8333 22 17.645600221111 1.2631911264e-01
1801 4 0.8333 23 18.439391072927 1.2640553416e-01
1802 4 0.8333 24 19.234958154437 1.2695102189e-01
1803 4 0.8333 25 20.038142573832 1.2939303704e-01
1804 4 0.8333 26 20.988927419854 1.0765603642e+00
1805 4 0.8333 27 21.499437427886 1.6183961612e-01
1806 4 0.8333 28 22.352690351746 1.2919601787e-01
1807 4 0.8333 29 23.159214259848 1.2814034650e-01
1808 4 0.8333 30 23.969757811882 1.3081000089e-01
1809 4 0.8333 31 24.955824336999 1.0000594862e+00
1810 4 0.8333 32 25.352678010956 2.3304120635e-01
1811 4 0.8333 33 26.260592079370 1.3024237385e-01
1812 4 0.8333 34 27.067804171832 1.2747854317e-01
1813 4 0.8333 35 27.866614191514 1.2695746453e-01
1814 4 0.8333 36 28.664721696792 1.2723174028e-01
1815 4 0.8333 37 29.468478107258 1.2920462242e-01
1816 4 0.8333 38 30.399985616581 1.0988061539e+00
1817 4 0.8333 39 30.980595569270 1.4545046198e-01
1818 4 0.8333 40 31.826875596107 1.3315382392e-01
1819 4 0.8333 41 32.835624033343 8.0476390386e-01
1820 4 0.8333 42 33.143583753681 4.2615480182e-01
1821 4 0.8333 43 34.115599622020 1.3162181503e-01
1822 4 0.8333 44 34.929188807656 1.2837010629e-01
1823 4 0.8333 45 35.734502195592 1.2829548283e-01
1824 4 0.8333 46 36.546525768691 1.3112883675e-01
1825 4 0.8333 47 37.533416447681 1.0111162519e+00
1826 4 0.8333 48 37.943531217919 2.2375029386e-01
1827 4 0.8333 49 38.853282639416 1.3179069065e-01
1828 4 0.8333 50 39.677575555535 1.3218163366e-01
1829 4 0.8333 51 40.611362496154 2.7024670345e-01
1830 4 0.8333 52 40.983535463161 9.6400922205e-01
1831 4 0.8333 53 41.989901919837 1.3419145189e-01
1832 4 0.8333 54 42.869684196980 1.7220429621e-01
1833 4 0.8333 55 43.363985776350 1.0674994460e+00
1834 4 0.8333 56 44.328043685932 1.3042477457e-01
1835 4 0.8333 57 45.136958093929 1.2794041764e-01
1836 4 0.8333 58 45.939722357132 1.2791590546e-01
1837 4 0.8333 59 46.748460215175 1.3040494632e-01
1838 4 0.8333 60 47.653125816503 2.2543984756e-01
1839 4 0.8333 61 48.058246891962 1.0083090673e+00
1840 4 0.8333 62 49.044603281676 1.3175240319e-01
1841 4 0.8333 63 49.782025421376 1.1242480992e+00
1842 4 0.8333 64 50.636776634249 1.2716084810e-01
1843 4 0.8333 65 51.432781290169 1.2656523622e-01
1844 4 0.8333 66 52.227536498500 1.2673133769e-01
1845 4 0.8333 67 52.975652930884 1.1249608335e+00
1846 4 0.8333 68 53.808467063399 1.2681049332e-01
1847 4 0.8333 69 54.605783602300 1.2738458233e-01
1848 4 0.8333 70 55.412275829698 1.3037475696e-01
1849 4 0.8333 71 56.393474409387 1.0083480074e+00
1850 4 0.8333 72 56.797525189163 2.2475944835e-01
1851 4 0.8333 73 57.699553958813 1.3004833564e-01
1852 4 0.8333 74 58.505339524314 1.2754356842e-01
1853 4 0.8333 75 59.341650200672 1.1253092324e+00
1854 4 0.8333 76 60.091216584748 1.2726363514e-01
1855 4 0.8333 77 60.837419733700 1.1248510717e+00
1856 4 0.8333 78 61.671704065648 1.2673115096e-01
1857 4 0.8333 79 62.466294300113 1.2662601998e-01
1858 4 0.8333 80 63.263315291478 1.2735202643e-01
1859 4 0.8333 81 64.070075390887 1.3085058270e-01
1860 4 0.8333 82 65.055822284164 9.9297370080e-01
1861 4 0.8333 83 65.446381660744 2.4009528421e-01
1862 4 0.8333 84 66.360416394633 1.3182220030e-01
1863 4 0.8333 85 67.088921046273 1.1235336629e+00
1864 4 0.8333 86 67.949076430470 1.2756797975e-01
1865 4 0.8333 87 68.745335692519 1.2675308380e-01
1866 4 0.8333 88 69.545589463491 1.1264917798e+00
1867 4 0.8333 89 70.334445032660 1.2691859764e-01
1868 4 0.8333 90 71.133657898530 1.2877854039e-01
1869 4 0.8333 91 72.046564940558 1.1068953656e+00
1870 4 0.8333 92 72.657518985780 1.3827985545e-01
1871 4 0.8333 93 73.478185762673 1.2842897948e-01
1872 4 0.8333 94 74.283910195915 1.2905509000e-01
1873 4 0.8333 95 75.111015801978 1.4054211971e-01
1874 4 0.8333 96 75.727098886947 1.1093976457e+00
1875 4 0.8333 97 76.744227771536 2.0337728493e-01
1876 4 0.8333 98 77.192195959920 1.0377742249e+00
1877 4 0.8333 99 78.191845154949 1.3633113434e-01
1878 4 0.8333 100 79.207115794350 6.7860828339e-01
1879 4 0.8333 101 79.501399906458 5.5375009085e-01
1880 4 0.8333 102 80.493511030462 1.3261281844e-01
1881 4 0.8333 103 81.308057001482 1.2904009952e-01
1882 4 0.8333 104 82.111950713251 1.2785198005e-01
1883 4 0.8333 105 82.910722574374 1.1287219464e+00
1884 4 0.8333 106 83.724703847380 1.3145620708e-01
1885 4 0.8333 107 84.695023439324 1.0571802633e+00
1886 4 0.8333 108 85.169278038670 1.8207943239e-01
1887 4 0.8333 109 86.055712979911 1.3374184858e-01
1888 4 0.8333 110 86.926430994145 1.6424220979e-01
1889 4 0.8333 111 87.460196169290 1.0846240664e+00
1890 4 0.8333 112 88.596492443982 4.3441877649e-01
1891 4 0.8333 113 88.911548768758 8.0181361443e-01
1892 4 0.8333 114 89.923448988171 1.3351463598e-01
1893 4 0.8333 115 90.741556050290 1.2952676418e-01
1894 4 0.8333 116 91.550062658109 1.3066395741e-01
1895 4 0.8333 117 92.471366948522 1.1090737453e+00
1896 4 0.8333 118 93.090164946736 1.3941281847e-01
1897 4 0.8333 119 93.922020250740 1.3177035208e-01
1898 4 0.8333 120 94.660971464836 1.1296014102e+00
1899 4 0.8333 121 95.726014181583 6.2534051948e-01
1900 4 0.8333 122 96.019140575365 6.0865443791e-01
1901 4 0.8333 123 97.021826870225 1.3376141179e-01
1902 4 0.8333 124 97.845702237705 1.3255646479e-01
1903 4 0.8333 125 98.801169354694 1.0911578696e+00
1904 4 0.8333 126 99.354011509192 1.5561100559e-01
1905 4 0.8333 127 100.217110580778 1.3741797218e-01
1906 4 0.8333 128 101.234098896120 8.8630732929e-01
1907 4 0.8333 129 101.571925630947 3.4972630188e-01
1908 4 0.8333 130 102.549431413642 1.3805303757e-01
1909 4 0.8333 131 103.563894548527 5.7923399662e-01
1910 4 0.8333 132 103.864891513548 6.5929899525e-01
1911 4 0.8333 133 104.914820409640 1.5981051539e-01
1912 4 0.8333 134 105.477082215482 1.0912257967e+00
1913 4 0.8333 135 106.432602597215 1.3348692658e-01
1914 4 0.8333 136 107.176138026194 1.1266992537e+00
1915 4 0.8333 137 108.032213863413 1.2992506344e-01
1916 4 0.8333 138 108.830471234456 1.2850411350e-01
1917 4 0.8333 139 109.635038347414 1.2952013251e-01
1918 4 0.8333 140 110.458420534456 1.4522297759e-01
1919 4 0.8333 141 111.053262652981 1.1055045691e+00
1920 4 0.8333 142 111.885755476707 1.1249216724e+00
1921 4 0.8333 143 112.764991844233 1.3119584920e-01
1922 4 0.8333 144 113.567013620468 1.2928904603e-01
1923 4 0.8333 145 114.325987919316 1.1288772700e+00
1924 4 0.8333 146 115.176069816646 1.3369796163e-01
1925 4 0.8333 147 116.166021286822 9.8656950926e-01
1926 4 0.8333 148 116.558422856352 2.5405528380e-01
1927 4 0.8333 149 117.488099961834 1.3602911251e-01
1928 4 0.8333 150 118.384704171848 2.0133308184e-01
1929 4 0.8333 151 118.836857566660 1.0411929384e+00
1930 4 0.8333 152 119.810971754831 1.3488908128e-01
1931 4 0.8333 153 120.629443155535 1.3015585099e-01
1932 4 0.8333 154 121.377367952526 1.1277352655e+00
1933 4 0.8333 155 122.230084269581 1.3399934783e-01
1934 4 0.8333 156 122.957350478025 1.1316248518e+00
1935 4 0.8333 157 123.966514755392 2.9875676631e-01
1936 4 0.8333 158 124.327770064032 9.4099791593e-01
1937 4 0.8333 159 125.333178171053 1.3375185025e-01
1938 4 0.8333 160 126.154622948907 1.3717178126e-01
1939 4 0.8333 161 127.010951384832 1.6423822828e-01
1940 4 0.8333 162 127.550032761012 1.0871541763e+00
1941 4 0.8333 163 128.514238450137 1.3833290355e-01
1942 4 0.8333 164 129.524967238040 1.0197544661e+00
1943 4 0.8333 165 129.952290065066 2.2960724183e-01
1944 4 0.8333 166 131.043544963107 1.0585953604e+00
1945 4 0.8333 167 131.529580067234 1.9264249093e-01
1946 4 0.8333 168 132.421825863878 1.3934199701e-01
1947 4 0.8333 169 133.429783141106 9.6547613047e-01
1948 4 0.8333 170 133.809871721645 2.7775466879e-01
1949 4 0.8333 171 134.753992524561 1.1399133777e+00
1950 4 0.8333 172 135.544178544168 1.3230705192e-01
1951 4 0.8333 173 136.354606549660 1.3095373681e-01
1952 4 0.8333 174 137.154837547805 1.3607875657e-01
1953 4 0.8333 175 138.092326117891 1.1063186056e+00
1954 4 0.8333 176 138.699867535217 1.5420639739e-01
1955 4 0.8333 177 139.698575750386 1.0731975934e+00
1956 4 0.8333 178 140.192398590567 1.7896485155e-01
1957 4 0.8333 179 141.117218291458 1.1320269563e+00
1958 4 0.8333 180 141.882756148707 1.4201409960e-01
1959 4 0.8333 181 142.841435435117 3.3255779066e-01
1960 4 0.8333 182 143.189555746307 9.1295366651e-01
1961 4 0.8333 183 144.208052483429 1.4089340455e-01
1962 4 0.8333 184 145.021598299426 1.3798465258e-01
1963 4 0.8333 185 145.967492972687 1.0898125348e+00
1964 4 0.8333 186 146.505905824187 1.7155714961e-01
1965 4 0.8333 187 147.415505527694 1.1313027655e+00
1966 4 0.8333 188 148.172076259347 1.3302244099e-01
1967 4 0.8333 189 149.007172799174 1.4189428713e-01
1968 4 0.8333 190 150.000635368646 1.0496003781e+00
1969 4 0.8333 191 150.582845135047 3.9709286029e-01
1970 4 0.8333 192 151.011714011624 9.2843645112e-01
1971 4 0.8333 193 152.032202947954 1.4387058746e-01
1972 4 0.8333 194 152.994308197076 1.1057007437e+00
1973 4 0.8333 195 153.568926512303 1.5511132063e-01
1974 4 0.8333 196 154.418690449446 1.4549231904e-01
1975 4 0.8333 197 155.237827738044 1.3918862333e-01
1976 4 0.8333 198 156.099850419765 1.1272078443e+00
1977 4 0.8333 199 156.804672605541 1.3484413758e-01
1978 4 0.8333 200 157.600408796716 1.1489320187e+00
1979 4 0.8333 201 158.577215101437 3.2694360129e-01
1980 4 0.8333 202 158.927212245745 9.2793493959e-01
1981 4 0.8333 203 159.949917131941 1.3977129466e-01
1982 4 0.8333 204 160.922604975436 3.5822527043e-01
1983 4 0.8333 205 161.275104051818 9.0537169005e-01
1984 4 0.8333 206 162.265383888808 1.4760981986e-01
1985 4 0.8333 207 163.033552860351 1.1382654186e+00
1986 4 0.8333 208 163.885368618150 1.3943946317e-01
1987 4 0.8333 209 164.651680034321 1.3974129616e-01
1988 4 0.8333 210 165.528110056189 1.1283861851e+00
1989 4 0.8333 211 166.260708743656 1.5268427753e-01
1990 4 0.8333 212 167.169302948487 1.1252863999e+00
1991 4 0.8333 213 167.879235376288 1.5149179676e-01
1992 4 0.8333 214 168.833223693745 4.1103640312e-01
1993 4 0.8333 215 169.202712034926 8.9007029358e-01
1994 4 0.8333 216 169.951679639898 1.0996793540e+00
1995 4 0.8333 217 170.897492765104 1.4384099419e-01
1996 4 0.8333 218 171.743217911656 1.4839726080e-01
1997 4 0.8333 219 172.518885884158 1.3686101632e-01
1998 4 0.8333 220 173.400162006305 1.1526508332e+00
1999 4 0.8333 221 174.159543597164 1.6351520326e-01
2000 4 0.8333 222 174.774336447463 1.1194456357e+00
2001 4 0.8333 223 175.700657635902 1.3725380268e-01

E-024-theta-sweep.json — 10.3 KB, updated 08-19-2026

JSON sidecar (click to expand)
{
  "experiment": "E-024",
  "task": "2.12: theta-flow numerics (theta-independence test)",
  "script": "research/numerics/scripts/E-024-theta-sweep.py",
  "parameters": {
    "a_list": [
      4.0,
      8.0,
      12.0
    ],
    "thetas_over_pi": [
      0.0,
      0.1667,
      0.3333,
      0.5,
      0.6667,
      0.8333,
      1.0
    ],
    "z_max": 300.0,
    "z_metric": 280.0
  },
  "checks": {
    "V1_lattice_all_theta": true,
    "V2_theta_pi_matches_E022": true,
    "V3_weights_positive": true
  },
  "key_values": {
    "a4_th0.0000pi": {
      "theta_over_pi": 0.0,
      "n_zeros": 381,
      "z1_times_a": 3.1471258584711514,
      "mass_total": 184.1835959613851,
      "mass_pm0.1": 119.4128093530634,
      "mass_pm0.05": 91.94966918355006,
      "residual": 48.76433809073876,
      "valley_mass_mean": 1.0747560148463995,
      "plateau_weight_mean": 0.21201886126408157,
      "Delta_eff": 1.6231737129268227
    },
    "a4_th0.1667pi": {
      "theta_over_pi": 0.1667,
      "n_zeros": 381,
      "z1_times_a": 3.4619359298190293,
      "mass_total": 184.18630284387328,
      "mass_pm0.1": 118.29623992508816,
      "mass_pm0.05": 86.87180322997308,
      "residual": 48.931287590873524,
      "valley_mass_mean": 1.0734525020079346,
      "plateau_weight_mean": 0.2127447286559719,
      "Delta_eff": 1.6185423804514978
    },
    "a4_th0.3333pi": {
      "theta_over_pi": 0.3333,
      "n_zeros": 381,
      "z1_times_a": 3.7176915045337466,
      "mass_total": 183.9726782811009,
      "mass_pm0.1": 113.57262540386267,
      "mass_pm0.05": 85.73049725879235,
      "residual": 50.41888852750091,
      "valley_mass_mean": 1.0599507123301588,
      "plateau_weight_mean": 0.22016981889738385,
      "Delta_eff": 1.5715785355566734
    },
    "a4_th0.5000pi": {
      "theta_over_pi": 0.5,
      "n_zeros": 381,
      "z1_times_a": 3.934163190177167,
      "mass_total": 183.98559583483848,
      "mass_pm0.1": 113.33711825061624,
      "mass_pm0.05": 89.82793793217617,
      "residual": 50.618934373720066,
      "valley_mass_mean": 1.0584655671517333,
      "plateau_weight_mean": 0.22104338154462916,
      "Delta_eff": 1.566216581357752
    },
    "a4_th0.6667pi": {
      "theta_over_pi": 0.6667,
      "n_zeros": 381,
      "z1_times_a": 4.128324562896003,
      "mass_total": 183.9983973653932,
      "mass_pm0.1": 119.75726561744686,
      "mass_pm0.05": 95.81754097212591,
      "residual": 48.13040632212352,
      "valley_mass_mean": 1.078317389232299,
      "plateau_weight_mean": 0.21017644682150013,
      "Delta_eff": 1.6352097313960756
    },
    "a4_th0.8333pi": {
      "theta_over_pi": 0.8333,
      "n_zeros": 381,
      "z1_times_a": 4.314182529701571,
      "mass_total": 184.01134904950752,
      "mass_pm0.1": 120.40026511109403,
      "mass_pm0.05": 90.96419878254113,
      "residual": 47.43102136203055,
      "valley_mass_mean": 1.0839708546625155,
      "plateau_weight_mean": 0.20712236402633416,
      "Delta_eff": 1.6550765456169134
    },
    "a4_th1.0000pi": {
      "theta_over_pi": 1.0,
      "n_zeros": 381,
      "z1_times_a": 4.504293602793437,
      "mass_total": 184.02432245308052,
      "mass_pm0.1": 116.64777135239572,
      "mass_pm0.05": 93.33647263205195,
      "residual": 48.30754760742576,
      "valley_mass_mean": 1.0771172606797996,
      "plateau_weight_mean": 0.2109499895520775,
      "Delta_eff": 1.6304224593273315
    },
    "a8_th0.0000pi": {
      "theta_over_pi": 0.0,
      "n_zeros": 763,
      "z1_times_a": 3.1437903681267265,
      "mass_total": 184.1082994928043,
      "mass_pm0.1": 134.20929653000076,
      "mass_pm0.05": 123.1835197830814,
      "residual": 57.73718018875971,
      "valley_mass_mean": 1.002945391301941,
      "plateau_weight_mean": 0.09852761124361722,
      "Delta_eff": 2.320359515027157
    },
    "a8_th0.1667pi": {
      "theta_over_pi": 0.1667,
      "n_zeros": 763,
      "z1_times_a": 3.418119179475546,
      "mass_total": 184.11283914170593,
      "mass_pm0.1": 131.8317519020843,
      "mass_pm0.05": 126.78097971430489,
      "residual": 56.7356526846647,
      "valley_mass_mean": 1.010930051246359,
      "plateau_weight_mean": 0.09681851993970085,
      "Delta_eff": 2.3457877312638367
    },
    "a8_th0.3333pi": {
      "theta_over_pi": 0.3333,
      "n_zeros": 763,
      "z1_times_a": 3.654042277120252,
      "mass_total": 184.11760264338506,
      "mass_pm0.1": 132.1490251381983,
      "mass_pm0.05": 124.0292094105938,
      "residual": 58.16107071439245,
      "valley_mass_mean": 0.9996550153094651,
      "plateau_weight_mean": 0.09925097391534557,
      "Delta_eff": 2.3097585025024654
    },
    "a8_th0.5000pi": {
      "theta_over_pi": 0.5,
      "n_zeros": 763,
      "z1_times_a": 3.867441949623103,
      "mass_total": 184.12212186389277,
      "mass_pm0.1": 133.24139728241443,
      "mass_pm0.05": 121.15410070178395,
      "residual": 59.85047462666191,
      "valley_mass_mean": 0.9862829145811973,
      "plateau_weight_mean": 0.10213391574515683,
      "Delta_eff": 2.26765839342186
    },
    "a8_th0.6667pi": {
      "theta_over_pi": 0.6667,
      "n_zeros": 763,
      "z1_times_a": 4.071478758632688,
      "mass_total": 184.1262503654809,
      "mass_pm0.1": 132.29513175105507,
      "mass_pm0.05": 122.51608044758039,
      "residual": 57.48114969555114,
      "valley_mass_mean": 1.0051198465867441,
      "plateau_weight_mean": 0.09809069913916582,
      "Delta_eff": 2.3269695116402334
    },
    "a8_th0.8333pi": {
      "theta_over_pi": 0.8333,
      "n_zeros": 763,
      "z1_times_a": 4.27766402464752,
      "mass_total": 184.12992169567084,
      "mass_pm0.1": 131.99007596810569,
      "mass_pm0.05": 124.30470833176733,
      "residual": 57.28031602287514,
      "valley_mass_mean": 1.0067429021650454,
      "plateau_weight_mean": 0.09774797956122035,
      "Delta_eff": 2.332083020259487
    },
    "a8_th1.0000pi": {
      "theta_over_pi": 1.0,
      "n_zeros": 763,
      "z1_times_a": 4.4968101024775144,
      "mass_total": 184.13312237431055,
      "mass_pm0.1": 133.51693635274228,
      "mass_pm0.05": 124.28962039506533,
      "residual": 58.6511497935264,
      "valley_mass_mean": 0.9958886712760646,
      "plateau_weight_mean": 0.10008728633707581,
      "Delta_eff": 2.297592806874823
    },
    "a12_th0.0000pi": {
      "theta_over_pi": 0.0,
      "n_zeros": 1145,
      "z1_times_a": 3.1428501414881977,
      "mass_total": 184.16007157245687,
      "mass_pm0.1": 133.61538092090012,
      "mass_pm0.05": 128.10759866335772,
      "residual": 60.30642315719122,
      "valley_mass_mean": 0.9829654636132195,
      "plateau_weight_mean": 0.06395166824728656,
      "Delta_eff": 2.732446371442262
    },
    "a12_th0.1667pi": {
      "theta_over_pi": 0.1667,
      "n_zeros": 1145,
      "z1_times_a": 3.405992501692748,
      "mass_total": 184.1639822094043,
      "mass_pm0.1": 133.36866840406773,
      "mass_pm0.05": 129.35521418242917,
      "residual": 60.3669918644722,
      "valley_mass_mean": 0.9825157963883501,
      "plateau_weight_mean": 0.06401589805352302,
      "Delta_eff": 2.73098496176509
    },
    "a12_th0.3333pi": {
      "theta_over_pi": 0.3333,
      "n_zeros": 1145,
      "z1_times_a": 3.635830555925344,
      "mass_total": 184.09580595481827,
      "mass_pm0.1": 133.41942035595872,
      "mass_pm0.05": 129.05415843419973,
      "residual": 58.57426551897014,
      "valley_mass_mean": 0.9962027018718106,
      "plateau_weight_mean": 0.06218074895856703,
      "Delta_eff": 2.7739053032480143
    },
    "a12_th0.5000pi": {
      "theta_over_pi": 0.5,
      "n_zeros": 1145,
      "z1_times_a": 3.8476946281889486,
      "mass_total": 184.09881987373944,
      "mass_pm0.1": 132.95788338488353,
      "mass_pm0.05": 129.3505890774291,
      "residual": 58.94147251618104,
      "valley_mass_mean": 0.9933122806155429,
      "plateau_weight_mean": 0.06257056530380153,
      "Delta_eff": 2.764750131884173
    },
    "a12_th0.6667pi": {
      "theta_over_pi": 0.6667,
      "n_zeros": 1145,
      "z1_times_a": 4.05423555082551,
      "mass_total": 184.10127816912785,
      "mass_pm0.1": 133.37160860447023,
      "mass_pm0.05": 129.68837121321633,
      "residual": 58.35802636312266,
      "valley_mass_mean": 0.9979623159206761,
      "plateau_weight_mean": 0.06195119571456758,
      "Delta_eff": 2.7793686068267633
    },
    "a12_th0.8333pi": {
      "theta_over_pi": 0.8333,
      "n_zeros": 1145,
      "z1_times_a": 4.2666373857585445,
      "mass_total": 184.1032513640804,
      "mass_pm0.1": 133.09565694496038,
      "mass_pm0.05": 129.3399679137547,
      "residual": 58.63289108937627,
      "valley_mass_mean": 0.9957965101166993,
      "plateau_weight_mean": 0.062242984171312424,
      "Delta_eff": 2.7724971046813764
    },
    "a12_th1.0000pi": {
      "theta_over_pi": 1.0,
      "n_zeros": 1145,
      "z1_times_a": 4.495304974166889,
      "mass_total": 184.10483484645468,
      "mass_pm0.1": 133.31147006007708,
      "mass_pm0.05": 129.13788187469896,
      "residual": 57.594257954705384,
      "valley_mass_mean": 1.004052197553566,
      "plateau_weight_mean": 0.06114040122580191,
      "Delta_eff": 2.7986264096434
    },
    "V4_theta_spread": {
      "a4": {
        "residual_minmax": [
          47.43102136203055,
          50.618934373720066
        ],
        "residual_spread_pct": 2.234095821084676,
        "mass_pm01_spread_pct": 2.302784187513983,
        "z1_times_a_range": [
          3.1471258584711514,
          4.504293602793437
        ]
      },
      "a8": {
        "residual_minmax": [
          56.7356526846647,
          59.85047462666191
        ],
        "residual_spread_pct": 1.6396401999266315,
        "mass_pm01_spread_pct": 0.6333372523281642,
        "z1_times_a_range": [
          3.1437903681267265,
          4.4968101024775144
        ]
      },
      "a12": {
        "residual_minmax": [
          57.594257954705384,
          60.3669918644722
        ],
        "residual_spread_pct": 1.6057262581418954,
        "mass_pm01_spread_pct": 0.15063835179687926,
        "z1_times_a_range": [
          3.1428501414881977,
          4.495304974166889
        ]
      }
    }
  },
  "elapsed_seconds": 212.6,
  "timestamp_utc": "2026-08-19T18:19:09.910473+00:00"
}

Source code

Python script (click to expand)
"""E-024 — task 2.12: theta-flow numerics (D-041 §5/§8, D-038 §5).

Theory (de Branges/Clark): the model space's kernel K_a(z,z) is
theta-INDEPENDENT; the extension choice theta only phase-shifts the
atom lattice z_k(theta). PREDICTION (to be tested): consolidation
statistics (valley-captured mass, residual) are theta-independent —
if confirmed, no theta(a) flow can fix consolidation and the
obstruction is entirely the K-saturation (D-040 F6); if refuted,
the theta-flow channel is alive.

For theta in {0, pi/6, pi/3, pi/2, 2pi/3, 5pi/6, pi} and a in {4,8,12}:
  - zeros of W(a,theta;z) on (0, Z_MAX] via the real gauge
        g_theta(z) = Re[ e^{-i theta/2} (z - i) V_+(z) ]
    (e^{-i theta/2} W = 2 Re[e^{-i theta/2}(z-i)V_+] on the real line,
    using Vm = conj(Vp); reduces to z ImV - ReV at theta=pi);
  - Clark weights w_k = 1/K_a(z_k,z_k) (E-022 Schur-Toeplitz route);
  - metrics: n_zeros, z1*a, mass within +/-0.1 and +/-0.05 of true
    gammas, residual R(a,theta) = total - captured, mean valley mass,
    effective depth Delta_eff = log(mean valley weight / mean plateau
    weight).

Checks:
  V1. all zeros real & count = maximal lattice a*Z_MAX/pi +/- 2,
      every theta (self-adjointness).
  V2. theta=pi reproduces E-022: |z1*a - 4.4953| < 0.05 at a=12 and
      mass(+/-0.1) within 1% of E-022 value.
  V3. weights positive, all theta.
  V4. headline: theta-spread of residual R and mass(+/-0.1) reported
      per a (small spread = theta-independence confirmed).

Outputs: research/numerics/data/E-024-theta-sweep.csv (+ .json)
"""
import importlib.util
import json
import sys
import time
from datetime import datetime, timezone
from pathlib import Path

import mpmath as mp
import numpy as np
import scipy.linalg
import scipy.optimize

REPO = Path(__file__).resolve().parents[3]
DATA = REPO / "research" / "numerics" / "data"
CSV = DATA / "E-024-theta-sweep.csv"
JSON = DATA / "E-024-theta-sweep.json"

_spec = importlib.util.spec_from_file_location(
    "E16", Path(__file__).with_name("E-016-herglotz-fine-structure.py"))
E16 = importlib.util.module_from_spec(_spec)
_spec.loader.exec_module(E16)                     # runs the e^20 sieve
sys.path.insert(0, str(Path(__file__).parent))
from prime_backend_v2 import PrimeBackendV2       # noqa: E402

H = E16.H_MAIN
LAM = E16.LAM_SHIFT
A_LIST = [4.0, 8.0, 12.0]
THETAS = [0.0, np.pi / 6, np.pi / 3, np.pi / 2, 2 * np.pi / 3,
          5 * np.pi / 6, np.pi]
Z_MAX = 300.0
Z_METRIC = 280.0
N_GRID = 40000
XN = E16.XN
mp.mp.dps = 40


def collect_t_points(a, h):
    n_elem = int(round(2 * a / h))
    pts = []

    def add_quad(lo, hi, peak):
        n_lo = int(np.ceil(np.exp(lo)))
        n_hi = int(np.floor(np.exp(hi)))
        if n_hi - n_lo > 64:
            for aa, bb in ((lo, peak), (peak, hi)):
                if bb - aa > 0:
                    mid, half = 0.5 * (aa + bb), 0.5 * (bb - aa)
                    pts.extend(mid + half * XN)
            return
        segs = sorted({lo, peak, hi} |
                      {float(np.log(n))
                       for n in range(max(n_lo, 2), n_hi + 1)
                       if lo < np.log(n) < hi})
        for p0, p1 in zip(segs, segs[1:]):
            if p1 - p0 > 0:
                mid, half = 0.5 * (p0 + p1), 0.5 * (p1 - p0)
                pts.extend(mid + half * XN)

    for k in range(n_elem):
        if k == 0:
            add_quad(0.0, h, 0.0)
        else:
            add_quad((k - 1) * h, (k + 1) * h, k * h)
    return np.array(pts)


def locate_zeros_theta(cp, x, h, theta, z_max=Z_MAX, n_grid=N_GRID):
    zg = np.linspace(1e-3, z_max, n_grid)
    E = np.exp(1j * np.outer(zg, x))
    V = E16.hat_FT(zg, h) * (E @ cp)
    f = np.exp(-0.5j * theta) * (zg - 1j) * V
    g = f.real

    def g_direct(zz):
        V1 = E16.hat_FT(np.array([zz]), h)[0] * complex(
            np.exp(1j * zz * x) @ cp)
        return float(np.real(np.exp(-0.5j * theta) * (zz - 1j) * V1))

    idx = np.flatnonzero(np.sign(g[:-1]) * np.sign(g[1:]) < 0)
    zeros = []
    for i in idx:
        try:
            zeros.append(scipy.optimize.brentq(g_direct, zg[i], zg[i + 1],
                                               xtol=1e-13, rtol=1e-13))
        except ValueError:
            pass
    return np.array(zeros)


def main() -> int:
    if JSON.exists() and "--force" not in sys.argv:
        print(f"cached: {JSON} (use --force to recompute)")
        return 0
    t0 = time.time()

    print("backend: load E-022 cache ...", flush=True)
    tq = np.concatenate([collect_t_points(a, H) for a in A_LIST])
    be = PrimeBackendV2(tq)
    be.load_cache(DATA / "E-022-backend-cache.npz")
    E16._BUILD.clear()
    E16.prime_sum_vec = be.prime_sum

    mp.mp.dps = 30
    gam = np.array([float(mp.zetazero(k).imag) for k in range(1, 201)])
    gam = gam[gam <= Z_METRIC]

    rows = []
    report = {"per_a_theta": {}}
    v1_ok = v3_ok = True
    v2 = {}
    for a in A_LIST:
        ta = time.time()
        x, h, Q, M, b = E16.build(a, H)
        n = len(x)
        cp, _ = E16.solve_v(Q, M, b[+1.0], LAM, n)
        # Toeplitz bordered solver for weights (theta-independent K)
        mc = np.zeros(n)
        mc[0] = 2 * h / 3
        mc[1] = h / 6
        tc = Q[:, 0] - LAM * mc
        u1 = scipy.linalg.solve_toeplitz((tc, tc), np.ones(n))
        s1 = u1.sum()

        def K1(z):
            bz = E16.hat_FT(np.array([z]), h)[0] * np.exp(-1j * z * x)
            u0 = scipy.linalg.solve_toeplitz((tc, tc), bz)
            v = u0 - (u0.sum() / s1) * u1
            return float(np.real(np.conj(bz) @ v))

        for th in THETAS:
            zeros = locate_zeros_theta(cp, x, h, th)
            lat = a * Z_MAX / np.pi
            if abs(len(zeros) - lat) > 2:
                v1_ok = False
            zm = zeros[zeros <= Z_METRIC]
            ws = np.array([1.0 / K1(z) for z in zm])
            if np.any(ws <= 0):
                v3_ok = False
            tot = float(ws.sum())
            idx = np.clip(np.searchsorted(gam, zm), 1, len(gam) - 1)
            d = np.minimum(np.abs(zm - gam[idx - 1]),
                           np.abs(zm - gam[idx]))
            m01 = float(ws[d <= 0.1].sum())
            m005 = float(ws[d <= 0.05].sum())
            # valley atoms = nearest to each gamma; plateau = rest
            near_idx = np.array([np.argmin(np.abs(zm - g)) for g in gam])
            valley_mass = ws[near_idx]
            mask_pl = np.ones(len(zm), bool)
            mask_pl[near_idx] = False
            pl = ws[mask_pl]
            d_eff = float(np.log(valley_mass.mean() / pl.mean()))
            key = f"a{a:g}_th{th / np.pi:.4f}pi"
            report["per_a_theta"][key] = {
                "theta_over_pi": round(th / np.pi, 4),
                "n_zeros": int(len(zeros)),
                "z1_times_a": float(zeros[0] * a),
                "mass_total": tot,
                "mass_pm0.1": m01, "mass_pm0.05": m005,
                "residual": tot - float(valley_mass.sum()),
                "valley_mass_mean": float(valley_mass.mean()),
                "plateau_weight_mean": float(pl.mean()),
                "Delta_eff": d_eff,
            }
            for k, (zz, ww) in enumerate(zip(zm, ws), 1):
                rows.append((a, th / np.pi, k, zz, ww))
        print(f"a={a:g} done ({time.time() - ta:.0f}s)", flush=True)

    # V2: theta=pi cross-check vs E-022
    e022 = report["per_a_theta"]["a12_th1.0000pi"]
    v2 = {"z1_times_a_ok": bool(abs(e022["z1_times_a"] - 4.4953) < 0.05)}
    # V4: theta-spread per a
    v4 = {}
    for a in A_LIST:
        vals = [report["per_a_theta"][f"a{a:g}_th{th / np.pi:.4f}pi"]
                for th in THETAS]
        res = np.array([v["residual"] for v in vals])
        m01 = np.array([v["mass_pm0.1"] for v in vals])
        z1a = np.array([v["z1_times_a"] for v in vals])
        v4[f"a{a:g}"] = {
            "residual_minmax": [float(res.min()), float(res.max())],
            "residual_spread_pct": float(100 * res.std() / res.mean()),
            "mass_pm01_spread_pct": float(100 * m01.std() / m01.mean()),
            "z1_times_a_range": [float(z1a.min()), float(z1a.max())],
        }
        print(f"a={a:g}: residual spread {v4[f'a{a:g}']['residual_spread_pct']:.2f}%, "
              f"mass01 spread {v4[f'a{a:g}']['mass_pm01_spread_pct']:.2f}%, "
              f"z1a in [{z1a.min():.3f},{z1a.max():.3f}]", flush=True)

    checks = {"V1_lattice_all_theta": v1_ok,
              "V2_theta_pi_matches_E022": v2["z1_times_a_ok"],
              "V3_weights_positive": v3_ok}

    import csv as csvmod
    with open(CSV, "w", newline="") as f:
        w = csvmod.writer(f)
        w.writerow(["a", "theta_over_pi", "k", "z_k", "w_k"])
        for a, thp, k, zz, ww in rows:
            w.writerow([f"{a:g}", f"{thp:.4f}", k, f"{zz:.12f}",
                        f"{ww:.10e}"])

    meta = {
        "experiment": "E-024",
        "task": "2.12: theta-flow numerics (theta-independence test)",
        "script": "research/numerics/scripts/E-024-theta-sweep.py",
        "parameters": {"a_list": A_LIST,
                       "thetas_over_pi": [round(t / np.pi, 4)
                                          for t in THETAS],
                       "z_max": Z_MAX, "z_metric": Z_METRIC},
        "checks": checks,
        "key_values": {**report["per_a_theta"], "V4_theta_spread": v4},
        "elapsed_seconds": round(time.time() - t0, 1),
        "timestamp_utc": datetime.now(timezone.utc).isoformat(),
    }
    JSON.write_text(json.dumps(meta, indent=2))
    print(f"wrote {CSV.name}, {JSON.name}; elapsed "
          f"{meta['elapsed_seconds']}s", flush=True)
    return 0 if all(checks.values()) else 1


if __name__ == "__main__":
    sys.exit(main())