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 15 of 30 · 500/page · 14949 rows next →
# atheta_over_pikz_kw_k
7002 8 1.0000 242 95.278429466689 6.8360004896e-02
7003 8 1.0000 243 95.785755249704 3.3418307947e-01
7004 8 1.0000 244 95.904033783929 7.8223043057e-01
7005 8 1.0000 245 96.422418393579 6.5957777946e-02
7006 8 1.0000 246 96.827753183720 6.4096997223e-02
7007 8 1.0000 247 97.228470876135 6.3806616436e-02
7008 8 1.0000 248 97.621824764113 6.3747897289e-02
7009 8 1.0000 249 98.020075162526 6.3352498004e-02
7010 8 1.0000 250 98.416978461961 6.4080527317e-02
7011 8 1.0000 251 98.829888718743 1.0630951801e+00
7012 8 1.0000 252 99.203669145434 6.3036004358e-02
7013 8 1.0000 253 99.599573155855 6.3441848229e-02
7014 8 1.0000 254 99.995524038835 6.4778720023e-02
7015 8 1.0000 255 100.394852117531 6.5539287787e-02
7016 8 1.0000 256 100.798100555563 6.5358073888e-02
7017 8 1.0000 257 101.301696443968 9.7813044251e-01
7018 8 1.0000 258 101.474926063920 1.3786606313e-01
7019 8 1.0000 259 101.939307225748 6.5972474049e-02
7020 8 1.0000 260 102.344713610864 6.4275650424e-02
7021 8 1.0000 261 102.746070340383 6.4179869708e-02
7022 8 1.0000 262 103.153361309862 6.7653252178e-02
7023 8 1.0000 263 103.661775478866 4.6075481564e-01
7024 8 1.0000 264 103.769228070972 6.5368961596e-01
7025 8 1.0000 265 104.286158786431 6.7365621953e-02
7026 8 1.0000 266 104.689376878503 6.4486550542e-02
7027 8 1.0000 267 105.090740966313 6.4186458920e-02
7028 8 1.0000 268 105.448935692572 1.0617238622e+00
7029 8 1.0000 269 105.878800521435 6.5308258503e-02
7030 8 1.0000 270 106.277397835452 6.3852888393e-02
7031 8 1.0000 271 106.680379019591 6.6685269121e-02
7032 8 1.0000 272 107.159598757479 1.0350414165e+00
7033 8 1.0000 273 107.402111444036 8.4306472054e-02
7034 8 1.0000 274 107.829988388038 6.4672918254e-02
7035 8 1.0000 275 108.230656578129 6.5554823700e-02
7036 8 1.0000 276 108.627757827245 6.3255283242e-02
7037 8 1.0000 277 109.021992460594 6.3519676181e-02
7038 8 1.0000 278 109.419430182658 6.3256828079e-02
7039 8 1.0000 279 109.815384093612 6.3506693612e-02
7040 8 1.0000 280 110.208195407375 6.5297789224e-02
7041 8 1.0000 281 110.607329972136 6.4865693101e-02
7042 8 1.0000 282 111.027616774177 1.0627607327e+00
7043 8 1.0000 283 111.396979592582 6.5356692132e-02
7044 8 1.0000 284 111.867696948333 1.0467440173e+00
7045 8 1.0000 285 112.142066841864 7.4730890392e-02
7046 8 1.0000 286 112.560098873323 6.4871669924e-02
7047 8 1.0000 287 112.957668575108 6.5447687920e-02
7048 8 1.0000 288 113.359148223332 6.4970583007e-02
7049 8 1.0000 289 113.766863435950 6.6339938987e-02
7050 8 1.0000 290 114.284988938244 7.5764501514e-01
7051 8 1.0000 291 114.400263072358 3.5836515023e-01
7052 8 1.0000 292 114.898808969671 6.7115427708e-02
7053 8 1.0000 293 115.310167454952 6.5085120681e-02
7054 8 1.0000 294 115.714125194406 6.8601972747e-02
7055 8 1.0000 295 116.213662559282 1.0071753956e+00
7056 8 1.0000 296 116.413406697885 1.1067470279e-01
7057 8 1.0000 297 116.860099576331 6.7760712198e-02
7058 8 1.0000 298 117.263213374121 6.4033423968e-02
7059 8 1.0000 299 117.664119521993 6.4173858833e-02
7060 8 1.0000 300 118.062319116499 6.6634851616e-02
7061 8 1.0000 301 118.463221810170 6.6393471601e-02
7062 8 1.0000 302 118.794589015065 1.0583496542e+00
7063 8 1.0000 303 119.240744372433 6.4858022067e-02
7064 8 1.0000 304 119.632474466406 6.6174060863e-02
7065 8 1.0000 305 120.032629476624 6.4385096739e-02
7066 8 1.0000 306 120.433745171859 6.4322769242e-02
7067 8 1.0000 307 120.839662169129 6.5984796277e-02
7068 8 1.0000 308 121.349835821619 9.3714076546e-01
7069 8 1.0000 309 121.502961938554 1.7965019650e-01
7070 8 1.0000 310 121.977364783593 6.8837694257e-02
7071 8 1.0000 311 122.393931966434 6.8064199875e-02
7072 8 1.0000 312 122.915581376931 8.1411878425e-01
7073 8 1.0000 313 123.037190240338 3.0585072190e-01
7074 8 1.0000 314 123.541257506229 6.7254066929e-02
7075 8 1.0000 315 123.950292003690 7.2154402312e-02
7076 8 1.0000 316 124.262059335349 1.0544342486e+00
7077 8 1.0000 317 124.718361574861 6.5132725821e-02
7078 8 1.0000 318 125.121788313408 6.4136514021e-02
7079 8 1.0000 319 125.517800848384 6.3213148384e-02
7080 8 1.0000 320 125.918692675772 6.7109337491e-02
7081 8 1.0000 321 126.304153913634 6.3623333116e-02
7082 8 1.0000 322 126.701556753855 6.7947270439e-02
7083 8 1.0000 323 127.098338939724 6.3572595095e-02
7084 8 1.0000 324 127.515245276088 1.0635772637e+00
7085 8 1.0000 325 127.891544222977 6.6815534357e-02
7086 8 1.0000 326 128.280264339182 6.4714547110e-02
7087 8 1.0000 327 128.677580960175 6.4162857669e-02
7088 8 1.0000 328 129.079957962000 6.5569371453e-02
7089 8 1.0000 329 129.568368038394 1.0270862973e+00
7090 8 1.0000 330 129.792675726599 9.7005341243e-02
7091 8 1.0000 331 130.231122959600 6.5113118805e-02
7092 8 1.0000 332 130.633685530913 6.5623609007e-02
7093 8 1.0000 333 131.083648196809 1.0582112400e+00
7094 8 1.0000 334 131.409471611175 6.6635486793e-02
7095 8 1.0000 335 131.817949208836 6.9056405358e-02
7096 8 1.0000 336 132.208523874642 6.4190075883e-02
7097 8 1.0000 337 132.608948768140 6.4541068866e-02
7098 8 1.0000 338 133.008840874739 7.0218319587e-02
7099 8 1.0000 339 133.489572823053 1.0412041722e+00
7100 8 1.0000 340 133.750936656158 8.0800571425e-02
7101 8 1.0000 341 134.189827236985 7.1212570984e-02
7102 8 1.0000 342 134.694749661627 5.0085811169e-01
7103 8 1.0000 343 134.805782828942 6.2068008360e-01
7104 8 1.0000 344 135.313048592826 6.8407667527e-02
7105 8 1.0000 345 135.722768381631 6.4778673067e-02
7106 8 1.0000 346 136.119886932855 6.4509738367e-02
7107 8 1.0000 347 136.518012324506 6.3710296855e-02
7108 8 1.0000 348 136.915119281587 6.9711573745e-02
7109 8 1.0000 349 137.309794357762 6.3575149450e-02
7110 8 1.0000 350 137.706969658079 6.4715481315e-02
7111 8 1.0000 351 138.115157674377 1.0636187283e+00
7112 8 1.0000 352 138.502928798010 6.7535900608e-02
7113 8 1.0000 353 138.884624015929 6.6614403824e-02
7114 8 1.0000 354 139.288450157853 6.5060906149e-02
7115 8 1.0000 355 139.732883001620 1.0609963606e+00
7116 8 1.0000 356 140.057083822316 7.1678874692e-02
7117 8 1.0000 357 140.471431083161 6.5878776745e-02
7118 8 1.0000 358 140.911835706153 9.5033883143e-02
7119 8 1.0000 359 141.134640937949 1.0248601503e+00
7120 8 1.0000 360 141.630371488416 7.0913105758e-02
7121 8 1.0000 361 142.020252584752 6.6265987025e-02
7122 8 1.0000 362 142.425237277640 6.5466429113e-02
7123 8 1.0000 363 142.833861453971 8.1003271248e-02
7124 8 1.0000 364 143.118424108567 1.0492490135e+00
7125 8 1.0000 365 143.589304593505 6.5484713812e-02
7126 8 1.0000 366 143.990167883020 6.4264525968e-02
7127 8 1.0000 367 144.393764072566 7.0883608836e-02
7128 8 1.0000 368 144.776669804510 6.5412075619e-02
7129 8 1.0000 369 145.181243083129 6.5088057547e-02
7130 8 1.0000 370 145.564997064443 7.0954054942e-02
7131 8 1.0000 371 145.998808206572 1.0643582497e+00
7132 8 1.0000 372 146.368300246904 7.0225980176e-02
7133 8 1.0000 373 146.753729729153 6.8683784596e-02
7134 8 1.0000 374 147.188963799908 8.4868331379e-02
7135 8 1.0000 375 147.432050271079 1.0366495458e+00
7136 8 1.0000 376 147.914271222400 6.5838308742e-02
7137 8 1.0000 377 148.316751737060 6.4861125909e-02
7138 8 1.0000 378 148.721382788934 6.5288803439e-02
7139 8 1.0000 379 149.120756612081 6.7392930415e-02
7140 8 1.0000 380 149.510416251356 7.3382778748e-02
7141 8 1.0000 381 150.033244827865 9.4489556148e-01
7142 8 1.0000 382 150.195443417690 1.8463463544e-01
7143 8 1.0000 383 150.716984825601 1.0386281691e-01
7144 8 1.0000 384 150.937282450059 1.0204717240e+00
7145 8 1.0000 385 151.443784870175 7.4042885316e-02
7146 8 1.0000 386 151.831931692032 6.6911743095e-02
7147 8 1.0000 387 152.233682285043 6.5178742682e-02
7148 8 1.0000 388 152.640001877111 7.3220038557e-02
7149 8 1.0000 389 153.024506695161 1.0648678034e+00
7150 8 1.0000 390 153.419555829940 6.4323158120e-02
7151 8 1.0000 391 153.818929334396 6.5830003303e-02
7152 8 1.0000 392 154.215784982844 6.6617705184e-02
7153 8 1.0000 393 154.593022251498 7.3642060768e-02
7154 8 1.0000 394 155.000707150588 6.4338246938e-02
7155 8 1.0000 395 155.409386855520 7.3910976261e-02
7156 8 1.0000 396 155.795994103412 6.9423573760e-02
7157 8 1.0000 397 156.117185151766 1.0592868870e+00
7158 8 1.0000 398 156.573603567805 6.6002109904e-02
7159 8 1.0000 399 156.980677346866 6.6606957953e-02
7160 8 1.0000 400 157.453470638243 1.6590939197e-01
7161 8 1.0000 401 157.615764308464 9.6682257837e-01
7162 8 1.0000 402 158.125445548317 6.8716214308e-02
7163 8 1.0000 403 158.543249392815 7.1500749854e-02
7164 8 1.0000 404 158.854348797504 1.0674562223e+00
7165 8 1.0000 405 159.304294152657 6.6567136337e-02
7166 8 1.0000 406 159.709694843665 6.5045995971e-02
7167 8 1.0000 407 160.108289537501 6.4468117654e-02
7168 8 1.0000 408 160.507236064335 6.6098744178e-02
7169 8 1.0000 409 160.922342043614 9.1598554600e-02
7170 8 1.0000 410 161.196612429772 1.0453938217e+00
7171 8 1.0000 411 161.685444303045 8.1398890450e-02
7172 8 1.0000 412 162.077715003815 6.7158393970e-02
7173 8 1.0000 413 162.499724243114 7.8462495321e-02
7174 8 1.0000 414 162.989521764408 7.1309973405e-01
7175 8 1.0000 415 163.104895927625 4.0810585714e-01
7176 8 1.0000 416 163.615383893735 6.7345299617e-02
7177 8 1.0000 417 164.030877960181 7.1205160096e-02
7178 8 1.0000 418 164.400236758353 7.5337040921e-02
7179 8 1.0000 419 164.808556175063 6.6600761868e-02
7180 8 1.0000 420 165.216641698341 6.7929375067e-02
7181 8 1.0000 421 165.541237977314 1.0589412207e+00
7182 8 1.0000 422 165.996802574503 6.9549291157e-02
7183 8 1.0000 423 166.363183090996 7.7295127361e-02
7184 8 1.0000 424 166.776737936871 6.5637558207e-02
7185 8 1.0000 425 167.183963414729 1.0663562846e+00
7186 8 1.0000 426 167.571497733312 6.4679446907e-02
7187 8 1.0000 427 167.970040712411 6.7682742438e-02
7188 8 1.0000 428 168.338286258699 7.7989897518e-02
7189 8 1.0000 429 168.762063852006 8.4105740573e-02
7190 8 1.0000 430 169.097357473179 1.0637213716e+00
7191 8 1.0000 431 169.534022395361 6.5503723487e-02
7192 8 1.0000 432 169.913225947864 1.0649160976e+00
7193 8 1.0000 433 170.340056082121 8.2451754920e-02
7194 8 1.0000 434 170.712592036578 6.7234707554e-02
7195 8 1.0000 435 171.113218462408 6.5242241666e-02
7196 8 1.0000 436 171.505405874597 6.6426071422e-02
7197 8 1.0000 437 171.919382685955 8.2214222794e-02
7198 8 1.0000 438 172.291499859274 6.6679248936e-02
7199 8 1.0000 439 172.692854045964 6.5728986137e-02
7200 8 1.0000 440 173.104788189705 7.2286571893e-02
7201 8 1.0000 441 173.414912603120 1.0772750265e+00
7202 8 1.0000 442 173.866350634972 6.7940368859e-02
7203 8 1.0000 443 174.287846194908 8.9486451209e-02
7204 8 1.0000 444 174.746345542293 1.0450824220e+00
7205 8 1.0000 445 175.014710053013 8.1865061468e-02
7206 8 1.0000 446 175.440921686219 6.7279138645e-02
7207 8 1.0000 447 175.850705625433 6.8527892224e-02
7208 8 1.0000 448 176.358928730632 3.5306562422e-01
7209 8 1.0000 449 176.477115011191 7.6903477276e-01
7210 8 1.0000 450 176.975722621670 9.0277580424e-02
7211 8 1.0000 451 177.401939248459 6.8743802426e-02
7212 8 1.0000 452 177.814109937203 7.1007339932e-02
7213 8 1.0000 453 178.315866196590 5.7243164021e-01
7214 8 1.0000 454 178.433574951675 5.7040697592e-01
7215 8 1.0000 455 178.973527531297 7.8142518297e-02
7216 8 1.0000 456 179.338212893773 8.1703462060e-02
7217 8 1.0000 457 179.881732904977 7.8525454840e-01
7218 8 1.0000 458 180.002377824215 3.3789914675e-01
7219 8 1.0000 459 180.509684055752 6.9883545875e-02
7220 8 1.0000 460 180.906413151545 9.5413711630e-02
7221 8 1.0000 461 181.343068137417 8.5747057922e-02
7222 8 1.0000 462 181.705937345466 7.5523180403e-02
7223 8 1.0000 463 182.197491262580 1.0365684576e+00
7224 8 1.0000 464 182.441644219084 8.7681689773e-02
7225 8 1.0000 465 182.873270795589 6.9985124611e-02
7226 8 1.0000 466 183.276188340417 6.7199776537e-02
7227 8 1.0000 467 183.679867855361 6.6055905637e-02
7228 8 1.0000 468 184.049332865892 9.3558065084e-02
7229 8 1.0000 469 184.467359290082 6.9537298792e-02
7230 8 1.0000 470 184.874226686467 1.0665970037e+00
7231 8 1.0000 471 185.289855475988 8.6331547760e-02
7232 8 1.0000 472 185.601229088732 1.0737775371e+00
7233 8 1.0000 473 186.040264037026 6.8587242404e-02
7234 8 1.0000 474 186.458977012822 7.9771537295e-02
7235 8 1.0000 475 186.792512844533 8.2289935282e-02
7236 8 1.0000 476 187.228287470008 1.0669191010e+00
7237 8 1.0000 477 187.614557075485 6.5398543410e-02
7238 8 1.0000 478 188.013771845915 6.6638666381e-02
7239 8 1.0000 479 188.410539433172 1.0336650894e-01
7240 8 1.0000 480 188.819776572793 6.9611765028e-02
7241 8 1.0000 481 189.335358693313 3.9849508504e-01
7242 8 1.0000 482 189.460889637317 7.4230867761e-01
7243 8 1.0000 483 189.923360862882 8.2205766868e-02
7244 8 1.0000 484 190.346779421792 6.8988415096e-02
7245 8 1.0000 485 190.744889162169 1.0388324618e-01
7246 8 1.0000 486 191.147734683973 6.8840304580e-02
7247 8 1.0000 487 191.555332152334 6.8145559793e-02
7248 8 1.0000 488 192.021290968787 1.0696483949e+00
7249 8 1.0000 489 192.287522932039 9.6261625289e-02
7250 8 1.0000 490 192.713929127951 6.9834198733e-02
7251 8 1.0000 491 193.082126422244 1.0652404149e+00
7252 8 1.0000 492 193.509563976550 7.0440398902e-02
7253 8 1.0000 493 193.913338843158 7.0740482414e-02
7254 8 1.0000 494 194.341143524298 9.9223849613e-02
7255 8 1.0000 495 194.699579613100 7.5178887083e-02
7256 8 1.0000 496 195.230267143478 7.8308536284e-01
7257 8 1.0000 497 195.352718857569 3.4067183973e-01
7258 8 1.0000 498 195.867684516560 7.2713357040e-02
7259 8 1.0000 499 196.241970307421 1.1150075795e-01
7260 8 1.0000 500 196.774422882852 3.0396365419e-01
7261 8 1.0000 501 196.914415871995 8.6248591229e-01
7262 8 1.0000 502 197.426161915731 7.4659834017e-02
7263 8 1.0000 503 197.939187079110 4.2707481063e-01
7264 8 1.0000 504 198.054939524797 7.4265847280e-01
7265 8 1.0000 505 198.579044415750 7.2492331798e-02
7266 8 1.0000 506 198.979554513122 6.7705545884e-02
7267 8 1.0000 507 199.388875159786 6.8870851367e-02
7268 8 1.0000 508 199.785871332684 6.8736861668e-02
7269 8 1.0000 509 200.185700355094 1.1881549198e-01
7270 8 1.0000 510 200.587834668883 6.7614716259e-02
7271 8 1.0000 511 201.028581036816 1.1767189165e-01
7272 8 1.0000 512 201.271178989963 1.0611834048e+00
7273 8 1.0000 513 201.745051627123 7.2289992371e-02
7274 8 1.0000 514 202.149839557950 6.8261491040e-02
7275 8 1.0000 515 202.497167190019 1.0684137455e+00
7276 8 1.0000 516 202.944546508795 6.9761068824e-02
7277 8 1.0000 517 203.303311157305 1.1951555537e-01
7278 8 1.0000 518 203.731205276553 6.9993220957e-02
7279 8 1.0000 519 204.185113287837 1.0618651808e+00
7280 8 1.0000 520 204.543812955400 1.2164620151e-01
7281 8 1.0000 521 204.897873148362 7.5223014330e-02
7282 8 1.0000 522 205.386419978099 1.0482932666e+00
7283 8 1.0000 523 205.660094884933 8.3572843636e-02
7284 8 1.0000 524 206.119442216601 1.0271119738e-01
7285 8 1.0000 525 206.431343548587 9.0371784551e-02
7286 8 1.0000 526 206.863503409611 7.0524135600e-02
7287 8 1.0000 527 207.271482218102 6.9850210111e-02
7288 8 1.0000 528 207.706429173629 1.8058106213e-01
7289 8 1.0000 529 207.920741180305 1.0058237781e+00
7290 8 1.0000 530 208.435877256832 1.3459299554e-01
7291 8 1.0000 531 208.826846317733 7.1935579984e-02
7292 8 1.0000 532 209.225830706552 7.1754404175e-02
7293 8 1.0000 533 209.579755897785 1.0684677705e+00
7294 8 1.0000 534 209.972063065145 1.3157861528e-01
7295 8 1.0000 535 210.403988456000 6.9574595513e-02
7296 8 1.0000 536 210.805688006309 6.8094065951e-02
7297 8 1.0000 537 211.205289755340 7.4936469733e-02
7298 8 1.0000 538 211.683071162553 1.0504082573e+00
7299 8 1.0000 539 211.959530318607 8.3072842554e-02
7300 8 1.0000 540 212.382486647993 7.0979776191e-02
7301 8 1.0000 541 212.819657593566 1.4222348773e-01
7302 8 1.0000 542 213.304581975063 7.8535024062e-01
7303 8 1.0000 543 213.425509453659 4.1531201179e-01
7304 8 1.0000 544 213.943010823917 7.6609863353e-02
7305 8 1.0000 545 214.451773212894 3.1209365981e-01
7306 8 1.0000 546 214.580410816489 8.1490254679e-01
7307 8 1.0000 547 215.076572687609 1.4598564069e-01
7308 8 1.0000 548 215.519438005645 7.4819259860e-02
7309 8 1.0000 549 215.998521269027 1.6796568140e-01
7310 8 1.0000 550 216.197339570390 1.0285920564e+00
7311 8 1.0000 551 216.628410596375 8.2608601037e-02
7312 8 1.0000 552 217.055779081282 7.2016135758e-02
7313 8 1.0000 553 217.466121823386 7.2366534562e-02
7314 8 1.0000 554 217.830792007644 1.5075920625e-01
7315 8 1.0000 555 218.251501486521 6.9540390643e-02
7316 8 1.0000 556 218.651257005395 7.2252516564e-02
7317 8 1.0000 557 219.067136016909 1.0720123686e+00
7318 8 1.0000 558 219.410245478541 1.4944447850e-01
7319 8 1.0000 559 219.826222169775 7.2955371455e-02
7320 8 1.0000 560 220.233143727638 7.7291228417e-02
7321 8 1.0000 561 220.709208136859 1.1354075344e+00
7322 8 1.0000 562 220.979815590099 8.5000675411e-02
7323 8 1.0000 563 221.429233528207 1.0739189689e+00
7324 8 1.0000 564 221.804194806429 7.2525568912e-02
7325 8 1.0000 565 222.210282669069 7.5949075462e-02
7326 8 1.0000 566 222.610437349514 7.2273236950e-02
7327 8 1.0000 567 223.054332812679 1.1700014081e-01
7328 8 1.0000 568 223.337665261553 1.1070106894e-01
7329 8 1.0000 569 223.856755725812 1.8102214540e-01
7330 8 1.0000 570 224.032952487434 1.0467902679e+00
7331 8 1.0000 571 224.537599854164 7.4787989324e-02
7332 8 1.0000 572 224.979677937507 1.0756454901e+00
7333 8 1.0000 573 225.387059978633 1.5132734043e-01
7334 8 1.0000 574 225.698177213945 9.1094523540e-02
7335 8 1.0000 575 226.115734480503 7.1947100072e-02
7336 8 1.0000 576 226.493279039392 1.7146380961e-01
7337 8 1.0000 577 226.924094357228 7.8848188354e-02
7338 8 1.0000 578 227.411193132923 1.0424832930e+00
7339 8 1.0000 579 227.658864816882 9.5707249771e-02
7340 8 1.0000 580 228.121181889077 9.8161799879e-02
7341 8 1.0000 581 228.414127037056 1.5347214639e-01
7342 8 1.0000 582 228.873010620937 7.7874227824e-02
7343 8 1.0000 583 229.330749762101 1.0629200733e+00
7344 8 1.0000 584 229.637144997092 7.9453429011e-02
7345 8 1.0000 585 230.049253437660 7.2131108445e-02
7346 8 1.0000 586 230.420527017936 1.8648412330e-01
7347 8 1.0000 587 230.841789689684 7.5154525682e-02
7348 8 1.0000 588 231.249482061235 1.0738475967e+00
7349 8 1.0000 589 231.646643148997 7.8629823342e-02
7350 8 1.0000 590 231.985936020874 1.1844833357e+00
7351 8 1.0000 591 232.428849885436 7.8625313096e-02
7352 8 1.0000 592 232.770580871908 1.8927222326e-01
7353 8 1.0000 593 233.209935211737 7.5741238541e-02
7354 8 1.0000 594 233.685544820584 1.0550900134e+00
7355 8 1.0000 595 233.963720401686 8.7027738326e-02
7356 8 1.0000 596 234.391362774294 7.5052516343e-02
7357 8 1.0000 597 234.844321771081 1.9151506074e-01
7358 8 1.0000 598 235.158641757409 8.5497266875e-02
7359 8 1.0000 599 235.587927357451 7.8937553751e-02
7360 8 1.0000 600 236.038845040284 2.0642803848e-01
7361 8 1.0000 601 236.501306800935 9.7438933425e-01
7362 8 1.0000 602 236.732386725681 2.6190168221e-01
7363 8 1.0000 603 237.074789016683 1.1435875539e-01
7364 8 1.0000 604 237.573475622243 1.3449302011e-01
7365 8 1.0000 605 237.786084833445 1.0106865700e+00
7366 8 1.0000 606 238.278561047106 8.1345902571e-02
7367 8 1.0000 607 238.694430049083 7.4992666567e-02
7368 8 1.0000 608 239.113441210388 8.1785395225e-02
7369 8 1.0000 609 239.538842714324 1.1929240446e+00
7370 8 1.0000 610 239.832884649625 9.2638692368e-02
7371 8 1.0000 611 240.270356428241 8.2764676116e-02
7372 8 1.0000 612 240.672673096406 8.0360160972e-02
7373 8 1.0000 613 241.055831499512 1.2187632094e+00
7374 8 1.0000 614 241.461234318336 7.8569047932e-02
7375 8 1.0000 615 241.884191606202 8.1276391057e-02
7376 8 1.0000 616 242.360447761440 1.8258158686e-01
7377 8 1.0000 617 242.716562498056 4.3285702142e-01
7378 8 1.0000 618 242.869862176673 7.5444469981e-01
7379 8 1.0000 619 243.380282178304 2.4005505182e-01
7380 8 1.0000 620 243.860724321003 1.2884958258e-01
7381 8 1.0000 621 244.086031232638 1.0255993987e+00
7382 8 1.0000 622 244.607602339059 9.1719145192e-02
7383 8 1.0000 623 244.914788572798 2.2958848998e-01
7384 8 1.0000 624 245.382389130391 8.1700661116e-02
7385 8 1.0000 625 245.782645642734 8.0361018097e-02
7386 8 1.0000 626 246.188531932064 8.2024563158e-02
7387 8 1.0000 627 246.662733760448 1.4097454054e-01
7388 8 1.0000 628 246.998166478366 4.2723894619e-01
7389 8 1.0000 629 247.177588901179 8.2070407123e-01
7390 8 1.0000 630 247.720841497750 9.1749638898e-02
7391 8 1.0000 631 248.105360688487 1.0851376464e+00
7392 8 1.0000 632 248.473764491748 2.5830876291e-01
7393 8 1.0000 633 248.935992133634 8.3858292710e-02
7394 8 1.0000 634 249.441203258889 2.7518700530e-01
7395 8 1.0000 635 249.614931522052 9.2844460202e-01
7396 8 1.0000 636 249.976773171726 2.0424126246e-01
7397 8 1.0000 637 250.468285396376 8.4637088899e-02
7398 8 1.0000 638 250.993656996282 9.7511163181e-01
7399 8 1.0000 639 251.169975630124 1.8047008450e-01
7400 8 1.0000 640 251.646341939225 8.4158879988e-02
7401 8 1.0000 641 252.012065269929 2.8103758641e-01
7402 8 1.0000 642 252.482996317918 2.9073427120e-01
7403 8 1.0000 643 252.941849919382 2.3358740166e-01
7404 8 1.0000 644 253.097255314198 9.1267456046e-01
7405 8 1.0000 645 253.609993674676 8.3785382115e-02
7406 8 1.0000 646 254.020018945611 8.6573900136e-02
7407 8 1.0000 647 254.441134199457 2.9472026976e-01
7408 8 1.0000 648 254.818171989585 8.2602782758e-02
7409 8 1.0000 649 255.287157665204 1.2668839291e+00
7410 8 1.0000 650 255.539363838891 1.1003778945e-01
7411 8 1.0000 651 255.965053588898 8.8834001286e-02
7412 8 1.0000 652 256.380864366097 1.0813047691e+00
7413 8 1.0000 653 256.792199772446 8.7350756938e-02
7414 8 1.0000 654 257.177653728775 8.4200543622e-02
7415 8 1.0000 655 257.595132026390 8.5050914633e-02
7416 8 1.0000 656 258.032537888785 1.1331866081e-01
7417 8 1.0000 657 258.333538361097 3.2377258971e-01
7418 8 1.0000 658 258.626295825033 1.0366784910e+00
7419 8 1.0000 659 259.187895935653 1.5505008034e-01
7420 8 1.0000 660 259.425470080646 2.4934835640e-01
7421 8 1.0000 661 259.877315631395 1.0857163152e+00
7422 8 1.0000 662 260.320461910212 3.4117383938e-01
7423 8 1.0000 663 260.794383620119 1.0570510959e+00
7424 8 1.0000 664 261.066511514433 1.0155329529e-01
7425 8 1.0000 665 261.490278967942 9.3032442186e-02
7426 8 1.0000 666 261.966006157636 1.6747762874e-01
7427 8 1.0000 667 262.185788590089 2.5461274840e-01
7428 8 1.0000 668 262.652898779702 9.0586522493e-02
7429 8 1.0000 669 263.072777005535 8.7143949436e-02
7430 8 1.0000 670 263.565058008875 1.3166638796e+00
7431 8 1.0000 671 263.807930532674 1.2316717210e-01
7432 8 1.0000 672 264.231976763719 9.1153114854e-02
7433 8 1.0000 673 264.655301257770 9.1438536968e-02
7434 8 1.0000 674 265.003041796130 3.6945616775e-01
7435 8 1.0000 675 265.539181341911 1.0041226113e+00
7436 8 1.0000 676 265.739818534226 1.5396961623e-01
7437 8 1.0000 677 266.204985282170 8.8043422166e-02
7438 8 1.0000 678 266.613012199997 1.0939009269e+00
7439 8 1.0000 679 267.024349024648 3.9384636466e-01
7440 8 1.0000 680 267.418986708388 8.9978230151e-02
7441 8 1.0000 681 267.906336588948 1.0306663016e+00
7442 8 1.0000 682 268.134762507355 1.3587955387e-01
7443 8 1.0000 683 268.574387510583 4.0372081148e-01
7444 8 1.0000 684 268.992221203641 8.6967647894e-02
7445 8 1.0000 685 269.401666406293 9.0547492403e-02
7446 8 1.0000 686 269.937268202021 9.2183326410e-01
7447 8 1.0000 687 270.144750665732 3.3209445514e-01
7448 8 1.0000 688 270.445878484320 3.2728579357e-01
7449 8 1.0000 689 271.036260811175 2.5123464262e-01
7450 8 1.0000 690 271.335338034507 5.0850788172e-01
7451 8 1.0000 691 271.540109846586 8.3890386955e-01
7452 8 1.0000 692 272.153792768748 1.9561520571e-01
7453 8 1.0000 693 272.376582002409 3.2448735883e-01
7454 8 1.0000 694 272.874621492750 1.0050917043e-01
7455 8 1.0000 695 273.390600165385 5.4242238898e-01
7456 8 1.0000 696 273.518600774517 6.2194520980e-01
7457 8 1.0000 697 274.029535814051 1.0173877661e-01
7458 8 1.0000 698 274.436661153590 9.3692049946e-02
7459 8 1.0000 699 274.831669962484 4.6443268519e-01
7460 8 1.0000 700 275.257567671765 9.7989847688e-02
7461 8 1.0000 701 275.591955026128 1.0827857788e+00
7462 8 1.0000 702 276.037820337157 1.0049951071e-01
7463 8 1.0000 703 276.448324896451 1.4780110693e+00
7464 8 1.0000 704 276.839543177425 9.0083712196e-02
7465 8 1.0000 705 277.263987734195 1.0193923395e-01
7466 8 1.0000 706 277.728394734872 1.8227802526e-01
7467 8 1.0000 707 277.987545459668 4.7349151386e-01
7468 8 1.0000 708 278.274869419005 1.0061649875e+00
7469 8 1.0000 709 278.897386244532 3.1515593943e-01
7470 8 1.0000 710 279.192596636148 1.1931861232e+00
7471 8 1.0000 711 279.462970844273 1.7048570351e-01
7472 8 1.0000 712 279.933780157760 1.0858974755e-01
7473 12 0.0000 1 0.261904178457 4.1683313149e-02
7474 12 0.0000 2 0.523808357375 4.1683312663e-02
7475 12 0.0000 3 0.785712602782 4.1683337335e-02
7476 12 0.0000 4 1.047616803677 4.1683312905e-02
7477 12 0.0000 5 1.309521322822 4.1683357184e-02
7478 12 0.0000 6 1.571425352155 4.1683326705e-02
7479 12 0.0000 7 1.833329964164 4.1683331119e-02
7480 12 0.0000 8 2.095234085865 4.1683359790e-02
7481 12 0.0000 9 2.357139048318 4.1683444301e-02
7482 12 0.0000 10 2.619043141672 4.1683255714e-02
7483 12 0.0000 11 2.880948441620 4.1683634067e-02
7484 12 0.0000 12 3.142854016159 4.1683397359e-02
7485 12 0.0000 13 3.404757764014 4.1683364278e-02
7486 12 0.0000 14 3.666664520216 4.1683618031e-02
7487 12 0.0000 15 3.928569769914 4.1683868451e-02
7488 12 0.0000 16 4.190475590370 4.1682807406e-02
7489 12 0.0000 17 4.452379561269 4.1684077347e-02
7490 12 0.0000 18 4.714286174367 4.1683357514e-02
7491 12 0.0000 19 4.976194489465 4.1684165756e-02
7492 12 0.0000 20 5.238097800251 4.1682858614e-02
7493 12 0.0000 21 5.500007362403 4.1684439836e-02
7494 12 0.0000 22 5.761908961819 4.1683224693e-02
7495 12 0.0000 23 6.023824012001 4.1684161244e-02
7496 12 0.0000 24 6.285723606769 4.1683822331e-02
7497 12 0.0000 25 6.547636269375 4.1683818462e-02
7498 12 0.0000 26 6.809545149240 4.1684268422e-02
7499 12 0.0000 27 7.071452104334 4.1684426873e-02
7500 12 0.0000 28 7.333361701898 4.1683221205e-02
7501 12 0.0000 29 7.595276407311 4.1685760263e-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())