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 13 of 30 · 500/page · 14949 rows next →
# atheta_over_pikz_kw_k
6002 8 0.6667 666 261.863949872864 1.0305783649e-01
6003 8 0.6667 667 262.143566954348 3.2224881914e-01
6004 8 0.6667 668 262.604535396532 9.1572422551e-02
6005 8 0.6667 669 263.025516836007 8.7745612352e-02
6006 8 0.6667 670 263.547194705514 1.0963137951e+00
6007 8 0.6667 671 263.681850466752 3.3594335843e-01
6008 8 0.6667 672 264.165568745678 9.4786410969e-02
6009 8 0.6667 673 264.587832357355 8.7841818978e-02
6010 8 0.6667 674 264.988581016172 3.7647869938e-01
6011 8 0.6667 675 265.505423577993 6.6891497049e-01
6012 8 0.6667 676 265.631854410033 4.8698224414e-01
6013 8 0.6667 677 266.150253353809 8.9312316009e-02
6014 8 0.6667 678 266.608147208822 1.0894417400e+00
6015 8 0.6667 679 267.004878645710 3.8477404547e-01
6016 8 0.6667 680 267.334485803481 9.8827593159e-02
6017 8 0.6667 681 267.860514230791 6.1102645269e-01
6018 8 0.6667 682 267.990448963039 5.5340731266e-01
6019 8 0.6667 683 268.552275496991 3.9435227133e-01
6020 8 0.6667 684 268.884755834710 9.2748121172e-02
6021 8 0.6667 685 269.306746455269 9.1730434099e-02
6022 8 0.6667 686 269.786157225607 1.7149008962e-01
6023 8 0.6667 687 269.993387742450 1.0133661828e+00
6024 8 0.6667 688 270.398551149884 3.9971745540e-01
6025 8 0.6667 689 270.914620062206 1.3087759740e-01
6026 8 0.6667 690 271.222483724985 4.3647878706e-01
6027 8 0.6667 691 271.513166856189 1.0358779193e+00
6028 8 0.6667 692 272.061354299427 1.2046316398e-01
6029 8 0.6667 693 272.338701578760 3.9980154975e-01
6030 8 0.6667 694 272.817212993436 9.7802025896e-02
6031 8 0.6667 695 273.275239906569 1.6201515430e-01
6032 8 0.6667 696 273.478847231902 1.0055076931e+00
6033 8 0.6667 697 273.980256777506 1.0086309686e-01
6034 8 0.6667 698 274.384672252760 9.4490209413e-02
6035 8 0.6667 699 274.820542417183 4.6184817407e-01
6036 8 0.6667 700 275.191770266522 9.3886850643e-02
6037 8 0.6667 701 275.586722295081 1.0899234018e+00
6038 8 0.6667 702 275.991387543910 1.0029264376e-01
6039 8 0.6667 703 276.443939226797 1.4664075925e+00
6040 8 0.6667 704 276.758931653648 9.7248597661e-02
6041 8 0.6667 705 277.188784651641 9.6718092056e-02
6042 8 0.6667 706 277.598948287876 1.0870506907e-01
6043 8 0.6667 707 277.934563216488 5.0296731907e-01
6044 8 0.6667 708 278.264234343648 1.0631526202e+00
6045 8 0.6667 709 278.847483321201 2.3342554612e-01
6046 8 0.6667 710 279.155132136091 1.0698847918e+00
6047 8 0.6667 711 279.358377179044 3.6868364292e-01
6048 8 0.6667 712 279.876136389644 1.0855811826e-01
6049 8 0.8333 1 0.534708003081 6.5486757354e-02
6050 8 0.8333 2 0.938418795772 6.3541976006e-02
6051 8 0.8333 3 1.335841488173 6.3046683740e-02
6052 8 0.8333 4 1.731270583830 6.2847560332e-02
6053 8 0.8333 5 2.125809386646 6.2748031131e-02
6054 8 0.8333 6 2.519873779358 6.2691289439e-02
6055 8 0.8333 7 2.913656388541 6.2656007017e-02
6056 8 0.8333 8 3.307257779396 6.2632715367e-02
6057 8 0.8333 9 3.700738141517 6.2616586626e-02
6058 8 0.8333 10 4.094129706065 6.2604567962e-02
6059 8 0.8333 11 4.487461276383 6.2597076039e-02
6060 8 0.8333 12 4.880749618116 6.2590447470e-02
6061 8 0.8333 13 5.273999419593 6.2585098240e-02
6062 8 0.8333 14 5.667225827031 6.2583378555e-02
6063 8 0.8333 15 6.060445274974 6.2581231400e-02
6064 8 0.8333 16 6.453641325632 6.2577849105e-02
6065 8 0.8333 17 6.846833775168 6.2578722210e-02
6066 8 0.8333 18 7.240021711226 6.2577453544e-02
6067 8 0.8333 19 7.633219082669 6.2580722551e-02
6068 8 0.8333 20 8.026420112517 6.2579099450e-02
6069 8 0.8333 21 8.419629135431 6.2583485715e-02
6070 8 0.8333 22 8.812853706478 6.2583607831e-02
6071 8 0.8333 23 9.206103444037 6.2593032284e-02
6072 8 0.8333 24 9.599403156413 6.2596493640e-02
6073 8 0.8333 25 9.992726582632 6.2604154774e-02
6074 8 0.8333 26 10.386113268494 6.2614695921e-02
6075 8 0.8333 27 10.779588110219 6.2634081197e-02
6076 8 0.8333 28 11.173189090642 6.2652524608e-02
6077 8 0.8333 29 11.566948941802 6.2690516316e-02
6078 8 0.8333 30 11.961010613112 6.2744016453e-02
6079 8 0.8333 31 12.355497016368 6.2838220359e-02
6080 8 0.8333 32 12.750865863444 6.3033982822e-02
6081 8 0.8333 33 13.148154909554 6.3511082810e-02
6082 8 0.8333 34 13.551503643849 6.5375934745e-02
6083 8 0.8333 35 14.048606743067 3.1518248550e-01
6084 8 0.8333 36 14.166023265965 7.9843367738e-01
6085 8 0.8333 37 14.680209847797 6.5408491486e-02
6086 8 0.8333 38 15.083675254060 6.3522126009e-02
6087 8 0.8333 39 15.480974205327 6.3027941668e-02
6088 8 0.8333 40 15.876331883659 6.2844051654e-02
6089 8 0.8333 41 16.270866877797 6.2748909631e-02
6090 8 0.8333 42 16.664938761406 6.2693456365e-02
6091 8 0.8333 43 17.058731130129 6.2660063158e-02
6092 8 0.8333 44 17.452381126984 6.2641919242e-02
6093 8 0.8333 45 17.845890684783 6.2620072593e-02
6094 8 0.8333 46 18.239330023979 6.2616874821e-02
6095 8 0.8333 47 18.632734715902 6.2609547594e-02
6096 8 0.8333 48 19.026136246368 6.2615217194e-02
6097 8 0.8333 49 19.419543669658 6.2613070382e-02
6098 8 0.8333 50 19.813003921212 6.2633088514e-02
6099 8 0.8333 51 20.206593550605 6.2657153832e-02
6100 8 0.8333 52 20.600668473645 6.2844524837e-02
6101 8 0.8333 53 21.020242637533 1.0614278219e+00
6102 8 0.8333 54 21.382898820120 6.3067848866e-02
6103 8 0.8333 55 21.777569992811 6.2700843642e-02
6104 8 0.8333 56 22.171354481037 6.2664161257e-02
6105 8 0.8333 57 22.565026943896 6.2646769035e-02
6106 8 0.8333 58 22.958663722618 6.2664745018e-02
6107 8 0.8333 59 23.352563964324 6.2715566459e-02
6108 8 0.8333 60 23.746802379706 6.2794962756e-02
6109 8 0.8333 61 24.141998071006 6.3042557225e-02
6110 8 0.8333 62 24.540260957811 6.3999033650e-02
6111 8 0.8333 63 25.004557320656 1.0484320595e+00
6112 8 0.8333 64 25.285974302168 7.1734106270e-02
6113 8 0.8333 65 25.697730587013 6.3585004092e-02
6114 8 0.8333 66 26.094763921378 6.2954257802e-02
6115 8 0.8333 67 26.489664183183 6.2783049459e-02
6116 8 0.8333 68 26.883833216931 6.2689257995e-02
6117 8 0.8333 69 27.277517308261 6.2653352427e-02
6118 8 0.8333 70 27.671288539492 6.2677983323e-02
6119 8 0.8333 71 28.064889449521 6.2615029757e-02
6120 8 0.8333 72 28.458378722526 6.2645445711e-02
6121 8 0.8333 73 28.851896601285 6.2622927439e-02
6122 8 0.8333 74 29.245429948952 6.2664831907e-02
6123 8 0.8333 75 29.639227641032 6.2665763394e-02
6124 8 0.8333 76 30.032827446411 6.2659996926e-02
6125 8 0.8333 77 30.424982926706 1.0627081322e+00
6126 8 0.8333 78 30.820811094392 6.2751561343e-02
6127 8 0.8333 79 31.215328535568 6.2843290816e-02
6128 8 0.8333 80 31.610654844825 6.3024682843e-02
6129 8 0.8333 81 32.007777878080 6.3474721146e-02
6130 8 0.8333 82 32.410598872274 6.5230297569e-02
6131 8 0.8333 83 32.916630425092 9.5285418877e-01
6132 8 0.8333 84 33.073871336138 1.6189343243e-01
6133 8 0.8333 85 33.544553554284 6.5106704021e-02
6134 8 0.8333 86 33.947092838006 6.3484481927e-02
6135 8 0.8333 87 34.344285056758 6.3026746429e-02
6136 8 0.8333 88 34.739702484844 6.2907067153e-02
6137 8 0.8333 89 35.134826205839 6.2834427439e-02
6138 8 0.8333 90 35.529277069626 6.2775796156e-02
6139 8 0.8333 91 35.923935146450 6.2858997881e-02
6140 8 0.8333 92 36.318724639849 6.2856727252e-02
6141 8 0.8333 93 36.714529072913 6.3202200641e-02
6142 8 0.8333 94 37.113646337374 6.4118123462e-02
6143 8 0.8333 95 37.579674612708 1.0476399412e+00
6144 8 0.8333 96 37.858407334259 7.2545180186e-02
6145 8 0.8333 97 38.271920429575 6.3729467071e-02
6146 8 0.8333 98 38.669762254476 6.3106757521e-02
6147 8 0.8333 99 39.065789419829 6.2995891620e-02
6148 8 0.8333 100 39.461479207657 6.2995240003e-02
6149 8 0.8333 101 39.857941626981 6.3256766457e-02
6150 8 0.8333 102 40.257542240359 6.4229591441e-02
6151 8 0.8333 103 40.684642543049 8.3219611393e-02
6152 8 0.8333 104 40.927588646775 1.0350944296e+00
6153 8 0.8333 105 41.407665283277 6.4557173390e-02
6154 8 0.8333 106 41.808223417374 6.3359418441e-02
6155 8 0.8333 107 42.205358685537 6.3139155871e-02
6156 8 0.8333 108 42.601742275277 6.3174933248e-02
6157 8 0.8333 109 43.002457070830 6.5318612281e-02
6158 8 0.8333 110 43.330795535478 1.0577323674e+00
6159 8 0.8333 111 43.773408393021 6.3492328693e-02
6160 8 0.8333 112 44.170090317192 6.2982536505e-02
6161 8 0.8333 113 44.565189289919 6.2818240258e-02
6162 8 0.8333 114 44.959354822374 6.2736815096e-02
6163 8 0.8333 115 45.353550033946 6.2819544914e-02
6164 8 0.8333 116 45.748190800328 6.2780000296e-02
6165 8 0.8333 117 46.142481756237 6.2806054191e-02
6166 8 0.8333 118 46.537195044941 6.2939448781e-02
6167 8 0.8333 119 46.933410927753 6.3238311730e-02
6168 8 0.8333 120 47.332461897602 6.3981667158e-02
6169 8 0.8333 121 47.752918428956 7.7614556900e-02
6170 8 0.8333 122 48.012905408607 1.0417687835e+00
6171 8 0.8333 123 48.487771969855 6.4591042811e-02
6172 8 0.8333 124 48.890115449100 6.3845959590e-02
6173 8 0.8333 125 49.292241320343 6.4646366879e-02
6174 8 0.8333 126 49.766307571165 1.0430267036e+00
6175 8 0.8333 127 50.030006036091 7.6623155673e-02
6176 8 0.8333 128 50.449999950787 6.4074398872e-02
6177 8 0.8333 129 50.849241549086 6.3272041527e-02
6178 8 0.8333 130 51.246597370413 6.3307749761e-02
6179 8 0.8333 131 51.643589536410 6.3227158213e-02
6180 8 0.8333 132 52.041690683670 6.3616258356e-02
6181 8 0.8333 133 52.445364633738 6.5416440792e-02
6182 8 0.8333 134 52.952068509117 9.5545486636e-01
6183 8 0.8333 135 53.110957965483 1.5962326686e-01
6184 8 0.8333 136 53.581652677204 6.5307246907e-02
6185 8 0.8333 137 53.984803017423 6.3523528133e-02
6186 8 0.8333 138 54.382534622209 6.3255904894e-02
6187 8 0.8333 139 54.779228327161 6.3173735645e-02
6188 8 0.8333 140 55.175641183422 6.3115878200e-02
6189 8 0.8333 141 55.572582850471 6.3326220837e-02
6190 8 0.8333 142 55.972258054009 6.4381097543e-02
6191 8 0.8333 143 56.439677698836 1.0475388647e+00
6192 8 0.8333 144 56.718438671363 7.2968393800e-02
6193 8 0.8333 145 57.133426966050 6.3884058102e-02
6194 8 0.8333 146 57.532515854867 6.3425749485e-02
6195 8 0.8333 147 57.930735618699 6.3400368243e-02
6196 8 0.8333 148 58.329237829913 6.3835780192e-02
6197 8 0.8333 149 58.734229454234 6.5551154131e-02
6198 8 0.8333 150 59.207733643479 1.6345794954e-01
6199 8 0.8333 151 59.365820481160 9.5226461036e-01
6200 8 0.8333 152 59.877394974935 6.6316079545e-02
6201 8 0.8333 153 60.291048509488 6.6353268362e-02
6202 8 0.8333 154 60.807352059956 8.8819619204e-01
6203 8 0.8333 155 60.942553815123 2.2683355671e-01
6204 8 0.8333 156 61.430323703749 6.5671523597e-02
6205 8 0.8333 157 61.835009076684 6.3820067827e-02
6206 8 0.8333 158 62.233311829534 6.3272449349e-02
6207 8 0.8333 159 62.630531826934 6.3216266753e-02
6208 8 0.8333 160 63.026570472305 6.2921990480e-02
6209 8 0.8333 161 63.422261442672 6.3127145732e-02
6210 8 0.8333 162 63.818876222285 6.3305430161e-02
6211 8 0.8333 163 64.216087088868 6.3741938501e-02
6212 8 0.8333 164 64.618279402176 6.4841132016e-02
6213 8 0.8333 165 65.102895645989 1.0308465745e+00
6214 8 0.8333 166 65.337219859162 8.7452853304e-02
6215 8 0.8333 167 65.770365871883 6.5035297170e-02
6216 8 0.8333 168 66.174022986077 6.3987903958e-02
6217 8 0.8333 169 66.577592012733 6.5208882417e-02
6218 8 0.8333 170 67.068957450744 1.0227201889e+00
6219 8 0.8333 171 67.288475336188 9.5000980586e-02
6220 8 0.8333 172 67.728311149525 6.5021068682e-02
6221 8 0.8333 173 68.131374707701 6.3987287421e-02
6222 8 0.8333 174 68.531851928577 6.3993629199e-02
6223 8 0.8333 175 68.936852383587 6.5600286071e-02
6224 8 0.8333 176 69.410445896883 1.6811264406e-01
6225 8 0.8333 177 69.565485702554 9.4696162356e-01
6226 8 0.8333 178 70.073594207178 6.5435118632e-02
6227 8 0.8333 179 70.477162642170 6.3556913130e-02
6228 8 0.8333 180 70.873998553012 6.3492924634e-02
6229 8 0.8333 181 71.270918582019 6.3154309753e-02
6230 8 0.8333 182 71.665192845293 6.2929333615e-02
6231 8 0.8333 183 72.066740957500 1.0630072103e+00
6232 8 0.8333 184 72.455613480715 6.3153791484e-02
6233 8 0.8333 185 72.849468688295 6.2780327562e-02
6234 8 0.8333 186 73.243197794791 6.2839709986e-02
6235 8 0.8333 187 73.637931189907 6.2860184699e-02
6236 8 0.8333 188 74.032581811711 6.3079319992e-02
6237 8 0.8333 189 74.428560720040 6.3187140287e-02
6238 8 0.8333 190 74.823748244106 6.3322142522e-02
6239 8 0.8333 191 75.224388738145 6.4523788609e-02
6240 8 0.8333 192 75.697182238420 1.0428471605e+00
6241 8 0.8333 193 75.960060886169 7.6754529305e-02
6242 8 0.8333 194 76.379275696668 6.4420103210e-02
6243 8 0.8333 195 76.780469589882 6.3979641870e-02
6244 8 0.8333 196 77.146651392398 1.0620557213e+00
6245 8 0.8333 197 77.568278802937 6.3666259417e-02
6246 8 0.8333 198 77.966751069480 6.3499927252e-02
6247 8 0.8333 199 78.365299812091 6.3735185416e-02
6248 8 0.8333 200 78.770473562253 6.6129548936e-02
6249 8 0.8333 201 79.282186093933 5.3120359072e-01
6250 8 0.8333 202 79.387355457087 5.8261164151e-01
6251 8 0.8333 203 79.901701891638 6.6019919447e-02
6252 8 0.8333 204 80.307087727652 6.4107457943e-02
6253 8 0.8333 205 80.704644511148 6.3419676085e-02
6254 8 0.8333 206 81.102442640744 6.3592223349e-02
6255 8 0.8333 207 81.498368933078 6.3525119895e-02
6256 8 0.8333 208 81.897840905307 6.3847839719e-02
6257 8 0.8333 209 82.301755485485 6.5360981259e-02
6258 8 0.8333 210 82.776895234863 1.7452699472e-01
6259 8 0.8333 211 82.930065102668 9.4140928538e-01
6260 8 0.8333 212 83.440264925944 6.5890745322e-02
6261 8 0.8333 213 83.846301563904 6.4511697667e-02
6262 8 0.8333 214 84.249265037787 6.5296969961e-02
6263 8 0.8333 215 84.727506061418 1.0409617061e+00
6264 8 0.8333 216 84.984586946045 7.8586444615e-02
6265 8 0.8333 217 85.407390931127 6.4397822284e-02
6266 8 0.8333 218 85.808003380679 6.3667607204e-02
6267 8 0.8333 219 86.205115808584 6.3223864974e-02
6268 8 0.8333 220 86.600223226203 6.3723412430e-02
6269 8 0.8333 221 86.998444742351 6.3481146721e-02
6270 8 0.8333 222 87.423299742937 1.0619289524e+00
6271 8 0.8333 223 87.786863568652 6.5066938186e-02
6272 8 0.8333 224 88.191275375590 6.5959654961e-02
6273 8 0.8333 225 88.657332441106 1.4359740513e-01
6274 8 0.8333 226 88.825790785370 9.7196680870e-01
6275 8 0.8333 227 89.329359419561 6.5473239417e-02
6276 8 0.8333 228 89.733543307563 6.4169477132e-02
6277 8 0.8333 229 90.129761509912 6.3379393216e-02
6278 8 0.8333 230 90.525262755322 6.3214584020e-02
6279 8 0.8333 231 90.921304959954 6.3124268202e-02
6280 8 0.8333 232 91.315866762286 6.4002440434e-02
6281 8 0.8333 233 91.711771556223 6.3164333616e-02
6282 8 0.8333 234 92.107910995049 6.3128343278e-02
6283 8 0.8333 235 92.492581253651 1.0632699202e+00
6284 8 0.8333 236 92.896295523070 6.3609497936e-02
6285 8 0.8333 237 93.293902218307 6.3629415951e-02
6286 8 0.8333 238 93.693227721484 6.3758522618e-02
6287 8 0.8333 239 94.096924198763 6.6102015317e-02
6288 8 0.8333 240 94.616380713081 7.6394763418e-01
6289 8 0.8333 241 94.732147119888 3.5231183019e-01
6290 8 0.8333 242 95.243478503868 6.8255403215e-02
6291 8 0.8333 243 95.719232348855 1.5051864615e-01
6292 8 0.8333 244 95.888128301902 9.6756613498e-01
6293 8 0.8333 245 96.395936135495 6.5706899001e-02
6294 8 0.8333 246 96.800614711897 6.4075004563e-02
6295 8 0.8333 247 97.200963567192 6.3663885787e-02
6296 8 0.8333 248 97.594746968881 6.3990323756e-02
6297 8 0.8333 249 97.993772893873 6.3455796054e-02
6298 8 0.8333 250 98.392188860918 6.4457059801e-02
6299 8 0.8333 251 98.828026097122 1.0602296216e+00
6300 8 0.8333 252 99.168438340938 6.4534598327e-02
6301 8 0.8333 253 99.568651258968 6.3745586749e-02
6302 8 0.8333 254 99.966613596241 6.4988018824e-02
6303 8 0.8333 255 100.366963441827 6.5640354679e-02
6304 8 0.8333 256 100.770769832284 6.5740468002e-02
6305 8 0.8333 257 101.287019732877 8.0880267142e-01
6306 8 0.8333 258 101.406862577142 3.0571541494e-01
6307 8 0.8333 259 101.905983766780 6.6380596806e-02
6308 8 0.8333 260 102.312450594365 6.4338679504e-02
6309 8 0.8333 261 102.713957892990 6.4196490477e-02
6310 8 0.8333 262 103.121154883124 6.7287485656e-02
6311 8 0.8333 263 103.598206762949 1.8661528470e-01
6312 8 0.8333 264 103.746391586522 9.2894511478e-01
6313 8 0.8333 265 104.258163403483 6.7009338768e-02
6314 8 0.8333 266 104.659863786431 6.4424735908e-02
6315 8 0.8333 267 105.059331776573 6.3498342898e-02
6316 8 0.8333 268 105.447252039839 1.0635163160e+00
6317 8 0.8333 269 105.855090705434 6.5023165380e-02
6318 8 0.8333 270 106.252810647616 6.3969410395e-02
6319 8 0.8333 271 106.657683389860 6.7070081788e-02
6320 8 0.8333 272 107.154361776887 9.9579469867e-01
6321 8 0.8333 273 107.341484756762 1.2122594766e-01
6322 8 0.8333 274 107.796606354846 6.5420565554e-02
6323 8 0.8333 275 108.200671066697 6.5747454115e-02
6324 8 0.8333 276 108.597762057444 6.3370598554e-02
6325 8 0.8333 277 108.993214564423 6.3749519239e-02
6326 8 0.8333 278 109.391307476307 6.3299519121e-02
6327 8 0.8333 279 109.787663244261 6.3542618731e-02
6328 8 0.8333 280 110.182377144809 6.5656193213e-02
6329 8 0.8333 281 110.583409362676 6.5345843154e-02
6330 8 0.8333 282 111.025762683711 1.0596369039e+00
6331 8 0.8333 283 111.364973813274 6.7913020284e-02
6332 8 0.8333 284 111.862964778316 1.0183454870e+00
6333 8 0.8333 285 112.076583554984 1.0054271036e-01
6334 8 0.8333 286 112.521246483292 6.5657708953e-02
6335 8 0.8333 287 112.923104045975 6.5979257896e-02
6336 8 0.8333 288 113.326281675372 6.5200092703e-02
6337 8 0.8333 289 113.734526626209 6.6371071978e-02
6338 8 0.8333 290 114.238138055812 3.4463162060e-01
6339 8 0.8333 291 114.354616884093 7.7126225321e-01
6340 8 0.8333 292 114.867596948031 6.7539272738e-02
6341 8 0.8333 293 115.279913871727 6.5117445082e-02
6342 8 0.8333 294 115.686608324910 6.9164326059e-02
6343 8 0.8333 295 116.202335160657 8.8996345431e-01
6344 8 0.8333 296 116.338300454167 2.2563890642e-01
6345 8 0.8333 297 116.823648950002 6.8504371651e-02
6346 8 0.8333 298 117.228185004917 6.4324869383e-02
6347 8 0.8333 299 117.629790569850 6.4065765544e-02
6348 8 0.8333 300 118.027932250857 6.6242152030e-02
6349 8 0.8333 301 118.422743246107 6.4412082144e-02
6350 8 0.8333 302 118.792471111502 1.0623248466e+00
6351 8 0.8333 303 119.213334385028 6.4064590110e-02
6352 8 0.8333 304 119.604423152793 6.6371687560e-02
6353 8 0.8333 305 120.004242689056 6.4401103748e-02
6354 8 0.8333 306 120.405136996587 6.4308845739e-02
6355 8 0.8333 307 120.811254471864 6.6110032626e-02
6356 8 0.8333 308 121.327679886945 6.7244565532e-01
6357 8 0.8333 309 121.437068517727 4.4298366161e-01
6358 8 0.8333 310 121.944525046681 6.9482746755e-02
6359 8 0.8333 311 122.362451072900 6.8157584817e-02
6360 8 0.8333 312 122.873297009820 3.9828699765e-01
6361 8 0.8333 313 122.985190441726 7.2125720154e-01
6362 8 0.8333 314 123.505178299059 6.6482628524e-02
6363 8 0.8333 315 123.908004550597 6.8727123540e-02
6364 8 0.8333 316 124.259814028326 1.0605894575e+00
6365 8 0.8333 317 124.694710711844 6.4730259484e-02
6366 8 0.8333 318 125.096282095757 6.3857803157e-02
6367 8 0.8333 319 125.491302707872 6.3239299116e-02
6368 8 0.8333 320 125.892387991860 6.6577427854e-02
6369 8 0.8333 321 126.276632716169 6.4147703190e-02
6370 8 0.8333 322 126.677397737542 6.8098307311e-02
6371 8 0.8333 323 127.074252357231 6.4077535959e-02
6372 8 0.8333 324 127.513461997765 1.0607717808e+00
6373 8 0.8333 325 127.858089962860 6.7761667278e-02
6374 8 0.8333 326 128.249657475577 6.5411175434e-02
6375 8 0.8333 327 128.649628943086 6.4595260760e-02
6376 8 0.8333 328 129.055012896523 6.6211618989e-02
6377 8 0.8333 329 129.561798688547 9.7172035543e-01
6378 8 0.8333 330 129.731736868641 1.5033754200e-01
6379 8 0.8333 331 130.198800988572 6.5997134332e-02
6380 8 0.8333 332 130.606955376272 6.6624141654e-02
6381 8 0.8333 333 131.080817436275 1.0478824873e+00
6382 8 0.8333 334 131.359088982877 7.4564442723e-02
6383 8 0.8333 335 131.782639868647 6.9115062378e-02
6384 8 0.8333 336 132.173457219473 6.5004565751e-02
6385 8 0.8333 337 132.576981246689 6.4864509270e-02
6386 8 0.8333 338 132.981976828425 7.1058011122e-02
6387 8 0.8333 339 133.483763786961 1.0008716336e+00
6388 8 0.8333 340 133.679288764228 1.1811971645e-01
6389 8 0.8333 341 134.147070989641 7.0845712726e-02
6390 8 0.8333 342 134.619895749052 1.8434692651e-01
6391 8 0.8333 343 134.777887500290 9.3910791755e-01
6392 8 0.8333 344 135.280350453413 6.8800691609e-02
6393 8 0.8333 345 135.690118797610 6.4702997946e-02
6394 8 0.8333 346 136.087871379874 6.4711230927e-02
6395 8 0.8333 347 136.486565312377 6.3822561063e-02
6396 8 0.8333 348 136.886528323789 6.9630441701e-02
6397 8 0.8333 349 137.279152749395 6.3867566434e-02
6398 8 0.8333 350 137.678672290000 6.5148396565e-02
6399 8 0.8333 351 138.113109011744 1.0610550768e+00
6400 8 0.8333 352 138.464822792459 6.7927493274e-02
6401 8 0.8333 353 138.850480573382 6.7960073065e-02
6402 8 0.8333 354 139.258178254503 6.5757182914e-02
6403 8 0.8333 355 139.729425439085 1.0475146714e+00
6404 8 0.8333 356 139.999102676292 8.1957030059e-02
6405 8 0.8333 357 140.423617063935 6.5528890196e-02
6406 8 0.8333 358 140.839520961776 7.2034694400e-02
6407 8 0.8333 359 141.129914009594 1.0515198413e+00
6408 8 0.8333 360 141.600086580406 6.9207285701e-02
6409 8 0.8333 361 141.984867815069 6.6551650426e-02
6410 8 0.8333 362 142.387381614283 6.4605734232e-02
6411 8 0.8333 363 142.788489382658 7.4380795055e-02
6412 8 0.8333 364 143.115760124802 1.0589676774e+00
6413 8 0.8333 365 143.564585288846 6.4746047000e-02
6414 8 0.8333 366 143.962763052834 6.4062081321e-02
6415 8 0.8333 367 144.366028612929 6.9929515833e-02
6416 8 0.8333 368 144.746169437699 6.6108038804e-02
6417 8 0.8333 369 145.150830276371 6.4623623788e-02
6418 8 0.8333 370 145.539066119904 7.2167263535e-02
6419 8 0.8333 371 145.996454830955 1.0588188915e+00
6420 8 0.8333 372 146.321306954622 7.1608862405e-02
6421 8 0.8333 373 146.709955313988 6.9581854843e-02
6422 8 0.8333 374 147.126307556430 6.9665218243e-02
6423 8 0.8333 375 147.428302648119 1.0551550153e+00
6424 8 0.8333 376 147.887255686544 6.5174509293e-02
6425 8 0.8333 377 148.287685106034 6.4732378363e-02
6426 8 0.8333 378 148.690652791412 6.4785464316e-02
6427 8 0.8333 379 149.088162769983 6.6880984621e-02
6428 8 0.8333 380 149.481574633862 7.4553671635e-02
6429 8 0.8333 381 150.010758768954 6.8478021147e-01
6430 8 0.8333 382 150.125702015035 4.4198259217e-01
6431 8 0.8333 383 150.651174347309 7.9287520135e-02
6432 8 0.8333 384 150.932668693103 1.0486778338e+00
6433 8 0.8333 385 151.418428395659 7.2419152709e-02
6434 8 0.8333 386 151.801882434525 6.7448124931e-02
6435 8 0.8333 387 152.204559748390 6.5343145906e-02
6436 8 0.8333 388 152.612610853531 7.2513186542e-02
6437 8 0.8333 389 153.022333080558 1.0636792737e+00
6438 8 0.8333 390 153.382634374238 6.5174245157e-02
6439 8 0.8333 391 153.783973625125 6.5599869216e-02
6440 8 0.8333 392 154.178829602134 6.5916083418e-02
6441 8 0.8333 393 154.561264511803 7.4866435133e-02
6442 8 0.8333 394 154.966355747301 6.4128639150e-02
6443 8 0.8333 395 155.373427710079 7.1655011614e-02
6444 8 0.8333 396 155.747393595281 6.7365663105e-02
6445 8 0.8333 397 156.114707320158 1.0648852007e+00
6446 8 0.8333 398 156.543567040170 6.5031385962e-02
6447 8 0.8333 399 156.945420432018 6.5684210897e-02
6448 8 0.8333 400 157.385379378493 9.8780356167e-02
6449 8 0.8333 401 157.607864757616 1.0358953481e+00
6450 8 0.8333 402 158.096356464086 6.7687432898e-02
6451 8 0.8333 403 158.503475058473 6.7207300133e-02
6452 8 0.8333 404 158.852066855165 1.0731507365e+00
6453 8 0.8333 405 159.279041224152 6.6173083235e-02
6454 8 0.8333 406 159.681670615021 6.4557958674e-02
6455 8 0.8333 407 160.077499790059 6.4071340797e-02
6456 8 0.8333 408 160.474163615836 6.5494550218e-02
6457 8 0.8333 409 160.883666782534 8.3434949177e-02
6458 8 0.8333 410 161.194014315016 1.0562880530e+00
6459 8 0.8333 411 161.665827830587 7.9761452385e-02
6460 8 0.8333 412 162.050211443396 6.7376895996e-02
6461 8 0.8333 413 162.471361926761 7.6589088158e-02
6462 8 0.8333 414 162.941524476359 3.3649857280e-01
6463 8 0.8333 415 163.064958557018 7.8616282561e-01
6464 8 0.8333 416 163.584690653974 6.7196298593e-02
6465 8 0.8333 417 163.997860452151 6.9425160337e-02
6466 8 0.8333 418 164.369605932541 7.6987851801e-02
6467 8 0.8333 419 164.776847271223 6.6377209217e-02
6468 8 0.8333 420 165.178564699749 6.5264859000e-02
6469 8 0.8333 421 165.539182833895 1.0633183661e+00
6470 8 0.8333 422 165.970598255358 6.7786924320e-02
6471 8 0.8333 423 166.339949065831 7.8885293241e-02
6472 8 0.8333 424 166.753036521781 6.5694602772e-02
6473 8 0.8333 425 167.182207098322 1.0643266902e+00
6474 8 0.8333 426 167.538119910582 6.5172309573e-02
6475 8 0.8333 427 167.936623042954 6.6750911504e-02
6476 8 0.8333 428 168.311724031145 7.9779624083e-02
6477 8 0.8333 429 168.735222176128 8.1377675766e-02
6478 8 0.8333 430 169.095384823011 1.0669802339e+00
6479 8 0.8333 431 169.508160960588 6.4994334278e-02
6480 8 0.8333 432 169.911636151492 1.0653518064e+00
6481 8 0.8333 433 170.316518298639 8.0615214140e-02
6482 8 0.8333 434 170.682145420762 6.8307697468e-02
6483 8 0.8333 435 171.083993119622 6.5182527109e-02
6484 8 0.8333 436 171.477715317150 6.6866708173e-02
6485 8 0.8333 437 171.893501802913 8.0173295014e-02
6486 8 0.8333 438 172.257813647049 6.7870558117e-02
6487 8 0.8333 439 172.660691152857 6.5612107208e-02
6488 8 0.8333 440 173.066486759347 6.8412251730e-02
6489 8 0.8333 441 173.412795117250 1.0830194851e+00
6490 8 0.8333 442 173.844927307897 6.7959459175e-02
6491 8 0.8333 443 174.269898094776 8.8772612473e-02
6492 8 0.8333 444 174.741434119456 1.0146810266e+00
6493 8 0.8333 445 174.952699723865 1.0973347388e-01
6494 8 0.8333 446 175.402323885244 6.7848711152e-02
6495 8 0.8333 447 175.813271940499 6.8377756122e-02
6496 8 0.8333 448 176.284035441509 1.4408724510e-01
6497 8 0.8333 449 176.458537636810 9.7897639545e-01
6498 8 0.8333 450 176.952823793675 9.1024963409e-02
6499 8 0.8333 451 177.372833645036 6.8231796107e-02
6500 8 0.8333 452 177.782340976100 7.0349852830e-02
6501 8 0.8333 453 178.268796751463 2.9477631613e-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())