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 9 of 30 · 500/page · 14949 rows next →
# atheta_over_pikz_kw_k
4002 8 0.3333 90 35.433690583014 6.2899562700e-02
4003 8 0.3333 91 35.829178824537 6.2984959332e-02
4004 8 0.3333 92 36.225090161724 6.3129487918e-02
4005 8 0.3333 93 36.623242927352 6.3677454501e-02
4006 8 0.3333 94 37.027278742041 6.5486881652e-02
4007 8 0.3333 95 37.541087692785 6.3329028323e-01
4008 8 0.3333 96 37.646907995105 4.8021482012e-01
4009 8 0.3333 97 38.155762459813 6.5486514871e-02
4010 8 0.3333 98 38.559634953871 6.3606432065e-02
4011 8 0.3333 99 38.957411432580 6.3100231309e-02
4012 8 0.3333 100 39.353046838725 6.2888553611e-02
4013 8 0.3333 101 39.747929037226 6.2808994473e-02
4014 8 0.3333 102 40.142308493640 6.2767032639e-02
4015 8 0.3333 103 40.536586669271 6.2783352394e-02
4016 8 0.3333 104 40.919390826934 1.0624964517e+00
4017 8 0.3333 105 41.323461976127 6.2717242808e-02
4018 8 0.3333 106 41.717416505639 6.2738408085e-02
4019 8 0.3333 107 42.111397965584 6.2695986250e-02
4020 8 0.3333 108 42.505113731208 6.2730757449e-02
4021 8 0.3333 109 42.899989248380 6.3028520445e-02
4022 8 0.3333 110 43.324881122501 1.0608594079e+00
4023 8 0.3333 111 43.680530368675 6.3420107608e-02
4024 8 0.3333 112 44.076275528596 6.2820522903e-02
4025 8 0.3333 113 44.470325060650 6.2662179980e-02
4026 8 0.3333 114 44.863854864545 6.2685725888e-02
4027 8 0.3333 115 45.257764752723 6.2745798017e-02
4028 8 0.3333 116 45.651540266638 6.2617985820e-02
4029 8 0.3333 117 46.045027430173 6.2691718655e-02
4030 8 0.3333 118 46.438936653243 6.2771459272e-02
4031 8 0.3333 119 46.833222223070 6.2751955638e-02
4032 8 0.3333 120 47.227197434575 6.2696047792e-02
4033 8 0.3333 121 47.621784436270 6.2948073970e-02
4034 8 0.3333 122 48.005827600396 1.0627455299e+00
4035 8 0.3333 123 48.411738576419 6.3203521275e-02
4036 8 0.3333 124 48.810212296960 6.3700099340e-02
4037 8 0.3333 125 49.214323111364 6.5595300876e-02
4038 8 0.3333 126 49.728495337429 6.3123745156e-01
4039 8 0.3333 127 49.834392448877 4.8239712374e-01
4040 8 0.3333 128 50.344100272331 6.5595187684e-02
4041 8 0.3333 129 50.748767972073 6.3786849065e-02
4042 8 0.3333 130 51.148195880703 6.3437746875e-02
4043 8 0.3333 131 51.545623333534 6.3305883079e-02
4044 8 0.3333 132 51.944101588108 6.3649445030e-02
4045 8 0.3333 133 52.347423397549 6.5175780158e-02
4046 8 0.3333 134 52.807197354328 1.2995770355e-01
4047 8 0.3333 135 52.985555580212 9.8584215363e-01
4048 8 0.3333 136 53.487252382878 6.5304273735e-02
4049 8 0.3333 137 53.890389016184 6.3589038044e-02
4050 8 0.3333 138 54.288885467802 6.3373912654e-02
4051 8 0.3333 139 54.686253863623 6.3275747151e-02
4052 8 0.3333 140 55.083435135738 6.3305222692e-02
4053 8 0.3333 141 55.482183391516 6.3747863033e-02
4054 8 0.3333 142 55.886868991543 6.5754378786e-02
4055 8 0.3333 143 56.401765906608 6.4168088370e-01
4056 8 0.3333 144 56.508180393870 4.7208616768e-01
4057 8 0.3333 145 57.017379206142 6.5569425377e-02
4058 8 0.3333 146 57.422230001162 6.3837959382e-02
4059 8 0.3333 147 57.821115919084 6.3275652808e-02
4060 8 0.3333 148 58.218215725655 6.3393977082e-02
4061 8 0.3333 149 58.616042247412 6.3369373224e-02
4062 8 0.3333 150 59.017078647020 6.5210197582e-02
4063 8 0.3333 151 59.350631124311 1.0588301677e+00
4064 8 0.3333 152 59.795384024682 6.4268936794e-02
4065 8 0.3333 153 60.199955535425 6.5084916268e-02
4066 8 0.3333 154 60.652468131315 1.1492317771e-01
4067 8 0.3333 155 60.845267595157 1.0015848806e+00
4068 8 0.3333 156 61.342804325915 6.5221841156e-02
4069 8 0.3333 157 61.745635479607 6.3626071054e-02
4070 8 0.3333 158 62.143317125457 6.3275472317e-02
4071 8 0.3333 159 62.540290093341 6.3111350578e-02
4072 8 0.3333 160 62.935861426160 6.2957246177e-02
4073 8 0.3333 161 63.332222567017 6.3222248742e-02
4074 8 0.3333 162 63.729366565661 6.3374482664e-02
4075 8 0.3333 163 64.127943772795 6.4060113957e-02
4076 8 0.3333 164 64.532872962142 6.5668500578e-02
4077 8 0.3333 165 65.037284317645 3.7822526980e-01
4078 8 0.3333 166 65.149150209532 7.3594930094e-01
4079 8 0.3333 167 65.667429157118 6.6262857730e-02
4080 8 0.3333 168 66.075226310097 6.4492782926e-02
4081 8 0.3333 169 66.482938082758 6.6078382628e-02
4082 8 0.3333 170 66.974928404726 2.4337424708e-01
4083 8 0.3333 171 67.105486226911 8.7125905224e-01
4084 8 0.3333 172 67.620546495640 6.5781348716e-02
4085 8 0.3333 173 68.025435523170 6.3958108862e-02
4086 8 0.3333 174 68.424395642509 6.3537944736e-02
4087 8 0.3333 175 68.822780782202 6.3561766924e-02
4088 8 0.3333 176 69.225136843802 6.6012238199e-02
4089 8 0.3333 177 69.550365760172 1.0573020153e+00
4090 8 0.3333 178 69.996569999092 6.3727272329e-02
4091 8 0.3333 179 70.394167238519 6.3094985268e-02
4092 8 0.3333 180 70.790600597937 6.3598928941e-02
4093 8 0.3333 181 71.188120713420 6.3392764109e-02
4094 8 0.3333 182 71.587469168412 6.4596671118e-02
4095 8 0.3333 183 72.059905445558 1.0445814460e+00
4096 8 0.3333 184 72.327903287180 7.5462834986e-02
4097 8 0.3333 185 72.744638383231 6.4098559253e-02
4098 8 0.3333 186 73.143871741691 6.3453434568e-02
4099 8 0.3333 187 73.541164082767 6.3150240878e-02
4100 8 0.3333 188 73.937763338415 6.3339650509e-02
4101 8 0.3333 189 74.334791426927 6.3306050786e-02
4102 8 0.3333 190 74.732435581865 6.4006751681e-02
4103 8 0.3333 191 75.138137116587 6.5717855624e-02
4104 8 0.3333 192 75.650232386800 5.3896333196e-01
4105 8 0.3333 193 75.755547669250 5.7507664550e-01
4106 8 0.3333 194 76.270547084017 6.6403392102e-02
4107 8 0.3333 195 76.679625342921 6.5006569136e-02
4108 8 0.3333 196 77.139667078972 1.0540211288e+00
4109 8 0.3333 197 77.445030661093 6.9012184619e-02
4110 8 0.3333 198 77.853791076349 6.3824508778e-02
4111 8 0.3333 199 78.252505370467 6.3556860212e-02
4112 8 0.3333 200 78.653098360764 6.4298558669e-02
4113 8 0.3333 201 79.067840759807 7.3623225778e-02
4114 8 0.3333 202 79.344125055192 1.0468911088e+00
4115 8 0.3333 203 79.813156390401 6.4481576979e-02
4116 8 0.3333 204 80.212235642565 6.3380754429e-02
4117 8 0.3333 205 80.607274152520 6.3326092437e-02
4118 8 0.3333 206 81.003697002632 6.3180899761e-02
4119 8 0.3333 207 81.398226253913 6.3449549798e-02
4120 8 0.3333 208 81.794886042131 6.3114768154e-02
4121 8 0.3333 209 82.191522955290 6.3452964346e-02
4122 8 0.3333 210 82.596349273063 6.7177124787e-02
4123 8 0.3333 211 82.914682426526 1.0565460568e+00
4124 8 0.3333 212 83.365493477361 6.4282410883e-02
4125 8 0.3333 213 83.766649779635 6.4242582472e-02
4126 8 0.3333 214 84.171660131701 6.6306338846e-02
4127 8 0.3333 215 84.686390565374 5.9192935117e-01
4128 8 0.3333 216 84.791692332943 5.2208036609e-01
4129 8 0.3333 217 85.304635197356 6.5941654217e-02
4130 8 0.3333 218 85.710561831490 6.4075404605e-02
4131 8 0.3333 219 86.109835757717 6.3631348685e-02
4132 8 0.3333 220 86.509486594815 6.4556822827e-02
4133 8 0.3333 221 86.913831292776 6.5272451730e-02
4134 8 0.3333 222 87.411744551777 1.0015636358e+00
4135 8 0.3333 223 87.605093593995 1.1573336521e-01
4136 8 0.3333 224 88.056987677937 6.5874389489e-02
4137 8 0.3333 225 88.461546963548 6.4739209440e-02
4138 8 0.3333 226 88.811846754114 1.0606218402e+00
4139 8 0.3333 227 89.245261998839 6.3735562685e-02
4140 8 0.3333 228 89.642938522465 6.3347237567e-02
4141 8 0.3333 229 90.036661702320 6.3389875454e-02
4142 8 0.3333 230 90.432372911464 6.3312371273e-02
4143 8 0.3333 231 90.828395050231 6.3091813361e-02
4144 8 0.3333 232 91.224525979096 6.4096022089e-02
4145 8 0.3333 233 91.620261045367 6.3467718176e-02
4146 8 0.3333 234 92.019768211004 6.4225370600e-02
4147 8 0.3333 235 92.485476318474 1.0484342146e+00
4148 8 0.3333 236 92.765964516216 7.3283148698e-02
4149 8 0.3333 237 93.180883744403 6.4256307017e-02
4150 8 0.3333 238 93.580488168975 6.3530743703e-02
4151 8 0.3333 239 93.981897437002 6.5053078063e-02
4152 8 0.3333 240 94.409317765229 8.1340290995e-02
4153 8 0.3333 241 94.659687279131 1.0388746990e+00
4154 8 0.3333 242 95.139396594707 6.5177829183e-02
4155 8 0.3333 243 95.548037817288 6.7632218856e-02
4156 8 0.3333 244 95.874626711806 1.0578237515e+00
4157 8 0.3333 245 96.320837975501 6.3950551142e-02
4158 8 0.3333 246 96.719526374982 6.3554532271e-02
4159 8 0.3333 247 97.116808597750 6.3171448782e-02
4160 8 0.3333 248 97.511958139539 6.4557671820e-02
4161 8 0.3333 249 97.912175123296 6.3743432222e-02
4162 8 0.3333 250 98.315894041535 6.5916904452e-02
4163 8 0.3333 251 98.815680174941 9.8514506200e-01
4164 8 0.3333 252 98.993352661665 1.3174644505e-01
4165 8 0.3333 253 99.455852125913 6.5645357456e-02
4166 8 0.3333 254 99.861313228191 6.5224112343e-02
4167 8 0.3333 255 100.260919259299 6.5068876021e-02
4168 8 0.3333 256 100.659411076961 6.5138996720e-02
4169 8 0.3333 257 101.094155611820 8.8335374291e-02
4170 8 0.3333 258 101.327573378247 1.0301959693e+00
4171 8 0.3333 259 101.813278778029 6.5292368228e-02
4172 8 0.3333 260 102.214545538141 6.3742007533e-02
4173 8 0.3333 261 102.612496600078 6.3614975552e-02
4174 8 0.3333 262 103.012691279199 6.4545876596e-02
4175 8 0.3333 263 103.413998734102 6.8074750603e-02
4176 8 0.3333 264 103.730105067665 1.0557971121e+00
4177 8 0.3333 265 104.183756881753 6.5090057417e-02
4178 8 0.3333 266 104.580382383583 6.4608218355e-02
4179 8 0.3333 267 104.981914596031 6.4470897221e-02
4180 8 0.3333 268 105.441432948563 1.0541607043e+00
4181 8 0.3333 269 105.748180249775 6.9956387402e-02
4182 8 0.3333 270 106.155809269241 6.5005958261e-02
4183 8 0.3333 271 106.564842024260 6.6973220940e-02
4184 8 0.3333 272 107.040256187852 1.8618212343e-01
4185 8 0.3333 273 107.189482516661 9.3026910873e-01
4186 8 0.3333 274 107.700661304829 6.6109647222e-02
4187 8 0.3333 275 108.107786551547 6.5394067705e-02
4188 8 0.3333 276 108.502716379606 6.3787008475e-02
4189 8 0.3333 277 108.901201946673 6.4135813221e-02
4190 8 0.3333 278 109.299391537284 6.3271529782e-02
4191 8 0.3333 279 109.696701789005 6.3742826815e-02
4192 8 0.3333 280 110.096942894528 6.6390398116e-02
4193 8 0.3333 281 110.502555071831 6.6951766076e-02
4194 8 0.3333 282 111.011032040402 9.6306485039e-01
4195 8 0.3333 283 111.180053297643 1.5699415681e-01
4196 8 0.3333 284 111.727585724480 1.6184505803e-01
4197 8 0.3333 285 111.893467360503 9.5771474133e-01
4198 8 0.3333 286 112.406359843667 6.6422805557e-02
4199 8 0.3333 287 112.813826243421 6.6266913048e-02
4200 8 0.3333 288 113.214456576619 6.4686259047e-02
4201 8 0.3333 289 113.614342712758 6.4201916269e-02
4202 8 0.3333 290 114.023831362729 6.9559531834e-02
4203 8 0.3333 291 114.325653568098 1.0534504670e+00
4204 8 0.3333 292 114.781561451134 6.6631619196e-02
4205 8 0.3333 293 115.186693269314 6.4101840566e-02
4206 8 0.3333 294 115.591712163357 6.8065469549e-02
4207 8 0.3333 295 116.037291599657 1.0844645244e-01
4208 8 0.3333 296 116.239367713606 1.0093343522e+00
4209 8 0.3333 297 116.736240533531 6.8067812266e-02
4210 8 0.3333 298 117.137442789317 6.4616456827e-02
4211 8 0.3333 299 117.538639727130 6.3745007924e-02
4212 8 0.3333 300 117.937404326983 6.5666308940e-02
4213 8 0.3333 301 118.331313260162 6.5468051050e-02
4214 8 0.3333 302 118.786067802123 1.0551019414e+00
4215 8 0.3333 303 119.097216636704 6.7836973774e-02
4216 8 0.3333 304 119.502750658199 6.7436809553e-02
4217 8 0.3333 305 119.901004947415 6.4315745330e-02
4218 8 0.3333 306 120.298699643358 6.3672531268e-02
4219 8 0.3333 307 120.698399506019 6.4448441743e-02
4220 8 0.3333 308 121.122222766592 8.0275391733e-02
4221 8 0.3333 309 121.378382004178 1.0399856148e+00
4222 8 0.3333 310 121.855747022865 6.8445727274e-02
4223 8 0.3333 311 122.262597149162 6.5849252559e-02
4224 8 0.3333 312 122.681018463193 7.5574372713e-02
4225 8 0.3333 313 122.953724990553 1.0496548798e+00
4226 8 0.3333 314 123.424182913763 6.4568874327e-02
4227 8 0.3333 315 123.824870381528 6.7869830557e-02
4228 8 0.3333 316 124.254568533671 1.0614060591e+00
4229 8 0.3333 317 124.611436852488 6.5264555218e-02
4230 8 0.3333 318 125.011619239682 6.3347428165e-02
4231 8 0.3333 319 125.405890859835 6.3573932791e-02
4232 8 0.3333 320 125.806844681868 6.4959008020e-02
4233 8 0.3333 321 126.192084773835 6.6397312539e-02
4234 8 0.3333 322 126.601138731247 6.7865031525e-02
4235 8 0.3333 323 126.998548581077 6.6235285279e-02
4236 8 0.3333 324 127.501850224193 9.9284963685e-01
4237 8 0.3333 325 127.687489782914 1.2590778146e-01
4238 8 0.3333 326 128.138896050547 6.9261796591e-02
4239 8 0.3333 327 128.549100618500 6.5729542615e-02
4240 8 0.3333 328 128.958875077250 6.6672466967e-02
4241 8 0.3333 329 129.434605429168 1.6110110407e-01
4242 8 0.3333 330 129.597996751354 9.6059381758e-01
4243 8 0.3333 331 130.105038452940 6.7137504371e-02
4244 8 0.3333 332 130.522117600246 6.8237133477e-02
4245 8 0.3333 333 131.042818178867 6.4744644910e-01
4246 8 0.3333 334 131.151292049963 4.6866326547e-01
4247 8 0.3333 335 131.668096071175 6.8376332814e-02
4248 8 0.3333 336 132.062788570115 6.7944026758e-02
4249 8 0.3333 337 132.472253819523 6.5131317265e-02
4250 8 0.3333 338 132.883000350359 7.0424940523e-02
4251 8 0.3333 339 133.345068717457 1.4776957045e-01
4252 8 0.3333 340 133.515047277754 9.6991907868e-01
4253 8 0.3333 341 134.024829662843 6.7159180596e-02
4254 8 0.3333 342 134.432302711246 7.3886606480e-02
4255 8 0.3333 343 134.761041796519 1.0591661893e+00
4256 8 0.3333 344 135.202222384216 6.8392288706e-02
4257 8 0.3333 345 135.606220158102 6.4125509937e-02
4258 8 0.3333 346 136.004044224847 6.4921566206e-02
4259 8 0.3333 347 136.402829568628 6.4058665737e-02
4260 8 0.3333 348 136.806778059568 6.8427259735e-02
4261 8 0.3333 349 137.194473490527 6.5395216853e-02
4262 8 0.3333 350 137.602751797065 6.6794252777e-02
4263 8 0.3333 351 138.101831122261 9.9922241036e-01
4264 8 0.3333 352 138.294593575682 1.1987364549e-01
4265 8 0.3333 353 138.744945768467 7.3023654031e-02
4266 8 0.3333 354 139.162710593034 6.7456969059e-02
4267 8 0.3333 355 139.679107137037 5.2842685239e-01
4268 8 0.3333 356 139.788480911124 5.9404251977e-01
4269 8 0.3333 357 140.296293708828 6.6804030654e-02
4270 8 0.3333 358 140.703535924502 6.4743019184e-02
4271 8 0.3333 359 141.122499429767 1.0640645181e+00
4272 8 0.3333 360 141.501610244579 6.5774271492e-02
4273 8 0.3333 361 141.885388087575 6.9043807705e-02
4274 8 0.3333 362 142.288678105616 6.4413378099e-02
4275 8 0.3333 363 142.692734600066 7.0931167525e-02
4276 8 0.3333 364 143.109555029101 1.0636064895e+00
4277 8 0.3333 365 143.471126645080 6.4336198320e-02
4278 8 0.3333 366 143.868088823611 6.4125658747e-02
4279 8 0.3333 367 144.270250251585 6.6907754950e-02
4280 8 0.3333 368 144.649675531564 6.9310835975e-02
4281 8 0.3333 369 145.056242956274 6.4240778388e-02
4282 8 0.3333 370 145.460483584577 7.4821720969e-02
4283 8 0.3333 371 145.974057586897 8.6212366891e-01
4284 8 0.3333 372 146.103843105158 2.5612438390e-01
4285 8 0.3333 373 146.586514404076 7.4541010459e-02
4286 8 0.3333 374 146.994558117276 6.4677260358e-02
4287 8 0.3333 375 147.421074624928 1.0643262414e+00
4288 8 0.3333 376 147.787667423778 6.4675461237e-02
4289 8 0.3333 377 148.186488354817 6.4511228917e-02
4290 8 0.3333 378 148.584360788999 6.3516429063e-02
4291 8 0.3333 379 148.979590362798 6.6129897411e-02
4292 8 0.3333 380 149.382014853799 7.4809953417e-02
4293 8 0.3333 381 149.811470929453 8.4727339922e-02
4294 8 0.3333 382 150.063255785861 1.0433429289e+00
4295 8 0.3333 383 150.528848985076 6.7278299712e-02
4296 8 0.3333 384 150.925803786994 1.0663030372e+00
4297 8 0.3333 385 151.339479359129 6.7595386801e-02
4298 8 0.3333 386 151.716457215348 7.0087171818e-02
4299 8 0.3333 387 152.123548333944 6.6067087261e-02
4300 8 0.3333 388 152.536977620012 7.1536377652e-02
4301 8 0.3333 389 153.011265946446 1.0136124613e+00
4302 8 0.3333 390 153.218241291243 1.0955364306e-01
4303 8 0.3333 391 153.669650194480 6.6583761756e-02
4304 8 0.3333 392 154.069513710096 6.6340449034e-02
4305 8 0.3333 393 154.471276613934 7.6408865023e-02
4306 8 0.3333 394 154.864495305077 6.4394473136e-02
4307 8 0.3333 395 155.268971810758 6.7069239700e-02
4308 8 0.3333 396 155.644295613335 7.2429169379e-02
4309 8 0.3333 397 156.107884478231 1.0584871971e+00
4310 8 0.3333 398 156.422067962723 6.8248134536e-02
4311 8 0.3333 399 156.826932348789 6.4828948376e-02
4312 8 0.3333 400 157.229186243778 6.5986038872e-02
4313 8 0.3333 401 157.598240846347 1.0757707608e+00
4314 8 0.3333 402 158.012098159992 6.5697057569e-02
4315 8 0.3333 403 158.409475804201 6.5445190738e-02
4316 8 0.3333 404 158.845823399778 1.0712848613e+00
4317 8 0.3333 405 159.179651096888 6.8876763830e-02
4318 8 0.3333 406 159.583599646404 6.4105593126e-02
4319 8 0.3333 407 159.978441539346 6.4237446239e-02
4320 8 0.3333 408 160.377357028260 6.5591535755e-02
4321 8 0.3333 409 160.787937928102 7.5546455301e-02
4322 8 0.3333 410 161.187212773322 1.0655412432e+00
4323 8 0.3333 411 161.571972099289 7.2308365682e-02
4324 8 0.3333 412 161.935589449049 7.1022684145e-02
4325 8 0.3333 413 162.349300317017 6.8366422697e-02
4326 8 0.3333 414 162.740733906485 8.6867201432e-02
4327 8 0.3333 415 163.037319497151 1.0499753578e+00
4328 8 0.3333 416 163.502951797618 6.5700706982e-02
4329 8 0.3333 417 163.907470542083 6.6089846157e-02
4330 8 0.3333 418 164.292731658177 8.0384585250e-02
4331 8 0.3333 419 164.694568673810 6.6553357999e-02
4332 8 0.3333 420 165.094395107230 6.5039780401e-02
4333 8 0.3333 421 165.533751390447 1.0612788757e+00
4334 8 0.3333 422 165.877058451950 6.7301036468e-02
4335 8 0.3333 423 166.271090419118 8.3172335431e-02
4336 8 0.3333 424 166.681824727107 6.6982335797e-02
4337 8 0.3333 425 167.172965309692 1.0212603374e+00
4338 8 0.3333 426 167.387608668020 1.0074265541e-01
4339 8 0.3333 427 167.832488485450 6.7946205020e-02
4340 8 0.3333 428 168.238424783007 8.3770365540e-02
4341 8 0.3333 429 168.659345883373 7.7477741889e-02
4342 8 0.3333 430 169.088280405409 1.0609429420e+00
4343 8 0.3333 431 169.401698331296 7.3722948127e-02
4344 8 0.3333 432 169.902568227274 1.0383310663e+00
4345 8 0.3333 433 170.159571593576 9.1374442548e-02
4346 8 0.3333 434 170.552081849872 7.9462405037e-02
4347 8 0.3333 435 170.969339786226 6.6217556378e-02
4348 8 0.3333 436 171.372627583780 6.8091603728e-02
4349 8 0.3333 437 171.783583009517 7.1094029710e-02
4350 8 0.3333 438 172.140705525204 7.6389781708e-02
4351 8 0.3333 439 172.555017195987 6.6234908539e-02
4352 8 0.3333 440 172.960119756382 6.6703401157e-02
4353 8 0.3333 441 173.405571409181 1.0798641885e+00
4354 8 0.3333 442 173.732573272299 7.2543763175e-02
4355 8 0.3333 443 174.165553003434 7.9584650634e-02
4356 8 0.3333 444 174.583111631979 1.4770945917e-01
4357 8 0.3333 445 174.771367715430 9.8208623649e-01
4358 8 0.3333 446 175.275820486405 6.8208408322e-02
4359 8 0.3333 447 175.683459141142 6.6572377911e-02
4360 8 0.3333 448 176.086133308703 6.5920273459e-02
4361 8 0.3333 449 176.443919244699 1.0657519601e+00
4362 8 0.3333 450 176.883402012093 8.8621179868e-02
4363 8 0.3333 451 177.270359544486 6.6753364988e-02
4364 8 0.3333 452 177.671102719389 6.8122069408e-02
4365 8 0.3333 453 178.095906649308 8.9183504977e-02
4366 8 0.3333 454 178.382248636605 1.0613402936e+00
4367 8 0.3333 455 178.842765570958 6.7477104047e-02
4368 8 0.3333 456 179.226672759097 9.0950719252e-02
4369 8 0.3333 457 179.673894067004 8.5358929228e-02
4370 8 0.3333 458 179.925230602155 1.0417336407e+00
4371 8 0.3333 459 180.410918586455 6.8540681547e-02
4372 8 0.3333 460 180.831808235758 9.4357675292e-02
4373 8 0.3333 461 181.227239512676 7.4081598292e-02
4374 8 0.3333 462 181.589422564834 8.7022986972e-02
4375 8 0.3333 463 182.093848734610 2.3571074639e-01
4376 8 0.3333 464 182.232740894683 8.8581488560e-01
4377 8 0.3333 465 182.754021601138 7.0702239107e-02
4378 8 0.3333 466 183.157907331238 6.7846050186e-02
4379 8 0.3333 467 183.559292265074 6.5579247971e-02
4380 8 0.3333 468 183.972337306488 9.6694495528e-02
4381 8 0.3333 469 184.371307572761 7.0862560306e-02
4382 8 0.3333 470 184.863130168531 1.0272126209e+00
4383 8 0.3333 471 185.101822266928 1.0393206634e-01
4384 8 0.3333 472 185.587021329186 1.0636616775e+00
4385 8 0.3333 473 185.856758369523 8.9750692117e-02
4386 8 0.3333 474 186.296997136654 7.0698818743e-02
4387 8 0.3333 475 186.684709454038 1.0130496984e-01
4388 8 0.3333 476 187.212835554265 9.8436299716e-01
4389 8 0.3333 477 187.392646680512 1.3768108668e-01
4390 8 0.3333 478 187.862815474667 6.9414969569e-02
4391 8 0.3333 479 188.296221373275 9.2763547094e-02
4392 8 0.3333 480 188.641571708951 7.4744202112e-02
4393 8 0.3333 481 189.061282914497 6.9263969891e-02
4394 8 0.3333 482 189.419445751752 1.0700523969e+00
4395 8 0.3333 483 189.807889836621 9.3330009990e-02
4396 8 0.3333 484 190.231126057674 6.9458632355e-02
4397 8 0.3333 485 190.659102173273 9.8143886316e-02
4398 8 0.3333 486 191.018529224031 7.3020104459e-02
4399 8 0.3333 487 191.433633590605 6.9518536677e-02
4400 8 0.3333 488 191.942167514422 3.6572666921e-01
4401 8 0.3333 489 192.068137713646 7.9279366790e-01
4402 8 0.3333 490 192.574076736392 7.4755430001e-02
4403 8 0.3333 491 193.070609092432 1.0408900631e+00
4404 8 0.3333 492 193.328792384741 8.9145147864e-02
4405 8 0.3333 493 193.758656089369 7.1449300725e-02
4406 8 0.3333 494 194.171018221386 7.4715994089e-02
4407 8 0.3333 495 194.520007610247 9.7468039044e-02
4408 8 0.3333 496 194.956385160925 7.3173620615e-02
4409 8 0.3333 497 195.270566335313 1.0585201138e+00
4410 8 0.3333 498 195.727525479260 6.7700623785e-02
4411 8 0.3333 499 196.149389208520 1.1189659209e-01
4412 8 0.3333 500 196.539170502544 7.4402197432e-02
4413 8 0.3333 501 196.883433556051 1.0923000733e+00
4414 8 0.3333 502 197.283045164714 7.4513347074e-02
4415 8 0.3333 503 197.707221893565 7.7971277060e-02
4416 8 0.3333 504 198.019517068141 1.1015978389e+00
4417 8 0.3333 505 198.478006833643 6.9432941911e-02
4418 8 0.3333 506 198.872732665161 6.9150347387e-02
4419 8 0.3333 507 199.280998400720 6.7156133687e-02
4420 8 0.3333 508 199.677097872002 6.9674087903e-02
4421 8 0.3333 509 200.107693228066 1.0875713124e-01
4422 8 0.3333 510 200.445160897050 7.3641457338e-02
4423 8 0.3333 511 200.878963185613 8.0114975615e-02
4424 8 0.3333 512 201.258276065914 1.0975272553e+00
4425 8 0.3333 513 201.619907705511 7.4025458860e-02
4426 8 0.3333 514 202.025216640338 6.9369079807e-02
4427 8 0.3333 515 202.488942616931 1.0639974680e+00
4428 8 0.3333 516 202.808021209657 7.1607972841e-02
4429 8 0.3333 517 203.235105332899 1.2375173711e-01
4430 8 0.3333 518 203.626517224486 7.2409576780e-02
4431 8 0.3333 519 204.154808640359 8.0903404871e-01
4432 8 0.3333 520 204.291569296916 3.2801933515e-01
4433 8 0.3333 521 204.721738197780 1.1386666360e-01
4434 8 0.3333 522 205.242273343075 1.6520915868e-01
4435 8 0.3333 523 205.414161327532 9.6287200480e-01
4436 8 0.3333 524 205.934735726074 7.4013796316e-02
4437 8 0.3333 525 206.298829212374 1.2455567728e-01
4438 8 0.3333 526 206.728454858240 6.9471113155e-02
4439 8 0.3333 527 207.132270237517 6.9767189839e-02
4440 8 0.3333 528 207.576219646677 1.1155752254e-01
4441 8 0.3333 529 207.905398562153 1.0816404057e+00
4442 8 0.3333 530 208.354498744136 1.1467246989e-01
4443 8 0.3333 531 208.671248942125 8.3773285015e-02
4444 8 0.3333 532 209.092805240689 7.4112811058e-02
4445 8 0.3333 533 209.569516494908 1.0558471268e+00
4446 8 0.3333 534 209.887491491975 1.4151019066e-01
4447 8 0.3333 535 210.263418934909 7.1324403928e-02
4448 8 0.3333 536 210.670044863074 6.9277552019e-02
4449 8 0.3333 537 211.084956672778 7.5815145627e-02
4450 8 0.3333 538 211.562233842626 2.0101620262e-01
4451 8 0.3333 539 211.713741932669 9.2588548772e-01
4452 8 0.3333 540 212.228491135852 7.3671130787e-02
4453 8 0.3333 541 212.673213910638 9.5293184092e-02
4454 8 0.3333 542 212.982090626251 1.1664077692e-01
4455 8 0.3333 543 213.349211239842 1.1320471098e+00
4456 8 0.3333 544 213.794571267795 7.2429958662e-02
4457 8 0.3333 545 214.201459872942 7.2515160634e-02
4458 8 0.3333 546 214.550687869021 1.0652970842e+00
4459 8 0.3333 547 215.020085505896 1.4177067620e-01
4460 8 0.3333 548 215.388285632207 7.1804679680e-02
4461 8 0.3333 549 215.799838019660 7.6454085813e-02
4462 8 0.3333 550 216.175383831187 1.1052428190e+00
4463 8 0.3333 551 216.507173453109 1.0372087733e-01
4464 8 0.3333 552 216.948452260518 7.1758905867e-02
4465 8 0.3333 553 217.354479149252 7.0674891334e-02
4466 8 0.3333 554 217.777375483481 1.5081326323e-01
4467 8 0.3333 555 218.141437955988 7.2069562768e-02
4468 8 0.3333 556 218.556070695217 7.4621369958e-02
4469 8 0.3333 557 219.054984336511 1.0241635052e+00
4470 8 0.3333 558 219.310687602258 1.8230940024e-01
4471 8 0.3333 559 219.692776133789 8.2677120344e-02
4472 8 0.3333 560 220.127064373250 7.9506122866e-02
4473 8 0.3333 561 220.639534988477 4.3387667237e-01
4474 8 0.3333 562 220.757705512850 7.8446175613e-01
4475 8 0.3333 563 221.402017729347 8.7504984865e-01
4476 8 0.3333 564 221.542739836457 2.6018924242e-01
4477 8 0.3333 565 222.039087135497 7.5565032810e-02
4478 8 0.3333 566 222.438108155918 7.4421404946e-02
4479 8 0.3333 567 222.851224770745 7.3985013228e-02
4480 8 0.3333 568 223.215190458477 1.6021660631e-01
4481 8 0.3333 569 223.660182959761 7.6791070050e-02
4482 8 0.3333 570 224.015406995887 1.1560942034e+00
4483 8 0.3333 571 224.436392451188 7.6620574230e-02
4484 8 0.3333 572 224.959973715316 9.5397880167e-01
4485 8 0.3333 573 225.136907707626 1.9546875996e-01
4486 8 0.3333 574 225.528705063484 1.5785841975e-01
4487 8 0.3333 575 225.975297794990 7.6552909479e-02
4488 8 0.3333 576 226.433650609648 1.6617986694e-01
4489 8 0.3333 577 226.784484192938 8.1121373764e-02
4490 8 0.3333 578 227.243237276087 1.3656698980e-01
4491 8 0.3333 579 227.437736360165 1.0001789529e+00
4492 8 0.3333 580 227.950691924057 7.7021178372e-02
4493 8 0.3333 581 228.341278347261 1.8247261954e-01
4494 8 0.3333 582 228.763871292325 7.7200529476e-02
4495 8 0.3333 583 229.270593082121 4.9896283964e-01
4496 8 0.3333 584 229.387291760970 6.3619655254e-01
4497 8 0.3333 585 229.907995831625 7.6190479568e-02
4498 8 0.3333 586 230.366024733605 1.8196471017e-01
4499 8 0.3333 587 230.714037640575 8.2180893940e-02
4500 8 0.3333 588 231.231405876120 9.8505871408e-01
4501 8 0.3333 589 231.420250445935 1.5536034731e-01

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

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

Source code

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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


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