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 25 of 30 · 500/page · 14949 rows next →
# atheta_over_pikz_kw_k
12002 12 0.6667 256 67.082213874438 1.0352761591e+00
12003 12 0.6667 257 67.387679357766 4.2371038026e-02
12004 12 0.6667 258 67.652966975690 4.2261703915e-02
12005 12 0.6667 259 67.916715015858 4.1921207531e-02
12006 12 0.6667 260 68.179116049262 4.1931420063e-02
12007 12 0.6667 261 68.442017907191 4.2013107572e-02
12008 12 0.6667 262 68.705353284278 4.1927207096e-02
12009 12 0.6667 263 68.969061640872 4.2203614512e-02
12010 12 0.6667 264 69.234493193885 4.2793331988e-02
12011 12 0.6667 265 69.543680051044 1.0328577091e+00
12012 12 0.6667 266 69.732950404553 4.7370879954e-02
12013 12 0.6667 267 70.007034805035 4.2429341576e-02
12014 12 0.6667 268 70.271805820285 4.2058216276e-02
12015 12 0.6667 269 70.535203954887 4.1720772575e-02
12016 12 0.6667 270 70.797283818551 4.2339459424e-02
12017 12 0.6667 271 71.061003631549 4.1863300503e-02
12018 12 0.6667 272 71.324036106164 4.1996536575e-02
12019 12 0.6667 273 71.586687451158 4.2259371838e-02
12020 12 0.6667 274 71.854934072600 4.3780581234e-02
12021 12 0.6667 275 72.068947990585 1.0380823281e+00
12022 12 0.6667 276 72.366497258061 4.2277363353e-02
12023 12 0.6667 277 72.629675553120 4.2287979063e-02
12024 12 0.6667 278 72.893762083911 4.1815874703e-02
12025 12 0.6667 279 73.155604861467 4.1900487635e-02
12026 12 0.6667 280 73.418467629721 4.1768835836e-02
12027 12 0.6667 281 73.680878335350 4.1837266133e-02
12028 12 0.6667 282 73.943883401627 4.2029388794e-02
12029 12 0.6667 283 74.206220635181 4.1762540202e-02
12030 12 0.6667 284 74.469621874132 4.2110031220e-02
12031 12 0.6667 285 74.731853446234 4.2057581996e-02
12032 12 0.6667 286 74.995944473483 4.2053774879e-02
12033 12 0.6667 287 75.262709695845 4.3013315637e-02
12034 12 0.6667 288 75.546891328648 5.5178776739e-02
12035 12 0.6667 289 75.708642851882 1.0238188823e+00
12036 12 0.6667 290 76.029296969687 4.3090941821e-02
12037 12 0.6667 291 76.296900628098 4.2800163899e-02
12038 12 0.6667 292 76.562716092095 4.2135543857e-02
12039 12 0.6667 293 76.828715706650 4.3063026139e-02
12040 12 0.6667 294 77.141842097167 1.0315053659e+00
12041 12 0.6667 295 77.326176840443 4.9033003141e-02
12042 12 0.6667 296 77.601642788397 4.2721583103e-02
12043 12 0.6667 297 77.868095612645 4.2161389804e-02
12044 12 0.6667 298 78.131833095639 4.2155359387e-02
12045 12 0.6667 299 78.396300621912 4.2143744810e-02
12046 12 0.6667 300 78.662408311292 4.2617331511e-02
12047 12 0.6667 301 78.930113398334 4.3685343386e-02
12048 12 0.6667 302 79.246096766792 1.1425458761e-01
12049 12 0.6667 303 79.345895664789 9.6229390159e-01
12050 12 0.6667 304 79.686203965342 4.3464303990e-02
12051 12 0.6667 305 79.955251722798 4.2750208504e-02
12052 12 0.6667 306 80.220007225380 4.1912336856e-02
12053 12 0.6667 307 80.483256278378 4.2600857382e-02
12054 12 0.6667 308 80.747248912731 4.1784278728e-02
12055 12 0.6667 309 81.009626550208 4.1964919933e-02
12056 12 0.6667 310 81.273075180618 4.2481549479e-02
12057 12 0.6667 311 81.535587921179 4.1819344445e-02
12058 12 0.6667 312 81.799004656121 4.1975775443e-02
12059 12 0.6667 313 82.062160159418 4.1971990020e-02
12060 12 0.6667 314 82.325443970729 4.2012621290e-02
12061 12 0.6667 315 82.593297611994 4.3609294250e-02
12062 12 0.6667 316 82.907089198819 1.0291300435e+00
12063 12 0.6667 317 83.083188291588 5.0624011583e-02
12064 12 0.6667 318 83.362120335197 4.2718653084e-02
12065 12 0.6667 319 83.627774468244 4.2359438661e-02
12066 12 0.6667 320 83.892184050803 4.2214923927e-02
12067 12 0.6667 321 84.155472636493 4.2592589246e-02
12068 12 0.6667 322 84.422197818872 4.2909303018e-02
12069 12 0.6667 323 84.732719190359 1.0327394690e+00
12070 12 0.6667 324 84.920361796897 4.7696961579e-02
12071 12 0.6667 325 85.196317817228 4.2543969629e-02
12072 12 0.6667 326 85.460813860572 4.2136225999e-02
12073 12 0.6667 327 85.725653546425 4.2183855275e-02
12074 12 0.6667 328 85.988515030984 4.2026341473e-02
12075 12 0.6667 329 86.252198329432 4.2031006164e-02
12076 12 0.6667 330 86.516267748231 4.2903449039e-02
12077 12 0.6667 331 86.781617008187 4.2277317071e-02
12078 12 0.6667 332 87.051208963307 4.3926106174e-02
12079 12 0.6667 333 87.399657988650 5.9980323675e-01
12080 12 0.6667 334 87.457990040091 4.7604134745e-01
12081 12 0.6667 335 87.803019832105 4.4555517006e-02
12082 12 0.6667 336 88.074197555490 4.3202455324e-02
12083 12 0.6667 337 88.340976079835 4.2858273322e-02
12084 12 0.6667 338 88.614746248114 4.6190983670e-02
12085 12 0.6667 339 88.811571621264 1.0348344656e+00
12086 12 0.6667 340 89.119284127538 4.3057951055e-02
12087 12 0.6667 341 89.384429079056 4.1911998062e-02
12088 12 0.6667 342 89.647438376366 4.2054832900e-02
12089 12 0.6667 343 89.910697081893 4.2740405246e-02
12090 12 0.6667 344 90.174027797122 4.1739176775e-02
12091 12 0.6667 345 90.435956594918 4.2233430123e-02
12092 12 0.6667 346 90.699480074746 4.1733511889e-02
12093 12 0.6667 347 90.960984264176 4.1832211685e-02
12094 12 0.6667 348 91.224752257049 4.2922477060e-02
12095 12 0.6667 349 91.486622472601 4.1929840466e-02
12096 12 0.6667 350 91.749412984776 4.2081711122e-02
12097 12 0.6667 351 92.013176910309 4.1960576213e-02
12098 12 0.6667 352 92.280718404861 4.4360392574e-02
12099 12 0.6667 353 92.493797852393 1.0377269694e+00
12100 12 0.6667 354 92.789479613856 4.2943296990e-02
12101 12 0.6667 355 93.054833401845 4.2171614075e-02
12102 12 0.6667 356 93.318377615135 4.2097727533e-02
12103 12 0.6667 357 93.580963172064 4.1775691420e-02
12104 12 0.6667 358 93.845210372391 4.2181002066e-02
12105 12 0.6667 359 94.105951783036 4.1982578231e-02
12106 12 0.6667 360 94.372001082739 4.2417400364e-02
12107 12 0.6667 361 94.650432164938 1.0414370369e+00
12108 12 0.6667 362 94.891863676373 4.2404312949e-02
12109 12 0.6667 363 95.156676375614 4.2317317232e-02
12110 12 0.6667 364 95.423864746121 4.3140856344e-02
12111 12 0.6667 365 95.701227977374 5.2570913355e-02
12112 12 0.6667 366 95.874139045810 1.0278056480e+00
12113 12 0.6667 367 96.190604582854 4.3141941194e-02
12114 12 0.6667 368 96.456997376417 4.2063713559e-02
12115 12 0.6667 369 96.720553943420 4.2238115672e-02
12116 12 0.6667 370 96.983751889424 4.1763005627e-02
12117 12 0.6667 371 97.246767133879 4.2001717481e-02
12118 12 0.6667 372 97.507801088373 4.3137827686e-02
12119 12 0.6667 373 97.772211812662 4.1650351084e-02
12120 12 0.6667 374 98.034556220384 4.1957401814e-02
12121 12 0.6667 375 98.296969471880 4.2024864970e-02
12122 12 0.6667 376 98.558955117568 4.2862759352e-02
12123 12 0.6667 377 98.830761413296 1.0418938202e+00
12124 12 0.6667 378 99.081684793815 4.2031510204e-02
12125 12 0.6667 379 99.346971566345 4.2010842808e-02
12126 12 0.6667 380 99.608552244695 4.1951130583e-02
12127 12 0.6667 381 99.872915324263 4.3065395184e-02
12128 12 0.6667 382 100.133758920204 4.2326973305e-02
12129 12 0.6667 383 100.398526762788 4.3949240466e-02
12130 12 0.6667 384 100.663890931015 4.2635281227e-02
12131 12 0.6667 385 100.934117974068 4.3693949650e-02
12132 12 0.6667 386 101.273784003560 3.3306099909e-01
12133 12 0.6667 387 101.336703917662 7.4263998396e-01
12134 12 0.6667 388 101.685623209071 4.3840875316e-02
12135 12 0.6667 389 101.955275977253 4.2946596460e-02
12136 12 0.6667 390 102.220114667541 4.2027729134e-02
12137 12 0.6667 391 102.484296729305 4.2475214881e-02
12138 12 0.6667 392 102.748852479909 4.2007299163e-02
12139 12 0.6667 393 103.013540771314 4.2656334365e-02
12140 12 0.6667 394 103.278103802216 4.4355783216e-02
12141 12 0.6667 395 103.561910838707 5.3606279979e-02
12142 12 0.6667 396 103.729231375383 1.0259063927e+00
12143 12 0.6667 397 104.049402520241 4.3515926150e-02
12144 12 0.6667 398 104.317369525152 4.3475281516e-02
12145 12 0.6667 399 104.579562509290 4.2714565302e-02
12146 12 0.6667 400 104.845800921337 4.2653918251e-02
12147 12 0.6667 401 105.113890106722 4.3217424244e-02
12148 12 0.6667 402 105.441714736524 1.0143342578e+00
12149 12 0.6667 403 105.584810677605 6.4107246610e-02
12150 12 0.6667 404 105.877203162445 4.4619321095e-02
12151 12 0.6667 405 106.144453656832 4.2674303453e-02
12152 12 0.6667 406 106.410591478035 4.2341126438e-02
12153 12 0.6667 407 106.674846632892 4.3268893707e-02
12154 12 0.6667 408 106.935734677034 4.3146716687e-02
12155 12 0.6667 409 107.169786924868 1.0405330487e+00
12156 12 0.6667 410 107.456424350186 4.2487268732e-02
12157 12 0.6667 411 107.721074378223 4.2378983563e-02
12158 12 0.6667 412 107.984183139641 4.1793294918e-02
12159 12 0.6667 413 108.245349545088 4.3847239125e-02
12160 12 0.6667 414 108.508367927347 4.1893784594e-02
12161 12 0.6667 415 108.771791898278 4.2245268282e-02
12162 12 0.6667 416 109.033602372143 4.2390642470e-02
12163 12 0.6667 417 109.298672371109 4.1790609958e-02
12164 12 0.6667 418 109.560525075759 4.2052541021e-02
12165 12 0.6667 419 109.823862204733 4.2095351342e-02
12166 12 0.6667 420 110.087118585480 4.4010532417e-02
12167 12 0.6667 421 110.351400123385 4.3394744532e-02
12168 12 0.6667 422 110.623100683259 4.4561823416e-02
12169 12 0.6667 423 110.931281939910 1.0464302824e-01
12170 12 0.6667 424 111.037492969325 9.7313361224e-01
12171 12 0.6667 425 111.378236275384 4.3924087273e-02
12172 12 0.6667 426 111.649295632070 4.4004016096e-02
12173 12 0.6667 427 111.876123613214 1.0398755658e+00
12174 12 0.6667 428 112.168772705562 4.2702542752e-02
12175 12 0.6667 429 112.434227080408 4.2426229957e-02
12176 12 0.6667 430 112.698286396124 4.2532809690e-02
12177 12 0.6667 431 112.956101362744 4.3055966725e-02
12178 12 0.6667 432 113.222221588161 4.2938695272e-02
12179 12 0.6667 433 113.485463231739 4.2301724909e-02
12180 12 0.6667 434 113.751338104861 4.2552654071e-02
12181 12 0.6667 435 114.015967389916 4.2536064753e-02
12182 12 0.6667 436 114.318062650097 1.0366687789e+00
12183 12 0.6667 437 114.526531157826 4.6173817387e-02
12184 12 0.6667 438 114.790345982476 4.3548730202e-02
12185 12 0.6667 439 115.057348992555 4.2414207001e-02
12186 12 0.6667 440 115.324855871778 4.2683282189e-02
12187 12 0.6667 441 115.591103608728 4.4682290343e-02
12188 12 0.6667 442 115.856756111835 4.4752509146e-02
12189 12 0.6667 443 116.207241804431 7.3217467867e-01
12190 12 0.6667 444 116.269895475540 3.4406181332e-01
12191 12 0.6667 445 116.613666081771 4.4852482825e-02
12192 12 0.6667 446 116.877287654851 4.3974618985e-02
12193 12 0.6667 447 117.142976690755 4.2927458862e-02
12194 12 0.6667 448 117.408262215806 4.1800882304e-02
12195 12 0.6667 449 117.672877535455 4.2934116156e-02
12196 12 0.6667 450 117.940067179492 4.3712008935e-02
12197 12 0.6667 451 118.199367006714 4.3755923028e-02
12198 12 0.6667 452 118.466640067787 4.3652097754e-02
12199 12 0.6667 453 118.787081540692 1.0255663048e+00
12200 12 0.6667 454 118.953539471640 5.3926918661e-02
12201 12 0.6667 455 119.235901745028 4.2928968937e-02
12202 12 0.6667 456 119.501220873204 4.5786849825e-02
12203 12 0.6667 457 119.765586040747 4.2452244770e-02
12204 12 0.6667 458 120.027067370058 4.2352083154e-02
12205 12 0.6667 459 120.290164429513 4.2007268638e-02
12206 12 0.6667 460 120.553988036689 4.2423739224e-02
12207 12 0.6667 461 120.817687175336 4.1699912309e-02
12208 12 0.6667 462 121.079867333651 4.2840257810e-02
12209 12 0.6667 463 121.368954811107 1.0399624258e+00
12210 12 0.6667 464 121.600313651177 4.3161551242e-02
12211 12 0.6667 465 121.863585388336 4.5313186623e-02
12212 12 0.6667 466 122.129593225707 4.2292001194e-02
12213 12 0.6667 467 122.390803013588 4.2899635980e-02
12214 12 0.6667 468 122.655614176140 4.2732619925e-02
12215 12 0.6667 469 122.945306201507 1.0434849807e+00
12216 12 0.6667 470 123.173091633000 4.3412263578e-02
12217 12 0.6667 471 123.437659408425 4.1726156359e-02
12218 12 0.6667 472 123.704431888109 4.4507060790e-02
12219 12 0.6667 473 123.960666024771 4.3526777342e-02
12220 12 0.6667 474 124.255308487672 1.0392122257e+00
12221 12 0.6667 475 124.480775588437 4.4391420585e-02
12222 12 0.6667 476 124.744343731963 4.2227911912e-02
12223 12 0.6667 477 125.009124725739 4.1893873401e-02
12224 12 0.6667 478 125.271718776815 4.2845377854e-02
12225 12 0.6667 479 125.535640788569 4.1631113912e-02
12226 12 0.6667 480 125.799011846325 4.2423842316e-02
12227 12 0.6667 481 126.059782450255 4.7105793735e-02
12228 12 0.6667 482 126.325508122972 4.1908587292e-02
12229 12 0.6667 483 126.594349395399 4.4986203188e-02
12230 12 0.6667 484 126.849807944611 4.3912622590e-02
12231 12 0.6667 485 127.122265449396 4.4178547592e-02
12232 12 0.6667 486 127.455221019370 2.1044530318e-01
12233 12 0.6667 487 127.530150735006 8.6701084360e-01
12234 12 0.6667 488 127.881398217137 4.5801528864e-02
12235 12 0.6667 489 128.140846293273 4.4736977989e-02
12236 12 0.6667 490 128.411747254393 4.3611772526e-02
12237 12 0.6667 491 128.677566903901 4.2565447124e-02
12238 12 0.6667 492 128.944256147529 4.3097721326e-02
12239 12 0.6667 493 129.214142749947 4.4068684198e-02
12240 12 0.6667 494 129.564253068806 8.4989237328e-01
12241 12 0.6667 495 129.639136374709 2.3110249056e-01
12242 12 0.6667 496 129.966753984559 4.4856882103e-02
12243 12 0.6667 497 130.239037784882 4.2709205074e-02
12244 12 0.6667 498 130.506320793856 4.3642509275e-02
12245 12 0.6667 499 130.772901115571 4.3325877328e-02
12246 12 0.6667 500 131.084800124746 1.0326459882e+00
12247 12 0.6667 501 131.272201584718 4.8862872207e-02
12248 12 0.6667 502 131.550074684964 4.3114550885e-02
12249 12 0.6667 503 131.820665591658 4.6552401145e-02
12250 12 0.6667 504 132.074263872182 4.3372582755e-02
12251 12 0.6667 505 132.341332042653 4.2553530129e-02
12252 12 0.6667 506 132.608008721091 4.3163358216e-02
12253 12 0.6667 507 132.879313434503 4.6104959251e-02
12254 12 0.6667 508 133.139759441086 4.5293820047e-02
12255 12 0.6667 509 133.486170473736 9.0662567590e-01
12256 12 0.6667 510 133.569145082582 1.7017717769e-01
12257 12 0.6667 511 133.897601989393 4.4299278961e-02
12258 12 0.6667 512 134.169801602078 4.4071303047e-02
12259 12 0.6667 513 134.430432172251 4.8572648446e-02
12260 12 0.6667 514 134.753035674909 1.0297557423e+00
12261 12 0.6667 515 134.935092842569 5.5426215059e-02
12262 12 0.6667 516 135.206577280752 4.5028383379e-02
12263 12 0.6667 517 135.473074569615 4.2498305072e-02
12264 12 0.6667 518 135.737969568273 4.2528550084e-02
12265 12 0.6667 519 136.001710157773 4.3465581885e-02
12266 12 0.6667 520 136.266420496002 4.2279324676e-02
12267 12 0.6667 521 136.529630177142 4.2390024424e-02
12268 12 0.6667 522 136.797332672751 4.4687685774e-02
12269 12 0.6667 523 137.045207180595 4.4653629116e-02
12270 12 0.6667 524 137.312273957300 4.2668796624e-02
12271 12 0.6667 525 137.578704459958 4.2635991165e-02
12272 12 0.6667 526 137.839462822184 4.2949716671e-02
12273 12 0.6667 527 138.115465757143 1.0421505862e+00
12274 12 0.6667 528 138.366416969245 4.2590527944e-02
12275 12 0.6667 529 138.631618649510 4.8292832558e-02
12276 12 0.6667 530 138.889727996351 4.3635984540e-02
12277 12 0.6667 531 139.154729677171 4.2105540097e-02
12278 12 0.6667 532 139.418547390349 4.3726430169e-02
12279 12 0.6667 533 139.733470769026 1.0333333502e+00
12280 12 0.6667 534 139.924416113405 5.6164003602e-02
12281 12 0.6667 535 140.198628021258 4.3230823176e-02
12282 12 0.6667 536 140.466785643934 4.2875761794e-02
12283 12 0.6667 537 140.735214521273 4.4002993799e-02
12284 12 0.6667 538 141.073873799512 2.8421554845e-01
12285 12 0.6667 539 141.140527115575 7.9282558982e-01
12286 12 0.6667 540 141.489423364112 4.5071427282e-02
12287 12 0.6667 541 141.761999129038 5.0278329306e-02
12288 12 0.6667 542 142.026218475177 4.2349152761e-02
12289 12 0.6667 543 142.287734358940 4.2512570978e-02
12290 12 0.6667 544 142.553982726613 4.3403435143e-02
12291 12 0.6667 545 142.811953786780 4.9813864786e-02
12292 12 0.6667 546 143.110204989703 1.0403530911e+00
12293 12 0.6667 547 143.330783646250 4.3181719456e-02
12294 12 0.6667 548 143.599081093470 4.3202492054e-02
12295 12 0.6667 549 143.862618038978 4.2212989115e-02
12296 12 0.6667 550 144.126602169556 4.2875500115e-02
12297 12 0.6667 551 144.397545467517 4.8164562960e-02
12298 12 0.6667 552 144.646315246488 4.4835196228e-02
12299 12 0.6667 553 144.909232503251 4.2018230775e-02
12300 12 0.6667 554 145.178594087885 4.3469172756e-02
12301 12 0.6667 555 145.445441061569 5.0120247524e-02
12302 12 0.6667 556 145.704069370618 4.3229581821e-02
12303 12 0.6667 557 145.999215529009 1.0397624354e+00
12304 12 0.6667 558 146.214984476454 4.4656840613e-02
12305 12 0.6667 559 146.488268731109 5.1291267499e-02
12306 12 0.6667 560 146.752722275346 4.4920457346e-02
12307 12 0.6667 561 147.022977551534 4.3606411536e-02
12308 12 0.6667 562 147.351838423540 1.7107839642e-01
12309 12 0.6667 563 147.434475112170 9.0746185300e-01
12310 12 0.6667 564 147.777855199126 4.4198484114e-02
12311 12 0.6667 565 148.047294342980 4.3056944024e-02
12312 12 0.6667 566 148.312313617070 4.3118381213e-02
12313 12 0.6667 567 148.578347365190 4.1847123962e-02
12314 12 0.6667 568 148.841524364024 4.3781722302e-02
12315 12 0.6667 569 149.102844809338 4.3447041451e-02
12316 12 0.6667 570 149.373474077997 5.2738312513e-02
12317 12 0.6667 571 149.641862540679 4.4230992440e-02
12318 12 0.6667 572 149.960005668015 1.1967232486e-01
12319 12 0.6667 573 150.063106025492 9.6294809983e-01
12320 12 0.6667 574 150.385171221777 4.7929570564e-02
12321 12 0.6667 575 150.662598683255 4.3571746400e-02
12322 12 0.6667 576 150.925341707672 1.0439498670e+00
12323 12 0.6667 577 151.193097995289 4.3315215138e-02
12324 12 0.6667 578 151.466493152861 4.8817298930e-02
12325 12 0.6667 579 151.709298010588 4.4867106003e-02
12326 12 0.6667 580 151.977087888270 4.3860501016e-02
12327 12 0.6667 581 152.243154353735 4.3016253541e-02
12328 12 0.6667 582 152.506754055251 4.3007718323e-02
12329 12 0.6667 583 152.758923357528 5.1979493300e-02
12330 12 0.6667 584 153.024790340817 1.0426509094e+00
12331 12 0.6667 585 153.292732628572 4.3172945851e-02
12332 12 0.6667 586 153.555740930565 4.1986306700e-02
12333 12 0.6667 587 153.818675915643 4.3983486763e-02
12334 12 0.6667 588 154.083325920217 4.4438335418e-02
12335 12 0.6667 589 154.355035790770 4.6782414730e-02
12336 12 0.6667 590 154.592387934860 4.8644044347e-02
12337 12 0.6667 591 154.863402165906 4.3245632376e-02
12338 12 0.6667 592 155.133906481077 4.3263341626e-02
12339 12 0.6667 593 155.405542971765 4.8560797782e-02
12340 12 0.6667 594 155.646076755054 4.7314616936e-02
12341 12 0.6667 595 155.933828563737 5.1778229994e-02
12342 12 0.6667 596 156.115957482820 1.0326602744e+00
12343 12 0.6667 597 156.432975852585 4.3334401104e-02
12344 12 0.6667 598 156.698941982687 4.3406968170e-02
12345 12 0.6667 599 156.967350031979 4.3556582202e-02
12346 12 0.6667 600 157.241456928033 4.5422985703e-02
12347 12 0.6667 601 157.582462578629 8.6545030475e-01
12348 12 0.6667 602 157.658449387400 2.2562946531e-01
12349 12 0.6667 603 157.993645361844 4.5213741226e-02
12350 12 0.6667 604 158.261520154299 4.4041505130e-02
12351 12 0.6667 605 158.532750696331 4.4883940507e-02
12352 12 0.6667 606 158.845750469391 1.0394289613e+00
12353 12 0.6667 607 159.023785835659 5.5105413177e-02
12354 12 0.6667 608 159.300075872356 4.4055254460e-02
12355 12 0.6667 609 159.569570396397 4.2792348929e-02
12356 12 0.6667 610 159.834384436033 4.3311943472e-02
12357 12 0.6667 611 160.098114036192 4.2290102354e-02
12358 12 0.6667 612 160.363628446335 4.4068131756e-02
12359 12 0.6667 613 160.626199858037 4.1794897460e-02
12360 12 0.6667 614 160.886654867149 5.7240507900e-02
12361 12 0.6667 615 161.187159030850 1.0398801577e+00
12362 12 0.6667 616 161.406804102988 4.4821511727e-02
12363 12 0.6667 617 161.688133154778 5.6489070606e-02
12364 12 0.6667 618 161.930486593484 4.4356838347e-02
12365 12 0.6667 619 162.198650152258 4.3894086683e-02
12366 12 0.6667 620 162.469107622492 4.6528629586e-02
12367 12 0.6667 621 162.711040473398 5.5429529029e-02
12368 12 0.6667 622 163.028240114212 1.0356757782e+00
12369 12 0.6667 623 163.229238658206 4.7610771030e-02
12370 12 0.6667 624 163.498618227587 4.2976055672e-02
12371 12 0.6667 625 163.767103830748 4.3283529019e-02
12372 12 0.6667 626 164.032304442787 4.4523344934e-02
12373 12 0.6667 627 164.283468509132 5.7987912450e-02
12374 12 0.6667 628 164.558066154079 4.5376154464e-02
12375 12 0.6667 629 164.822026277005 4.3295156714e-02
12376 12 0.6667 630 165.086877254009 4.3411699860e-02
12377 12 0.6667 631 165.368933452228 5.3631966968e-02
12378 12 0.6667 632 165.540607612419 1.0282146533e+00
12379 12 0.6667 633 165.860951103817 4.4998446548e-02
12380 12 0.6667 634 166.138737161806 5.2097036465e-02
12381 12 0.6667 635 166.368972528768 5.0180710045e-02
12382 12 0.6667 636 166.645041731429 4.3428816141e-02
12383 12 0.6667 637 166.910296224490 4.3792612698e-02
12384 12 0.6667 638 167.184190322612 1.0441538273e+00
12385 12 0.6667 639 167.434789287119 4.2668926479e-02
12386 12 0.6667 640 167.701312798591 4.3618862342e-02
12387 12 0.6667 641 167.962277014239 4.3347617647e-02
12388 12 0.6667 642 168.229915715332 6.1019630613e-02
12389 12 0.6667 643 168.496337563371 4.3844745898e-02
12390 12 0.6667 644 168.774389100190 6.1787871406e-02
12391 12 0.6667 645 169.089268041253 1.0165365451e+00
12392 12 0.6667 646 169.236805421879 6.7046177643e-02
12393 12 0.6667 647 169.540181843581 4.6438736355e-02
12394 12 0.6667 648 169.894304310913 7.8450394575e-01
12395 12 0.6667 649 169.962500687018 2.9504932364e-01
12396 12 0.6667 650 170.318166301867 5.6856517631e-02
12397 12 0.6667 651 170.550903857419 4.9644307857e-02
12398 12 0.6667 652 170.825116455466 4.4865695582e-02
12399 12 0.6667 653 171.095782578258 4.3480132332e-02
12400 12 0.6667 654 171.360069915848 4.5256312110e-02
12401 12 0.6667 655 171.625210581188 4.3798567579e-02
12402 12 0.6667 656 171.907893118476 5.6168216921e-02
12403 12 0.6667 657 172.136134128823 4.8044781209e-02
12404 12 0.6667 658 172.406400723747 4.3598755719e-02
12405 12 0.6667 659 172.672510028614 4.3793056477e-02
12406 12 0.6667 660 172.940769002860 4.3717274793e-02
12407 12 0.6667 661 173.218721910991 5.3603489127e-02
12408 12 0.6667 662 173.412901712378 1.0525875902e+00
12409 12 0.6667 663 173.715651888380 4.5201964518e-02
12410 12 0.6667 664 173.981236883083 4.4223734015e-02
12411 12 0.6667 665 174.268479205042 6.1472458230e-02
12412 12 0.6667 666 174.497828449799 4.7464214970e-02
12413 12 0.6667 667 174.754785179807 1.0424197519e+00
12414 12 0.6667 668 175.028370313134 4.5301792972e-02
12415 12 0.6667 669 175.292176302496 4.3334690078e-02
12416 12 0.6667 670 175.560011956406 4.4333974248e-02
12417 12 0.6667 671 175.826919176337 4.3931503562e-02
12418 12 0.6667 672 176.096101261683 4.4441780167e-02
12419 12 0.6667 673 176.434126209961 9.8782350818e-01
12420 12 0.6667 674 176.548584738499 9.4462749742e-02
12421 12 0.6667 675 176.870620211530 6.5495150725e-02
12422 12 0.6667 676 177.116989597045 4.6115846413e-02
12423 12 0.6667 677 177.384831460305 4.3954939460e-02
12424 12 0.6667 678 177.650151303413 4.5622569917e-02
12425 12 0.6667 679 177.920066981079 4.4897818491e-02
12426 12 0.6667 680 178.194714771811 7.4908100373e-02
12427 12 0.6667 681 178.380570128612 1.0326130111e+00
12428 12 0.6667 682 178.697520086900 4.5280518906e-02
12429 12 0.6667 683 178.968447838489 4.4118473566e-02
12430 12 0.6667 684 179.209945267034 6.7684414792e-02
12431 12 0.6667 685 179.495880122866 4.4639874354e-02
12432 12 0.6667 686 179.803387985149 9.1221278491e-02
12433 12 0.6667 687 179.923547498648 9.9284820944e-01
12434 12 0.6667 688 180.263858366117 4.4754541908e-02
12435 12 0.6667 689 180.531659721932 4.5197110495e-02
12436 12 0.6667 690 180.820815156452 6.7643948255e-02
12437 12 0.6667 691 181.051942006466 4.7416187216e-02
12438 12 0.6667 692 181.337741898128 5.4780588006e-02
12439 12 0.6667 693 181.559005272251 5.7938341068e-02
12440 12 0.6667 694 181.844246949214 4.8999729478e-02
12441 12 0.6667 695 182.195901900835 9.2087121750e-01
12442 12 0.6667 696 182.282991764920 1.5893745720e-01
12443 12 0.6667 697 182.609680337848 4.5273768742e-02
12444 12 0.6667 698 182.880193925697 4.7383797499e-02
12445 12 0.6667 699 183.149988748990 4.4409572440e-02
12446 12 0.6667 700 183.411643703494 4.3906623859e-02
12447 12 0.6667 701 183.682852437143 4.4088850532e-02
12448 12 0.6667 702 183.964972055061 7.1719405431e-02
12449 12 0.6667 703 184.203575611598 4.4700301207e-02
12450 12 0.6667 704 184.478642543792 4.9770883154e-02
12451 12 0.6667 705 184.826608021565 3.2426234622e-01
12452 12 0.6667 706 184.894318886817 7.5705371225e-01
12453 12 0.6667 707 185.268969941083 5.7544625856e-02
12454 12 0.6667 708 185.578823165560 8.3273503086e-01
12455 12 0.6667 709 185.660275267087 2.6784461281e-01
12456 12 0.6667 710 186.007952553549 4.6942952948e-02
12457 12 0.6667 711 186.281431855637 4.6151871090e-02
12458 12 0.6667 712 186.574945171938 7.0687473030e-02
12459 12 0.6667 713 186.801416977101 5.1742977412e-02
12460 12 0.6667 714 187.127239883956 1.0167987916e-01
12461 12 0.6667 715 187.237013879677 9.7914483030e-01
12462 12 0.6667 716 187.575701248480 4.4735476013e-02
12463 12 0.6667 717 187.847875667384 4.4788458619e-02
12464 12 0.6667 718 188.114464722276 4.4131541855e-02
12465 12 0.6667 719 188.388172189364 7.9415330531e-02
12466 12 0.6667 720 188.639921694247 4.5109228646e-02
12467 12 0.6667 721 188.902033134692 4.3301240023e-02
12468 12 0.6667 722 189.168902317534 4.5245190717e-02
12469 12 0.6667 723 189.416621119772 1.0433603565e+00
12470 12 0.6667 724 189.695777271607 7.8724843757e-02
12471 12 0.6667 725 189.959966299878 4.6811663516e-02
12472 12 0.6667 726 190.220838720327 4.3916956553e-02
12473 12 0.6667 727 190.483021810855 4.4702774093e-02
12474 12 0.6667 728 190.740744480346 8.0146720428e-02
12475 12 0.6667 729 191.008841020245 4.6146502866e-02
12476 12 0.6667 730 191.271528174126 4.4266231262e-02
12477 12 0.6667 731 191.538988213501 4.4447170193e-02
12478 12 0.6667 732 191.814562001039 5.1052815944e-02
12479 12 0.6667 733 192.030515147690 1.0568019660e+00
12480 12 0.6667 734 192.283786284206 5.7698005775e-02
12481 12 0.6667 735 192.561596555357 4.7912626922e-02
12482 12 0.6667 736 192.834200799776 4.5009890056e-02
12483 12 0.6667 737 193.080555507333 1.0429273738e+00
12484 12 0.6667 738 193.363543182706 4.7567794486e-02
12485 12 0.6667 739 193.625819832459 4.4649033999e-02
12486 12 0.6667 740 193.885018746876 4.6121803200e-02
12487 12 0.6667 741 194.151703354452 4.6388156718e-02
12488 12 0.6667 742 194.421280427860 8.2201798209e-02
12489 12 0.6667 743 194.678790109274 4.5314112584e-02
12490 12 0.6667 744 194.947710188895 4.5721476359e-02
12491 12 0.6667 745 195.261908026031 1.0308097765e+00
12492 12 0.6667 746 195.439643744724 5.3915988848e-02
12493 12 0.6667 747 195.719064626896 4.5124005644e-02
12494 12 0.6667 748 195.999115395934 4.9309608517e-02
12495 12 0.6667 749 196.221049831886 8.3377297845e-02
12496 12 0.6667 750 196.517934950354 4.8906521049e-02
12497 12 0.6667 751 196.866336712881 9.4727806320e-01
12498 12 0.6667 752 196.975769387602 1.7525856531e-01
12499 12 0.6667 753 197.272212373295 4.7364839436e-02
12500 12 0.6667 754 197.553479602369 4.8029698493e-02
12501 12 0.6667 755 197.823743360523 5.3370231399e-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())